Hello I am Trying to implement small CNN for Facial Landmark detection which comes from this tutorial : Tutorial 3 . I am using this paper : Paper 4 , and the architecture be like this one.

image.png814×271 49.3 KB

Here is my network code.

image.jpg384×739 142 KB

Here is my training code.

import math
img_size = 40
big_loss = math.sqrt(pow(img_size,2)+pow(img_size,2))
def train_model(model, criterion, optimizer, lr_scheduler, num_epochs=25):
    since = time.time()



    best_model = model
    best_acc = 0.0



    for epoch in range(num_epochs):
        print('Epoch {}/{}'.format(epoch, num_epochs - 1))
        print('-' * 10)



        # Each epoch has a training and validation phase
        for phase in ['train', 'val']:
            if phase == 'train':
                optimizer = lr_scheduler(optimizer, epoch)
                model.train(True)  # Set model to training mode
            else:
                model.train(False)  # Set model to evaluate mode



            running_loss = 0.0
            running_corrects = 0



            # Iterate over data.
            for data in dset_loaders[phase]:
                # get the inputs
                
                #inputs, labels = data
                for i_batch, sample_batched in enumerate(dset_loaders['train']):
                    inputs = sample_batched['image']
                    labels = sample_batched['landmarks']
                    print(inputs.size())
                    print(labels.size())
                    #print(labels)
                    #inputs, labels = Variable(inputs.cuda()), Variable(labels.cuda())
                    # wrap them in Variable
                    if use_gpu:
                        inputs, labels = Variable(inputs.cuda()), Variable(labels.cuda())
                    else:
                        inputs, labels = Variable(inputs), Variable(labels)



                    # zero the parameter gradients
                    optimizer.zero_grad()



                    # forward
                   
                    outputs = model(inputs)
                    #_, preds = torch.max(outputs.data, 136)
                    loss = criterion(outputs, labels)



                    # backward + optimize only if in training phase
                    if phase == 'train':
                        loss.backward()
                        optimizer.step()



                    # statistics
                    running_loss += loss.data[0]
                    running_corrects += torch.sum(big_loss-loss.data[0])



            epoch_loss = running_loss / dset_sizes[phase]
            epoch_acc = running_corrects / dset_sizes[phase]



            print('{} Loss: {:.4f} Acc: {:.4f}'.format(
                phase, epoch_loss, epoch_acc))



            # deep copy the model
            if phase == 'val' and epoch_acc > best_acc:
                best_acc = epoch_acc
                best_model = copy.deepcopy(model)



        print()



    time_elapsed = time.time() - since
    print('Training complete in {:.0f}m {:.0f}s'.format(
        time_elapsed // 60, time_elapsed % 60))
    print('Best val Acc: {:4f}'.format(best_acc))
    return best_model


However I got this error in the input.

image.jpg845×765 290 KB


image.png918×392 223 KB

I am searching with the lastest post, and make sure everything  in cuda. However the error still exist.

Discussion
Anyone can help me in this error?
-Thank you-