예제 #1
0
show_imgrid(
    baddot_imgs_neg,
    nrow=5,
    padding=2,
)
save_imgrid(
    baddot_imgs_neg,
    join(savedir, "GAN_baddots_neg.png"),
    nrow=5,
    padding=2,
)
#%%
modelsnm = "StyleGAN2-Face512_Z"
savedir = join(saveroot, modelsnm)
os.makedirs(savedir, exist_ok=True)
SGAN = loadStyleGAN2("ffhq-512-avg-tpurun1.pt")
G = StyleGAN2_wrapper(SGAN)
H, eva, evc = load_Haverage("StyleGAN2-Face512_Z", descend=True)
randvec = G.sample_vector(10, 'cpu')
distnorm = randvec.norm(dim=1).mean().item()
# distnorm = np.sqrt(randvec.shape[1])
#%%
baddot_imgs_pos = G.visualize_batch_np(distnorm * evc[:, :20].T)
show_imgrid(
    baddot_imgs_pos,
    nrow=5,
    padding=2,
)
save_imgrid(
    baddot_imgs_pos,
    join(savedir, "GAN_space_baddots_pos.png"),
예제 #2
0
import numpy as np
sys.path.append("E:\Github_Projects\Visual_Neuro_InSilico_Exp")
sys.path.append("D:\Github\Visual_Neuro_InSilico_Exp")
import os
# os.system(r"'C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat'")
import lpips
try:
    ImDist = lpips.LPIPS(net="squeeze").cuda()
except:
    ImDist = lpips.PerceptualLoss(net="squeeze").cuda()
from GAN_hessian_compute import hessian_compute, get_full_hessian
from hessian_analysis_tools import compute_vector_hess_corr, compute_hess_corr, plot_layer_consistency_mat
from GAN_utils import loadStyleGAN2, StyleGAN2_wrapper
#%%
modelname = "ffhq-256-config-e-003810"  # 109 sec
SGAN = loadStyleGAN2(modelname+".pt", size=256, channel_multiplier=1)  # 491 sec per BP
#%%
L2dist_col = []
def Hess_hook(module, fea_in, fea_out):
    print("hooker on %s"%module.__class__)
    ref_feat = fea_out.detach().clone()
    ref_feat.requires_grad_(False)
    L2dist = torch.pow(fea_out - ref_feat, 2).sum()
    L2dist_col.append(L2dist)
    return None

feat = torch.randn(1, 512, requires_grad=True).cuda()
datadir = r"E:\OneDrive - Washington University in St. Louis\HessNetArchit\StyleGAN2"
for blocki in range(len(SGAN.convs)):
    L2dist_col = []
    torch.cuda.empty_cache()
예제 #3
0
from os.path import join
from time import time
import torch
import numpy as np
import matplotlib.pylab as plt
from GAN_utils import loadBigBiGAN, loadStyleGAN2, BigBiGAN_wrapper, StyleGAN2_wrapper, loadBigGAN, BigGAN_wrapper
# sys.path.append(r"/home/binxu/PerceptualSimilarity")
# sys.path.append(r"D:\Github\PerceptualSimilarity")
# sys.path.append(r"E:\Github_Projects\PerceptualSimilarity")
# import models
# ImDist = models.PerceptualLoss(model='net-lin', net='squeeze', use_gpu=1, gpu_ids=[0])
import lpips
ImDist = lpips.LPIPS(net="squeeze").cuda()
from GAN_hessian_compute import hessian_compute
#%%
SGAN = loadStyleGAN2("ffhq-512-avg-tpurun1.pt", size=512)
G = StyleGAN2_wrapper(SGAN)
#%% Accuracy dependency on the EPS value
feat = 0.5 * torch.randn(1, 512).detach().clone().cuda()
triali = 0
T0 = time()
eva_BP, evc_BP, H_BP = hessian_compute(G, feat, ImDist, hessian_method="BP")
print("%.2f sec" % (time() - T0))  # 2135.00 sec
H_col = []
for EPS in [1E-6, 1E-5, 1E-4, 1E-3, 1E-2, 1E-1, ]:
    T0 = time()
    eva_FI, evc_FI, H_FI = hessian_compute(G, feat, ImDist, hessian_method="ForwardIter", EPS=EPS)
    print("%.2f sec" % (time() - T0))  # 325.83 sec
    print("EPS %.1e Correlation of Flattened Hessian matrix BP vs ForwardIter %.3f" % (EPS, np.corrcoef(H_BP.flatten(), H_FI.flatten())[0, 1]))
    H_col.append((eva_FI, evc_FI, H_FI))
T0 = time()
예제 #4
0
def shuffle_state_dict(SD, mask=lambda name: False):
    shuffled_SD = {}
    for name, Weight in SD.items():
        if mask(name):
            print("skip shuffling %s" % name)
            shuffled_SD[name] = Weight
            continue
        else:
            idx = torch.randperm(Weight.numel())
            W_shuf = Weight.view(-1)[idx].view(Weight.shape)
            shuffled_SD[name] = W_shuf
    return shuffled_SD


#%%
SGAN = loadStyleGAN2('ffhq-512-avg-tpurun1.pt')

#%%
shuffled_SD = shuffle_state_dict(SGAN.state_dict())
#%%
torch.save(shuffled_SD,
           join(datadir, "StyleGAN2_ffhq-512-avg-tpurun1_shuffle.pt"))
# print(name, Weight.shape, Weight.mean().item(), Weight.std().item())
#%%
SGAN_sf = loadStyleGAN2('ffhq-512-avg-tpurun1.pt')
SGAN_sf.load_state_dict(
    torch.load(join(datadir, "StyleGAN2_ffhq-512-avg-tpurun1_shuffle.pt")))
G_sf = StyleGAN2_wrapper(SGAN_sf)
#%%
img = G_sf.visualize(torch.randn(1, 512).cuda()).cpu()
ToPILImage()(img[0, :].cpu()).show()
예제 #5
0
import numpy as np
from numpy.linalg import norm
import matplotlib.pylab as plt
from time import time
from os.path import join
from imageio import imwrite, imsave
from torchvision.transforms import ToPILImage
from torchvision.utils import make_grid
rootdir = r"E:\OneDrive - Washington University in St. Louis\Hessian_summary"
figsumdir = r"E:\OneDrive - Washington University in St. Louis\Hessian_summary\Figure7"
"""Note the loading and visualization is mostly deterministic, reproducible."""
#%% StyleGAN2 Face 1024
Hessdir = join(rootdir, 'StyleGAN2')
modelnm = "stylegan2-ffhq-config-f"
modelsnm = "Face1024"
SGAN2 = loadStyleGAN2(modelnm+".pt")
SG2 = StyleGAN2_wrapper(SGAN2)
with np.load(join(Hessdir, "H_avg_%s.npz"%modelnm)) as data:
    eva_avg, evc_avg = data["eva_avg"], data["evc_avg"]#, data["feat_col"]
#%%
refvec = 0 * torch.randn(1, 512).cuda()
img = SG2.visualize(refvec)
ToPILImage()(make_grid(img).cpu()).show()
#%%
vis_eigen_frame(evc_avg, eva_avg, SG2, ref_code=refvec.cpu(), figdir=figsumdir, namestr="StyleGAN2_%s"%modelsnm, transpose=False,
                    eiglist=None, eig_rng=(0, 20), maxdist=0.0005, rown=5, sphere=False, )



#%%
from geometry_utils import LExpMap, SExpMap
예제 #6
0
)  #nargs="+"
parser.add_argument('--range', type=int, default=[0, 80], nargs="+")  #
args = parser.parse_args(
)  #['--modelname', "ffhq-256-config-e-003810", "--fixed", "True"])

if sys.platform == "linux":
    saveroot = r"/scratch/binxu/GAN_hessian/StyleGAN2"
else:
    saveroot = r"E:\Cluster_Backup\StyleGAN2"

modelname = args.modelname  # "model.ckpt-533504"  # 109 sec
label = modelname + ("_W" if args.wspace else "") \
                  + ("_fix" if args.fixed else "") \
                  + ("_ctrl" if args.shuffled else "")

SGAN = loadStyleGAN2(modelname + ".pt")
G = StyleGAN2_wrapper(SGAN)
if args.wspace: G.use_wspace(True)
if args.fixed: G.random = False
if args.shuffled:
    G.StyleGAN.load_state_dict(
        torch.load(join(ckpt_root, modelname + "_shuffle.pt")))
istr, iend = args.range
savedir = join(saveroot, label)
os.makedirs(savedir, exist_ok=True)
print(savedir)
for triali in range(istr, iend):
    feat = torch.randn(1, 512).detach().clone().cuda()
    T0 = time()
    eva_BP, evc_BP, H_BP = hessian_compute(
        G,
예제 #7
0
import torch.nn.functional as F
from torchvision.transforms import ToPILImage
from torchvision.utils import make_grid
sys.path.append("E:\Github_Projects\Visual_Neuro_InSilico_Exp")
sys.path.append("D:\Github\Visual_Neuro_InSilico_Exp")
import lpips
try:
    ImDist = lpips.LPIPS(net="squeeze").cuda()
except:
    ImDist = lpips.PerceptualLoss(net="squeeze").cuda()
from GAN_hessian_compute import hessian_compute
from GAN_utils import loadStyleGAN2, StyleGAN2_wrapper
rootdir = r"E:\Cluster_Backup\StyleGAN2"
#%% Configurations for different checkpoints
modelname = "stylegan2-cat-config-f"
SGAN = loadStyleGAN2(modelname+".pt", size=256, channel_multiplier=2)  #
modelname = "ffhq-256-config-e-003810"  # 109 sec
SGAN = loadStyleGAN2(modelname+".pt", size=256, channel_multiplier=1)  # 491 sec per BP
modelname = "ffhq-512-avg-tpurun1"
SGAN = loadStyleGAN2(modelname+".pt", size=512, channel_multiplier=2)
modelname = "stylegan2-ffhq-config-f"
SGAN = loadStyleGAN2(modelname+".pt", size=1024, channel_multiplier=2)  # 491 sec per BP
modelname = "2020-01-11-skylion-stylegan2-animeportraits"
SGAN = loadStyleGAN2(modelname+".pt", size=512, channel_multiplier=2)
modelname = "stylegan2-car-config-f"
SGAN = loadStyleGAN2(modelname+".pt", size=512, channel_multiplier=2)
modelname = "model.ckpt-533504"  # 109 sec
SGAN = loadStyleGAN2(modelname+".pt", size=512, channel_multiplier=2)
#%%
# for triali in range(1,16):
#     feat = 0.5 * torch.randn(1, 512).detach().clone().cuda()
예제 #8
0
                                "id", "cc", "logcc", "reg_slop", "reg_intcp",
                                "reg_log_slop", "reg_log_intcp", "H_cc",
                                "logH_cc"
                            ])
MSE_stat_tab.to_csv(join(savedir, "H_cmp_MSE_stat.csv"))
SSIM_stat_tab = pd.DataFrame(SSIM_stat_col,
                             columns=[
                                 "id", "cc", "logcc", "reg_slop", "reg_intcp",
                                 "reg_log_slop", "reg_log_intcp", "H_cc",
                                 "logH_cc"
                             ])
SSIM_stat_tab.to_csv(join(savedir, "H_cmp_SSIM_stat.csv"))
#%%
modelsnm = "Face256"
SGAN = loadStyleGAN2(
    "ffhq-256-config-e-003810.pt",
    size=256,
)
G = StyleGAN2_wrapper(SGAN, )
savedir = join(saveroot, "ImDist_cmp\\StyleGAN2\\Face256")
os.makedirs(savedir, exist_ok=True)
SSIM_stat_col = []
MSE_stat_col = []
for idx in range(100):
    refvec = G.sample_vector(1, device="cuda")  # 0.1 * torch.randn(1, 256)
    eigvals_PS, eigvects_PS, H_PS = hessian_compute(G,
                                                    refvec,
                                                    ImDist,
                                                    hessian_method="BP")
    eigvals_SSIM, eigvects_SSIM, H_SSIM = hessian_compute(G,
                                                          refvec,
                                                          D,
예제 #9
0
#%% """StyleGAN2"""
Hessdir = join(rootdir, 'StyleGAN2')
modellist = [
    "ffhq-256-config-e-003810", "ffhq-512-avg-tpurun1",
    "stylegan2-cat-config-f", "2020-01-11-skylion-stylegan2-animeportraits",
    "model.ckpt-533504", "stylegan2-ffhq-config-f", "stylegan2-car-config-f"
]
modelsnms = [
    "Face256", "Face512", "Cat256", "Anime", "ImageNet512", "Face1024",
    "Car512"
]
#%%
for modelnm, modelsnm in zip(modellist[6:], modelsnms[6:]):
    # modelnm, modelsnm = modellist[1], modelsnms[1]
    SGAN = loadStyleGAN2(modelnm + ".pt")  # , size=256
    SG = StyleGAN2_wrapper(SGAN)
    figdir = join(axesdir, "StyleGAN2", modelsnm)
    os.makedirs(figdir, exist_ok=True)
    data = np.load(
        join(Hessdir, "H_avg_%s.npz" % modelnm)
    )  #, H_avg=H_avg, eva_avg=eva_avg, evc_avg=evc_avg, feats=feat_col)
    H_avg = data["H_avg"]
    eva_avg = data["eva_avg"]
    evc_avg = data["evc_avg"]
    #%
    RND = np.random.randint(1E4)
    ref_codes = 0.7 * np.random.randn(8, 512)
    for eigidx in range(40):
        vis_eigen_action(evc_avg[:, -eigidx - 1],
                         ref_codes,
예제 #10
0
from glob import glob
import sys
import pandas as pd
import numpy as np
from hessian_analysis_tools import scan_hess_npz, plot_spectra, average_H, compute_hess_corr, plot_consistency_example
from hessian_axis_visualize import vis_eigen_explore, vis_eigen_action, vis_eigen_action_row, vis_eigen_explore_row
from GAN_utils import loadStyleGAN2, StyleGAN2_wrapper, loadBigGAN, BigGAN_wrapper
import matplotlib.pylab as plt
import matplotlib
summarydir = r"E:\OneDrive - Washington University in St. Louis\Hessian_summary"
#%%
dataroot = "E:\\Cluster_Backup\\StyleGAN2"
modelnm = "stylegan2-cat-config-f"
modelsnm = "Cat256"
SGAN = loadStyleGAN2(
    modelnm + ".pt",
    size=256,
)
SG = StyleGAN2_wrapper(SGAN, )
eigval_col, eigvec_col, feat_col, meta = scan_hess_npz(join(dataroot, modelnm),
                                                       "Hess_BP_(\d*).npz",
                                                       featkey="feat")
feat_col = np.array(feat_col).squeeze()
# H_avg, eva_avg, evc_avg = average_H(eigval_col, eigvec_col)
# np.savez(join(Hessdir, "H_avg_%s.npz"%modelnm), H_avg=H_avg, eva_avg=eva_avg, evc_avg=evc_avg, feats=feat_col)
#%%
vis_eigen_action_row(
    eigvec_col[0],
    feat_col[0, :],
    maxdist=120,
    rown=7,
)
예제 #11
0
import torch
import torch.optim as optim
import torch.nn.functional as F
from torchvision.transforms import ToPILImage, ToTensor
from hessian_eigenthings.power_iter import Operator, deflated_power_iteration
from hessian_eigenthings.lanczos import lanczos
from lanczos_generalized import lanczos_generalized
from GAN_hvp_operator import GANHVPOperator, GANForwardHVPOperator, compute_hessian_eigenthings, get_full_hessian
import sys
import numpy as np
import matplotlib.pylab as plt
from time import time
from os.path import join
from imageio import imwrite
from build_montages import build_montages, color_framed_montages
import torchvision.models as tv
from GAN_utils import loadStyleGAN2, StyleGAN2_wrapper, ckpt_root
g_ema = loadStyleGAN2("stylegan2-cat-config-f.pt")
G = StyleGAN2_wrapper(g_ema)
#%%
paramnum = 0
for name, param in g_ema.state_dict().items():
    paramnum += np.prod(param.shape)
for name, param in g_ema.state_dict().items():
    print(name, list(param.shape), "%.1f%%"%(100*np.prod(param.shape) / paramnum))
#%%
예제 #12
0
#%%
imgs_PCs = G.visualize_batch_np(-evc[:, -25:].T)
ToPILImage()(make_grid(imgs_PCs)).show()
#%%
corrmat1 = 1 - cdist(PCregaxes, evc[:, -25:].T, metric="correlation")
#%%
unitPCregaxes = PCregaxes / np.linalg.norm(PCregaxes, axis=1, keepdims=True)
#%%
proj_coef = unitPCregaxes @ evc[:,::-1]
plt.plot(proj_coef.T**2)
plt.show()
#%%
ccmat1 = abs(1 - cdist(unitPCregaxes, evc[:, -30:].T, metric="cosine"))
plt.figure()
plt.matshow(ccmat1,0)
plt.ylabel("Hessian eigenvector")
plt.xlabel("PC regress axes")
cbar = plt.colorbar()
cbar.ax.set_ylabel("abs(cosine)")
plt.show()
#%%
ccmat2 = 1 - cdist(PCWeiAvg, evc[:, -30:].T, metric="correlation")
#%%
#%%
SGAN = loadStyleGAN2()
G = StyleGAN2_wrapper(SGAN)