예제 #1
0
    def forward(self, outputs, labels):
        cross_entropy_loss = CrossEntropyLoss()
        triplet_loss = TripletLoss(margin=1.2)
        triplet_loss_pose = TripletLoss(margin=0.8)

        Triplet_Loss = [
            triplet_loss(output, labels) for output in outputs[1:5]
        ]
        Triplet_Loss = sum(Triplet_Loss) / len(Triplet_Loss)

        CrossEntropy_Loss = [
            cross_entropy_loss(output, labels) for output in outputs[5:-2]
        ]
        CrossEntropy_Loss = sum(CrossEntropy_Loss) / len(CrossEntropy_Loss)

        list_loss_pose = outputs[-1][:7]
        visuable = torch.Tensor(outputs[-1][-1]).t().to('cuda')

        Triplet_Loss_pose = [
            triplet_loss_pose(_loss[_vis == 1, :], labels[_vis == 1])
            for _loss, _vis in zip(list_loss_pose, visuable)
            if len(labels[_vis == 1]) != 0
        ]
        Triplet_Loss_pose = sum(Triplet_Loss_pose) / len(Triplet_Loss_pose)

        loss_sum = 2 * Triplet_Loss + 4 * CrossEntropy_Loss + Triplet_Loss_pose

        print(
            '\rtotal loss:%.2f  Triplet_Loss:%.2f  CrossEntropy_Loss:%.2f  Triplet_Loss_pose:%.2f'
            % (loss_sum.data.cpu().numpy(), Triplet_Loss.data.cpu().numpy(),
               CrossEntropy_Loss.data.cpu().numpy(),
               Triplet_Loss_pose.data.cpu().numpy()),
            end=' ')
        return loss_sum
예제 #2
0
    def forward(self, outputs, id_label, color_label):
        cross_entropy_loss = CrossEntropyLoss()
        triplet_loss = TripletLoss(margin=1.2)
        center_loss = CenterLoss(num_classes=333, feat_dim=512)

        Triplet_Loss = [
            triplet_loss(output, id_label) for output in outputs[1:4]
        ]
        Triplet_Loss = sum(Triplet_Loss) / len(Triplet_Loss)

        Centor_Loss = [
            center_loss(output, id_label) for output in outputs[1:4]
        ]
        Centor_Loss = sum(Centor_Loss) / len(Centor_Loss) * 0.0005

        CrossEntropy_Loss_id = [
            cross_entropy_loss(output, id_label) for output in outputs[4:7]
        ]
        CrossEntropy_Loss_id = sum(CrossEntropy_Loss_id) / len(
            CrossEntropy_Loss_id)

        CrossEntropy_Loss_color = [
            cross_entropy_loss(output, color_label) for output in outputs[7:]
        ]
        CrossEntropy_Loss_color = sum(CrossEntropy_Loss_color) / len(
            CrossEntropy_Loss_color)

        loss_sum = Triplet_Loss + 2 * (CrossEntropy_Loss_id +
                                       CrossEntropy_Loss_color) + Centor_Loss

        return loss_sum, Triplet_Loss, CrossEntropy_Loss_id, CrossEntropy_Loss_color, Centor_Loss
예제 #3
0
    def forward(self, outputs, labels):
        cross_entropy_loss = CrossEntropyLoss(
        ) if opt.label_smooth_ce else CrossEntropyLabelSmooth()
        triplet_loss = TripletLoss(margin=1.2)
        center_loss = CenterLoss()
        Triplet_Loss = [
            triplet_loss(output, labels) for output in outputs[1:4]
        ]
        Triplet_Loss = sum(Triplet_Loss) / len(Triplet_Loss)

        CrossEntropy_Loss = [
            cross_entropy_loss(output, labels) for output in outputs[4:]
        ]
        CrossEntropy_Loss = sum(CrossEntropy_Loss) / len(CrossEntropy_Loss)

        loss_sum = Triplet_Loss + 2 * CrossEntropy_Loss

        if opt.use_centerloss:
            center_loss = [
                center_loss(output, labels) for output in outputs[1:4]
            ]
            center_loss = sum(center_loss) / len(center_loss)
            loss_sum += 0.0005 * center_loss

        print('\rtotal loss:%.2f  Triplet_Loss:%.2f  CrossEntropy_Loss:%.2f' %
              (loss_sum.data.cpu().numpy(), Triplet_Loss.data.cpu().numpy(),
               CrossEntropy_Loss.data.cpu().numpy()),
              end=' ')
        return loss_sum
예제 #4
0
파일: loss.py 프로젝트: Soulempty/PVReid
    def forward(self, outputs, labels):
        num_cls = outputs[1][0].size(-1)
        cross_entropy_loss = CrossEntropyLoss(num_cls, label_smooth=self.lsm)
        loss_sum = 0
        triplet_loss = TripletLoss(margin=self.margin)
        if isinstance(outputs[0], (tuple, list)):
            Triplet_Loss = [
                triplet_loss(output, labels) for output in outputs[0]
            ]
            Triplet_Loss = sum(Triplet_Loss) / len(Triplet_Loss)
        else:
            Triplet_Loss = triplet_loss(outputs[0], labels)

        if isinstance(outputs[1], (tuple, list)):
            crossen = [
                cross_entropy_loss(output, labels) for output in outputs[1]
            ]
            crossen = sum(crossen) / len(crossen)
        else:
            crossen = cross_entropy_loss(outputs[1], labels)
        loss_sum = crossen * 2 + Triplet_Loss
        print('\rtotal loss:%.2f  Triplet_Loss:%.2f  CrossEntropy_Loss:%.2f' %
              (loss_sum.data.cpu().numpy(), Triplet_Loss.data.cpu().numpy(),
               crossen.data.cpu().numpy()),
              end=' ')
        return loss_sum
예제 #5
0
def train(model, train_loader, scheduler, optimizer, loss_function):

    running_loss = 0.0
    for image, target in train_loader:
        image = image.to('cuda')
        target = target.to("cuda")

        optimizer.zero_grad()

        pred = model(image)
        # loss=loss_function(pred,target)
        triplet_loss = TripletLoss(margin=1.2)
        labels = target.long()

        loss = triplet_loss(pred[1], labels)

        loss.backward()
        optimizer.step()

        running_loss += loss.item()

    scheduler.step()
    epoch_loss = running_loss / len(train_loader)

    print("loss:{},learning_rate:{}".format(epoch_loss,
                                            scheduler.get_last_lr()))
    return epoch_loss
예제 #6
0
파일: loss.py 프로젝트: xxx1004/projects
    def __init__(self, model):
        super(Loss, self).__init__()

        self.tanh = Tanh()
        self.l1_loss = L1Loss()
        self.bce_loss = BCELoss()
        self.cross_entropy_loss = CrossEntropyLoss()
        self.triplet_loss = TripletLoss(margin=1.2)

        self.model = model
        self.optimizer, self.optimizer_D = get_optimizer(model)
예제 #7
0
파일: loss.py 프로젝트: stephng3/ReID-MGN
    def __init__(self,
                 triplet_margin=1.2,
                 l_triplet=1,
                 l_xentropy=2,
                 **kwargs):
        super(Loss, self).__init__()
        self.triplet = 0
        self.cross_entropy = 0
        self.total = 0
        self.cross_entropy_loss = CrossEntropyLoss()
        self.triplet_loss = TripletLoss(margin=triplet_margin)

        self.total_loss = lambda triplet, xentropy: (l_triplet * triplet) + (
            l_xentropy * xentropy)
예제 #8
0
    def forward(self, outputs, labels):
        cross_entropy_loss = CrossEntropyLoss()
        triplet_loss = TripletLoss(margin=1.2)

        Triplet_Loss = triplet_loss(outputs[1], labels)
        #Triplet_Loss = sum(Triplet_Loss) / len(Triplet_Loss)

        CrossEntropy_Loss = cross_entropy_loss(outputs[2], labels)
        #CrossEntropy_Loss = sum(CrossEntropy_Loss) / len(CrossEntropy_Loss)

        loss_sum = Triplet_Loss + 2 * CrossEntropy_Loss

        print('\rtotal loss:%.2f  Triplet_Loss:%.2f  CrossEntropy_Loss:%.2f' %
              (loss_sum.data.cpu().numpy(), Triplet_Loss.data.cpu().numpy(),
               CrossEntropy_Loss.data.cpu().numpy()),
              end=' ')
        return loss_sum
예제 #9
0
inputs, classes = next(iter(dataloaders))

##############################################

y_loss = []
y_err = []

# model = ft_net(len(class_names))
model = Model()

TVT, TMO = set_devices(args.sys_device_ids)

# criterion = nn.CrossEntropyLoss()
margin = args.margin

tri_loss = TripletLoss(margin)

#ignored_params = list(map(id, model.model.fc.parameters() )) + list(map(id, model.classifier.parameters() ))

#base_params = filter(lambda p: id(p) not in ignored_params, model.parameters())
base_params = model.parameters()

optimizer_ft = optim.SGD([
             {'params': base_params, 'lr': 0.01}
             # {'params': model.model.fc.parameters(), 'lr': 0.1},
             # {'params': model.classifier.parameters(), 'lr': 0.1}
         ], weight_decay=5e-4, momentum=0.9, nesterov=True)

exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=args.lr_decay_epochs, gamma=0.1)

model = DataParallel(model)