689 lines
2.3 MiB
Text
689 lines
2.3 MiB
Text
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"id": "51f5fba8-3371-420c-8aff-16044aa12789",
|
|||
|
"metadata": {
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# StyleGANS"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 14,
|
|||
|
"id": "cb59de49-aa65-4a3f-8f0c-412ff8580a27",
|
|||
|
"metadata": {
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import tqdm\n",
|
|||
|
"import json\n",
|
|||
|
"import os\n",
|
|||
|
"import tabulate\n",
|
|||
|
"from PIL import Image\n",
|
|||
|
"import gen_images\n",
|
|||
|
"import numpy as np"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 3,
|
|||
|
"id": "075abcd1-e8c8-47f6-b2e3-22e4817b0e38",
|
|||
|
"metadata": {
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"you are here: /scratch\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"print(\"you are here:\", os.getcwd())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 4,
|
|||
|
"id": "f12329dc-be24-4baa-b46b-7343e3d67c26",
|
|||
|
"metadata": {
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def get_training_options(run):\n",
|
|||
|
" rundir = os.path.join('training-runs', run)\n",
|
|||
|
" with open (os.path.join(rundir, 'training_options.json')) as fp:\n",
|
|||
|
" return json.load(fp)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 5,
|
|||
|
"id": "0e9ab3fb-d161-4032-af1b-48dd6bdb79f3",
|
|||
|
"metadata": {
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def preview_snapshot(run, snapshot, cols = 1, rows = 1):\n",
|
|||
|
" nr = snapshot[17:-4]\n",
|
|||
|
" file = os.path.join('training-runs', run, f\"fakes{nr}.png\")\n",
|
|||
|
" img = Image.open(file)\n",
|
|||
|
" training = get_training_options(run)\n",
|
|||
|
" return img.crop((0,0, training[\"training_set_kwargs\"][\"resolution\"] * cols, training[\"training_set_kwargs\"][\"resolution\"] * rows))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 6,
|
|||
|
"id": "6be5fd36-b938-4b3d-bdf6-5e7aecc66127",
|
|||
|
"metadata": {
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<table>\n",
|
|||
|
"<thead>\n",
|
|||
|
"<tr><th>run </th><th>latest_snapshot </th><th>dataset </th><th>conditional_dataset </th><th style=\"text-align: right;\"> resolution</th><th>gamma </th></tr>\n",
|
|||
|
"</thead>\n",
|
|||
|
"<tbody>\n",
|
|||
|
"<tr><td>00001-stylegan3-t--gpus1-batch32-gamma8.2</td><td>network-snapshot-002600.pkl</td><td>paris3 </td><td>True </td><td style=\"text-align: right;\"> 256</td><td>{'class_name': 'training.loss.StyleGAN2Loss', 'r1_gamma': 8.2} </td></tr>\n",
|
|||
|
"<tr><td>00002-stylegan3-t--gpus1-batch32-gamma2 </td><td>network-snapshot-006560.pkl</td><td>paris3 </td><td>True </td><td style=\"text-align: right;\"> 256</td><td>{'class_name': 'training.loss.StyleGAN2Loss', 'r1_gamma': 2.0} </td></tr>\n",
|
|||
|
"<tr><td>00003-stylegan3-r--gpus1-batch32-gamma2 </td><td>network-snapshot-022960.pkl</td><td>paris3 </td><td>True </td><td style=\"text-align: right;\"> 256</td><td>{'class_name': 'training.loss.StyleGAN2Loss', 'r1_gamma': 2.0, 'blur_init_sigma': 10, 'blur_fade_kimg': 200.0}</td></tr>\n",
|
|||
|
"</tbody>\n",
|
|||
|
"</table>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"'<table>\\n<thead>\\n<tr><th>run </th><th>latest_snapshot </th><th>dataset </th><th>conditional_dataset </th><th style=\"text-align: right;\"> resolution</th><th>gamma </th></tr>\\n</thead>\\n<tbody>\\n<tr><td>00001-stylegan3-t--gpus1-batch32-gamma8.2</td><td>network-snapshot-002600.pkl</td><td>paris3 </td><td>True </td><td style=\"text-align: right;\"> 256</td><td>{'class_name': 'training.loss.StyleGAN2Loss', 'r1_gamma': 8.2} </td></tr>\\n<tr><td>00002-stylegan3-t--gpus1-batch32-gamma2 </td><td>network-snapshot-006560.pkl</td><td>paris3 </td><td>True </td><td style=\"text-align: right;\"> 256</td><td>{'class_name': 'training.loss.StyleGAN2Loss', 'r1_gamma': 2.0} </td></tr>\\n<tr><td>00003-stylegan3-r--gpus1-batch32-gamma2 </td><td>network-snapshot-022960.pkl</td><td>paris3 </td><td>True </td><td style=\"text-align: right;\"> 256</td><td>{'class_name': 'training.loss.StyleGAN2Loss', 'r1_gamma': 2.0, 'blur_init_sigma': 10, 'blur_fade_kimg': 200.0}</td></tr>\\n</tbody>\\n</table>'"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 6,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# gather directories with trained networks\n",
|
|||
|
"\n",
|
|||
|
"run_dirs = sorted(os.listdir('training-runs'))\n",
|
|||
|
"runs = []\n",
|
|||
|
"for run in run_dirs:\n",
|
|||
|
" rundir = os.path.join('training-runs', run)\n",
|
|||
|
" snaps = [f for f in os.listdir(rundir) if f.startswith('network-snapshot')]\n",
|
|||
|
" snaps = sorted(snaps)\n",
|
|||
|
" if len(snaps) < 1:\n",
|
|||
|
" continue\n",
|
|||
|
" \n",
|
|||
|
" with open (os.path.join(rundir, 'training_options.json')) as fp:\n",
|
|||
|
" training = json.load(fp)\n",
|
|||
|
" \n",
|
|||
|
" \n",
|
|||
|
" fakes = sorted([f for f in os.listdir(rundir) if f.startswith('fake')])\n",
|
|||
|
" \n",
|
|||
|
" # if len(fakes):\n",
|
|||
|
" # img = Image.open(os.path.join(rundir, fakes[-2])) # last image is the _init.png\n",
|
|||
|
" # img = img.crop((0,0, training[\"training_set_kwargs\"][\"resolution\"], training[\"training_set_kwargs\"][\"resolution\"]))\n",
|
|||
|
" # #img.crop((training[\"training_set_kwargs\"][\"resolution\"], training[\"training_set_kwargs\"][\"resolution\"]))\n",
|
|||
|
" # else:\n",
|
|||
|
" # img = None\n",
|
|||
|
" \n",
|
|||
|
" runs.append({\n",
|
|||
|
" \"run\": run,\n",
|
|||
|
" \"latest_snapshot\": snaps[-1],\n",
|
|||
|
" \"dataset\": os.path.split(os.path.dirname(training[\"training_set_kwargs\"][\"path\"]))[1],\n",
|
|||
|
" \"conditional_dataset\": training[\"training_set_kwargs\"][\"use_labels\"],\n",
|
|||
|
" \"resolution\": training[\"training_set_kwargs\"][\"resolution\"],\n",
|
|||
|
" \"gamma\": training[\"loss_kwargs\"],\n",
|
|||
|
" # \"preview\": img.size\n",
|
|||
|
" })\n",
|
|||
|
"\n",
|
|||
|
"tabulate.tabulate(runs, tablefmt='html', headers=\"keys\", colalign=(\"left\",\"left\"))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"id": "d6c1da91-882b-4963-b908-50edef54265e",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Pick a run from above, and assign it to `run`."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 8,
|
|||
|
"id": "e0be04fd-ccd3-4bd0-8823-679f3fe26f45",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"run = \"00003-stylegan3-r--gpus1-batch32-gamma2\"\n",
|
|||
|
"snapshot = \"network-snapshot-022960.pkl\""
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 9,
|
|||
|
"id": "135353a2-f621-4634-b3b5-d768688c8513",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=768x512>"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 9,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"preview_snapshot(run,snapshot, 3, 2)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"id": "e23af7b5-567c-4748-a65a-96235eb2a59b",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# rerun this cell after changes to gen_images.py file\n",
|
|||
|
"import importlib\n",
|
|||
|
"importlib.reload(gen_images)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"id": "21b82834-a866-4058-9631-bd691b8c215f",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"for z, img, filename in gen_images.generate_images(\n",
|
|||
|
" f\"training-runs/{run}/{snapshot}\",\n",
|
|||
|
" gen_images.parse_range(\"0-2\"),\n",
|
|||
|
" \"out\",\n",
|
|||
|
" truncation_psi=1,\n",
|
|||
|
" class_idx=0\n",
|
|||
|
"):\n",
|
|||
|
" print(filename)\n",
|
|||
|
" display(img)\n",
|
|||
|
" img.save(filename)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 24,
|
|||
|
"id": "5c222012-4309-428c-ae55-ec1b6fecfbbf",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import torch\n",
|
|||
|
"import legacy\n",
|
|||
|
"import dnnlib\n",
|
|||
|
"device = torch.device('cuda')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 36,
|
|||
|
"id": "dfd92a04-cfe3-4124-b08d-d353551ed397",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"[0, 1, 2]\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"psi=1.0\n",
|
|||
|
"all_seeds = gen_images.parse_range(\"0-2\")\n",
|
|||
|
"class_idx = 0"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 65,
|
|||
|
"id": "9e5ba0a7-a909-4726-b90f-74d429ab9e8f",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# adapted from https://github.com/dvschultz/stylegan2-ada-pytorch/blob/9b6750b96dc9841816e8ac57b05f395d0f23c30d/generate.py\n",
|
|||
|
"\n",
|
|||
|
"def seeds_to_zs(G,seeds):\n",
|
|||
|
" zs = []\n",
|
|||
|
" for seed_idx, seed in enumerate(seeds):\n",
|
|||
|
" z = np.random.RandomState(seed).randn(1, G.z_dim)\n",
|
|||
|
" zs.append(z)\n",
|
|||
|
" return zs\n",
|
|||
|
"\n",
|
|||
|
"# slightly modified version of\n",
|
|||
|
"# https://github.com/PDillis/stylegan2-fun/blob/master/run_generator.py#L399\n",
|
|||
|
"def slerp(t, v0, v1, DOT_THRESHOLD=0.9995):\n",
|
|||
|
" '''\n",
|
|||
|
" Spherical linear interpolation\n",
|
|||
|
" Args:\n",
|
|||
|
" t (float/np.ndarray): Float value between 0.0 and 1.0\n",
|
|||
|
" v0 (np.ndarray): Starting vector\n",
|
|||
|
" v1 (np.ndarray): Final vector\n",
|
|||
|
" DOT_THRESHOLD (float): Threshold for considering the two vectors as\n",
|
|||
|
" colineal. Not recommended to alter this.\n",
|
|||
|
" Returns:\n",
|
|||
|
" v2 (np.ndarray): Interpolation vector between v0 and v1\n",
|
|||
|
" '''\n",
|
|||
|
" v0 = v0.cpu().detach().numpy()\n",
|
|||
|
" v1 = v1.cpu().detach().numpy()\n",
|
|||
|
" # Copy the vectors to reuse them later\n",
|
|||
|
" v0_copy = np.copy(v0)\n",
|
|||
|
" v1_copy = np.copy(v1)\n",
|
|||
|
" # Normalize the vectors to get the directions and angles\n",
|
|||
|
" v0 = v0 / np.linalg.norm(v0)\n",
|
|||
|
" v1 = v1 / np.linalg.norm(v1)\n",
|
|||
|
" # Dot product with the normalized vectors (can't use np.dot in W)\n",
|
|||
|
" dot = np.sum(v0 * v1)\n",
|
|||
|
" # If absolute value of dot product is almost 1, vectors are ~colineal, so use lerp\n",
|
|||
|
" if np.abs(dot) > DOT_THRESHOLD:\n",
|
|||
|
" return lerp(t, v0_copy, v1_copy)\n",
|
|||
|
" # Calculate initial angle between v0 and v1\n",
|
|||
|
" theta_0 = np.arccos(dot)\n",
|
|||
|
" sin_theta_0 = np.sin(theta_0)\n",
|
|||
|
" # Angle at timestep t\n",
|
|||
|
" theta_t = theta_0 * t\n",
|
|||
|
" sin_theta_t = np.sin(theta_t)\n",
|
|||
|
" # Finish the slerp algorithm\n",
|
|||
|
" s0 = np.sin(theta_0 - theta_t) / sin_theta_0\n",
|
|||
|
" s1 = sin_theta_t / sin_theta_0\n",
|
|||
|
" v2 = s0 * v0_copy + s1 * v1_copy\n",
|
|||
|
" return torch.from_numpy(v2).to(\"cuda\")\n",
|
|||
|
"\n",
|
|||
|
"def slerp_interpolate(zs, steps):\n",
|
|||
|
" out = []\n",
|
|||
|
" for i in range(len(zs)-1):\n",
|
|||
|
" for index in range(steps):\n",
|
|||
|
" fraction = index/float(steps)\n",
|
|||
|
" out.append(slerp(fraction,zs[i],zs[i+1]))\n",
|
|||
|
" return out\n",
|
|||
|
"\n",
|
|||
|
"def zs_to_ws(G,device,label,truncation_psi,zs):\n",
|
|||
|
" ws = []\n",
|
|||
|
" for z_idx, z in enumerate(zs):\n",
|
|||
|
" z = torch.from_numpy(z).to(device)\n",
|
|||
|
" w = G.mapping(z, label, truncation_psi=truncation_psi, truncation_cutoff=8)\n",
|
|||
|
" ws.append(w)\n",
|
|||
|
" return ws\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"def images(G,device,inputs,space,truncation_psi,label,noise_mode,outdir,start=None,stop=None):\n",
|
|||
|
" if(start is not None and stop is not None):\n",
|
|||
|
" tp = start\n",
|
|||
|
" tp_i = (stop-start)/len(inputs)\n",
|
|||
|
"\n",
|
|||
|
" for idx, i in enumerate(inputs):\n",
|
|||
|
" # print('Generating image for frame %d/%d ...' % (idx, len(inputs)))\n",
|
|||
|
" \n",
|
|||
|
" if (space=='z'):\n",
|
|||
|
" z = torch.from_numpy(i).to(device)\n",
|
|||
|
" if(start is not None and stop is not None):\n",
|
|||
|
" img = G(z, label, truncation_psi=tp, noise_mode=noise_mode)\n",
|
|||
|
" tp = tp+tp_i\n",
|
|||
|
" else:\n",
|
|||
|
" img = G(z, label, truncation_psi=truncation_psi, noise_mode=noise_mode)\n",
|
|||
|
" else:\n",
|
|||
|
" if len(i.shape) == 2: \n",
|
|||
|
" i = torch.from_numpy(i).unsqueeze(0).to(device)\n",
|
|||
|
" img = G.synthesis(i, noise_mode=noise_mode, force_fp32=True)\n",
|
|||
|
" img = (img.permute(0, 2, 3, 1) * 127.5 + 128).clamp(0, 255).to(torch.uint8)\n",
|
|||
|
" yield f\"{idx:04d}\", Image.fromarray(img[0].cpu().numpy(), 'RGB')\n",
|
|||
|
"\n",
|
|||
|
"def interpolate(G,device,projected_w,seeds,random_seed,space,truncation_psi,label,frames,noise_mode,outdir,interpolation,\n",
|
|||
|
" easing, diameter, start=None,stop=None):\n",
|
|||
|
" if(interpolation=='noiseloop' or interpolation=='circularloop'):\n",
|
|||
|
" if seeds is not None:\n",
|
|||
|
" print(f'Warning: interpolation type: \"{interpolation}\" doesn’t support set seeds.')\n",
|
|||
|
"\n",
|
|||
|
" if(interpolation=='noiseloop'):\n",
|
|||
|
" points = noiseloop(frames, diameter, random_seed)\n",
|
|||
|
" elif(interpolation=='circularloop'):\n",
|
|||
|
" points = circularloop(frames, diameter, random_seed, seeds)\n",
|
|||
|
"\n",
|
|||
|
" else:\n",
|
|||
|
" if projected_w is not None:\n",
|
|||
|
" points = np.load(projected_w)['w']\n",
|
|||
|
" else:\n",
|
|||
|
" # get zs from seeds\n",
|
|||
|
" points = seeds_to_zs(G,seeds) \n",
|
|||
|
" # convert to ws\n",
|
|||
|
" if(space=='w'):\n",
|
|||
|
" points = zs_to_ws(G,device,label,truncation_psi,points)\n",
|
|||
|
"\n",
|
|||
|
" # get interpolation points\n",
|
|||
|
" if(interpolation=='linear'):\n",
|
|||
|
" points = line_interpolate(points,frames,easing)\n",
|
|||
|
" elif(interpolation=='slerp'):\n",
|
|||
|
" points = slerp_interpolate(points,frames)\n",
|
|||
|
" \n",
|
|||
|
" # generate frames\n",
|
|||
|
" for idx, img in images(G,device,points,space,truncation_psi,label,noise_mode,outdir,start,stop):\n",
|
|||
|
" yield idx, img"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 26,
|
|||
|
"id": "6f6ac121-a70b-4a00-a65b-012fcad41562",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"with dnnlib.util.open_url(f\"training-runs/{run}/{snapshot}\") as f:\n",
|
|||
|
" G = legacy.load_network_pkl(f)['G_ema'].to(device) # type: ignore\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 32,
|
|||
|
"id": "7bde610e-7ee9-4bfa-96ef-e480e2bb7d4a",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Labels.\n",
|
|||
|
"label = torch.zeros([1, G.c_dim], device=device)\n",
|
|||
|
"if G.c_dim != 0:\n",
|
|||
|
" if class_idx is None:\n",
|
|||
|
" raise click.ClickException('Must specify class label with --class when using a conditional network')\n",
|
|||
|
" label[:, class_idx] = 1\n",
|
|||
|
"else:\n",
|
|||
|
" if class_idx is not None:\n",
|
|||
|
" print ('warn: --class=lbl ignored when running on an unconditional network')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 67,
|
|||
|
"id": "7e13e060-f717-4548-8b44-16de6c272836",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"interpoliting images\n",
|
|||
|
"0000\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0001\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0002\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0003\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAEAAElEQVR4nHz96bNtV5IfhmXmGvZwxju+ecBQKFRV19TV1aLIpppWSLSDDpEO+bP13aE/zHZYclhyMEizOSvY7G72QFZ3VVcBKAAPwJvvdMY9rLUy/SHX3ue+alkXwMN755177t575fjLX2bi7votEQEgEiGiCIgws4gIACAiESEh6OsyvA6QEjMnay0ICIAAsIgl0+y3iJBCeP7yVWK5c+/u//Q//3/+5b/4l9/66KO3FxcPHjwQkaurq9PT0xBCDOH4+LjvQ1H4FOPF5aX3Psb0/vvv//3/w/++bVpf+LZpQ9998fkXL1+93O12b96+9c7df/Dgs08/Oz8/+/SzX//+7//+arWKIfybf/Nv/i//3X/3+OH9P/iDP/i7v/d3nz37cjqp79698+vPfv1//m//2xCDtZbIICIisggAECEnNtYAIABcvHm93zePHj9umqYsi7dv3wjL0XLpCy8iIAJICJAfAiHk56HfDcIMAMLCnAAAQQAQEQQwxuiLYrPd/uqXv/zwWx9ud+29+/cQcL262W7WZMyjR4+7riOimNJ0Mvn5z3/+6vXr3/mdn/zFf/zZD374I0LsY/x//Y//49//+//1P/+X//qf/JN/8v0f/GC1Wh2fnHz99Tc/+clvv3792jvnrO1jrIrCGNrvG+f9//W//+83m+1yedS0zfHx8f/j//5/+9M/+qOf/OS3r64uZ/P55eXly5evjo6Onj17VhbFZDrtun42nTBzu9+fHC3v37v7X//9v39yekaIb968IUN1PfFFKSIiYowhYwAgMQOAdU6fLQIgjr8FQMz/AgEAgECKwhxC3zZN34e2bRKL974oy7quvfdEBESgz1xEQPRTQQQAmBkJu7Z78eL5bDZfLJd91wFi07brm2trzP/3n/2Bs2Y+m8UYkej8/DyGkGKMKW13+9/56U8fPnm63mydIYsihpBZ+q611iGRigUACgACICEC6uEDDKeNgIiEJCKjAoAICwOAMYZTapomJCYyzIyIMSVEdM5NJ5NXL1+9ePHCe390dFTXk93+7eXV1QcfvP/28so6JwLOu7qq2qaJIRwdH62ur//Vv/7XbbP/4IMPnHWz6fTNq5d3zs/7GIqiaJpmNpt98P772+3WGIoxCLN1LsZorU2JEzOSHgWIMKLR2xjuRW8QEICMIUMswCLM3Owb510fgrHWGCPCIoKUdQABebh1PSD9WDJERCLMzKoszKnruu12u93v9RvrunbOCbN3jogoS4pAtjMsAF3XdV0PiNa6/W57dHw8nc1CCGjMnbv35rNZ27TTemKNefTw4eXbt5/86ldPnz49Ozt7+/btbDbdbrdlWa6ur7/86usf/PCHfddfXV4aovVm0zRN07Z37t4LMQGa6WxW1vWjhw9jiH3oAalr288/++R6tXJFsd03xW5feFeWZYzRew+DCVBt16MHRGYhlfAsrQD6/+HRg6RsLIgQwBelLysQFpbEvN/v+q6/ub5mZu+98957r88HVRlAfxiwiBFUSYPhalB/M3zln5jtEY+vI6L3Lv+ViL2+uS7LsigKBEAEg5BYAEBAAAkREVA9ADIAoIB6A8l3ImoE8/ELszGm8EXTNGVZVsYm5n3TlFXFnCZ13ff9OiXrbFmWIOCdK6tyNpt98/x50zTWkLNudbMyxtzc3DhrYwjffPWsnkzPzs42mzWL1JNaROqqZmEic3x8/Mknv3r1+s3lj3706OHD5XLZNe3p6enDR49evnheFEUfAjMT0XAuw80N2pxvRgSI1BkC5pNbLJbGUFVVrEIpQEQpJURUuR6fghr74ZEAgKSUVPNF2BhT1zUSuaJ8+eIFCxNZQmIUVXXVTEIkVG1AY0zbdSFGIvrrX/71l1988a2PPnr//feJjDVmUtebzabvu7Is7t69++mnn1ZV9fd+//c3m816vT45OU2xn8/ndT25vr66vLwU5q5tX79+ySnudru2629uVleXV5989ulsNmfm169fl0U5nc6KoowpHR0f37t3P4X++OTUOB9jRBBrbd/3RJRydKD3fMuYgIhkO5ANAzMigmB+NtkhZDsBwsDMIkRknZsXJQBAipy477u+79tmv1kFMsY5633hnDPWIBIwA0Lfdzic6XCGAgIszMx4eJGH4xMRUWEQyEdnT05OY0opJSLq+x4ADBESERHKcBdJhqtWcwkgIIjCgKqZozYAWGuRiFO6d+/efLFc73aIdO/unePj4+XR8SefflpPJh98+GGMKYSwXq/aL591XbdYLIwxXd9PQLquZebV6mY2nb158zqG0Hbd5eXl/Qf3r6+uP/744y+/+Nx5f3Nz86Mf//ivfv4LAEwx/uIXv1guFu+9997Rycnp6ekvfv5X1rrjk5M3b96os2ZmBFEvrGEJiuAYvQDg8IA02mHhelITEYsYYxBR1OAJa2Q4HqUMFkEGf68eX8+GWQAYEFHEWquq1bZdH3pCCiG2XVeWpcafMAgLEbVtpy7bFVVRlvPF8tlXf1mVpbPWWrtarW9Wq/Vq5Zy7urx68vjhzfVVVdWIZAivV+vIvFgsi6I8PTsTgKIsi7a01p2enTFzYnHee18AwL27d/uu++STT5bLo/V6/fDhA0Dcb7eh79bb3X8zmx0fLa01Xz97Zp1TIRu1/Z0vfYgwmhm1ygAoWSnklgJoUGQM6QcmHgNLsrZ0tpxMIKWUUt/3bduu1ythsc465621lVoNOFh3AMiCziTCMES5eqac8rEO9kt9ONkksNluq6oCQOs8iKQUOUQAMcZYaxEFNfzJHoazGggzszUOSJg5az4iM4cYjbUxpq4PxtrlYjEpixT7B/fOHz58kGLs+n63b5xz1rndft91fV2VbbN/8vixc67v+3oyffj4yenxsS+8te7nP//F1dXVdDrdbDfG0M1qvd1uYkz379//q7/6+dX1NRIdHR+Hvt81+zvnp1VRrG9uYoxV8bQsCu8ciBgijeWG81PFFbVL+hoCCDMCiggCXFxe1lU1mdSDD0EWhtF6gOg3qpsUAUQSkZQSIabE2agbo+o3pFWEiGRIWISYmfsQfFEAkh5k4qSH1LatIbPf7d//4MPTk5OT07O/+vnP33v6ZN80T54+PTk+/rM///Oiqr/55pvZdLrZ7iaTCbN0XRurMnHqu+C9J0OTyUQNXFmWxphJPXl7cdE27dXV1XtP33v+/PnFxQUzg8CrVy9D3//g+7+1Xq/bpt1ut/P5bLNZ73a7+/fubra746Nl3/fOFwIyhDeD/YAhNB60YQx9RpE/SD8AMI9uYzStaoUABBg0rDTWVtZWdc0phhDbtmma/X6/d9bVdTWpJ2Qsi3BiY4wIsIhwYpbBA6jZYmZWcz46cBEBBBLm6+vrGJOIhBBYBMlY56xzxtjhfTikI0wABIAiKcbQdyKctQoAkIwxKXEMAQBuVqvNZh36/urqsiyLyXR2cnL6ve99d1JXHHuLwqHj0J0eLd978mg2qY8W85OT49ls8vTJExYBpNevXy8Wy3o6CzF+9NGH3tmzs7Nf/PUvZ/PZe++9P53Nfv6LX2y3O0Lsu65tmp///K82m83N9dU333z9t/7W3zo/P7PWNE1DRBp2EuVILUfb2eSnbEVYRCTGOAZHMYS+7xCRU4oxMqd82uoh8n88gAYynujgNAgQNUFMKaXEmmIxC4LaJyRjrLHWWjVaAoDZimKMMabUNPuXL1/udruLiwsRNtatN9s//Hf/7uLyYjad9n1/c3Mzm02/+eaboqwuLi83m816u10eHT949JCFLy4vnz37ypIRkZvVSoY8TYRX19ccw9npyWq1Knzx5OmT7//W9+/dv3+zWiVOxtrpZKJBtspGSimm1PU95kg/J1CDLxhF+yDuv+kibn/h4S8l22lhZmCBHHpobJNNOCI57+aLxfmdOw8ePFweHQGAMYYQUkqAkDgNAQurlKeUEAcXIAyDfRmdPQLYPvRd27VtM5nUIQT1KCCCiExCmnywEKEKR4zRGOOsBU4IQAghxpSicw6EEYgQuq4LfXj96tW
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0004\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0005\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0006\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0007\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAEAAElEQVR4nJz9d7BtWXofhn3finvvk29+777QL3cO0z09AdMzgxlgQBMCs6wyaZEiSNGWaZEuls2yLRVZcpGqskyIsmVTtGhQ5SqJZhIAgkOQyMDMYHowPdPTOb1+Odx874k7rPT5j7X3uee+bqhKOu+9+849ca+1vvj7Ev7lv/BnfQjWGAYUvL94+dKtW7cZYz/9Uz/5uRc/Y6uiyGf9wdLq4y8AMABwW9dfe+u9SeX/9n/6n37pi5//2//534HZCLSCooAQABC8Ax8AiAgAgAAAAAEAEREBEQCIiIiCD/FFiIDIAOLriQIF7wGIcyY4BwQIwTlvnU3bnW9/6zuDpaWNjXWVtv6Pf/Nv/Ytf+bVAUFaVMRUASKlms9kzzzz95/7s/xIBvPe/8Zu//d1XX11bXdVKMsak4EpKIppOxv/On/oTzzxx9f7dOxtra8vLS+1W1m5lidZ5nvcHfR+CELLb6WRZWpUVAhIQEPkQKAQh+P0HD/b29tbW1rIk4Qh7e3vWh7eu3/obf+v/prNWURnG2GQ6HfR6ZVkiYvBOJ8lsNgNAqSRDnE1nSisiQIQQAgBonVjngvdKSUAkAiLinPsQKBARaa2Cc1cunPt//Z2/FcrZ+uoqMJa12pW1RVF2ux0kstYxzhDq3RZSSKVneT4ajaSUs9mMQmi1WsPR2Afa2z9498Pr5y9eUq3uv/jmvyIi70NVVVVV5XlhrSXAvb29a088/uJnXui0Wtdv3v6FX/iFXq+PAOPJxDvHGGOINz++/pf+wp/7G3/9r6WcRkdHD7a3z58/f+rUxuToqNPvQwiALAQffCAAZPFNOKcOAgKK14uIAMiAMQCASEbNyxbuEgACAhABAiQJIAOdFjs7f+5n//2k1fnG13/8a198+cN339rd2zfO7+7u9Hu9JGt/9Wtf37x2bfbwPmeMAITWqigrAGQMJ+PRt373d5eWV8j7hw8eTK5d2dvZPrW2trp5GsCCmYEx3331VZ62jTWT6VRrBSDIeUQLyCL1xitepH4ApHqJzSIoPhf/QyJAJEAEouY9kUfi0xBJxFkHgHF/KASlkyTLJtPpYGlFaB03VEo5cM768GB7V3HmCSazfGl5WUgZCJIkbWVZkuh2uzUej3mSrW2e3d3bCwDdblcrmaapVqqyVkgFzmqthRDBB+9cPKHIuRQC52x9faPVavf7PWdtsHZ5ackTrR1NdZJWxhZ5ESgopWZ5wTk31gKCy0tgnEKw1iGiTlMiirvFuCAiY4zznojQMQAsylIpqRCD90VeEJGzRmulEz2bTnuJBIQQQgiht7zcMdaaylRVCIFqgYOA6H3gIVjr8jzPssxaS0TO+xDIOd9qt9fX1ghgaXlZCDk8GiqtrQ+V9XlZlWVpjR2Nx49fe/wLn//8yvIyse/ks9xZF4VX8D6EUFVlfzD443/sj+WzadZrM8444wAEjCFjNQGEAA15N7RPCLVgwTmFz0kknjo2ZEShpvia+JtXU/BVxTkDQJCyKgslRbuVMYS9vd07t2/96T/9p4XS29vb169fn+XFO2+/2e91W92uyWdKa6GUDgScYa/dtqZcWlo6HI7GoxEQXX7iicuPndve3nrn9ddtoMrYg/19JdVkd+/tDz4+vbkJRADWey8YAxblTeRLQkA6wbO1CjheUgBEhkjz5+b/ERAwRkTxtbXqiB/G5jcEoEsXLiIiIGiVAIBUqtfrjkfjdqeztr4x6Hamed7udAZLK2c2TwNRlmVpmggh0iRZWsrTdge5ZEJGiRSIopy1xpZlaZ1jjLeyzDnnQ4CaI2sOcNZJrTc2NgBxXB467xhDZ/1weCSkIMack8Y4a2zWypxzxhoA1Eo5Z611UkpEKMsKmz0iAsYY54woUi/zwadpAkSccSDq9bpZlmVpGkLIspaxjhIZAgVAQAbOh0gxUUYgYiNiERkRTadTF6Uvsul0IpUmokAkhOj3+6PJuJOl+/sHP/zBDzdObQxHY2NMWZZFXjDG9g8OsiyTUh4eDVeWl0ajUZokjCEieu/7vd5sOvnaj3/16uWLN957q/fkNUTknAcfABEZA6qlNQIwNj/ShhjmZA1zsgYgAgpAx/ZCY0rUf2rKYQgIXAhIUvAemO4PBv1e11r7/d//vp8OX3z+eXXuSQB+euPq6eefhxC23n336HC/tdSnGZmqEmmaSMFtheSqQbdbVlWvnX322ac+/+Jz1dHeq69+77Ufvp5kbZUk01kuhFRSfus733FMtrLMew9AQgiQAhhCCEAIjEE4sahFHmhWSACEc+au96ORCcSiBRX5A6kxkjgHhlHSa6WL2fT555997rnn3n7nvV6/B8istWVR5HmeJMnzzz13emMtL8pvfevb21tbREQhtDuddrvVbmVlkuzt7b7y5Ve0klmabm6eDkQYyAcqK+O8R0Rn3WyWt1ttJcWcRevrpfoQnPecMUAWCAjQWMu40Eq3k2QwGJRlNRqPAVExLpUCQGtNItNWi+dFETl2vh1R9hGR0lpKaa2TSsX90okuCgpExhgAKPK88+xTq2trw52Hy6tr3ljG+e7+PhD0el3GOTLOBI9MEIUGAVbGcM4pRLIna6zznij4AN47U1XeVkcH+3fu3BmPx4HCeDxJ01Rwzpg01kzGI4Y4mU2lFJwxIYQUAgAcc4wx7/25M5tLg8F+r0dEiU6klN574FwpDYxhoz+PBR0yQDxB8ZEB6jvHj9RsXAtDWJCrBIyBd0VRpK0WIANASBIpVWXL0Wj01tvvPPP4VQBev9xaGI1PPf4ETKdgjOCMCyGcqUZHhwd7u5126+WXX/7GT3y93+221td++Du//fP/8L8RSn/tJ76xeebMNC9u3LxdFPn+7s7m6dO63fvo4xuj0QgAIE1rY4YzsPZ4SdCIdyBsCKexjQISQdR8FMk+bkKjEOr3IhGFEBhn9UZ438g1Ojo8MkX+2Rc/8+FH17VSB4eHUkoELItiPB6lafLg4cPl5eUQwtHRkXeWMba3t6uUSrQiotlsBiHYMvfWEIH3gSE674LxznsCQIaVMZUxSaI5F4h4LP+9Q8YC0f7efpokUnBEZl0oKnP27DlkbH9vvzTGex8IBv1+IJrNZgSglDZVVVVGCBHtkCjbaqpgGOlmNitarRbjrCzLJEkQuRRyOBoKztM0cdYaY/v9wYNbNypjGRd5XgyPhjpJer0eEzISfaSyuWXtrA3BO85MVTGGzvtARAQhBMYQiBCIIUilOOeMeLfb1UoZawFRSpW1Wq12W+mkuHdPJ5oxVlZlt9NhDo0xVVXevXt3MpksDQZpkgQCLkQgAsa5EIAIJwQ4HtN6rbXmJN0oMQBg0NjVnypMa9EJAGVVJbMZag26Au/TNJnlxbPPPH1qqdvtdo5f7P1wf68/GECawmxmqgqqSty8/pHg7Jmnnvqjf+Tf2jx9urO2ZkfD8uDwzPmLH9249ZM/+Y2VU6cgSe5/eH1/d8eUxcsvPP+lL37x9Xc/+Oj6x0dHR2E4ZK0UqhK8B2uB8/ml1f+odguw2YD6N3bM+3BMAlj7Bgw51HYsMAAAhsAYJ+cY45zz4H1VVSvLy1/43Mv/3T/+J845rTTjjDEmrZxNpxBZx3uGWJZFp91GgOHhIec8a2Xeudksn01GCJve+xB8CBgCWmMZQ4bgnUPAEDwiIuNcSGRY8yhR8Dz+mue5qaputwuMDycT71zW7gohgDEhRAjEGboQOp1OZYxSioistYxzqVQIARmjQASE0ejhnDPGhWDcEVCWZUC0troqpPzow48G/T4ipmliKrO9vV1W5c7uTm8w2Dh1ajqbzmYTKUWU7jiXkwhItTXEOQOgqD8jP3vngTHOBReSMcYY10kCRIwzzljCtPfeGuN8QESlVAiUZhkABALGOfNMKcUYs9YkSfrKK6+0263tOzfAlv3BoMFAyHvP5lRB0eoHYHgsyGt3gI7vn6RxWOCeT1I/KJWmWSDigcAY4Jxz4QMxzgHZBx99dPHZZ8H7ajx68803b966/dhH19c2Ns6dPZu22xC
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0008\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0009\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<PIL.Image.Image image mode=RGB size=256x256>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"print(\"interpoliting images\")\n",
|
|||
|
"for idx, img in interpolate(G,device, None, all_seeds,None,'w',psi,label,5,'const','out/test','slerp',None, None):\n",
|
|||
|
" print(idx)\n",
|
|||
|
" display(img)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"id": "fe33e5cd-659e-4e2a-92e8-22bc4a8677ac",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": []
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 34,
|
|||
|
"id": "f67309c9-fab0-48bc-b65c-28975a214be6",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"ename": "AssertionError",
|
|||
|
"evalue": "Wrong number of dimensions: got 3, expected 2",
|
|||
|
"output_type": "error",
|
|||
|
"traceback": [
|
|||
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|||
|
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)",
|
|||
|
"\u001b[0;32m/tmp/ipykernel_1/891832376.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mzs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_numpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRandomState\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseed\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mG\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mz_dim\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mseed\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mall_seeds\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mws\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mG\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmapping\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mz\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mzs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtruncation_psi\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpsi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mG\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msynthesis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mws\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# warm up\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mws\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mws\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid_h\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrid_w\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_keyframes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mws\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|||
|
"\u001b[0;32m/opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1054\u001b[0m if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks\n\u001b[1;32m 1055\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1056\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1057\u001b[0m \u001b[0;31m# Do not call functions when jit is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1058\u001b[0m \u001b[0mfull_backward_hooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnon_full_backward_hooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|||
|
"\u001b[0;32m<string>\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, z, c, truncation_psi, truncation_cutoff, update_emas)\u001b[0m\n",
|
|||
|
"\u001b[0;32m~/torch_utils/misc.py\u001b[0m in \u001b[0;36massert_shape\u001b[0;34m(tensor, ref_shape)\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0massert_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtensor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mref_shape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtensor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mref_shape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 84\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mAssertionError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Wrong number of dimensions: got {tensor.ndim}, expected {len(ref_shape)}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 85\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mref_size\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtensor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mref_shape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mref_size\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|||
|
"\u001b[0;31mAssertionError\u001b[0m: Wrong number of dimensions: got 3, expected 2"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"zs = torch.from_numpy(np.stack([np.random.RandomState(seed).randn(G.z_dim) for seed in all_seeds])).to(device)\n",
|
|||
|
"\n",
|
|||
|
"ws = G.mapping(z=zs, c=label, truncation_psi=psi)\n",
|
|||
|
"_ = G.synthesis(ws[:1]) # warm up\n",
|
|||
|
"ws = ws.reshape(grid_h, grid_w, num_keyframes, *ws.shape[1:])\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"id": "83164a5d-b87a-44c7-9acf-e7eda6742a90",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"\n",
|
|||
|
"# Interpolation.\n",
|
|||
|
"grid = []\n",
|
|||
|
"for yi in range(grid_h):\n",
|
|||
|
" row = []\n",
|
|||
|
" for xi in range(grid_w):\n",
|
|||
|
" x = np.arange(-num_keyframes * wraps, num_keyframes * (wraps + 1))\n",
|
|||
|
" y = np.tile(ws[yi][xi].cpu().numpy(), [wraps * 2 + 1, 1, 1])\n",
|
|||
|
" interp = scipy.interpolate.interp1d(x, y, kind=kind, axis=0)\n",
|
|||
|
" row.append(interp)\n",
|
|||
|
" grid.append(row)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"id": "b8a40b98-86cc-4fe2-b91c-b3978a0d4024",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"!pbaylies_projector.py"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "paris-stylegan3",
|
|||
|
"language": "python",
|
|||
|
"name": "paris-stylegan3"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.8.10"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 5
|
|||
|
}
|