Ejemplo n.º 1
0
def calcola_confusion_matrix(pl):

    batch_size = pl["batch_size"]
    device = pl["device"]
    dims = pl["dims"]

    stats1 = {}
    # calcolo le statistiche della directory
    for ld1 in pl["dir1"]:
        path_ld1 = pl["prefix1"] + ld1
        print("Calcolo statistica directory: " + ld1)
        m, s = calcola_statistiche_del_path(path_ld1, batch_size, dims, device)
        stats1[ld1] = (m, s)

    stats2 = {}
    for ld2 in pl["dir2"]:
        path_ld2 = pl["prefix2"] + ld2
        print("Calcolo statistica directory: " + ld2)
        m, s = calcola_statistiche_del_path(path_ld2, batch_size, dims, device)
        stats2[ld2] = (m, s)

    matrice = np.zeros((len(pl["dir1"]), len(pl["dir2"])))
    for i in range(len(pl["dir1"])):
        ld1 = pl["dir1"][i]
        for j in range(i, len(pl["dir2"])):
            ld2 = pl["dir2"][j]
            dd = fid.calculate_frechet_distance(stats1[ld1][0], stats1[ld1][1],
                                                stats2[ld2][0], stats2[ld2][1])
            print(" distanza fra " + ld1 + " e " + ld2 + " = " + str(dd))
            matrice[i][j] = dd
            matrice[j][i] = dd

    return matrice
Ejemplo n.º 2
0
def calc_average_fid_and_blur(model, dloader):
    fid = 0
    blur = 0
    model.eval()
    for batch_ind, (data, _) in enumerate(dloader):
        if model.confs['CUDA']:
            data = data.cuda()
        data = torch.autograd.Variable(data.view(1, 1, 28, 28))
        #data.unsqueeze(0)
        print(data.shape)
        recon_x, _, _ = model.forward(data)

        blur += calc_blur(recon_x).data[0]
        recon_x = recon_x.view(
            1, recon_x.shape[1] * recon_x.shape[2] * recon_x.shape[3])
        #recon_x.unsqueeze()

        data = data.view(1, data.shape[1] * data.shape[2] * data.shape[3])
        recon_acts_mean = np.mean(recon_x.data.cpu().numpy(), axis=0)
        recon_acts_sig = np.cov(recon_x.data.cpu().numpy(), rowvar=False)

        data_acts_mean = np.mean(data.data.cpu().numpy(), axis=0)
        data_acts_sig = np.cov(data.data.cpu().numpy(), rowvar=False)
        #print(recon_acts_sig)
        # Source: https://github.com/mseitzer/pytorch-fid
        fid += calculate_frechet_distance(data_acts_mean,
                                          data_acts_sig,
                                          recon_acts_mean,
                                          recon_acts_sig,
                                          eps=1e-8)
        #print(fid)
        print(blur)

    print('Fid: {}'.format(fid / len(dloader.dataset)))
    print('Blur: {}'.format(blur / len(dloader.dataset)))
Ejemplo n.º 3
0
mu_fake_vggface, sigma_fake_vggface = _compute_statistics_from_pred_arr(
    fake_pred_arr_vggface)
mu_recon_vggface, sigma_recon_vggface = _compute_statistics_from_pred_arr(
    recon_pred_arr_vggface)
mu_wrong_vggface, sigma_wrong_vggface = _compute_statistics_from_pred_arr(
    wrong_pred_arr_vggface)

# here we use training stat for FID
with open('training_stat_FID.pickle', 'rb') as f:
    training_stat = pickle.load(f)
mu_real, mu_real_aligned, mu_real_vggface, \
sigma_real, sigma_real_aligned, sigma_real_vggface = \
    training_stat['mu_real'], training_stat['mu_real_aligned'], training_stat['mu_real_vggface'], \
    training_stat['sigma_real'], training_stat['sigma_real_aligned'], training_stat['sigma_real_vggface']

fid_real_fake = calculate_frechet_distance(mu_real, sigma_real, mu_fake,
                                           sigma_fake)
fid_real_recon = calculate_frechet_distance(mu_real, sigma_real, mu_recon,
                                            sigma_recon)
fid_real_wrong = calculate_frechet_distance(mu_real, sigma_real, mu_wrong,
                                            sigma_wrong)

fid_real_fake_aligned = calculate_frechet_distance(mu_real_aligned,
                                                   sigma_real_aligned,
                                                   mu_fake_aligned,
                                                   sigma_fake_aligned)
fid_real_recon_aligned = calculate_frechet_distance(mu_real_aligned,
                                                    sigma_real_aligned,
                                                    mu_recon_aligned,
                                                    sigma_recon_aligned)
fid_real_wrong_aligned = calculate_frechet_distance(mu_real_aligned,
                                                    sigma_real_aligned,
Ejemplo n.º 4
0
        mu_real_aligned, sigma_real_aligned = _compute_statistics_from_pred_arr(
            real_pred_arr_aligned)
        mu_fake_aligned, sigma_fake_aligned = _compute_statistics_from_pred_arr(
            fake_pred_arr_aligned)
        mu_recon_aligned, sigma_recon_aligned = _compute_statistics_from_pred_arr(
            recon_pred_arr_aligned)

        with open('training_stat_FID.pickle', 'rb') as f:
            training_stat = pickle.load(f)
        mu_real, mu_real_aligned, mu_real_vggface, \
        sigma_real, sigma_real_aligned, sigma_real_vggface = \
            training_stat['mu_real'], training_stat['mu_real_aligned'], training_stat['mu_real_vggface'], \
            training_stat['sigma_real'], training_stat['sigma_real_aligned'], training_stat['sigma_real_vggface']

        fid_real_fake = calculate_frechet_distance(mu_real, sigma_real,
                                                   mu_fake, sigma_fake)
        fid_real_recon = calculate_frechet_distance(mu_real, sigma_real,
                                                    mu_recon, sigma_recon)

        fid_real_fake_aligned = calculate_frechet_distance(
            mu_real_aligned, sigma_real_aligned, mu_fake_aligned,
            sigma_fake_aligned)
        fid_real_recon_aligned = calculate_frechet_distance(
            mu_real_aligned, sigma_real_aligned, mu_recon_aligned,
            sigma_recon_aligned)

        predicts_fake = []
        predicts_recon = []
        predicts_fake_aligned = []
        predicts_recon_aligned = []
        for i in range(num_imgs):