Exemple #1
0
    def __init__(self, hyperparameters):
        super(UNIT_Trainer, self).__init__()
        lr = hyperparameters['lr']
        # Initiate the networks
        self.gen_a = VAEGen(hyperparameters['input_dim_a'], hyperparameters['gen'])  # auto-encoder for domain a
        self.gen_b = VAEGen(hyperparameters['input_dim_b'], hyperparameters['gen'])  # auto-encoder for domain b
        self.dis_a = MsImageDis(hyperparameters['input_dim_a'], hyperparameters['dis'])  # discriminator for domain a
        self.dis_b = MsImageDis(hyperparameters['input_dim_b'], hyperparameters['dis'])  # discriminator for domain b
        self.instancenorm = nn.InstanceNorm2d(512, affine=False)

        # Setup the optimizers
        beta1 = hyperparameters['beta1']
        beta2 = hyperparameters['beta2']
        dis_params = list(self.dis_a.parameters()) + list(self.dis_b.parameters())
        gen_params = list(self.gen_a.parameters()) + list(self.gen_b.parameters())
        self.dis_opt = torch.optim.Adam([p for p in dis_params if p.requires_grad],
                                        lr=lr, betas=(beta1, beta2), weight_decay=hyperparameters['weight_decay'])
        self.gen_opt = torch.optim.Adam([p for p in gen_params if p.requires_grad],
                                        lr=lr, betas=(beta1, beta2), weight_decay=hyperparameters['weight_decay'])
        self.dis_scheduler = get_scheduler(self.dis_opt, hyperparameters)
        self.gen_scheduler = get_scheduler(self.gen_opt, hyperparameters)

        # Network weight initialization
        self.apply(weights_init(hyperparameters['init']))
        self.dis_a.apply(weights_init('gaussian'))
        self.dis_b.apply(weights_init('gaussian'))

        # Load VGG model if needed
        if 'vgg_w' in hyperparameters.keys() and hyperparameters['vgg_w'] > 0:
            self.vgg = load_vgg16(hyperparameters['vgg_model_path'] + '/models')
            self.vgg.eval()
            for param in self.vgg.parameters():
                param.requires_grad = False
Exemple #2
0
 def resume(self, checkpoint_dir, hyperparameters):
     # Load generators
     last_model_name = get_model_list(checkpoint_dir, "gen")
     state_dict = torch.load(last_model_name)
     self.gen_a.load_state_dict(state_dict['a'])
     self.gen_b.load_state_dict(state_dict['b'])
     iterations = int(last_model_name[-11:-3])
     # Load discriminators
     last_model_name = get_model_list(checkpoint_dir, "dis")
     state_dict = torch.load(last_model_name)
     self.dis_a.load_state_dict(state_dict['a'])
     self.dis_b.load_state_dict(state_dict['b'])
     # Load optimizers
     state_dict = torch.load(os.path.join(checkpoint_dir, 'optimizer.pt'))
     self.dis_opt.load_state_dict(state_dict['dis'])
     self.gen_opt.load_state_dict(state_dict['gen'])
     # Reinitilize schedulers
     self.dis_scheduler = get_scheduler(self.dis_opt, hyperparameters, iterations)
     self.gen_scheduler = get_scheduler(self.gen_opt, hyperparameters, iterations)
     print('Resume from iteration %d' % iterations)
     return iterations
            model.load_state_dict(
                torch.load(resume_file_path,
                           map_location=lambda storage, loc: storage.cuda(
                               args.local_rank % args.world_size)))
            if cfg.MODEL.CLASSIFIER.REINIT:
                torch.nn.init.xavier_normal_(model.last_linear.weights)
                model.last_linear.bias.data.zero_()
        else:
            logger.info(
                "=> no checkpoint found at '{}'".format(resume_file_path))

    if args.local_rank == 0:
        logger.info('train data size:', len(train_dataloader.dataset))
        logger.info('val data size:', len(val_dataloader.dataset))
        logger.info('model:', model)

    criterion = get_criterion(cfg.CRITERION)
    optimizer = get_optimizer(cfg.OPTIMIZER, model)
    lr_scheduler = get_scheduler(cfg.LR_SCHEDULER, optimizer)

    model = train_model(
        train_dataloder=train_dataloader,
        val_dataloader=val_dataloader,
        model=model,
        criterion=criterion,
        optimizer=optimizer,
        scheduler=lr_scheduler,
        session=cfg.SESSION,
        batch_size=cfg.TRAIN_DATA.BATCHSIZE,
    )