natanielruiz
2017-09-19 ec44ac453f794a5368e702315addfedcea3a4299
Added continuous labels
1个文件已删除
5个文件已添加
9个文件已修改
1669 ■■■■ 已修改文件
code/batch_testing.py 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/batch_testing_preangles.py 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/datasets.py 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/old/train_preangles_ft.py 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/old/train_preangles_ft_sgd.py 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/old/train_preangles_rmsprop.py 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/test.py 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/test_AFW.py 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/test_AFW_preangles.py 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/test_preangles.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/test_res.py 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/train.py 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/train_finetune.py 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/train_preangles.py 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
practice/vis_AFLW.ipynb 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code/batch_testing.py
@@ -115,17 +115,17 @@
        l1loss = torch.nn.L1Loss(size_average=False)
        for i, (images, labels, name) in enumerate(test_loader):
        for i, (images, labels, cont_labels, name) in enumerate(test_loader):
            images = Variable(images).cuda(gpu)
            total += labels.size(0)
            label_yaw = labels[:,0].float()
            label_pitch = labels[:,1].float()
            label_roll = labels[:,2].float()
            total += cont_labels.size(0)
            label_yaw = cont_labels[:,0].float()
            label_pitch = cont_labels[:,1].float()
            label_roll = cont_labels[:,2].float()
            pre_yaw, pre_pitch, pre_roll, angles = model(images)
            yaw = angles[0][:,0].cpu().data
            pitch = angles[0][:,1].cpu().data
            roll = angles[0][:,2].cpu().data
            yaw = angles[0][:,0].cpu().data * 3 - 99
            pitch = angles[0][:,1].cpu().data * 3 - 99
            roll = angles[0][:,2].cpu().data * 3 - 99
            for idx in xrange(1,args.iter_ref+1):
                yaw += angles[idx][:,0].cpu().data
@@ -133,9 +133,9 @@
                roll += angles[idx][:,2].cpu().data
            # Mean absolute error
            yaw_error += torch.sum(torch.abs(yaw - label_yaw) * 3)
            pitch_error += torch.sum(torch.abs(pitch - label_pitch) * 3)
            roll_error += torch.sum(torch.abs(roll - label_roll) * 3)
            yaw_error += torch.sum(torch.abs(yaw - label_yaw))
            pitch_error += torch.sum(torch.abs(pitch - label_pitch))
            roll_error += torch.sum(torch.abs(roll - label_roll))
            if args.save_viz:
                name = name[0]
                cv2_img = cv2.imread(os.path.join(args.data_dir, name + '.jpg'))
code/batch_testing_preangles.py
@@ -114,12 +114,12 @@
        l1loss = torch.nn.L1Loss(size_average=False)
        for i, (images, labels, name) in enumerate(test_loader):
        for i, (images, labels, cont_labels, name) in enumerate(test_loader):
            images = Variable(images).cuda(gpu)
            total += labels.size(0)
            label_yaw = labels[:,0].float()
            label_pitch = labels[:,1].float()
            label_roll = labels[:,2].float()
            total += cont_labels.size(0)
            label_yaw = cont_labels[:,0].float()
            label_pitch = cont_labels[:,1].float()
            label_roll = cont_labels[:,2].float()
            yaw, pitch, roll, angles = model(images)
@@ -138,9 +138,9 @@
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1).cpu()
            # Mean absolute error
            yaw_error += torch.sum(torch.abs(yaw_predicted - label_yaw) * 3)
            pitch_error += torch.sum(torch.abs(pitch_predicted - label_pitch) * 3)
            roll_error += torch.sum(torch.abs(roll_predicted - label_roll) * 3)
            yaw_error += torch.sum(torch.abs(yaw_predicted * 3 - 99 - label_yaw))
            pitch_error += torch.sum(torch.abs(pitch_predicted * 3 - 99 - label_pitch))
            roll_error += torch.sum(torch.abs(roll_predicted * 3 - 99 - label_roll))
            if args.save_viz:
                name = name[0]
code/datasets.py
@@ -3,7 +3,7 @@
import cv2
from torch.utils.data.dataset import Dataset
import os
from PIL import Image
from PIL import Image, ImageFilter
import utils
@@ -77,11 +77,12 @@
        shape = np.load(shape_path)
        labels = torch.LongTensor(np.concatenate((binned_pose, shape), axis = 0))
        cont_labels = torch.FloatTensor([yaw, pitch, roll])
        if self.transform is not None:
            img = self.transform(img)
        return img, labels, self.X_train[index]
        return img, labels, cont_labels, elf.X_train[index]
    def __len__(self):
        # 122,450
@@ -120,13 +121,6 @@
        y_max += 0.6 * k * abs(y_max - y_min)
        img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max)))
        # k = 0.15
        # x_min -= k * abs(x_max - x_min)
        # y_min -= 4 * k * abs(y_max - y_min)
        # x_max += k * abs(x_max - x_min)
        # y_max += 0.4 * k * abs(y_max - y_min)
        # img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max)))
        # We get the pose in radians
        pose = utils.get_ypr_from_mat(mat_path)
        # And convert to degrees.
@@ -136,14 +130,83 @@
        # Bin values
        bins = np.array(range(-99, 102, 3))
        labels = torch.LongTensor(np.digitize([yaw, pitch, roll], bins) - 1)
        cont_labels = torch.FloatTensor([yaw, pitch, roll])
        if self.transform is not None:
            img = self.transform(img)
        return img, labels, self.X_train[index]
        return img, labels, cont_labels, self.X_train[index]
    def __len__(self):
        # 2,000
        return self.length
class AFLW_aug(Dataset):
    def __init__(self, data_dir, filename_path, transform, img_ext='.jpg', annot_ext='.txt', image_mode='RGB'):
        self.data_dir = data_dir
        self.transform = transform
        self.img_ext = img_ext
        self.annot_ext = annot_ext
        filename_list = get_list_from_filenames(filename_path)
        self.X_train = filename_list
        self.y_train = filename_list
        self.image_mode = image_mode
        self.length = len(filename_list)
    def __getitem__(self, index):
        img = Image.open(os.path.join(self.data_dir, self.X_train[index] + self.img_ext))
        img = img.convert(self.image_mode)
        txt_path = os.path.join(self.data_dir, self.y_train[index] + self.annot_ext)
        # We get the pose in radians
        annot = open(txt_path, 'r')
        line = annot.readline().split(' ')
        pose = [float(line[1]), float(line[2]), float(line[3])]
        # And convert to degrees.
        yaw = pose[0] * 180 / np.pi
        pitch = pose[1] * 180 / np.pi
        roll = pose[2] * 180 / np.pi
        # Something weird with the roll in AFLW
        roll *= -1
        # Augment
        # Flip?
        rnd = np.random.random_sample()
        if rnd < 0.5:
            yaw = -yaw
            roll = -roll
            img = img.transpose(Image.FLIP_LEFT_RIGHT)
        # Blur?
        # rnd = np.random.random_sample()
        # if rnd < 0.05:
        #     img = img.filter(ImageFilter.BLUR)
        #     if rnd < 0.025:
        #         img = img.filter(ImageFilter.BLUR)
        #
        # rnd = np.random.random_sample()
        # if rnd < 0.05:
        #     nb = np.random.randint(1,5)
        #     img = img.rotate(-nb)
        # elif rnd > 0.95:
        #     nb = np.random.randint(1,5)
        #     img = img.rotate(nb)
        # Bin values
        bins = np.array(range(-99, 102, 3))
        labels = torch.LongTensor(np.digitize([yaw, pitch, roll], bins) - 1)
        cont_labels = torch.FloatTensor([yaw, pitch, roll])
        if self.transform is not None:
            img = self.transform(img)
        return img, labels, cont_labels, self.X_train[index]
    def __len__(self):
        # train: 18,863
        # test: 1,966
        return self.length
class AFLW(Dataset):
@@ -178,11 +241,12 @@
        # Bin values
        bins = np.array(range(-99, 102, 3))
        labels = torch.LongTensor(np.digitize([yaw, pitch, roll], bins) - 1)
        cont_labels = torch.FloatTensor([yaw, pitch, roll])
        if self.transform is not None:
            img = self.transform(img)
        return img, labels, self.X_train[index]
        return img, labels, cont_labels, self.X_train[index]
    def __len__(self):
        # train: 18,863
@@ -217,22 +281,27 @@
        yaw, pitch, roll = [float(line[1]), float(line[2]), float(line[3])]
        # Crop the face
        k = 0.25
        x1 -= 0.6 * k * abs(x2 - x1)
        y1 -= 3 * k * abs(y2 - y1)
        x2 += 0.6 * k * abs(x2 - x1)
        y2 += 0.6 * k * abs(y2 - y1)
        k = 0.40
        x1 = float(line[4])
        y1 = float(line[5])
        x2 = float(line[6])
        y2 = float(line[7])
        x1 -= 0.8 * k * abs(x2 - x1)
        y1 -= 2 * k * abs(y2 - y1)
        x2 += 0.8 * k * abs(x2 - x1)
        y2 += 1 * k * abs(y2 - y1)
        img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max)))
        img = img.crop((int(x1), int(y1), int(x2), int(y2)))
        # Bin values
        bins = np.array(range(-99, 102, 3))
        labels = torch.LongTensor(np.digitize([yaw, pitch, roll], bins) - 1)
        cont_labels = torch.FloatTensor([yaw, pitch, roll])
        if self.transform is not None:
            img = self.transform(img)
        return img, labels, self.X_train[index]
        return img, labels, cont_labels, self.X_train[index]
    def __len__(self):
        # Around 200
@@ -311,11 +380,12 @@
        binned_pose = np.digitize([yaw, pitch, roll], bins) - 1
        labels = torch.LongTensor(binned_pose)
        cont_labels = torch.FloatTensor([yaw, pitch, roll])
        if self.transform is not None:
            img = self.transform(img)
        return img, labels, self.X_train[index]
        return img, labels, cont_labels, self.X_train[index]
    def __len__(self):
        # 15,667
code/old/train_preangles_ft.py
New file
@@ -0,0 +1,219 @@
import numpy as np
import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import transforms
import torchvision
import torch.backends.cudnn as cudnn
import torch.nn.functional as F
import cv2
import matplotlib.pyplot as plt
import sys
import os
import argparse
import datasets
import hopenet
import torch.utils.model_zoo as model_zoo
model_urls = {
    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
    'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
    'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
    'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
    'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
}
def parse_args():
    """Parse input arguments."""
    parser = argparse.ArgumentParser(description='Head pose estimation using the Hopenet network.')
    parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
            default=0, type=int)
    parser.add_argument('--num_epochs', dest='num_epochs', help='Maximum number of training epochs.',
          default=5, type=int)
    parser.add_argument('--batch_size', dest='batch_size', help='Batch size.',
          default=16, type=int)
    parser.add_argument('--lr', dest='lr', help='Base learning rate.',
          default=0.001, type=float)
    parser.add_argument('--data_dir', dest='data_dir', help='Directory path for data.',
          default='', type=str)
    parser.add_argument('--filename_list', dest='filename_list', help='Path to text file containing relative paths for every example.',
          default='', type=str)
    parser.add_argument('--output_string', dest='output_string', help='String appended to output snapshots.', default = '', type=str)
    parser.add_argument('--alpha', dest='alpha', help='Regression loss coefficient.',
          default=0.001, type=float)
    parser.add_argument('--dataset', dest='dataset', help='Dataset type.', default='Pose_300W_LP', type=str)
    parser.add_argument('--snapshot', dest='snapshot', help='Snapshot to start finetuning', default='', type=str)
    args = parser.parse_args()
    return args
def get_ignored_params(model):
    # Generator function that yields ignored params.
    b = []
    b.append(model.conv1)
    b.append(model.bn1)
    b.append(model.fc_finetune)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_non_ignored_params(model):
    # Generator function that yields params that will be optimized.
    b = []
    b.append(model.layer1)
    b.append(model.layer2)
    b.append(model.layer3)
    b.append(model.layer4)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_fc_params(model):
    b = []
    b.append(model.fc_yaw)
    b.append(model.fc_pitch)
    b.append(model.fc_roll)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            for name, param in module.named_parameters():
                yield param
def load_filtered_state_dict(model, snapshot):
    # By user apaszke from discuss.pytorch.org
    model_dict = model.state_dict()
    # 1. filter out unnecessary keys
    snapshot = {k: v for k, v in snapshot.items() if k in model_dict}
    # 2. overwrite entries in the existing state dict
    model_dict.update(snapshot)
    # 3. load the new state dict
    model.load_state_dict(model_dict)
if __name__ == '__main__':
    args = parse_args()
    cudnn.enabled = True
    num_epochs = args.num_epochs
    batch_size = args.batch_size
    gpu = args.gpu_id
    if not os.path.exists('output/snapshots'):
        os.makedirs('output/snapshots')
    # ResNet101 with 3 outputs
    # model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 23, 3], 66)
    # ResNet50
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66, 0)
    # ResNet18
    # model = hopenet.Hopenet(torchvision.models.resnet.BasicBlock, [2, 2, 2, 2], 66)
    if args.snapshot != '':
        load_filtered_state_dict(model, torch.load(args.snapshot))
    else:
        load_filtered_state_dict(model, model_zoo.load_url(model_urls['resnet50']))
    print 'Loading data.'
    transformations = transforms.Compose([transforms.Scale(240),
    transforms.RandomCrop(224), transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
    if args.dataset == 'Pose_300W_LP':
        pose_dataset = datasets.Pose_300W_LP(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW2000':
        pose_dataset = datasets.AFLW2000(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'BIWI':
        pose_dataset = datasets.BIWI(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW':
        pose_dataset = datasets.AFLW(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW_aug':
        pose_dataset = datasets.AFLW_aug(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFW':
        pose_dataset = datasets.AFW(args.data_dir, args.filename_list, transformations)
    else:
        print 'Error: not a valid dataset name'
        sys.exit()
    train_loader = torch.utils.data.DataLoader(dataset=pose_dataset,
                                               batch_size=batch_size,
                                               shuffle=True,
                                               num_workers=2)
    model.cuda(gpu)
    softmax = nn.Softmax()
    criterion = nn.CrossEntropyLoss().cuda()
    reg_criterion = nn.MSELoss().cuda()
    # Regression loss coefficient
    alpha = args.alpha
    idx_tensor = [idx for idx in xrange(66)]
    idx_tensor = Variable(torch.FloatTensor(idx_tensor)).cuda(gpu)
    optimizer = torch.optim.Adam([{'params': get_ignored_params(model), 'lr': 0},
                                  {'params': get_non_ignored_params(model), 'lr': args.lr},
                                  {'params': get_fc_params(model), 'lr': args.lr * 2}],
                                   lr = args.lr)
    print 'Ready to train network.'
    print 'First phase of training.'
    for epoch in range(num_epochs):
        for i, (images, labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
            pre_yaw, pre_pitch, pre_roll, angles = model(images)
            # Cross entropy loss
            loss_yaw = criterion(pre_yaw, label_yaw)
            loss_pitch = criterion(pre_pitch, label_pitch)
            loss_roll = criterion(pre_roll, label_roll)
            # MSE loss
            yaw_predicted = softmax(pre_yaw)
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1)
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            # print yaw_predicted, label_yaw.float(), loss_reg_yaw
            # Total loss
            loss_yaw += alpha * loss_reg_yaw
            loss_pitch += alpha * loss_reg_pitch
            loss_roll += alpha * loss_reg_roll
            loss_seq = [loss_yaw, loss_pitch, loss_roll]
            # loss_seq = [loss_reg_yaw, loss_reg_pitch, loss_reg_roll]
            grad_seq = [torch.Tensor(1).cuda(gpu) for _ in range(len(loss_seq))]
            torch.autograd.backward(loss_seq, grad_seq)
            optimizer.step()
            if (i+1) % 100 == 0:
                print ('Epoch [%d/%d], Iter [%d/%d] Losses: Yaw %.4f, Pitch %.4f, Roll %.4f'
                       %(epoch+1, num_epochs, i+1, len(pose_dataset)//batch_size, loss_yaw.data[0], loss_pitch.data[0], loss_roll.data[0]))
                # if epoch == 0:
                #     torch.save(model.state_dict(),
                #     'output/snapshots/' + args.output_string + '_iter_'+ str(i+1) + '.pkl')
        # Save models at numbered epochs.
        if epoch % 1 == 0 and epoch < num_epochs:
            print 'Taking snapshot...'
            torch.save(model.state_dict(),
            'output/snapshots/' + args.output_string + '_epoch_'+ str(epoch+1) + '.pkl')
code/old/train_preangles_ft_sgd.py
New file
@@ -0,0 +1,219 @@
import numpy as np
import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import transforms
import torchvision
import torch.backends.cudnn as cudnn
import torch.nn.functional as F
import cv2
import matplotlib.pyplot as plt
import sys
import os
import argparse
import datasets
import hopenet
import torch.utils.model_zoo as model_zoo
model_urls = {
    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
    'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
    'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
    'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
    'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
}
def parse_args():
    """Parse input arguments."""
    parser = argparse.ArgumentParser(description='Head pose estimation using the Hopenet network.')
    parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
            default=0, type=int)
    parser.add_argument('--num_epochs', dest='num_epochs', help='Maximum number of training epochs.',
          default=5, type=int)
    parser.add_argument('--batch_size', dest='batch_size', help='Batch size.',
          default=16, type=int)
    parser.add_argument('--lr', dest='lr', help='Base learning rate.',
          default=0.001, type=float)
    parser.add_argument('--data_dir', dest='data_dir', help='Directory path for data.',
          default='', type=str)
    parser.add_argument('--filename_list', dest='filename_list', help='Path to text file containing relative paths for every example.',
          default='', type=str)
    parser.add_argument('--output_string', dest='output_string', help='String appended to output snapshots.', default = '', type=str)
    parser.add_argument('--alpha', dest='alpha', help='Regression loss coefficient.',
          default=0.001, type=float)
    parser.add_argument('--dataset', dest='dataset', help='Dataset type.', default='Pose_300W_LP', type=str)
    parser.add_argument('--snapshot', dest='snapshot', help='Snapshot to start finetuning', default='', type=str)
    args = parser.parse_args()
    return args
def get_ignored_params(model):
    # Generator function that yields ignored params.
    b = []
    b.append(model.conv1)
    b.append(model.bn1)
    b.append(model.fc_finetune)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_non_ignored_params(model):
    # Generator function that yields params that will be optimized.
    b = []
    b.append(model.layer1)
    b.append(model.layer2)
    b.append(model.layer3)
    b.append(model.layer4)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_fc_params(model):
    b = []
    b.append(model.fc_yaw)
    b.append(model.fc_pitch)
    b.append(model.fc_roll)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            for name, param in module.named_parameters():
                yield param
def load_filtered_state_dict(model, snapshot):
    # By user apaszke from discuss.pytorch.org
    model_dict = model.state_dict()
    # 1. filter out unnecessary keys
    snapshot = {k: v for k, v in snapshot.items() if k in model_dict}
    # 2. overwrite entries in the existing state dict
    model_dict.update(snapshot)
    # 3. load the new state dict
    model.load_state_dict(model_dict)
if __name__ == '__main__':
    args = parse_args()
    cudnn.enabled = True
    num_epochs = args.num_epochs
    batch_size = args.batch_size
    gpu = args.gpu_id
    if not os.path.exists('output/snapshots'):
        os.makedirs('output/snapshots')
    # ResNet101 with 3 outputs
    # model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 23, 3], 66)
    # ResNet50
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66, 0)
    # ResNet18
    # model = hopenet.Hopenet(torchvision.models.resnet.BasicBlock, [2, 2, 2, 2], 66)
    if args.snapshot != '':
        load_filtered_state_dict(model, torch.load(args.snapshot))
    else:
        load_filtered_state_dict(model, model_zoo.load_url(model_urls['resnet50']))
    print 'Loading data.'
    transformations = transforms.Compose([transforms.Scale(240),
    transforms.RandomCrop(224), transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
    if args.dataset == 'Pose_300W_LP':
        pose_dataset = datasets.Pose_300W_LP(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW2000':
        pose_dataset = datasets.AFLW2000(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'BIWI':
        pose_dataset = datasets.BIWI(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW':
        pose_dataset = datasets.AFLW(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW_aug':
        pose_dataset = datasets.AFLW_aug(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFW':
        pose_dataset = datasets.AFW(args.data_dir, args.filename_list, transformations)
    else:
        print 'Error: not a valid dataset name'
        sys.exit()
    train_loader = torch.utils.data.DataLoader(dataset=pose_dataset,
                                               batch_size=batch_size,
                                               shuffle=True,
                                               num_workers=2)
    model.cuda(gpu)
    softmax = nn.Softmax()
    criterion = nn.CrossEntropyLoss().cuda()
    reg_criterion = nn.MSELoss().cuda()
    # Regression loss coefficient
    alpha = args.alpha
    idx_tensor = [idx for idx in xrange(66)]
    idx_tensor = Variable(torch.FloatTensor(idx_tensor)).cuda(gpu)
    optimizer = torch.optim.SGD([{'params': get_ignored_params(model), 'lr': 0},
                                  {'params': get_non_ignored_params(model), 'lr': args.lr},
                                  {'params': get_fc_params(model), 'lr': args.lr * 2}],
                                   lr = args.lr, momentum=0.9)
    print 'Ready to train network.'
    print 'First phase of training.'
    for epoch in range(num_epochs):
        for i, (images, labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
            pre_yaw, pre_pitch, pre_roll, angles = model(images)
            # Cross entropy loss
            loss_yaw = criterion(pre_yaw, label_yaw)
            loss_pitch = criterion(pre_pitch, label_pitch)
            loss_roll = criterion(pre_roll, label_roll)
            # MSE loss
            yaw_predicted = softmax(pre_yaw)
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1)
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            # print yaw_predicted, label_yaw.float(), loss_reg_yaw
            # Total loss
            loss_yaw += alpha * loss_reg_yaw
            loss_pitch += alpha * loss_reg_pitch
            loss_roll += alpha * loss_reg_roll
            loss_seq = [loss_yaw, loss_pitch, loss_roll]
            # loss_seq = [loss_reg_yaw, loss_reg_pitch, loss_reg_roll]
            grad_seq = [torch.Tensor(1).cuda(gpu) for _ in range(len(loss_seq))]
            torch.autograd.backward(loss_seq, grad_seq)
            optimizer.step()
            if (i+1) % 100 == 0:
                print ('Epoch [%d/%d], Iter [%d/%d] Losses: Yaw %.4f, Pitch %.4f, Roll %.4f'
                       %(epoch+1, num_epochs, i+1, len(pose_dataset)//batch_size, loss_yaw.data[0], loss_pitch.data[0], loss_roll.data[0]))
                # if epoch == 0:
                #     torch.save(model.state_dict(),
                #     'output/snapshots/' + args.output_string + '_iter_'+ str(i+1) + '.pkl')
        # Save models at numbered epochs.
        if epoch % 1 == 0 and epoch < num_epochs:
            print 'Taking snapshot...'
            torch.save(model.state_dict(),
            'output/snapshots/' + args.output_string + '_epoch_'+ str(epoch+1) + '.pkl')
code/old/train_preangles_rmsprop.py
New file
@@ -0,0 +1,281 @@
import numpy as np
import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import transforms
import torchvision
import torch.backends.cudnn as cudnn
import torch.nn.functional as F
import cv2
import matplotlib.pyplot as plt
import sys
import os
import argparse
import datasets
import hopenet
import torch.utils.model_zoo as model_zoo
model_urls = {
    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
    'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
    'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
    'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
    'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
}
def parse_args():
    """Parse input arguments."""
    parser = argparse.ArgumentParser(description='Head pose estimation using the Hopenet network.')
    parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
            default=0, type=int)
    parser.add_argument('--num_epochs', dest='num_epochs', help='Maximum number of training epochs.',
          default=5, type=int)
    parser.add_argument('--num_epochs_ft', dest='num_epochs_ft', help='Maximum number of finetuning epochs.',
          default=5, type=int)
    parser.add_argument('--batch_size', dest='batch_size', help='Batch size.',
          default=16, type=int)
    parser.add_argument('--lr', dest='lr', help='Base learning rate.',
          default=0.001, type=float)
    parser.add_argument('--data_dir', dest='data_dir', help='Directory path for data.',
          default='', type=str)
    parser.add_argument('--filename_list', dest='filename_list', help='Path to text file containing relative paths for every example.',
          default='', type=str)
    parser.add_argument('--output_string', dest='output_string', help='String appended to output snapshots.', default = '', type=str)
    parser.add_argument('--alpha', dest='alpha', help='Regression loss coefficient.',
          default=0.001, type=float)
    parser.add_argument('--dataset', dest='dataset', help='Dataset type.', default='Pose_300W_LP', type=str)
    args = parser.parse_args()
    return args
def get_ignored_params(model):
    # Generator function that yields ignored params.
    b = []
    b.append(model.conv1)
    b.append(model.bn1)
    b.append(model.fc_finetune)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_non_ignored_params(model):
    # Generator function that yields params that will be optimized.
    b = []
    b.append(model.layer1)
    b.append(model.layer2)
    b.append(model.layer3)
    b.append(model.layer4)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_fc_params(model):
    b = []
    b.append(model.fc_yaw)
    b.append(model.fc_pitch)
    b.append(model.fc_roll)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            for name, param in module.named_parameters():
                yield param
def load_filtered_state_dict(model, snapshot):
    # By user apaszke from discuss.pytorch.org
    model_dict = model.state_dict()
    # 1. filter out unnecessary keys
    snapshot = {k: v for k, v in snapshot.items() if k in model_dict}
    # 2. overwrite entries in the existing state dict
    model_dict.update(snapshot)
    # 3. load the new state dict
    model.load_state_dict(model_dict)
if __name__ == '__main__':
    args = parse_args()
    cudnn.enabled = True
    num_epochs = args.num_epochs
    num_epochs_ft = args.num_epochs_ft
    batch_size = args.batch_size
    gpu = args.gpu_id
    if not os.path.exists('output/snapshots'):
        os.makedirs('output/snapshots')
    # ResNet101 with 3 outputs
    # model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 23, 3], 66)
    # ResNet50
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66, 0)
    # ResNet18
    # model = hopenet.Hopenet(torchvision.models.resnet.BasicBlock, [2, 2, 2, 2], 66)
    load_filtered_state_dict(model, model_zoo.load_url(model_urls['resnet50']))
    print 'Loading data.'
    transformations = transforms.Compose([transforms.Scale(240),
    transforms.RandomCrop(224), transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
    if args.dataset == 'Pose_300W_LP':
        pose_dataset = datasets.Pose_300W_LP(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW2000':
        pose_dataset = datasets.AFLW2000(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'BIWI':
        pose_dataset = datasets.BIWI(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW':
        pose_dataset = datasets.AFLW(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW_aug':
        pose_dataset = datasets.AFLW_aug(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFW':
        pose_dataset = datasets.AFW(args.data_dir, args.filename_list, transformations)
    else:
        print 'Error: not a valid dataset name'
        sys.exit()
    train_loader = torch.utils.data.DataLoader(dataset=pose_dataset,
                                               batch_size=batch_size,
                                               shuffle=True,
                                               num_workers=2)
    model.cuda(gpu)
    softmax = nn.Softmax()
    criterion = nn.CrossEntropyLoss().cuda()
    reg_criterion = nn.MSELoss().cuda()
    # Regression loss coefficient
    alpha = args.alpha
    idx_tensor = [idx for idx in xrange(66)]
    idx_tensor = Variable(torch.FloatTensor(idx_tensor)).cuda(gpu)
    optimizer = torch.optim.RMSprop([{'params': get_ignored_params(model), 'lr': 0},
                                  {'params': get_non_ignored_params(model), 'lr': args.lr},
                                  {'params': get_fc_params(model), 'lr': args.lr * 10}],
                                   lr = args.lr)
    print 'Ready to train network.'
    print 'First phase of training.'
    for epoch in range(num_epochs):
        for i, (images, labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
            pre_yaw, pre_pitch, pre_roll, angles = model(images)
            # Cross entropy loss
            loss_yaw = criterion(pre_yaw, label_yaw)
            loss_pitch = criterion(pre_pitch, label_pitch)
            loss_roll = criterion(pre_roll, label_roll)
            # MSE loss
            yaw_predicted = softmax(pre_yaw)
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1)
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            # print yaw_predicted, label_yaw.float(), loss_reg_yaw
            # Total loss
            loss_yaw += alpha * loss_reg_yaw
            loss_pitch += alpha * loss_reg_pitch
            loss_roll += alpha * loss_reg_roll
            loss_seq = [loss_yaw, loss_pitch, loss_roll]
            # loss_seq = [loss_reg_yaw, loss_reg_pitch, loss_reg_roll]
            grad_seq = [torch.Tensor(1).cuda(gpu) for _ in range(len(loss_seq))]
            torch.autograd.backward(loss_seq, grad_seq)
            optimizer.step()
            if (i+1) % 100 == 0:
                print ('Epoch [%d/%d], Iter [%d/%d] Losses: Yaw %.4f, Pitch %.4f, Roll %.4f'
                       %(epoch+1, num_epochs, i+1, len(pose_dataset)//batch_size, loss_yaw.data[0], loss_pitch.data[0], loss_roll.data[0]))
                # if epoch == 0:
                #     torch.save(model.state_dict(),
                #     'output/snapshots/' + args.output_string + '_iter_'+ str(i+1) + '.pkl')
        # Save models at numbered epochs.
        if epoch % 1 == 0 and epoch < num_epochs:
            print 'Taking snapshot...'
            torch.save(model.state_dict(),
            'output/snapshots/' + args.output_string + '_epoch_'+ str(epoch+1) + '.pkl')
    print 'Second phase of training (finetuning layer).'
    for epoch in range(num_epochs_ft):
        for i, (images, labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            label_angles = Variable(labels[:,:3].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
            pre_yaw, pre_pitch, pre_roll, angles = model(images)
            # Cross entropy loss
            loss_yaw = criterion(pre_yaw, label_yaw)
            loss_pitch = criterion(pre_pitch, label_pitch)
            loss_roll = criterion(pre_roll, label_roll)
            # MSE loss
            yaw_predicted = softmax(pre_yaw)
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted.data * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted.data * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted.data * idx_tensor, 1)
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            # Total loss
            loss_yaw += alpha * loss_reg_yaw
            loss_pitch += alpha * loss_reg_pitch
            loss_roll += alpha * loss_reg_roll
            # Finetuning loss
            loss_angles = reg_criterion(angles[0], label_angles.float())
            loss_seq = [loss_yaw, loss_pitch, loss_roll, loss_angles]
            grad_seq = [torch.Tensor(1).cuda(gpu) for _ in range(len(loss_seq))]
            torch.autograd.backward(loss_seq, grad_seq)
            optimizer.step()
            if (i+1) % 100 == 0:
                print ('Epoch [%d/%d], Iter [%d/%d] Losses: pre-yaw %.4f, pre-pitch %.4f, pre-roll %.4f, finetuning %.4f'
                       %(epoch+1, num_epochs_ft, i+1, len(pose_dataset)//batch_size, loss_yaw.data[0], loss_pitch.data[0], loss_roll.data[0], loss_angles.data[0]))
                # if epoch == 0:
                #     torch.save(model.state_dict(),
                #     'output/snapshots/' + args.output_string + '_iter_'+ str(i+1) + '.pkl')
        # Save models at numbered epochs.
        if epoch % 1 == 0 and epoch < num_epochs_ft - 1:
            print 'Taking snapshot...'
            torch.save(model.state_dict(),
            'output/snapshots/' + args.output_string + '_epoch_'+ str(num_epochs+epoch+1) + '.pkl')
    # Save the final Trained Model
    torch.save(model.state_dict(), 'output/snapshots/' + args.output_string + '_epoch_' + str(num_epochs+epoch+1) + '.pkl')
code/test.py
@@ -88,42 +88,46 @@
    # Test the Model
    model.eval()  # Change model to 'eval' mode (BN uses moving mean/var).
    total = 0
    n_margins = 20
    yaw_correct = np.zeros(n_margins)
    pitch_correct = np.zeros(n_margins)
    roll_correct = np.zeros(n_margins)
    idx_tensor = [idx for idx in xrange(66)]
    idx_tensor = torch.FloatTensor(idx_tensor).cuda(gpu)
    yaw_error = .0
    pitch_error = .0
    roll_error = .0
    l1loss = torch.nn.L1Loss(size_average=False)
    for i, (images, labels, name) in enumerate(test_loader):
    for i, (images, labels, cont_labels, name) in enumerate(test_loader):
        images = Variable(images).cuda(gpu)
        total += labels.size(0)
        label_yaw = labels[:,0].float()
        label_pitch = labels[:,1].float()
        label_roll = labels[:,2].float()
        total += cont_labels.size(0)
        label_yaw = cont_labels[:,0].float()
        label_pitch = cont_labels[:,1].float()
        label_roll = cont_labels[:,2].float()
        pre_yaw, pre_pitch, pre_roll, angles = model(images)
        yaw = angles[-1][:,0].cpu().data
        pitch = angles[-1][:,1].cpu().data
        roll = angles[-1][:,2].cpu().data
        yaw = angles[0][:,0].cpu().data * 3 - 99
        pitch = angles[0][:,1].cpu().data * 3 - 99
        roll = angles[0][:,2].cpu().data * 3 - 99
        for idx in xrange(1,args.iter_ref+1):
            yaw += angles[idx][:,0].cpu().data
            pitch += angles[idx][:,1].cpu().data
            roll += angles[idx][:,2].cpu().data
        # Mean absolute error
        yaw_error += torch.sum(torch.abs(yaw - label_yaw) * 3)
        pitch_error += torch.sum(torch.abs(pitch - label_pitch) * 3)
        roll_error += torch.sum(torch.abs(roll - label_roll) * 3)
        yaw_error += torch.sum(torch.abs(yaw - label_yaw))
        pitch_error += torch.sum(torch.abs(pitch - label_pitch))
        roll_error += torch.sum(torch.abs(roll - label_roll))
        # Save images with pose cube.
        # TODO: fix for larger batch size
        if args.save_viz:
            name = name[0]
            if args.dataset == 'BIWI':
                cv2_img = cv2.imread(os.path.join(args.data_dir, name + '_rgb.png'))
            else:
            cv2_img = cv2.imread(os.path.join(args.data_dir, name + '.jpg'))
            if args.batch_size == 1:
                error_string = 'y %.4f, p %.4f, r %.4f' % (torch.sum(torch.abs(yaw - label_yaw) * 3), torch.sum(torch.abs(pitch - label_pitch) * 3), torch.sum(torch.abs(roll - label_roll) * 3))
                cv2_img = cv2.putText(cv2_img, error_string, (30, cv2_img.shape[0]- 30), fontFace=1, fontScale=2, color=(0,255,0), thickness=2)
            utils.plot_pose_cube(cv2_img, yaw[0] * 3 - 99, pitch[0] * 3 - 99, roll[0] * 3 - 99)
            cv2.imwrite(os.path.join('output/images', name + '.jpg'), cv2_img)
code/test_AFW.py
@@ -33,6 +33,9 @@
          default=1, type=int)
    parser.add_argument('--save_viz', dest='save_viz', help='Save images with pose cube.',
          default=False, type=bool)
    parser.add_argument('--iter_ref', dest='iter_ref', default=1, type=int)
    parser.add_argument('--margin', dest='margin', help='Accuracy margin.', default=22.5,
          type=float)
    args = parser.parse_args()
@@ -43,12 +46,12 @@
    cudnn.enabled = True
    gpu = args.gpu_id
    snapshot_path = os.path.join('output/snapshots', args.snapshot + '.pkl')
    snapshot_path = args.snapshot
    # ResNet101 with 3 outputs.
    # model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 23, 3], 66)
    # ResNet50
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66)
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66, args.iter_ref)
    # ResNet18
    # model = hopenet.Hopenet(torchvision.models.resnet.BasicBlock, [2, 2, 2, 2], 66)
@@ -90,6 +93,7 @@
    l1loss = torch.nn.L1Loss(size_average=False)
    yaw_correct = .0
    yaw_margin = args.margin
    for i, (images, labels, name) in enumerate(test_loader):
        images = Variable(images).cuda(gpu)
@@ -98,35 +102,31 @@
        label_pitch = labels[:,1].float() * 3 - 99
        label_roll = labels[:,2].float() * 3 - 99
        yaw, pitch, roll = model(images)
        pre_yaw, pre_pitch, pre_roll, angles = model(images)
        yaw = angles[0][:,0].cpu().data
        pitch = angles[0][:,1].cpu().data
        roll = angles[0][:,2].cpu().data
        # Binned predictions
        _, yaw_bpred = torch.max(yaw.data, 1)
        _, pitch_bpred = torch.max(pitch.data, 1)
        _, roll_bpred = torch.max(roll.data, 1)
        for idx in xrange(1,args.iter_ref+1):
            yaw += angles[idx][:,0].cpu().data
            pitch += angles[idx][:,1].cpu().data
            roll += angles[idx][:,2].cpu().data
        # Continuous predictions
        yaw_predicted = utils.softmax_temperature(yaw.data, 0.4)
        pitch_predicted = utils.softmax_temperature(pitch.data, 0.8)
        roll_predicted = utils.softmax_temperature(roll.data, 0.8)
        yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1).cpu() * 3 - 99
        pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1).cpu() * 3 - 99
        roll_predicted = torch.sum(roll_predicted * idx_tensor, 1).cpu() * 3 - 99
        yaw = yaw * 3 - 99
        pitch = pitch * 3 - 99
        roll = roll * 3 - 99
        # Mean absolute error
        yaw_error += torch.sum(torch.abs(yaw_predicted - label_yaw))
        pitch_error += torch.sum(torch.abs(pitch_predicted - label_pitch))
        roll_error += torch.sum(torch.abs(roll_predicted - label_roll))
        yaw_error += torch.sum(torch.abs(yaw - label_yaw))
        pitch_error += torch.sum(torch.abs(pitch - label_pitch))
        roll_error += torch.sum(torch.abs(roll - label_roll))
        # Yaw accuracy
        yaw_tensor_error = torch.abs(yaw_predicted - label_yaw).numpy()
        yaw_tensor_error = torch.abs(yaw - label_yaw).numpy()
        yaw_margin = 22.5
        yaw_correct += np.where(yaw_tensor_error <= yaw_margin)[0].shape[0]
        if yaw_tensor_error[0] > yaw_margin:
            print name[0] + ' ' + str(yaw_predicted[0]) + ' ' + str(label_yaw[0]) + ' ' + str(yaw_tensor_error[0])
            print name[0] + ' ' + str(yaw[0]) + ' ' + str(label_yaw[0]) + ' ' + str(yaw_tensor_error[0])
        # Binned Accuracy
        # for er in xrange(n_margins):
@@ -144,7 +144,7 @@
            #print os.path.join('output/images', name + '.jpg')
            #print label_yaw[0] * 3 - 99, label_pitch[0] * 3 - 99, label_roll[0] * 3 - 99
            #print yaw_predicted * 3 - 99, pitch_predicted * 3 - 99, roll_predicted * 3 - 99
            utils.plot_pose_cube(cv2_img, yaw_predicted[0], pitch_predicted[0], roll_predicted[0])
            utils.plot_pose_cube(cv2_img, yaw[0], pitch[0], roll[0])
            cv2.imwrite(os.path.join('output/images', name + '.jpg'), cv2_img)
    print('Test error in degrees of the model on the ' + str(total) +
code/test_AFW_preangles.py
New file
@@ -0,0 +1,159 @@
import numpy as np
import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import transforms
import torch.backends.cudnn as cudnn
import torchvision
import torch.nn.functional as F
import cv2
import matplotlib.pyplot as plt
import sys
import os
import argparse
import datasets
import hopenet
import utils
def parse_args():
    """Parse input arguments."""
    parser = argparse.ArgumentParser(description='Head pose estimation using the Hopenet network.')
    parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
            default=0, type=int)
    parser.add_argument('--data_dir', dest='data_dir', help='Directory path for data.',
          default='', type=str)
    parser.add_argument('--filename_list', dest='filename_list', help='Path to text file containing relative paths for every example.',
          default='', type=str)
    parser.add_argument('--snapshot', dest='snapshot', help='Name of model snapshot.',
          default='', type=str)
    parser.add_argument('--batch_size', dest='batch_size', help='Batch size.',
          default=1, type=int)
    parser.add_argument('--save_viz', dest='save_viz', help='Save images with pose cube.',
          default=False, type=bool)
    parser.add_argument('--margin', dest='margin', help='Accuracy margin.', default=22.5,
          type=float)
    args = parser.parse_args()
    return args
if __name__ == '__main__':
    args = parse_args()
    cudnn.enabled = True
    gpu = args.gpu_id
    snapshot_path = args.snapshot
    # ResNet101 with 3 outputs.
    # model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 23, 3], 66)
    # ResNet50
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66, 0)
    # ResNet18
    # model = hopenet.Hopenet(torchvision.models.resnet.BasicBlock, [2, 2, 2, 2], 66)
    print 'Loading snapshot.'
    # Load snapshot
    saved_state_dict = torch.load(snapshot_path)
    model.load_state_dict(saved_state_dict)
    print 'Loading data.'
    transformations = transforms.Compose([transforms.Scale(224),
    transforms.CenterCrop(224), transforms.ToTensor()])
    pose_dataset = datasets.AFW(args.data_dir, args.filename_list,
                                transformations)
    test_loader = torch.utils.data.DataLoader(dataset=pose_dataset,
                                               batch_size=args.batch_size,
                                               num_workers=2)
    model.cuda(gpu)
    print 'Ready to test network.'
    # Test the Model
    model.eval()  # Change model to 'eval' mode (BN uses moving mean/var).
    total = 0
    n_margins = 20
    yaw_correct = np.zeros(n_margins)
    pitch_correct = np.zeros(n_margins)
    roll_correct = np.zeros(n_margins)
    idx_tensor = [idx for idx in xrange(66)]
    idx_tensor = torch.FloatTensor(idx_tensor).cuda(gpu)
    yaw_error = .0
    pitch_error = .0
    roll_error = .0
    l1loss = torch.nn.L1Loss(size_average=False)
    yaw_correct = .0
    yaw_margin = args.margin
    for i, (images, labels, name) in enumerate(test_loader):
        images = Variable(images).cuda(gpu)
        total += labels.size(0)
        label_yaw = labels[:,0].float() * 3 - 99
        label_pitch = labels[:,1].float() * 3 - 99
        label_roll = labels[:,2].float() * 3 - 99
        yaw, pitch, roll, angles = model(images)
        # Binned predictions
        _, yaw_bpred = torch.max(yaw.data, 1)
        _, pitch_bpred = torch.max(pitch.data, 1)
        _, roll_bpred = torch.max(roll.data, 1)
        # Continuous predictions
        yaw_predicted = utils.softmax_temperature(yaw.data, 0.4)
        pitch_predicted = utils.softmax_temperature(pitch.data, 0.8)
        roll_predicted = utils.softmax_temperature(roll.data, 0.8)
        yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1).cpu() * 3 - 99
        pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1).cpu() * 3 - 99
        roll_predicted = torch.sum(roll_predicted * idx_tensor, 1).cpu() * 3 - 99
        # Mean absolute error
        yaw_error += torch.sum(torch.abs(yaw_predicted - label_yaw))
        pitch_error += torch.sum(torch.abs(pitch_predicted - label_pitch))
        roll_error += torch.sum(torch.abs(roll_predicted - label_roll))
        # Yaw accuracy
        yaw_tensor_error = torch.abs(yaw_predicted - label_yaw).numpy()
        yaw_correct += np.where(yaw_tensor_error <= yaw_margin)[0].shape[0]
        if yaw_tensor_error[0] > yaw_margin:
            print name[0] + ' ' + str(yaw_predicted[0]) + ' ' + str(label_yaw[0]) + ' ' + str(yaw_tensor_error[0])
        # Binned Accuracy
        # for er in xrange(n_margins):
        #     yaw_bpred[er] += (label_yaw[0] in range(yaw_bpred[0,0] - er, yaw_bpred[0,0] + er + 1))
        #     pitch_bpred[er] += (label_pitch[0] in range(pitch_bpred[0,0] - er, pitch_bpred[0,0] + er + 1))
        #     roll_bpred[er] += (label_roll[0] in range(roll_bpred[0,0] - er, roll_bpred[0,0] + er + 1))
        # print label_yaw[0], yaw_bpred[0,0]
        # Save images with pose cube.
        # TODO: fix for larger batch size
        if args.save_viz:
            name = name[0]
            cv2_img = cv2.imread(os.path.join(args.data_dir, name + '.jpg'))
            #print os.path.join('output/images', name + '.jpg')
            #print label_yaw[0] * 3 - 99, label_pitch[0] * 3 - 99, label_roll[0] * 3 - 99
            #print yaw_predicted * 3 - 99, pitch_predicted * 3 - 99, roll_predicted * 3 - 99
            utils.plot_pose_cube(cv2_img, yaw_predicted[0], pitch_predicted[0], roll_predicted[0])
            cv2.imwrite(os.path.join('output/images', name + '.jpg'), cv2_img)
    print('Test error in degrees of the model on the ' + str(total) +
    ' test images. Yaw: %.4f, Pitch: %.4f, Roll: %.4f' % (yaw_error / total,
    pitch_error / total, roll_error / total))
    print ('Yaw accuracy (<= ' + str(yaw_margin) + ' degrees) is %.4f' % (yaw_correct / total))
    # Binned accuracy
    # for idx in xrange(len(yaw_correct)):
    #     print yaw_correct[idx] / total, pitch_correct[idx] / total, roll_correct[idx] / total
code/test_preangles.py
@@ -97,12 +97,12 @@
    l1loss = torch.nn.L1Loss(size_average=False)
    for i, (images, labels, name) in enumerate(test_loader):
    for i, (images, labels, cont_labels, name) in enumerate(test_loader):
        images = Variable(images).cuda(gpu)
        total += labels.size(0)
        label_yaw = labels[:,0].float()
        label_pitch = labels[:,1].float()
        label_roll = labels[:,2].float()
        total += cont_labels.size(0)
        label_yaw = cont_labels[:,0].float()
        label_pitch = cont_labels[:,1].float()
        label_roll = cont_labels[:,2].float()
        yaw, pitch, roll, angles = model(images)
@@ -121,15 +121,18 @@
        roll_predicted = torch.sum(roll_predicted * idx_tensor, 1).cpu()
        # Mean absolute error
        yaw_error += torch.sum(torch.abs(yaw_predicted - label_yaw) * 3)
        pitch_error += torch.sum(torch.abs(pitch_predicted - label_pitch) * 3)
        roll_error += torch.sum(torch.abs(roll_predicted - label_roll) * 3)
        yaw_error += torch.sum(torch.abs(yaw_predicted * 3 - 99 - label_yaw))
        pitch_error += torch.sum(torch.abs(pitch_predicted * 3 - 99 - label_pitch))
        roll_error += torch.sum(torch.abs(roll_predicted * 3 - 99 - label_roll))
        # Save images with pose cube.
        # TODO: fix for larger batch size
        if args.save_viz:
            name = name[0]
            cv2_img = cv2.imread(os.path.join(args.data_dir, name + '.jpg'))
            if args.batch_size == 1:
                error_string = 'y %.2f, p %.2f, r %.2f' % (torch.sum(torch.abs(yaw_predicted - label_yaw) * 3), torch.sum(torch.abs(pitch_predicted - label_pitch) * 3), torch.sum(torch.abs(roll_predicted - label_roll) * 3))
                cv2_img = cv2.putText(cv2_img, error_string, (30, cv2_img.shape[0]- 30), fontFace=1, fontScale=1, color=(0,0,255), thickness=1)
            utils.plot_pose_cube(cv2_img, yaw_predicted[0] * 3 - 99, pitch_predicted[0] * 3 - 99, roll_predicted[0] * 3 - 99)
            cv2.imwrite(os.path.join('output/images', name + '.jpg'), cv2_img)
code/test_res.py
File was deleted
code/train.py
@@ -133,6 +133,8 @@
        pose_dataset = datasets.BIWI(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW':
        pose_dataset = datasets.AFLW(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW_aug':
        pose_dataset = datasets.AFLW_aug(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFW':
        pose_dataset = datasets.AFW(args.data_dir, args.filename_list, transformations)
    else:
@@ -162,11 +164,16 @@
    print 'First phase of training.'
    for epoch in range(num_epochs):
        for i, (images, labels, name) in enumerate(train_loader):
        for i, (images, labels, cont_labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            label_angles = Variable(cont_labels[:,:3].cuda(gpu))
            label_yaw_cont = Variable(cont_labels[:,0].cuda(gpu))
            label_pitch_cont = Variable(cont_labels[:,1].cuda(gpu))
            label_roll_cont = Variable(cont_labels[:,2].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
@@ -183,13 +190,13 @@
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1) * 3 - 99
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1) * 3 - 99
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1) * 3 - 99
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw_cont)
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch_cont)
            loss_reg_roll = reg_criterion(roll_predicted, label_roll_cont)
            # Total loss
            loss_yaw += alpha * loss_reg_yaw
@@ -216,12 +223,16 @@
    print 'Second phase of training (finetuning layer).'
    for epoch in range(num_epochs_ft):
        for i, (images, labels, name) in enumerate(train_loader):
        for i, (images, labels, cont_labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            label_angles = Variable(labels[:,:3].cuda(gpu))
            label_angles = Variable(cont_labels[:,:3].cuda(gpu))
            label_yaw_cont = Variable(cont_labels[:,0].cuda(gpu))
            label_pitch_cont = Variable(cont_labels[:,1].cuda(gpu))
            label_roll_cont = Variable(cont_labels[:,2].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
@@ -238,13 +249,13 @@
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1) * 3 - 99
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1) * 3 - 99
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1) * 3 - 99
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw_cont)
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch_cont)
            loss_reg_roll = reg_criterion(roll_predicted, label_roll_cont)
            # Total loss
            loss_yaw += alpha * loss_reg_yaw
@@ -254,7 +265,7 @@
            # Finetuning loss
            loss_seq = [loss_yaw, loss_pitch, loss_roll]
            for idx in xrange(1,len(angles)):
                label_angles_residuals = label_angles.float() - angles[0]
                label_angles_residuals = label_angles - angles[0] * 3 - 99
                label_angles_residuals = label_angles_residuals.detach()
                loss_angles = reg_criterion(angles[idx], label_angles_residuals)
                loss_seq.append(loss_angles)
code/train_finetune.py
New file
@@ -0,0 +1,200 @@
import numpy as np
import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import transforms
import torchvision
import torch.backends.cudnn as cudnn
import torch.nn.functional as F
import cv2
import matplotlib.pyplot as plt
import sys
import os
import argparse
import datasets
import hopenet
import torch.utils.model_zoo as model_zoo
model_urls = {
    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
    'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
    'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
    'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
    'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
}
def parse_args():
    """Parse input arguments."""
    parser = argparse.ArgumentParser(description='Head pose estimation using the Hopenet network.')
    parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
            default=0, type=int)
    parser.add_argument('--num_epochs_ft', dest='num_epochs_ft', help='Maximum number of finetuning epochs.',
          default=5, type=int)
    parser.add_argument('--batch_size', dest='batch_size', help='Batch size.',
          default=16, type=int)
    parser.add_argument('--lr', dest='lr', help='Base learning rate.',
          default=0.001, type=float)
    parser.add_argument('--data_dir', dest='data_dir', help='Directory path for data.',
          default='', type=str)
    parser.add_argument('--filename_list', dest='filename_list', help='Path to text file containing relative paths for every example.',
          default='', type=str)
    parser.add_argument('--output_string', dest='output_string', help='String appended to output snapshots.', default = '', type=str)
    parser.add_argument('--alpha', dest='alpha', help='Regression loss coefficient.',
          default=0.001, type=float)
    parser.add_argument('--iter_ref', dest='iter_ref', help='Number of iterative refinement passes.',
          default=1, type=int)
    parser.add_argument('--dataset', dest='dataset', help='Dataset type.', default='Pose_300W_LP', type=str)
    parser.add_argument('--snapshot', dest='snapshot', help='Snapshot to start finetuning', default='', type=str)
    args = parser.parse_args()
    return args
def get_ignored_params(model):
    # Generator function that yields ignored params.
    b = []
    b.append(model.conv1)
    b.append(model.bn1)
    b.append(model.layer1)
    b.append(model.layer2)
    b.append(model.layer3)
    b.append(model.layer4)
    b.append(model.fc_yaw)
    b.append(model.fc_pitch)
    b.append(model.fc_roll)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_non_ignored_params(model):
    # Generator function that yields params that will be optimized.
    b = []
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            if 'bn' in module_name:
                module.eval()
            for name, param in module.named_parameters():
                yield param
def get_fc_params(model):
    b = []
    b.append(model.fc_finetune)
    for i in range(len(b)):
        for module_name, module in b[i].named_modules():
            for name, param in module.named_parameters():
                yield param
def load_filtered_state_dict(model, snapshot):
    # By user apaszke from discuss.pytorch.org
    model_dict = model.state_dict()
    # 1. filter out unnecessary keys
    snapshot = {k: v for k, v in snapshot.items() if k in model_dict}
    # 2. overwrite entries in the existing state dict
    model_dict.update(snapshot)
    # 3. load the new state dict
    model.load_state_dict(model_dict)
if __name__ == '__main__':
    args = parse_args()
    cudnn.enabled = True
    num_epochs_ft = args.num_epochs_ft
    batch_size = args.batch_size
    gpu = args.gpu_id
    if not os.path.exists('output/snapshots'):
        os.makedirs('output/snapshots')
    # ResNet101 with 3 outputs
    # model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 23, 3], 66)
    # ResNet50
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3], 66, args.iter_ref)
    # ResNet18
    # model = hopenet.Hopenet(torchvision.models.resnet.BasicBlock, [2, 2, 2, 2], 66)
    if args.snapshot != '':
        load_filtered_state_dict(model, torch.load(args.snapshot))
    else:
        load_filtered_state_dict(model, model_zoo.load_url(model_urls['resnet50']))
    print 'Loading data.'
    transformations = transforms.Compose([transforms.Scale(240),
    transforms.RandomCrop(224), transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
    if args.dataset == 'Pose_300W_LP':
        pose_dataset = datasets.Pose_300W_LP(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW2000':
        pose_dataset = datasets.AFLW2000(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'BIWI':
        pose_dataset = datasets.BIWI(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW':
        pose_dataset = datasets.AFLW(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW_aug':
        pose_dataset = datasets.AFLW_aug(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFW':
        pose_dataset = datasets.AFW(args.data_dir, args.filename_list, transformations)
    else:
        print 'Error: not a valid dataset name'
        sys.exit()
    train_loader = torch.utils.data.DataLoader(dataset=pose_dataset,
                                               batch_size=batch_size,
                                               shuffle=True,
                                               num_workers=2)
    model.cuda(gpu)
    softmax = nn.Softmax()
    criterion = nn.CrossEntropyLoss().cuda()
    reg_criterion = nn.MSELoss().cuda()
    # Regression loss coefficient
    alpha = args.alpha
    idx_tensor = [idx for idx in xrange(66)]
    idx_tensor = Variable(torch.FloatTensor(idx_tensor)).cuda(gpu)
    optimizer = torch.optim.Adam([{'params': get_ignored_params(model), 'lr': 0},
                                  {'params': get_non_ignored_params(model), 'lr': 0},
                                  {'params': get_fc_params(model), 'lr': args.lr}],
                                   lr = args.lr)
    print 'Ready to train network.'
    print 'Second phase of training (finetuning layer).'
    for epoch in range(num_epochs_ft):
        for i, (images, labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            label_angles = Variable(labels[:,:3].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
            pre_yaw, pre_pitch, pre_roll, angles = model(images)
            # Finetuning loss
            loss_seq = []
            for idx in xrange(1,len(angles)):
                label_angles_residuals = label_angles.float() - angles[0]
                label_angles_residuals = label_angles_residuals.detach()
                loss_angles = reg_criterion(angles[idx], label_angles_residuals)
                loss_seq.append(loss_angles)
            grad_seq = [torch.Tensor(1).cuda(gpu) for _ in range(len(loss_seq))]
            torch.autograd.backward(loss_seq, grad_seq)
            optimizer.step()
            if (i+1) % 100 == 0:
                print ('Epoch [%d/%d], Iter [%d/%d] Losses: finetuning %.4f'
                       %(epoch+1, num_epochs_ft, i+1, len(pose_dataset)//batch_size, loss_angles.data[0]))
        # Save models at numbered epochs.
        if epoch % 1 == 0 and epoch < num_epochs_ft:
            print 'Taking snapshot...'
            torch.save(model.state_dict(),
            'output/snapshots/' + args.output_string + '_epoch_'+ str(epoch+1) + '.pkl')
code/train_preangles.py
@@ -133,6 +133,8 @@
        pose_dataset = datasets.BIWI(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW':
        pose_dataset = datasets.AFLW(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFLW_aug':
        pose_dataset = datasets.AFLW_aug(args.data_dir, args.filename_list, transformations)
    elif args.dataset == 'AFW':
        pose_dataset = datasets.AFW(args.data_dir, args.filename_list, transformations)
    else:
@@ -155,18 +157,23 @@
    optimizer = torch.optim.Adam([{'params': get_ignored_params(model), 'lr': 0},
                                  {'params': get_non_ignored_params(model), 'lr': args.lr},
                                  {'params': get_fc_params(model), 'lr': args.lr * 2}],
                                  {'params': get_fc_params(model), 'lr': args.lr * 5}],
                                   lr = args.lr)
    print 'Ready to train network.'
    print 'First phase of training.'
    for epoch in range(num_epochs):
        for i, (images, labels, name) in enumerate(train_loader):
        for i, (images, labels, cont_labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            label_angles = Variable(cont_labels[:,:3].cuda(gpu))
            label_yaw_cont = Variable(cont_labels[:,0].cuda(gpu))
            label_pitch_cont = Variable(cont_labels[:,1].cuda(gpu))
            label_roll_cont = Variable(cont_labels[:,2].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
@@ -183,13 +190,13 @@
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1)
            yaw_predicted = torch.sum(yaw_predicted * idx_tensor, 1) * 3 - 99
            pitch_predicted = torch.sum(pitch_predicted * idx_tensor, 1) * 3 - 99
            roll_predicted = torch.sum(roll_predicted * idx_tensor, 1) * 3 - 99
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw_cont)
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch_cont)
            loss_reg_roll = reg_criterion(roll_predicted, label_roll_cont)
            # print yaw_predicted, label_yaw.float(), loss_reg_yaw
            # Total loss
@@ -198,7 +205,6 @@
            loss_roll += alpha * loss_reg_roll
            loss_seq = [loss_yaw, loss_pitch, loss_roll]
            # loss_seq = [loss_reg_yaw, loss_reg_pitch, loss_reg_roll]
            grad_seq = [torch.Tensor(1).cuda(gpu) for _ in range(len(loss_seq))]
            torch.autograd.backward(loss_seq, grad_seq)
            optimizer.step()
@@ -215,65 +221,3 @@
            print 'Taking snapshot...'
            torch.save(model.state_dict(),
            'output/snapshots/' + args.output_string + '_epoch_'+ str(epoch+1) + '.pkl')
    print 'Second phase of training (finetuning layer).'
    for epoch in range(num_epochs_ft):
        for i, (images, labels, name) in enumerate(train_loader):
            images = Variable(images.cuda(gpu))
            label_yaw = Variable(labels[:,0].cuda(gpu))
            label_pitch = Variable(labels[:,1].cuda(gpu))
            label_roll = Variable(labels[:,2].cuda(gpu))
            label_angles = Variable(labels[:,:3].cuda(gpu))
            optimizer.zero_grad()
            model.zero_grad()
            pre_yaw, pre_pitch, pre_roll, angles = model(images)
            # Cross entropy loss
            loss_yaw = criterion(pre_yaw, label_yaw)
            loss_pitch = criterion(pre_pitch, label_pitch)
            loss_roll = criterion(pre_roll, label_roll)
            # MSE loss
            yaw_predicted = softmax(pre_yaw)
            pitch_predicted = softmax(pre_pitch)
            roll_predicted = softmax(pre_roll)
            yaw_predicted = torch.sum(yaw_predicted.data * idx_tensor, 1)
            pitch_predicted = torch.sum(pitch_predicted.data * idx_tensor, 1)
            roll_predicted = torch.sum(roll_predicted.data * idx_tensor, 1)
            loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw.float())
            loss_reg_pitch = reg_criterion(pitch_predicted, label_pitch.float())
            loss_reg_roll = reg_criterion(roll_predicted, label_roll.float())
            # Total loss
            loss_yaw += alpha * loss_reg_yaw
            loss_pitch += alpha * loss_reg_pitch
            loss_roll += alpha * loss_reg_roll
            # Finetuning loss
            loss_angles = reg_criterion(angles[0], label_angles.float())
            loss_seq = [loss_yaw, loss_pitch, loss_roll, loss_angles]
            grad_seq = [torch.Tensor(1).cuda(gpu) for _ in range(len(loss_seq))]
            torch.autograd.backward(loss_seq, grad_seq)
            optimizer.step()
            if (i+1) % 100 == 0:
                print ('Epoch [%d/%d], Iter [%d/%d] Losses: pre-yaw %.4f, pre-pitch %.4f, pre-roll %.4f, finetuning %.4f'
                       %(epoch+1, num_epochs_ft, i+1, len(pose_dataset)//batch_size, loss_yaw.data[0], loss_pitch.data[0], loss_roll.data[0], loss_angles.data[0]))
                # if epoch == 0:
                #     torch.save(model.state_dict(),
                #     'output/snapshots/' + args.output_string + '_iter_'+ str(i+1) + '.pkl')
        # Save models at numbered epochs.
        if epoch % 1 == 0 and epoch < num_epochs_ft - 1:
            print 'Taking snapshot...'
            torch.save(model.state_dict(),
            'output/snapshots/' + args.output_string + '_epoch_'+ str(num_epochs+epoch+1) + '.pkl')
    # Save the final Trained Model
    torch.save(model.state_dict(), 'output/snapshots/' + args.output_string + '_epoch_' + str(num_epochs+epoch+1) + '.pkl')
practice/vis_AFLW.ipynb
@@ -2,7 +2,7 @@
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
@@ -24,7 +24,7 @@
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
@@ -35,25 +35,31 @@
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "IOError",
     "evalue": "[Errno 2] No such file or directory: '/Data/nruiz9/data/facial_landmarks/AFLW/aflw_cropped_loose/2/image06292.txt'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mIOError\u001b[0m                                   Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-12-38d7950fddc1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mimg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcv2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mannot_file\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg_name\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'.txt'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      7\u001b[0m \u001b[0mannot\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mannot_file\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreadline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'\\n'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m' '\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0myaw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mannot\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m180\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mIOError\u001b[0m: [Errno 2] No such file or directory: '/Data/nruiz9/data/facial_landmarks/AFLW/aflw_cropped_loose/2/image06292.txt'"
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5d334ad310>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "yaw, pitch, roll:  80.6477250021 -2.70457134999 0.534743034\n"
     ]
    }
   ],
   "source": [
    "img_name = '/Data/nruiz9/data/facial_landmarks/AFLW/aflw_cropped_loose/2/image06292'\n",
    "img_name = '/Data/nruiz9/data/facial_landmarks/AFLW/aflw_cropped/2/image12234'\n",
    "img_path = os.path.join(img_name + '.jpg')\n",
    "\n",
    "img = cv2.imread(img_path)\n",
@@ -79,12 +85,45 @@
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5d3371c8d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "yaw, pitch, roll:  80.6477250021 -2.70457134999 0.534743034\n"
     ]
    }
   ],
   "source": [
    "from PIL import Image\n",
    "from PIL import ImageFilter\n",
    "\n",
    "img_name = '/Data/nruiz9/data/facial_landmarks/AFLW/aflw_cropped/2/image12234'\n",
    "img_path = os.path.join(img_name + '.jpg')\n",
    "\n",
    "img = Image.open(img_path)\n",
    "img = img.filter(ImageFilter.BLUR)\n",
    "\n",
    "img = img.rotate(-4)\n",
    "\n",
    "plt.imshow(img)\n",
    "plt.show()\n",
    "print 'yaw, pitch, roll: ', yaw, pitch, roll"
   ]
  },
  {
   "cell_type": "raw",