def evaluate_finegan(self): if cfg.TRAIN.NET_G == '': print('Error: the path for model not found!') else: # Build and load the generator netG = G_NET() netG.apply(weights_init) netG = torch.nn.DataParallel(netG, device_ids=self.gpus) model_dict = netG.state_dict() state_dict = \ torch.load(cfg.TRAIN.NET_G, map_location=lambda storage, loc: storage)['birds128'] state_dict = {k: v for k, v in state_dict.items() if k in model_dict} model_dict.update(state_dict) netG.load_state_dict(model_dict) print('Load ', cfg.TRAIN.NET_G) # Uncomment this to print Generator layers print(netG) sys nz = cfg.GAN.Z_DIM noise = torch.FloatTensor(self.batch_size, nz) noise.data.normal_(0, 1) if cfg.CUDA: netG.cuda() noise = noise.cuda() netG.eval() background_class = cfg.TEST_BACKGROUND_CLASS parent_class = cfg.TEST_PARENT_CLASS child_class = cfg.TEST_CHILD_CLASS bg_code = torch.zeros([self.batch_size, cfg.FINE_GRAINED_CATEGORIES]) p_code = torch.zeros([self.batch_size, cfg.SUPER_CATEGORIES]) c_code = torch.zeros([self.batch_size, cfg.FINE_GRAINED_CATEGORIES]) for j in range(self.batch_size): bg_code[j][background_class] = 1 p_code[j][parent_class] = 1 c_code[j][child_class] = 1 fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG(noise, c_code, p_code, bg_code) # Forward pass through the generator self.save_image(fake_imgs[0][0], self.save_dir, 'background') self.save_image(fake_imgs[1][0], self.save_dir, 'parent_final') self.save_image(fake_imgs[2][0], self.save_dir, 'child_final') self.save_image(fg_imgs[0][0], self.save_dir, 'parent_foreground') self.save_image(fg_imgs[1][0], self.save_dir, 'child_foreground') self.save_image(mk_imgs[0][0], self.save_dir, 'parent_mask') self.save_image(mk_imgs[1][0], self.save_dir, 'child_mask') self.save_image(fgmk_imgs[0][0], self.save_dir, 'parent_foreground_masked') self.save_image(fgmk_imgs[1][0], self.save_dir, 'child_foreground_masked')
def sample_images(self): sample_size = 24 save_dir = '../sample_images/' save_final = '../sample_finals/' if not os.path.exists(save_dir): os.makedirs(save_dir) if not os.path.exists(save_final): os.makedirs(save_final) random.seed(datetime.now()) depth = cfg.TEST_DEPTH res = 32 * 2**depth if cfg.TRAIN.NET_G == '': print('Error: the path for model not found!') else: # Build and load the generator netG = G_NET(depth) netG.apply(weights_init) netG = torch.nn.DataParallel(netG, device_ids=self.gpus) model_dict = netG.state_dict() state_dict = \ torch.load(cfg.TRAIN.NET_G, map_location=lambda storage, loc: storage) state_dict = { k: v for k, v in state_dict.items() if k in model_dict } model_dict.update(state_dict) netG.load_state_dict(model_dict) print('Load ', cfg.TRAIN.NET_G) # Uncomment this to print Generator layers # print(netG) nz = cfg.GAN.Z_DIM noise = torch.FloatTensor(1, nz) # noise.data.normal_(0, 1) # noise = noise.repeat(1, 1) if cfg.CUDA: netG.cuda() noise = noise.cuda() netG.eval() for i in tqdm(range(sample_size)): noise.data.normal_(0, 1) bg_code = torch.zeros([1, cfg.FINE_GRAINED_CATEGORIES]).cuda() p_code = torch.zeros([1, cfg.SUPER_CATEGORIES]).cuda() c_code = torch.zeros([1, cfg.FINE_GRAINED_CATEGORIES]).cuda() b = random.randint(0, cfg.FINE_GRAINED_CATEGORIES - 1) p = random.randint(0, cfg.SUPER_CATEGORIES - 1) c = random.randint(0, cfg.FINE_GRAINED_CATEGORIES - 1) bg_code[0][b] = 1 p_code[0][p] = 1 c_code[0][c] = 1 fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG( noise, c_code, 1, p_code, bg_code) # Forward pass through the generator self.save_image(fake_imgs[3 * depth + 0][0], save_dir, '%d_bg' % i) self.save_image(fake_imgs[3 * depth + 1][0], save_dir, '%d_pf' % i) self.save_image(fake_imgs[3 * depth + 2][0], save_dir, '%d_cf' % i) self.save_image(fake_imgs[3 * depth + 2][0], save_final, '%d' % i) # self.save_image(fg_imgs[2 * depth + 0][0], save_dir, 'parent_foreground') # self.save_image(fg_imgs[2 * depth + 1][0], save_dir, 'child_foreground') self.save_image(mk_imgs[2 * depth + 0][0], save_dir, '%d_pmk' % i) self.save_image(mk_imgs[2 * depth + 1][0], save_dir, '%d_cmk' % i)
def evaluate_finegan(self): self.save_dir = os.path.join(cfg.SAVE_DIR, 'images') mkdir_p(self.save_dir) random.seed(datetime.now()) depth = cfg.TEST_DEPTH res = 32 * 2**depth if cfg.TRAIN.NET_G == '': print('Error: the path for model not found!') else: # Build and load the generator netG = G_NET(depth) netG.apply(weights_init) netG = torch.nn.DataParallel(netG, device_ids=self.gpus) model_dict = netG.state_dict() state_dict = \ torch.load(cfg.TRAIN.NET_G, map_location=lambda storage, loc: storage) state_dict = { k: v for k, v in state_dict.items() if k in model_dict } model_dict.update(state_dict) netG.load_state_dict(model_dict) print('Load ', cfg.TRAIN.NET_G) # Uncomment this to print Generator layers # print(netG) nrow = 6 ncol = 4 z_std = 0.1 p_vs_c = False reprod = False if not reprod: torch.manual_seed(random.randint(-9999, 9999)) bg_li = [] pf_li = [] cf_li = [] pk_li = [] ck_li = [] pfg_li = [] cfg_li = [] pfgmk_li = [] cfgmk_li = [] b = random.randint(0, cfg.FINE_GRAINED_CATEGORIES - 1) nz = cfg.GAN.Z_DIM noise = torch.FloatTensor(1, nz) noise.data.normal_(0, z_std) # noise = noise.repeat(self.batch_size, 1) if cfg.CUDA: netG.cuda() noise = noise.cuda() netG.eval() c_li = np.random.randint(0, cfg.FINE_GRAINED_CATEGORIES - 1, size=nrow) p_li = np.random.randint(0, cfg.SUPER_CATEGORIES - 1, size=nrow) for k in range(ncol): p = p_li[k] # p = random.randint(0, cfg.SUPER_CATEGORIES-1) for i in range(nrow): bg_code = torch.zeros( [self.batch_size, cfg.FINE_GRAINED_CATEGORIES]) p_code = torch.zeros( [self.batch_size, cfg.SUPER_CATEGORIES]) c_code = torch.zeros( [self.batch_size, cfg.FINE_GRAINED_CATEGORIES]) c = c_li[i] for j in range(self.batch_size): bg_code[j][b] = 1 p_code[j][p] = 1 c_code[j][c] = 1 fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG( noise, c_code, None, p_code, bg_code) # Forward pass through the generator bg_li.append(fake_imgs[3 * depth][0]) pf_li.append(fake_imgs[3 * depth + 1][0]) cf_li.append(fake_imgs[3 * depth + 2][0]) pk_li.append(mk_imgs[2 * depth][0]) ck_li.append(mk_imgs[2 * depth + 1][0]) pfg_li.append(fg_imgs[2 * depth][0]) cfg_li.append(fg_imgs[2 * depth + 1][0]) pfgmk_li.append(fgmk_imgs[2 * depth][0]) cfgmk_li.append(fgmk_imgs[2 * depth + 1][0]) save_image(bg_li, self.save_dir, 'background_pvc', nrow, res) save_image(pf_li, self.save_dir, 'parent_final_pvc', nrow, res) save_image(cf_li, self.save_dir, 'child_final_pvc', nrow, res) save_image(pfg_li, self.save_dir, 'parent_foreground_pvc', nrow, res) save_image(cfg_li, self.save_dir, 'child_foreground_pvc', nrow, res) save_image(pk_li, self.save_dir, 'parent_mask_pvc', nrow, res) save_image(ck_li, self.save_dir, 'child_mask_pvc', nrow, res) save_image(pfgmk_li, self.save_dir, 'parent_foreground_masked_pvc', nrow, res) save_image(cfgmk_li, self.save_dir, 'child_foreground_masked_pvc', nrow, res) bg_li = [] pf_li = [] cf_li = [] pk_li = [] ck_li = [] pfg_li = [] cfg_li = [] pfgmk_li = [] cfgmk_li = [] for _ in range(ncol): noise.data.normal_(0, z_std) for i in range(nrow): bg_code = torch.zeros( [self.batch_size, cfg.FINE_GRAINED_CATEGORIES]) p_code = torch.zeros( [self.batch_size, cfg.SUPER_CATEGORIES]) c_code = torch.zeros( [self.batch_size, cfg.FINE_GRAINED_CATEGORIES]) c = c_li[i] p = p_li[i] for j in range(self.batch_size): bg_code[j][b] = 1 p_code[j][p] = 1 c_code[j][c] = 1 fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG( noise, c_code, None, p_code, bg_code) # Forward pass through the generator bg_li.append(fake_imgs[3 * depth][0]) pf_li.append(fake_imgs[3 * depth + 1][0]) cf_li.append(fake_imgs[3 * depth + 2][0]) pk_li.append(mk_imgs[2 * depth][0]) ck_li.append(mk_imgs[2 * depth + 1][0]) pfg_li.append(fg_imgs[2 * depth][0]) cfg_li.append(fg_imgs[2 * depth + 1][0]) pfgmk_li.append(fgmk_imgs[2 * depth][0]) cfgmk_li.append(fgmk_imgs[2 * depth + 1][0]) save_image(bg_li, self.save_dir, 'background_zvpc', nrow, res) save_image(pf_li, self.save_dir, 'parent_final_zvpc', nrow, res) save_image(cf_li, self.save_dir, 'child_final_zvpc', nrow, res) save_image(pfg_li, self.save_dir, 'parent_foreground_zvpc', nrow, res) save_image(cfg_li, self.save_dir, 'child_foreground_zvpc', nrow, res) save_image(pk_li, self.save_dir, 'parent_mask_zvpc', nrow, res) save_image(ck_li, self.save_dir, 'child_mask_zvpc', nrow, res) save_image(pfgmk_li, self.save_dir, 'parent_foreground_masked_zvpc', nrow, res) save_image(cfgmk_li, self.save_dir, 'child_foreground_masked_zvpc', nrow, res)