Exemple #1
0
def main():
    opt = TrainOptions().parse()

    opt.use_loss_verts = True
    opt.use_loss_v_personal = True
    opt.lambda_verts = 100
    opt.lambda_v_personal = 100
    opt.isHres = True
    opt.G_lr = 1e-5
    opt.batch_size = 2
    opt.num_frame = 4
    opt.epochs = 20
    opt.step_size = 2
    opt.lr_gamma = 0.5

    train_dataset = Multi_Garment_Dataset(data_root=opt.data_root,
                                          pose_cam_path=opt.pose_cam_path,
                                          num_frame=opt.num_frame,
                                          isHres=opt.isHres)
    train_loader = DataLoader(train_dataset,
                              batch_size=opt.batch_size,
                              shuffle=True)

    model = Pix2Mesh(opt)

    for fn in os.listdir(opt.log_dir):
        os.remove(os.path.join(opt.log_dir, fn))

    if opt.resume:
        model.load_checkpoint(opt.start_epoch)

    model.train()

    total = len(train_loader.dataset)
    for epoch in range(opt.start_epoch, opt.epochs):
        train_num = 0
        for i, data in enumerate(train_loader):

            model.set_input(data)
            model.optimize_parameters()

            N = model.batch_size
            train_num += N

            if (i + 1) % opt.print_freq == 0 or train_num == total:
                loss_vis = model.get_loss_vis()
                mess = "Epoch %d: [%d / %d]" % (epoch, train_num, total)
                for name in loss_vis:
                    mess += " | " + "%s: %.7f" % (name, loss_vis[name])
                print(mess)
                imgs_vis = model.visualize()

                imgs_masked_personal_gt = imgs_vis[
                    'imgs_masked_personal_gt'].detach().cpu()
                imgs_masked_personal_gt = make_grid(
                    imgs_masked_personal_gt,
                    nrow=imgs_masked_personal_gt.size(0),
                    padding=0)

                imgs_masked = imgs_vis['imgs_masked'].detach().cpu()
                imgs_masked = make_grid(imgs_masked,
                                        nrow=imgs_masked.size(0),
                                        padding=0)

                imgs_masked_personal = imgs_vis['imgs_masked_personal'].detach(
                ).cpu()
                imgs_masked_personal = make_grid(
                    imgs_masked_personal,
                    nrow=imgs_masked_personal.size(0),
                    padding=0)

                save_image([
                    imgs_masked_personal_gt, imgs_masked, imgs_masked_personal
                ],
                           os.path.join(
                               opt.log_dir,
                               "epoch_{:0>2d}_iter_{:0>5d}.png".format(
                                   epoch, i)),
                           nrow=1,
                           padding=0)

        model.save_checkpoint(epoch)
        model.update_learning_rate()