def initialize_fid(train_loader, sample_size=1000): global base_fid_statistics, inception_model if inception_model is None: inception_model = InceptionV3([ InceptionV3.BLOCK_INDEX_BY_DIM[ config.evolution.fitness.fid_dimension] ]) inception_model = tools.cuda(inception_model) if base_fid_statistics is None: print("calculate base fid statistics") # TODO see a better way to load images from the train dataset train_images = [] for images, _ in train_loader: train_images += list(images.numpy()) if len(train_images) > sample_size: train_images = train_images[:sample_size] break train_images = np.array(train_images) base_fid_statistics = fid_score.calculate_activation_statistics( train_images, inception_model, cuda=tools.is_cuda_available(), dims=config.evolution.fitness.fid_dimension) inception_model.cpu() print("completed..") return base_fid_statistics, inception_model
def getFIDScore(self): self.Gen_network = self.Gen_network.to(self.device) self.Gen_network.eval() noise = torch.randn(1000, 100, 1, 1, device=self.device) generated_images = self.Gen_network(noise).detach() self.Gen_network.zero_grad() self.Gen_network.cpu() torch.cuda.empty_cache() # Get FID score for the model: global base_fid_statistics, inception_model if (base_fid_statistics is None and inception_model is None): base_fid_statistics, inception_model = generative_score.initialize_fid( self.dataloader, sample_size=1000) inception_model = tools.cuda(inception_model) m1, s1 = fid_score.calculate_activation_statistics( generated_images.data.cpu().numpy(), inception_model, cuda=tools.is_cuda_available(), dims=2048) inception_model.cpu() m2, s2 = base_fid_statistics ret = fid_score.calculate_frechet_distance(m1, s1, m2, s2) torch.cuda.empty_cache() return ret
def fid_images(generated_images): global base_fid_statistics, inception_model inception_model = tools.cuda(inception_model, use_cuda) start_time = time.time() m1, s1 = fid_score.calculate_activation_statistics( generated_images.numpy(), inception_model, cuda=tools.is_cuda_available(use_cuda), dims=config.evolution.fitness.fid_dimension, batch_size=config.evolution.fitness.fid_batch_size) print("FID: calc activation --- %s seconds ---" % (time.time() - start_time)) inception_model.cpu() m2, s2 = base_fid_statistics ret = fid_score.calculate_frechet_distance(m1, s1, m2, s2) return ret
def fid_images(generated_images): global base_fid_statistics, inception_model inception_model = tools.cuda(inception_model) m1, s1 = fid_score.calculate_activation_statistics( generated_images.data.cpu().numpy(), inception_model, cuda=tools.is_cuda_available(), dims=config.evolution.fitness.fid_dimension) inception_model.cpu() m2, s2 = base_fid_statistics ret = fid_score.calculate_frechet_distance(m1, s1, m2, s2) return ret
def calc_activations(df, image_shape, batch_size): inception_model = tools.cuda(InceptionV3([InceptionV3.BLOCK_INDEX_BY_DIM[2048]])) images = get_image_data(df, image_shape).reshape((-1, *image_shape)) print(images.shape) act = get_activations(images, inception_model, batch_size=batch_size, dims=2048, cuda=tools.is_cuda_available(), verbose=True) del inception_model torch.cuda.empty_cache() print(act.shape) return act, images
plt.close() iters += 1 # Get FID score for the model: from metrics import generative_score base_fid_statistics, inception_model = generative_score.initialize_fid(dataloader, sample_size=1000) from metrics.fid import fid_score from util import tools noise = torch.randn(1000, 100, 1, 1, device=device) netG.eval() generated_images = netG(noise).detach() inception_model = tools.cuda(inception_model) m1, s1 = fid_score.calculate_activation_statistics( generated_images.data.cpu().numpy(), inception_model, cuda=tools.is_cuda_available(), dims=2048) inception_model.cpu() m2, s2 = base_fid_statistics ret = fid_score.calculate_frechet_distance(m1, s1, m2, s2) netG.zero_grad() print("Fid score is :",ret) plt.figure(figsize=(10, 5)) plt.title("Generator and Discriminator Loss During Training") plt.plot(G_losses, label="G") plt.plot(D_losses, label="D") plt.xlabel("iterations") plt.ylabel("Loss") plt.legend()