Example #1
0
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
Example #2
0
    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
Example #3
0
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
Example #4
0
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
Example #5
0
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()