def convert_visuals_to_numpy(visuals): for key, t in visuals.items(): tile = opt.batch_size > 8 if key == 'labels': t = util.tensor2label(t, opt.input_nc + 2, tile=tile) else: t = util.tensor2im(t, tile=tile) visuals[key] = t return visuals
def evaluate_model(self, step): self.is_best = False save_dir = os.path.join(self.opt.log_dir, 'eval', str(step)) os.makedirs(save_dir, exist_ok=True) self.modules_on_one_gpu.netG.eval() torch.cuda.empty_cache() fakes, names = [], [] ret = {} cnt = 0 for i, data_i in enumerate(tqdm(self.eval_dataloader, desc='Eval ', position=2, leave=False)): self.set_input(data_i) self.test() fakes.append(self.fake_B.cpu()) for j in range(len(self.image_paths)): short_path = ntpath.basename(self.image_paths[j]) name = os.path.splitext(short_path)[0] names.append(name) if cnt < 10: input_im = util.tensor2label(self.input_semantics[j], self.opt.input_nc + 2) real_im = util.tensor2im(self.real_B[j]) fake_im = util.tensor2im(self.fake_B[j]) util.save_image(input_im, os.path.join(save_dir, 'input', '%s.png' % name), create_dir=True) util.save_image(real_im, os.path.join(save_dir, 'real', '%s.png' % name), create_dir=True) util.save_image(fake_im, os.path.join(save_dir, 'fake', '%s.png' % name), create_dir=True) cnt += 1 if not self.opt.no_fid: fid = get_fid(fakes, self.inception_model, self.npz, device=self.device, batch_size=self.opt.eval_batch_size, tqdm_position=2) if fid < self.best_fid: self.is_best = True self.best_fid = fid self.fids.append(fid) if len(self.fids) > 3: self.fids.pop(0) ret['metric/fid'] = fid ret['metric/fid-mean'] = sum(self.fids) / len(self.fids) ret['metric/fid-best'] = self.best_fid if 'cityscapes' in self.opt.dataroot and not self.opt.no_mIoU: mIoU = get_cityscapes_mIoU(fakes, names, self.drn_model, self.device, table_path=self.opt.table_path, data_dir=self.opt.cityscapes_path, batch_size=self.opt.eval_batch_size, num_workers=self.opt.num_threads, tqdm_position=2) if mIoU > self.best_mIoU: self.is_best = True self.best_mIoU = mIoU self.mIoUs.append(mIoU) if len(self.mIoUs) > 3: self.mIoUs = self.mIoUs[1:] ret['metric/mIoU'] = mIoU ret['metric/mIoU-mean'] = sum(self.mIoUs) / len(self.mIoUs) ret['metric/mIoU-best'] = self.best_mIoU self.modules_on_one_gpu.netG.train() torch.cuda.empty_cache() return ret
def evaluate_model(self, step): ret = {} self.is_best = False save_dir = os.path.join(self.opt.log_dir, 'eval', str(step)) os.makedirs(save_dir, exist_ok=True) if self.opt.eval_mode == 'both': settings = ('largest', 'smallest') else: settings = (self.opt.eval_mode, ) for config_name in settings: config = self.configs(config_name) fakes, names = [], [] self.modules_on_one_gpu.netG_student.train() self.calibrate(config, 2) tqdm_position = 2 + int(not self.opt.no_calibration) self.modules_on_one_gpu.netG_student.eval() torch.cuda.empty_cache() cnt = 0 for i, data_i in enumerate( tqdm(self.eval_dataloader, desc='Eval ', position=tqdm_position, leave=False)): self.set_input(data_i) self.test(config=config) fakes.append(self.Sfake_B.cpu()) for j in range(len(self.image_paths)): short_path = ntpath.basename(self.image_paths[j]) name = os.path.splitext(short_path)[0] names.append(name) if cnt < 10: input_im = util.tensor2label(self.input_semantics[j], self.opt.input_nc + 2) real_im = util.tensor2im(self.real_B[j]) Tfake_im = util.tensor2im(self.Tfake_B[j]) Sfake_im = util.tensor2im(self.Sfake_B[j]) util.save_image(input_im, os.path.join(save_dir, 'input', '%s.png' % name), create_dir=True) util.save_image(real_im, os.path.join(save_dir, 'real', '%s.png' % name), create_dir=True) util.save_image(Tfake_im, os.path.join(save_dir, 'Tfake', '%s.png' % name), create_dir=True) util.save_image(Sfake_im, os.path.join(save_dir, 'Sfake', '%s.png' % name), create_dir=True) cnt += 1 if not self.opt.no_fid: fid = get_fid(fakes, self.inception_model, self.npz, device=self.device, batch_size=self.opt.eval_batch_size, tqdm_position=2) if fid < getattr(self, 'best_fid_%s' % config_name): self.is_best = True setattr(self, 'best_fid_%s' % config_name, fid) fids = getattr(self, 'fids_%s' % config_name) fids.append(fid) if len(fids) > 3: fids.pop(0) ret['metric/fid_%s' % config_name] = fid ret['metric/fid_%s-mean' % config_name] = sum( getattr(self, 'fids_%s' % config_name)) / len( getattr(self, 'fids_%s' % config_name)) ret['metric/fid_%s-best' % config_name] = getattr( self, 'best_fid_%s' % config_name) if 'cityscapes' in self.opt.dataroot and not self.opt.no_mIoU: mIoU = get_cityscapes_mIoU(fakes, names, self.drn_model, self.device, table_path=self.opt.table_path, data_dir=self.opt.cityscapes_path, batch_size=self.opt.eval_batch_size, num_workers=self.opt.num_threads, tqdm_position=2) if mIoU > getattr(self, 'best_mIoU_%s' % config_name): self.is_best = True setattr(self, 'best_mIoU_%s' % config_name, mIoU) mIoUs = getattr(self, 'mIoUs_%s' % config_name) mIoUs.append(mIoU) if len(mIoUs) > 3: mIoUs.pop(0) ret['metric/mIoU_%s' % config_name] = mIoU ret['metric/mIoU_%s-mean' % config_name] = sum( getattr(self, 'mIoUs_%s' % config_name)) / len( getattr(self, 'mIoUs_%s' % config_name)) ret['metric/mIoU_%s-best' % config_name] = getattr( self, 'best_mIoU_%s' % config_name) self.modules_on_one_gpu.netG_student.train() torch.cuda.empty_cache() return ret