| import os |
| import sys |
| import numpy as np |
| import h5py |
| import scipy.io as spio |
| import nibabel as nib |
| import scipy as sp |
| from PIL import Image |
|
|
|
|
|
|
| import argparse |
| parser = argparse.ArgumentParser(description='Argument Parser') |
| parser.add_argument("-sub", "--sub",help="Subject Number",default=1) |
| args = parser.parse_args() |
| sub=int(args.sub) |
| assert sub in [1,2,5,7] |
|
|
|
|
| from scipy.stats import pearsonr,binom,linregress |
| import numpy as np |
| def pairwise_corr_all(ground_truth, predictions): |
| r = np.corrcoef(ground_truth, predictions) |
| r = r[:len(ground_truth), len(ground_truth):] |
| |
| |
| congruents = np.diag(r) |
| |
| |
| |
| success = r < congruents |
| success_cnt = np.sum(success, 0) |
| |
| |
| perf = np.mean(success_cnt) / (len(ground_truth)-1) |
| p = 1 - binom.cdf(perf*len(ground_truth)*(len(ground_truth)-1), len(ground_truth)*(len(ground_truth)-1), 0.5) |
| |
| return perf, p |
|
|
|
|
| net_list = [ |
| ('inceptionv3','avgpool'), |
| ('clip','final'), |
| ('alexnet',2), |
| ('alexnet',5), |
| ('efficientnet','avgpool'), |
| ('swav','avgpool') |
| ] |
|
|
| feats_dir = 'data/eval_features/subj{:02d}'.format(sub) |
| test_dir = 'data/eval_features/test_images' |
| num_test = 982 |
| distance_fn = sp.spatial.distance.correlation |
| pairwise_corrs = [] |
| for (net_name,layer) in net_list: |
| file_name = '{}/{}_{}.npy'.format(test_dir,net_name,layer) |
| gt_feat = np.load(file_name) |
| |
| file_name = '{}/{}_{}.npy'.format(feats_dir,net_name,layer) |
| eval_feat = np.load(file_name) |
| |
| gt_feat = gt_feat.reshape((len(gt_feat),-1)) |
| eval_feat = eval_feat.reshape((len(eval_feat),-1)) |
| |
| print(net_name,layer) |
| if net_name in ['efficientnet','swav']: |
| print('distance: ',np.array([distance_fn(gt_feat[i],eval_feat[i]) for i in range(num_test)]).mean()) |
| else: |
| pairwise_corrs.append(pairwise_corr_all(gt_feat[:num_test],eval_feat[:num_test])[0]) |
| print('pairwise corr: ',pairwise_corrs[-1]) |
| |
| from skimage.color import rgb2gray |
| from skimage.metrics import structural_similarity as ssim |
| |
| ssim_list = [] |
| pixcorr_list = [] |
| for i in range(982): |
| gen_image = Image.open('results/versatile_diffusion/subj{:02d}/{}.png'.format(sub,i)).resize((425,425)) |
| gt_image = Image.open('data/nsddata_stimuli/test_images/{}.png'.format(i)) |
| gen_image = np.array(gen_image)/255.0 |
| gt_image = np.array(gt_image)/255.0 |
| pixcorr_res = np.corrcoef(gt_image.reshape(1,-1), gen_image.reshape(1,-1))[0,1] |
| pixcorr_list.append(pixcorr_res) |
| gen_image = rgb2gray(gen_image) |
| gt_image = rgb2gray(gt_image) |
| ssim_res = ssim(gen_image, gt_image, multichannel=True, gaussian_weights=True, sigma=1.5, use_sample_covariance=False, data_range=1.0) |
| ssim_list.append(ssim_res) |
| |
| ssim_list = np.array(ssim_list) |
| pixcorr_list = np.array(pixcorr_list) |
| print('PixCorr: {}'.format(pixcorr_list.mean())) |
| print('SSIM: {}'.format(ssim_list.mean())) |
|
|
|
|