From d09d0ea4c2fae8e4341f89d3a616d35d0fb0c518 Mon Sep 17 00:00:00 2001 From: Jason Antic Date: Sun, 24 Mar 2019 01:55:32 -0700 Subject: [PATCH] Getting rid of unused code and generally cleaning up --- .gitignore | 6 + ...ingNew.ipynb => ColorizeTrainingDeep.ipynb | 639 +++++---- ...ng.ipynb => ColorizeTrainingDeepWide.ipynb | 1150 +++++++++-------- ColorizeTrainingWide.ipynb | 72 +- ImageColorizer.ipynb | 361 +++--- VideoColorizer.ipynb | 63 +- VideoColorizerColab.ipynb | 2 +- fasterai/critics.py | 21 - fasterai/generators.py | 64 +- fasterai/loss.py | 108 +- fasterai/visualize.py | 15 +- test_images/LittleAirplane1934.jpg | 4 +- test_images/ParisWomenFurs1920s.jpg | 4 +- 13 files changed, 1366 insertions(+), 1143 deletions(-) rename ColorizeTrainingNew.ipynb => ColorizeTrainingDeep.ipynb (65%) rename ColorizeTraining.ipynb => ColorizeTrainingDeepWide.ipynb (52%) diff --git a/.gitignore b/.gitignore index 3489b1a..cb23798 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,9 @@ fasterai/fastai fastai *.pth video +test_images/James1.jpg +test_images/James2.jpg +test_images/James3.jpg +test_images/James4.jpg +test_images/James5.jpg +test_images/James6.jpg diff --git a/ColorizeTrainingNew.ipynb b/ColorizeTrainingDeep.ipynb similarity index 65% rename from ColorizeTrainingNew.ipynb rename to ColorizeTrainingDeep.ipynb index 669921e..96148c1 100644 --- a/ColorizeTrainingNew.ipynb +++ b/ColorizeTrainingDeep.ipynb @@ -14,7 +14,7 @@ "outputs": [], "source": [ "import os\n", - "os.environ['CUDA_VISIBLE_DEVICES']='2' " + "os.environ['CUDA_VISIBLE_DEVICES']='0' " ] }, { @@ -26,11 +26,10 @@ "import fastai\n", "from fastai import *\n", "from fastai.vision import *\n", - "from fastai.callbacks import *\n", + "from fastai.callbacks.tensorboard import *\n", "from fastai.vision.gan import *\n", "from fasterai.generators import *\n", "from fasterai.critics import *\n", - "from fasterai.tensorboard import *\n", "from fasterai.dataset import *\n", "from fasterai.loss import *\n", "from PIL import Image, ImageDraw, ImageFont\n", @@ -54,14 +53,14 @@ "path_hr = path\n", "path_lr = path/'bandw'\n", "\n", - "proj_id = 'ColorizeNew11'\n", + "proj_id = 'ColorizeNew72'\n", "gen_name = proj_id + '_gen'\n", "crit_name = proj_id + '_crit'\n", "\n", "name_gen = proj_id + '_image_gen'\n", "path_gen = path/name_gen\n", "\n", - "TENSORBOARD_PATH = Path('data/tensorboard/' + proj_id )\n", + "TENSORBOARD_PATH = Path('data/tensorboard/' + proj_id)\n", "\n", "nf_factor = 1.25" ] @@ -72,7 +71,9 @@ "metadata": {}, "outputs": [], "source": [ - "loss_gen = FeatureLoss()" + "def save_all(suffix=''):\n", + " learn_gen.save(gen_name + str(sz) + suffix)\n", + " learn_crit.save(crit_name + str(sz) + suffix)" ] }, { @@ -81,20 +82,9 @@ "metadata": {}, "outputs": [], "source": [ - "def save_all():\n", - " learn_gen.save(gen_name + str(sz))\n", - " learn_crit.save(crit_name + str(sz))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def load_all():\n", - " learn_gen.load(gen_name + str(sz))\n", - " learn_crit.load(crit_name + str(sz))" + "def load_all(suffix=''):\n", + " learn_gen.load(gen_name + str(sz) + suffix, with_opt=False)\n", + " learn_crit.load(crit_name + str(sz) + suffix, with_opt=False)" ] }, { @@ -115,7 +105,7 @@ "outputs": [], "source": [ "def get_crit_data(classes, bs, sz):\n", - " src = ImageItemList.from_folder(path, include=classes, recurse=True).random_split_by_pct(0.1, seed=42)\n", + " src = ImageList.from_folder(path, include=classes, recurse=True).random_split_by_pct(0.1, seed=42)\n", " ll = src.label_from_folder(classes=classes)\n", " data = (ll.transform(get_transforms(max_zoom=2.), size=sz)\n", " .databunch(bs=bs).normalize(imagenet_stats))\n", @@ -152,6 +142,20 @@ " i += 1" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def save_gen_images(learn_gen):\n", + " if path_gen.exists(): shutil.rmtree(path_gen)\n", + " path_gen.mkdir(exist_ok=True)\n", + " data_gen = get_data(bs=bs, sz=sz, keep_pct=0.085)\n", + " save_preds(data_gen.fix_dl)\n", + " PIL.Image.open(path_gen.ls()[0])" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -187,7 +191,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Pre-train generator" + "# Pre-training" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pre-train generator" ] }, { @@ -197,22 +208,15 @@ "Now let's pretrain the generator." ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 128px" - ] - }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "bs=32\n", - "sz=128\n", - "keep_pct=0.1" + "bs=128\n", + "sz=64\n", + "keep_pct=1.0" ] }, { @@ -230,7 +234,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen = colorize_gen_learner(data=data_gen, gen_loss=loss_gen, nf_factor=nf_factor)" + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor)" ] }, { @@ -248,7 +252,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.fit_one_cycle(8, pct_start=0.8)" + "learn_gen.fit_one_cycle(2, pct_start=0.8, max_lr=slice(1e-3))" ] }, { @@ -260,6 +264,15 @@ "learn_gen.save(gen_name)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.load(gen_name, with_opt=False)" + ] + }, { "cell_type": "code", "execution_count": null, @@ -275,7 +288,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.load(gen_name)" + "learn_gen.fit_one_cycle(2, pct_start=0.01, max_lr=slice(3e-7, 3e-4))" ] }, { @@ -284,7 +297,92 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.fit_one_cycle(8, slice(1e-6,1e-3))" + "learn_gen.save(gen_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=32\n", + "sz=128\n", + "keep_pct=1.0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.data = get_data(sz=sz, bs=bs, keep_pct=keep_pct)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.unfreeze()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.fit_one_cycle(2, pct_start=0.01, max_lr=slice(1e-7,1e-4))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.save(gen_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=16\n", + "sz=192\n", + "keep_pct=0.50" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.data = get_data(sz=sz, bs=bs, keep_pct=keep_pct)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.unfreeze()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.fit_one_cycle(1, pct_start=0.01, max_lr=slice(5e-8,5e-5))" ] }, { @@ -300,7 +398,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Save generated images" + "### Save generated images" ] }, { @@ -309,50 +407,14 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.load(gen_name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# shutil.rmtree(path_gen)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "path_gen.mkdir(exist_ok=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save_preds(data_gen.fix_dl)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "PIL.Image.open(path_gen.ls()[0])" + "save_gen_images(gen_name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Train critic" + "### Train critic" ] }, { @@ -362,6 +424,16 @@ "Pretrain the critic on crappy vs not crappy." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=64\n", + "sz=128" + ] + }, { "cell_type": "code", "execution_count": null, @@ -423,7 +495,44 @@ "metadata": {}, "outputs": [], "source": [ - "learn_critic.fit_one_cycle(10, 1e-3)" + "learn_critic.fit_one_cycle(6, 1e-3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.save(crit_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=16\n", + "sz=192" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.data=get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.fit_one_cycle(4, 1e-4)" ] }, { @@ -466,9 +575,9 @@ "metadata": {}, "outputs": [], "source": [ - "bs=24\n", - "sz=128\n", - "lr=8e-5" + "lr=2e-5\n", + "sz=192\n", + "bs=10" ] }, { @@ -487,7 +596,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_crit = colorize_crit_learner(data=data_crit, nf=256).load(crit_name)" + "learn_crit = colorize_crit_learner(data=data_crit, nf=256).load(crit_name, with_opt=False)" ] }, { @@ -496,7 +605,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen = colorize_gen_learner(data=data_gen, gen_loss=loss_gen, nf_factor=nf_factor).load(gen_name)" + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load(gen_name, with_opt=False)" ] }, { @@ -506,7 +615,7 @@ "outputs": [], "source": [ "switcher = partial(AdaptiveGANSwitcher, critic_thresh=0.65)\n", - "learn = GANLearner.from_learners(learn_gen, learn_crit, weights_gen=(1.0,0.75), show_img=False, switcher=switcher,\n", + "learn = GANLearner.from_learners(learn_gen, learn_crit, weights_gen=(1.0,2.0), show_img=False, switcher=switcher,\n", " opt_func=partial(optim.Adam, betas=(0.,0.9)), wd=1e-3)\n", "learn.callback_fns.append(partial(GANDiscriminativeLR, mult_lr=5.))\n", "learn.callback_fns.append(partial(GANTensorboardWriter, base_dir=TENSORBOARD_PATH, name='GanLearner', visual_iters=100))" @@ -518,7 +627,11 @@ "metadata": {}, "outputs": [], "source": [ - "learn.data=get_data(sz=sz, bs=bs, keep_pct=0.25)" + "for i in range(1,21):\n", + " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", + " learn_gen.freeze_to(-1)\n", + " learn.fit(1,lr)\n", + " save_all('_01_' + str(i))" ] }, { @@ -527,158 +640,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.freeze_to(-1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save_all()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lr=lr/1.5\n", - "sz=160\n", - "bs=int(bs//1.5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.05)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save_all()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "load_all()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lr=lr/1.5\n", - "sz=192\n", - "bs=int(bs//1.5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.05)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save_all()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lr=lr/1.5\n", - "sz=224\n", - "bs=int(bs//1.5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.05)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save_all()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lr=lr/1.75\n", - "sz=256\n", - "bs=int(bs//1.5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.05)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save_all()" + "save_all('_01')" ] }, { @@ -690,6 +652,213 @@ "learn.show_results(rows=bs)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Save Generated Images Again" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=16\n", + "sz=192" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load('ColorizeNew72_gen192_04_12', with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "save_gen_images(gen_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Train Critic Again" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=16\n", + "sz=192" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen=None\n", + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "loss_critic = AdaptiveLoss(nn.BCEWithLogitsLoss())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_crit = get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_crit.show_batch(rows=3, ds_type=DatasetType.Train, imgsize=3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic = colorize_crit_learner(data=data_crit, nf=256).load(crit_name+'4', with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.callback_fns.append(partial(LearnerTensorboardWriter, base_dir=TENSORBOARD_PATH, name='CriticPre'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.fit_one_cycle(4, 1e-4)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.save(crit_name + '5')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### GAN Again" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_crit=None\n", + "learn_gen=None\n", + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lr=5e-6\n", + "sz=192\n", + "bs=10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_crit = get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_crit = colorize_crit_learner(data=data_crit, nf=256).load(crit_name + '5', with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load('ColorizeNew72_gen192_04_12', with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "switcher = partial(AdaptiveGANSwitcher, critic_thresh=0.65)\n", + "learn = GANLearner.from_learners(learn_gen, learn_crit, weights_gen=(1.0,2.0), show_img=False, switcher=switcher,\n", + " opt_func=partial(optim.Adam, betas=(0.,0.9)), wd=1e-3)\n", + "learn.callback_fns.append(partial(GANDiscriminativeLR, mult_lr=5.))\n", + "learn.callback_fns.append(partial(GANTensorboardWriter, base_dir=TENSORBOARD_PATH, name='GanLearner', visual_iters=100))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(1,101):\n", + " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", + " learn_gen.freeze_to(-1)\n", + " learn.fit(1,lr)\n", + " save_all('_05_' + str(i))" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/ColorizeTraining.ipynb b/ColorizeTrainingDeepWide.ipynb similarity index 52% rename from ColorizeTraining.ipynb rename to ColorizeTrainingDeepWide.ipynb index f601270..55ad1c1 100644 --- a/ColorizeTraining.ipynb +++ b/ColorizeTrainingDeepWide.ipynb @@ -1,5 +1,12 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pretrained GAN" + ] + }, { "cell_type": "code", "execution_count": null, @@ -7,7 +14,7 @@ "outputs": [], "source": [ "import os\n", - "os.environ['CUDA_VISIBLE_DEVICES']='0' " + "os.environ['CUDA_VISIBLE_DEVICES']='2' " ] }, { @@ -19,34 +26,21 @@ "import fastai\n", "from fastai import *\n", "from fastai.vision import *\n", - "from fastai.callbacks import *\n", + "from fastai.callbacks.tensorboard import *\n", "from fastai.vision.gan import *\n", - "from fasterai.dataset import *\n", - "from fasterai.visualize import *\n", - "from fasterai.tensorboard import *\n", - "from fasterai.loss import *\n", - "from fasterai.critics import *\n", "from fasterai.generators import *\n", - "from pathlib import Path\n", - "from itertools import repeat\n", - "plt.style.use('dark_background')\n", - "torch.backends.cudnn.benchmark=True\n", + "from fasterai.critics import *\n", + "from fasterai.dataset import *\n", + "from fasterai.loss import *\n", + "from PIL import Image, ImageDraw, ImageFont\n", "from PIL import ImageFile" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "IMAGENET = Path('data/imagenet/ILSVRC/Data/CLS-LOC')\n", - "BWIMAGENET = Path('data/imagenet/ILSVRC/Data/CLS-LOC/bandw')\n", - "\n", - "proj_id = 'colorize1'\n", - "TENSORBOARD_PATH = Path('data/tensorboard/' + proj_id)\n", - "\n", - "torch.backends.cudnn.benchmark=True" + "## Setup" ] }, { @@ -55,13 +49,127 @@ "metadata": {}, "outputs": [], "source": [ - "def decolorize(fn:str, i:int):\n", - " dest = BWIMAGENET/fn.relative_to(IMAGENET)\n", + "path = Path('data/imagenet/ILSVRC/Data/CLS-LOC')\n", + "path_hr = path\n", + "path_lr = path/'bandw'\n", + "\n", + "proj_id = 'ColorizeNew79'\n", + "gen_name = proj_id + '_gen'\n", + "crit_name = proj_id + '_crit'\n", + "\n", + "name_gen = proj_id + '_image_gen'\n", + "path_gen = path/name_gen\n", + "\n", + "TENSORBOARD_PATH = Path('data/tensorboard/' + proj_id)\n", + "\n", + "nf_factor = 1.50" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def save_all(suffix=''):\n", + " learn_gen.save(gen_name + str(sz) + suffix)\n", + " learn_crit.save(crit_name + str(sz) + suffix)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def load_all(suffix=''):\n", + " learn_gen.load(gen_name + str(sz) + suffix, with_opt=False)\n", + " learn_crit.load(crit_name + str(sz) + suffix, with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def get_data(bs:int, sz:int, keep_pct:float):\n", + " return get_colorize_data(sz=sz, bs=bs, crappy_path=path_lr, good_path=path_hr, \n", + " random_seed=None, keep_pct=keep_pct)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def get_crit_data(classes, bs, sz):\n", + " src = ImageList.from_folder(path, include=classes, recurse=True).random_split_by_pct(0.1, seed=42)\n", + " ll = src.label_from_folder(classes=classes)\n", + " data = (ll.transform(get_transforms(max_zoom=2.), size=sz)\n", + " .databunch(bs=bs).normalize(imagenet_stats))\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def crappify(fn,i):\n", + " dest = path_lr/fn.relative_to(path_hr)\n", " dest.parent.mkdir(parents=True, exist_ok=True)\n", " img = PIL.Image.open(fn).convert('LA').convert('RGB')\n", " img.save(dest) " ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def save_preds(dl):\n", + " i=0\n", + " names = dl.dataset.items\n", + " \n", + " for b in dl:\n", + " preds = learn_gen.pred_batch(batch=b, reconstruct=True)\n", + " for o in preds:\n", + " o.save(path_gen/names[i].name)\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def save_gen_images(learn_gen):\n", + " if path_gen.exists(): shutil.rmtree(path_gen)\n", + " path_gen.mkdir(exist_ok=True)\n", + " data_gen = get_data(bs=bs, sz=sz, keep_pct=0.085)\n", + " save_preds(data_gen.fix_dl)\n", + " PIL.Image.open(path_gen.ls()[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Crappified data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Prepare the input data by crappifying images." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -75,69 +183,29 @@ "metadata": {}, "outputs": [], "source": [ - "#il = ImageItemList.from_folder(IMAGENET/'val')\n", - "#parallel(decolorize, il.items, max_workers=16)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#il = ImageItemList.from_folder(IMAGENET/'train')\n", - "#parallel(decolorize, il.items, max_workers=16)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_data(sz:int, bs:int, keep_pct:float):\n", - " return get_colorize_data(sz=sz, bs=bs, crappy_path=BWIMAGENET, good_path=IMAGENET, \n", - " random_seed=None, keep_pct=keep_pct,num_workers=16)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def save():\n", - " learn_gen.save(proj_id + '_gen_' + str(sz))\n", - " learn_crit.save(proj_id + '_crit_' + str(sz))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def load():\n", - " learn_gen.load(proj_id + '_gen_' + str(sz))\n", - " learn_crit.load(proj_id + '_crit_' + str(sz))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def colorize_gen_learner_exp(data:ImageDataBunch, gen_loss=FeatureLoss(), arch=models.resnet34):\n", - " return unet_learner3(data, arch, wd=1e-3, blur=True, norm_type=NormType.Spectral,\n", - " self_attention=True, y_range=(-3.,3.), loss_func=gen_loss)" + "#il = ImageItemList.from_folder(path_hr)\n", + "#parallel(crappify, il.items)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Training" + "# Pre-training" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pre-train generator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's pretrain the generator." ] }, { @@ -146,33 +214,458 @@ "metadata": {}, "outputs": [], "source": [ - "#Needed to instantiate critic but not actually used\n", + "bs=88\n", "sz=64\n", - "bs=128\n", - "\n", - "data = get_data(sz=sz, bs=bs, keep_pct=1.0)\n", - "learn_crit = colorize_crit_learner(data=data, nf=256)\n", - "learn_crit.unfreeze()\n", - "\n", - "gen_loss = FeatureLoss()\n", - "learn_gen = colorize_gen_learner_exp(data=data)\n", - "\n", + "keep_pct=1.0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_gen = get_data(bs=bs, sz=sz, keep_pct=keep_pct)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.callback_fns.append(partial(ImageGenTensorboardWriter, base_dir=TENSORBOARD_PATH, name='GenPre'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.fit_one_cycle(2, pct_start=0.8, max_lr=slice(1e-3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.save(gen_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.load(gen_name, with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.unfreeze()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.fit_one_cycle(2, pct_start=0.0001, max_lr=slice(3e-7, 3e-4))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.save(gen_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.load(gen_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=22\n", + "sz=128\n", + "keep_pct=1.0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.data = get_data(sz=sz, bs=bs, keep_pct=keep_pct)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.unfreeze()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.fit_one_cycle(2, pct_start=0.0001, max_lr=slice(1e-7,1e-4))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.save(gen_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=11\n", + "sz=192\n", + "keep_pct=0.50" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.data = get_data(sz=sz, bs=bs, keep_pct=keep_pct)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.unfreeze()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.fit_one_cycle(1, pct_start=0.0001, max_lr=slice(5e-8,5e-5))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen.save(gen_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Save generated images" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "save_gen_images(gen_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Train critic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pretrain the critic on crappy vs not crappy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=64\n", + "sz=128" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen=None\n", + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "loss_critic = AdaptiveLoss(nn.BCEWithLogitsLoss())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_crit = get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_crit.show_batch(rows=3, ds_type=DatasetType.Train, imgsize=3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic = colorize_crit_learner(data=data_crit, nf=256)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.callback_fns.append(partial(LearnerTensorboardWriter, base_dir=TENSORBOARD_PATH, name='CriticPre'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.fit_one_cycle(6, 1e-3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.save(crit_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs=16\n", + "sz=192" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.data=get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.fit_one_cycle(4, 1e-4)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.save(crit_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## GAN" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we'll combine those pretrained model in a GAN." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_crit=None\n", + "learn_gen=None\n", + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lr=1e-5\n", + "sz=192\n", + "bs=9" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#placeholder- not actually used\n", + "data_crit = get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_crit = colorize_crit_learner(data=data_crit, nf=256).load(crit_name, with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load(gen_name, with_opt=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "switcher = partial(AdaptiveGANSwitcher, critic_thresh=0.65)\n", "learn = GANLearner.from_learners(learn_gen, learn_crit, weights_gen=(1.0,2.0), show_img=False, switcher=switcher,\n", " opt_func=partial(optim.Adam, betas=(0.,0.9)), wd=1e-3)\n", - "\n", "learn.callback_fns.append(partial(GANDiscriminativeLR, mult_lr=5.))\n", - "learn.callback_fns.append(partial(GANTensorboardWriter, base_dir=TENSORBOARD_PATH, name='GanLearner', visual_iters=100))\n", - "\n", - "lr=1e-4\n", - "unfreeze_fctr=0.1" + "learn.callback_fns.append(partial(GANTensorboardWriter, base_dir=TENSORBOARD_PATH, name='GanLearner', visual_iters=100))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(1,101):\n", + " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", + " learn_gen.freeze_to(-1)\n", + " learn.fit(1,lr)\n", + " save_all('_01_' + str(i))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "save_all('_01')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn.show_results(rows=bs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 64px" + "### Save Generated Images Again" ] }, { @@ -181,8 +674,8 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" + "bs=12\n", + "sz=192" ] }, { @@ -191,7 +684,7 @@ "metadata": {}, "outputs": [], "source": [ - "save()" + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load('ColorizeNew79_gen192_06_40', with_opt=False)" ] }, { @@ -200,24 +693,14 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.unfreeze()\n", - "learn.fit(1,lr*unfreeze_fctr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" + "save_gen_images(gen_name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 96px" + "### Train Critic Again" ] }, { @@ -226,9 +709,8 @@ "metadata": {}, "outputs": [], "source": [ - "#lr=lr/2\n", - "sz=96\n", - "bs=bs//2" + "bs=16\n", + "sz=192" ] }, { @@ -237,9 +719,8 @@ "metadata": {}, "outputs": [], "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.1)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr/10)" + "learn_gen=None\n", + "gc.collect()" ] }, { @@ -248,7 +729,7 @@ "metadata": {}, "outputs": [], "source": [ - "save()" + "loss_critic = AdaptiveLoss(nn.BCEWithLogitsLoss())" ] }, { @@ -257,7 +738,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=1.0)" + "data_crit = get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" ] }, { @@ -266,8 +747,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" + "data_crit.show_batch(rows=3, ds_type=DatasetType.Train, imgsize=3)" ] }, { @@ -276,7 +756,7 @@ "metadata": {}, "outputs": [], "source": [ - "save()" + "learn_critic = colorize_crit_learner(data=data_crit, nf=256).load(crit_name + '6', with_opt=False)" ] }, { @@ -285,8 +765,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.unfreeze()\n", - "learn.fit(1,lr*unfreeze_fctr)" + "learn_critic.callback_fns.append(partial(LearnerTensorboardWriter, base_dir=TENSORBOARD_PATH, name='CriticPre'))" ] }, { @@ -295,14 +774,23 @@ "metadata": {}, "outputs": [], "source": [ - "save()" + "learn_critic.fit_one_cycle(4, 1e-4)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learn_critic.save(crit_name + '7')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 128px" + "### GAN Again" ] }, { @@ -311,9 +799,9 @@ "metadata": {}, "outputs": [], "source": [ - "#lr=lr/2\n", - "sz=128\n", - "bs=bs//2" + "learn_crit=None\n", + "learn_gen=None\n", + "gc.collect()" ] }, { @@ -322,177 +810,10 @@ "metadata": {}, "outputs": [], "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.1)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr/10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=1.0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.unfreeze()\n", - "learn.fit(1,lr*unfreeze_fctr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "load()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 160px" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lr=lr/1.5\n", - "sz=160\n", - "bs=int(bs//1.5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.1)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr/10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.25)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.unfreeze()\n", - "learn.fit(1,lr*unfreeze_fctr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 192px" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lr=lr/1.5\n", + "#lr=1e-5\n", + "lr=2e-5\n", "sz=192\n", - "bs=int(bs//1.5)" + "bs=9" ] }, { @@ -501,9 +822,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.1)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr/10)" + "data_crit = get_crit_data([name_gen, 'test'], bs=bs, sz=sz)" ] }, { @@ -512,7 +831,8 @@ "metadata": {}, "outputs": [], "source": [ - "save()" + "#learn_crit = colorize_crit_learner(data=data_crit, nf=256).load(crit_name + '7', with_opt=False)\n", + "learn_crit = colorize_crit_learner(data=data_crit, nf=256).load('ColorizeNew79_crit192_07_100', with_opt=False)" ] }, { @@ -521,7 +841,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.25)" + "learn_gen = gen_learner_deep(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load('ColorizeNew79_gen192_07_100', with_opt=False)" ] }, { @@ -530,8 +850,11 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" + "switcher = partial(AdaptiveGANSwitcher, critic_thresh=0.65)\n", + "learn = GANLearner.from_learners(learn_gen, learn_crit, weights_gen=(1.0,2.0), show_img=False, switcher=switcher,\n", + " opt_func=partial(optim.Adam, betas=(0.,0.9)), wd=1e-3)\n", + "learn.callback_fns.append(partial(GANDiscriminativeLR, mult_lr=5.))\n", + "learn.callback_fns.append(partial(GANTensorboardWriter, base_dir=TENSORBOARD_PATH, name='GanLearner', visual_iters=100))" ] }, { @@ -540,7 +863,11 @@ "metadata": {}, "outputs": [], "source": [ - "save()" + "for i in range(1,101):\n", + " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", + " learn_gen.freeze_to(-1)\n", + " learn.fit(1,lr)\n", + " save_all('_07_' + str(i))" ] }, { @@ -549,24 +876,18 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen.unfreeze()\n", - "learn.fit(1,lr*unfreeze_fctr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" + "for i in range(100,201):\n", + " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", + " learn_gen.freeze_to(-1)\n", + " learn.fit(1,lr)\n", + " save_all('_07_' + str(i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 224px" + "## fin" ] }, { @@ -574,172 +895,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "lr=lr/1.5\n", - "sz=224\n", - "bs=int(bs//1.5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.1)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr/10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.25)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.unfreeze()\n", - "learn.fit(1,lr*unfreeze_fctr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "load()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 256px" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "lr=lr/1.75\n", - "sz=256\n", - "bs=int(bs//1.5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.1)\n", - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr/10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn.data = get_data(sz=sz, bs=bs, keep_pct=0.25)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.freeze_to(-1)\n", - "learn.fit(1,lr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "learn_gen.unfreeze()\n", - "learn.fit(1,lr*unfreeze_fctr)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "save()" - ] + "source": [] }, { "cell_type": "code", @@ -766,30 +922,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" - }, - "toc": { - "colors": { - "hover_highlight": "#DAA520", - "navigate_num": "#000000", - "navigate_text": "#333333", - "running_highlight": "#FF0000", - "selected_highlight": "#FFD700", - "sidebar_border": "#EEEEEE", - "wrapper_background": "#FFFFFF" - }, - "moveMenuLeft": true, - "nav_menu": { - "height": "67px", - "width": "252px" - }, - "navigate_menu": true, - "number_sections": true, - "sideBar": true, - "threshold": 4, - "toc_cell": false, - "toc_section_display": "block", - "toc_window_display": false, - "widenNotebook": false } }, "nbformat": 4, diff --git a/ColorizeTrainingWide.ipynb b/ColorizeTrainingWide.ipynb index d65ded9..129a1d4 100644 --- a/ColorizeTrainingWide.ipynb +++ b/ColorizeTrainingWide.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -89,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -100,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -127,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -144,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -221,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -230,11 +230,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "learn_gen = gen_learner_deep(arch=models.resnet101, data=data_gen, gen_loss=FeatureLoss2(), nf_factor=nf_factor)" + "learn_gen = gen_learner_wide(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor)" ] }, { @@ -623,7 +623,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen = gen_learner_wide(arch=models.resnet101, data=data_gen, gen_loss=FeatureLoss2(), nf_factor=nf_factor).load(gen_name, with_opt=False)" + "learn_gen = gen_learner_wide(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load(gen_name, with_opt=False)" ] }, { @@ -670,7 +670,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -684,7 +684,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen = gen_learner_wide(arch=models.resnet101, data=data_gen, gen_loss=FeatureLoss2(), nf_factor=nf_factor).load('ColorizeNew73_gen192_05_7', with_opt=False)" + "learn_gen = gen_learner_wide(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load('ColorizeNew73_gen192_08_211', with_opt=False)" ] }, { @@ -756,7 +756,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_critic = colorize_crit_learner(data=data_crit, nf=256).load(crit_name + '5', with_opt=False)" + "learn_critic = colorize_crit_learner(data=data_crit, nf=256).load(crit_name + '8', with_opt=False)" ] }, { @@ -783,7 +783,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_critic.save(crit_name + '6')" + "learn_critic.save(crit_name + '9')" ] }, { @@ -810,7 +810,7 @@ "metadata": {}, "outputs": [], "source": [ - "lr=1e-6\n", + "lr=2e-5\n", "sz=192\n", "bs=5" ] @@ -830,7 +830,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_crit = colorize_crit_learner(data=data_crit, nf=256).load(crit_name + '6', with_opt=False)" + "learn_crit = colorize_crit_learner(data=data_crit, nf=256).load(crit_name + '9', with_opt=False)" ] }, { @@ -839,7 +839,7 @@ "metadata": {}, "outputs": [], "source": [ - "learn_gen = gen_learner_wide(arch=models.resnet101, data=data_gen, gen_loss=FeatureLoss2(), nf_factor=nf_factor).load('ColorizeNew73_gen192_05_7', with_opt=False)" + "learn_gen = gen_learner_wide(data=data_gen, gen_loss=FeatureLoss(), nf_factor=nf_factor).load('ColorizeNew73_gen192_08_211', with_opt=False)" ] }, { @@ -865,7 +865,33 @@ " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", " learn_gen.freeze_to(-1)\n", " learn.fit(1,lr)\n", - " save_all('_06_' + str(i))" + " save_all('_09_' + str(i))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(101,201):\n", + " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", + " learn_gen.freeze_to(-1)\n", + " learn.fit(1,lr)\n", + " save_all('_09_' + str(i))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(201,301):\n", + " learn.data = get_data(sz=sz, bs=bs, keep_pct=0.001)\n", + " learn_gen.freeze_to(-1)\n", + " learn.fit(1,lr)\n", + " save_all('_09_' + str(i))" ] }, { diff --git a/ImageColorizer.ipynb b/ImageColorizer.ipynb index 5afea3d..40eed58 100644 --- a/ImageColorizer.ipynb +++ b/ImageColorizer.ipynb @@ -7,7 +7,7 @@ "outputs": [], "source": [ "import os\n", - "os.environ['CUDA_VISIBLE_DEVICES']='3' " + "os.environ['CUDA_VISIBLE_DEVICES']='1' " ] }, { @@ -42,7 +42,7 @@ "#It literally just is a number multiplied by 16 to get the square render resolution. \n", "#Note that this doesn't affect the resolution of the final output- the output is the same resolution as the input.\n", "#Example: render_factor=21 => color is rendered at 16x21 = 336x336 px. \n", - "render_factor=48" + "render_factor=35" ] }, { @@ -51,10 +51,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis = get_video_colorizer(root_folder=Path('data/imagenet/ILSVRC/Data/CLS-LOC/bandw'), weights_name='ColorizeNew76_gen192_01_28', render_factor=render_factor, nf_factor=1.5).vis\n", - "#vis = get_video_colorizer(root_folder=Path('data/imagenet/ILSVRC/Data/CLS-LOC/bandw'), weights_name='ColorizeNew72_gen192_05_18', render_factor=render_factor).vis\n", - "#vis = get_image_colorizer(render_factor=render_factor)\n", - "#vis = get_image_colorizer(arch=models.resnet101, root_folder=Path('data/imagenet/ILSVRC/Data/CLS-LOC/bandw'), weights_name='ColorizeNew73_gen192_06_80', render_factor=render_factor)" + "vis = get_image_colorizer(root_folder=Path('data/imagenet/ILSVRC/Data/CLS-LOC/bandw'), weights_name='ColorizeNew73_gen192_08_211', render_factor=render_factor)" ] }, { @@ -63,7 +60,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1852GatekeepersWindsor.jpg\")" + "vis.plot_transformed_image(\"test_images/1852GatekeepersWindsor.jpg\", render_factor=45)" ] }, { @@ -72,7 +69,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Chief.jpg\")" + "vis.plot_transformed_image(\"test_images/Chief.jpg\", render_factor=17)" ] }, { @@ -81,7 +78,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1850SchoolForGirls.jpg\")" + "vis.plot_transformed_image(\"test_images/1850SchoolForGirls.jpg\", render_factor=45)" ] }, { @@ -90,7 +87,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/AtlanticCityBeach1905.jpg\")" + "vis.plot_transformed_image(\"test_images/AtlanticCityBeach1905.jpg\", render_factor=32)" ] }, { @@ -126,7 +123,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/AtlanticCity1905.png\")" + "vis.plot_transformed_image(\"test_images/AtlanticCity1905.png\", render_factor=40)" ] }, { @@ -135,7 +132,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/PushingCart.jpg\")" + "vis.plot_transformed_image(\"test_images/PushingCart.jpg\", render_factor=30)" ] }, { @@ -153,7 +150,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/IronLung.png\")" + "vis.plot_transformed_image(\"test_images/IronLung.png\", render_factor=26)" ] }, { @@ -180,7 +177,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/marilyn_woods.jpg\")" + "vis.plot_transformed_image(\"test_images/marilyn_woods.jpg\", render_factor=25)" ] }, { @@ -189,7 +186,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/OldWomanSweden1904.jpg\")" + "vis.plot_transformed_image(\"test_images/OldWomanSweden1904.jpg\", render_factor=45)" ] }, { @@ -207,7 +204,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/overmiller.jpg\")" + "vis.plot_transformed_image(\"test_images/overmiller.jpg\", render_factor=30)" ] }, { @@ -216,7 +213,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/BritishDispatchRider.jpg\")" + "vis.plot_transformed_image(\"test_images/BritishDispatchRider.jpg\", render_factor=16)" ] }, { @@ -225,7 +222,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/MuseauNacionalDosCoches.jpg\")" + "vis.plot_transformed_image(\"test_images/MuseauNacionalDosCoches.jpg\", render_factor=40)" ] }, { @@ -234,7 +231,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/abe.jpg\")" + "vis.plot_transformed_image(\"test_images/abe.jpg\", render_factor=20)" ] }, { @@ -243,7 +240,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/RossCorbettHouseCork.jpg\")" + "vis.plot_transformed_image(\"test_images/RossCorbettHouseCork.jpg\", render_factor=40)" ] }, { @@ -252,7 +249,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/HPLabelleOfficeMontreal.jpg\")" + "vis.plot_transformed_image(\"test_images/HPLabelleOfficeMontreal.jpg\", render_factor=45)" ] }, { @@ -261,7 +258,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/einstein_beach.jpg\")" + "vis.plot_transformed_image(\"test_images/einstein_beach.jpg\", render_factor=30)" ] }, { @@ -279,7 +276,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/20sWoman.jpg\")" + "vis.plot_transformed_image(\"test_images/20sWoman.jpg\", render_factor=24)" ] }, { @@ -288,7 +285,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/egypt-1.jpg\")" + "vis.plot_transformed_image(\"test_images/egypt-1.jpg\", render_factor=18)" ] }, { @@ -306,7 +303,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/einstein_portrait.jpg\")" + "vis.plot_transformed_image(\"test_images/einstein_portrait.jpg\", render_factor=20)" ] }, { @@ -315,7 +312,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/pinkerton.jpg\")" + "vis.plot_transformed_image(\"test_images/pinkerton.jpg\", render_factor=18)" ] }, { @@ -324,7 +321,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/WaltWhitman.jpg\")" + "vis.plot_transformed_image(\"test_images/WaltWhitman.jpg\", render_factor=12)" ] }, { @@ -333,7 +330,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/dorothea-lange.jpg\")" + "vis.plot_transformed_image(\"test_images/dorothea-lange.jpg\", render_factor=40)" ] }, { @@ -342,7 +339,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Hemmingway2.jpg\")" + "vis.plot_transformed_image(\"test_images/Hemmingway2.jpg\", render_factor=24)" ] }, { @@ -351,7 +348,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/hemmingway.jpg\")" + "vis.plot_transformed_image(\"test_images/hemmingway.jpg\", render_factor=14)" ] }, { @@ -360,7 +357,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/smoking_kid.jpg\")" + "vis.plot_transformed_image(\"test_images/smoking_kid.jpg\", render_factor=35)" ] }, { @@ -369,7 +366,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/teddy_rubble.jpg\")" + "vis.plot_transformed_image(\"test_images/teddy_rubble.jpg\", render_factor=42)" ] }, { @@ -378,7 +375,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/dustbowl_2.jpg\")" + "vis.plot_transformed_image(\"test_images/dustbowl_2.jpg\", render_factor=16)" ] }, { @@ -387,7 +384,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/camera_man.jpg\")" + "vis.plot_transformed_image(\"test_images/camera_man.jpg\", render_factor=33)" ] }, { @@ -396,7 +393,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/migrant_mother.jpg\")" + "vis.plot_transformed_image(\"test_images/migrant_mother.jpg\", render_factor=42)" ] }, { @@ -405,7 +402,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/marktwain.jpg\")" + "vis.plot_transformed_image(\"test_images/marktwain.jpg\", render_factor=14)" ] }, { @@ -423,7 +420,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Evelyn_Nesbit.jpg\")" + "vis.plot_transformed_image(\"test_images/Evelyn_Nesbit.jpg\", render_factor=42)" ] }, { @@ -576,7 +573,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/wilson-slaverevivalmeeting.jpg\")" + "vis.plot_transformed_image(\"test_images/wilson-slaverevivalmeeting.jpg\", render_factor=45)" ] }, { @@ -585,7 +582,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/ww1_trench.jpg\")" + "vis.plot_transformed_image(\"test_images/ww1_trench.jpg\", render_factor=18)" ] }, { @@ -594,7 +591,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/women-bikers.png\")" + "vis.plot_transformed_image(\"test_images/women-bikers.png\", render_factor=23)" ] }, { @@ -603,7 +600,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Unidentified1855.jpg\")" + "vis.plot_transformed_image(\"test_images/Unidentified1855.jpg\", render_factor=19)" ] }, { @@ -612,7 +609,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/skycrapper_lunch.jpg\")" + "vis.plot_transformed_image(\"test_images/skycrapper_lunch.jpg\", render_factor=25)" ] }, { @@ -621,7 +618,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/sioux.jpg\")" + "vis.plot_transformed_image(\"test_images/sioux.jpg\", render_factor=28)" ] }, { @@ -630,7 +627,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/school_kids.jpg\")" + "vis.plot_transformed_image(\"test_images/school_kids.jpg\", render_factor=17)" ] }, { @@ -639,7 +636,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/royal_family.jpg\")" + "vis.plot_transformed_image(\"test_images/royal_family.jpg\", render_factor=42)" ] }, { @@ -648,7 +645,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/redwood_lumberjacks.jpg\")" + "vis.plot_transformed_image(\"test_images/redwood_lumberjacks.jpg\", render_factor=45)" ] }, { @@ -657,7 +654,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/poverty.jpg\")" + "vis.plot_transformed_image(\"test_images/poverty.jpg\", render_factor=40)" ] }, { @@ -666,7 +663,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/paperboy.jpg\")" + "vis.plot_transformed_image(\"test_images/paperboy.jpg\", render_factor=45)" ] }, { @@ -675,7 +672,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/NativeAmericans.jpg\")" + "vis.plot_transformed_image(\"test_images/NativeAmericans.jpg\", render_factor=21)" ] }, { @@ -693,7 +690,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Greece1911.jpg\")" + "vis.plot_transformed_image(\"test_images/Greece1911.jpg\", render_factor=29)" ] }, { @@ -702,7 +699,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/FatMenClub.jpg\")" + "vis.plot_transformed_image(\"test_images/FatMenClub.jpg\", render_factor=18)" ] }, { @@ -738,7 +735,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/dustbowl_people.jpg\")" + "vis.plot_transformed_image(\"test_images/dustbowl_people.jpg\", render_factor=28)" ] }, { @@ -765,7 +762,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/DriveThroughGiantTree.jpg\")" + "vis.plot_transformed_image(\"test_images/DriveThroughGiantTree.jpg\", render_factor=21)" ] }, { @@ -783,7 +780,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/civil-war_2.jpg\")" + "vis.plot_transformed_image(\"test_images/civil-war_2.jpg\", render_factor=42)" ] }, { @@ -801,7 +798,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/civil_war_3.jpg\")" + "vis.plot_transformed_image(\"test_images/civil_war_3.jpg\", render_factor=28)" ] }, { @@ -819,7 +816,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/BritishSlum.jpg\")" + "vis.plot_transformed_image(\"test_images/BritishSlum.jpg\", render_factor=30)" ] }, { @@ -828,7 +825,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/bicycles.jpg\")" + "vis.plot_transformed_image(\"test_images/bicycles.jpg\", render_factor=27)" ] }, { @@ -846,7 +843,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/40sCouple.jpg\")" + "vis.plot_transformed_image(\"test_images/40sCouple.jpg\", render_factor=21)" ] }, { @@ -864,7 +861,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Dolores1920s.jpg\")" + "vis.plot_transformed_image(\"test_images/Dolores1920s.jpg\", render_factor=18)" ] }, { @@ -873,7 +870,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/TitanicGym.jpg\")" + "vis.plot_transformed_image(\"test_images/TitanicGym.jpg\", render_factor=38)" ] }, { @@ -882,7 +879,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/FrenchVillage1950s.jpg\")" + "vis.plot_transformed_image(\"test_images/FrenchVillage1950s.jpg\", render_factor=32)" ] }, { @@ -891,7 +888,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/ClassDivide1930sBrittain.jpg\")" + "vis.plot_transformed_image(\"test_images/ClassDivide1930sBrittain.jpg\", render_factor=17)" ] }, { @@ -909,7 +906,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1890Surfer.png\")" + "vis.plot_transformed_image(\"test_images/1890Surfer.png\", render_factor=37)" ] }, { @@ -1053,7 +1050,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Deadwood1860s.png\")" + "vis.plot_transformed_image(\"test_images/Deadwood1860s.jpg\", render_factor=23)" ] }, { @@ -1062,7 +1059,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1860sSamauris.png\")" + "vis.plot_transformed_image(\"test_images/1860sSamauris.png\", render_factor=45)" ] }, { @@ -1098,7 +1095,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/SanFran1851.jpg\")" + "vis.plot_transformed_image(\"test_images/SanFran1851.jpg\", render_factor=45)" ] }, { @@ -1161,7 +1158,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/ChinaOpiumc1880.jpg\")" + "vis.plot_transformed_image(\"test_images/ChinaOpiumc1880.jpg\", render_factor=30)" ] }, { @@ -1197,7 +1194,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Sami1880s.jpg\")" + "vis.plot_transformed_image(\"test_images/Sami1880s.jpg\", render_factor=45)" ] }, { @@ -1215,7 +1212,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Ballet1890Russia.jpg\")" + "vis.plot_transformed_image(\"test_images/Ballet1890Russia.jpg\", render_factor=45)" ] }, { @@ -1242,7 +1239,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/London1937.png\")" + "vis.plot_transformed_image(\"test_images/London1937.png\", render_factor=30)" ] }, { @@ -1260,7 +1257,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/OregonTrail1870s.jpg\")" + "vis.plot_transformed_image(\"test_images/OregonTrail1870s.jpg\", render_factor=28)" ] }, { @@ -1269,7 +1266,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/EasterNyc1911.jpg\")" + "vis.plot_transformed_image(\"test_images/EasterNyc1911.jpg\", render_factor=20)" ] }, { @@ -1341,7 +1338,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1901Electrophone.jpg\")" + "vis.plot_transformed_image(\"test_images/1901Electrophone.jpg\", render_factor=13)" ] }, { @@ -1350,7 +1347,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Texas1938Woman.png\")" + "vis.plot_transformed_image(\"test_images/Texas1938Woman.png\", render_factor=45)" ] }, { @@ -1386,7 +1383,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1909Chicago.jpg\")" + "vis.plot_transformed_image(\"test_images/1909Chicago.jpg\", render_factor=45)" ] }, { @@ -1404,7 +1401,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/ParisLate1800s.jpg\")" + "vis.plot_transformed_image(\"test_images/ParisLate1800s.jpg\", render_factor=45)" ] }, { @@ -1413,7 +1410,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1900sDaytonaBeach.png\")" + "vis.plot_transformed_image(\"test_images/1900sDaytonaBeach.png\", render_factor=44)" ] }, { @@ -1431,7 +1428,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/NorwegianBride1920s.jpg\")" + "vis.plot_transformed_image(\"test_images/NorwegianBride1920s.jpg\", render_factor=40)" ] }, { @@ -1449,7 +1446,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1888Slum.jpg\")" + "vis.plot_transformed_image(\"test_images/1888Slum.jpg\", render_factor=30)" ] }, { @@ -1458,7 +1455,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/LivingRoom1920Sweden.jpg\")" + "vis.plot_transformed_image(\"test_images/LivingRoom1920Sweden.jpg\", render_factor=45)" ] }, { @@ -1485,7 +1482,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1899SodaFountain.jpg\")" + "vis.plot_transformed_image(\"test_images/1899SodaFountain.jpg\", render_factor=37)" ] }, { @@ -1512,7 +1509,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1890CliffHouseSF.jpg\")" + "vis.plot_transformed_image(\"test_images/1890CliffHouseSF.jpg\", render_factor=30)" ] }, { @@ -1521,7 +1518,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1908FamilyPhoto.jpg\")" + "vis.plot_transformed_image(\"test_images/1908FamilyPhoto.jpg\", render_factor=45)" ] }, { @@ -1530,7 +1527,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1900sSaloon.jpg\")" + "vis.plot_transformed_image(\"test_images/1900sSaloon.jpg\", render_factor=33)" ] }, { @@ -1539,7 +1536,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1890BostonHospital.jpg\")" + "vis.plot_transformed_image(\"test_images/1890BostonHospital.jpg\", render_factor=40)" ] }, { @@ -1566,7 +1563,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Shack.jpg\")" + "vis.plot_transformed_image(\"test_images/Shack.jpg\",render_factor=42)" ] }, { @@ -1575,7 +1572,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Apsaroke1908.png\")" + "vis.plot_transformed_image(\"test_images/Apsaroke1908.png\", render_factor=42)" ] }, { @@ -1665,7 +1662,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/MadisonSquare1900.jpg\")" + "vis.plot_transformed_image(\"test_images/MadisonSquare1900.jpg\", render_factor=44)" ] }, { @@ -1683,7 +1680,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1925Girl.jpg\")" + "vis.plot_transformed_image(\"test_images/1925Girl.jpg\", render_factor=25)" ] }, { @@ -1692,7 +1689,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1907Cowboys.jpg\")" + "vis.plot_transformed_image(\"test_images/1907Cowboys.jpg\", render_factor=28)" ] }, { @@ -1701,7 +1698,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/WWIIPeeps.jpg\")" + "vis.plot_transformed_image(\"test_images/WWIIPeeps.jpg\", render_factor=37)" ] }, { @@ -1710,7 +1707,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/BabyBigBoots.jpg\")" + "vis.plot_transformed_image(\"test_images/BabyBigBoots.jpg\", render_factor=40)" ] }, { @@ -1719,7 +1716,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1895BikeMaidens.jpg\")" + "vis.plot_transformed_image(\"test_images/1895BikeMaidens.jpg\", render_factor=25)" ] }, { @@ -1728,7 +1725,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/IrishLate1800s.jpg\")" + "vis.plot_transformed_image(\"test_images/IrishLate1800s.jpg\", render_factor=25)" ] }, { @@ -1737,7 +1734,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/LibraryOfCongress1910.jpg\")" + "vis.plot_transformed_image(\"test_images/LibraryOfCongress1910.jpg\", render_factor=21)" ] }, { @@ -1746,7 +1743,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1875Olds.jpg\")" + "vis.plot_transformed_image(\"test_images/1875Olds.jpg\", render_factor=16)" ] }, { @@ -1755,7 +1752,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/SenecaNative1908.jpg\")" + "vis.plot_transformed_image(\"test_images/SenecaNative1908.jpg\", render_factor=30)" ] }, { @@ -1764,7 +1761,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/WWIHospital.jpg\")" + "vis.plot_transformed_image(\"test_images/WWIHospital.jpg\", render_factor=40)" ] }, { @@ -1773,7 +1770,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1892WaterLillies.jpg\")" + "vis.plot_transformed_image(\"test_images/1892WaterLillies.jpg\", render_factor=45)" ] }, { @@ -1782,7 +1779,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/GreekImmigrants1905.jpg\")" + "vis.plot_transformed_image(\"test_images/GreekImmigrants1905.jpg\", render_factor=25)" ] }, { @@ -1791,7 +1788,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/FatMensShop.jpg\")" + "vis.plot_transformed_image(\"test_images/FatMensShop.jpg\", render_factor=24)" ] }, { @@ -1827,7 +1824,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/JerseyShore1905.jpg\")" + "vis.plot_transformed_image(\"test_images/JerseyShore1905.png\", render_factor=43)" ] }, { @@ -1863,7 +1860,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Cork1905.jpg\")" + "vis.plot_transformed_image(\"test_images/Cork1905.jpg\", render_factor=37)" ] }, { @@ -1899,7 +1896,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Agamemnon1919.jpg\")" + "vis.plot_transformed_image(\"test_images/Agamemnon1919.jpg\", render_factor=40)" ] }, { @@ -1935,7 +1932,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/RepBrennanRadio1922.jpg\")" + "vis.plot_transformed_image(\"test_images/RepBrennanRadio1922.jpg\", render_factor=43)" ] }, { @@ -1944,7 +1941,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Late1800sNative.jpg\")" + "vis.plot_transformed_image(\"test_images/Late1800sNative.jpg\", render_factor=20)" ] }, { @@ -1953,7 +1950,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/GasPrices1939.jpg\")" + "vis.plot_transformed_image(\"test_images/GasPrices1939.jpg\", render_factor=30)" ] }, { @@ -2034,7 +2031,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/CricketLondon1930.jpg\")" + "vis.plot_transformed_image(\"test_images/CricketLondon1930.jpg\", render_factor=45)" ] }, { @@ -2043,7 +2040,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Donegal1907Yarn.jpg\")" + "vis.plot_transformed_image(\"test_images/Donegal1907Yarn.jpg\", render_factor=32)" ] }, { @@ -2061,7 +2058,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/BreadDelivery1920sIreland.jpg\")" + "vis.plot_transformed_image(\"test_images/BreadDelivery1920sIreland.jpg\", render_factor=20)" ] }, { @@ -2106,7 +2103,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/GalwayIreland1902.jpg\")" + "vis.plot_transformed_image(\"test_images/GalwayIreland1902.jpg\", render_factor=42)" ] }, { @@ -2115,7 +2112,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/HomeIreland1924.jpg\")" + "vis.plot_transformed_image(\"test_images/HomeIreland1924.jpg\", render_factor=40)" ] }, { @@ -2124,7 +2121,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/HydeParkLondon1920s.jpg\")" + "vis.plot_transformed_image(\"test_images/HydeParkLondon1920s.jpg\", render_factor=30)" ] }, { @@ -2133,7 +2130,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1929LondonOverFleetSt.jpg\")" + "vis.plot_transformed_image(\"test_images/1929LondonOverFleetSt.jpg\", render_factor=25)" ] }, { @@ -2151,7 +2148,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/AnselAdamsBuildings.jpg\")" + "vis.plot_transformed_image(\"test_images/AnselAdamsBuildings.jpg\", render_factor=45)" ] }, { @@ -2160,7 +2157,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/AthleticClubParis1913.jpg\")" + "vis.plot_transformed_image(\"test_images/AthleticClubParis1913.jpg\", render_factor=42)" ] }, { @@ -2178,7 +2175,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Boston1937.jpg\")" + "vis.plot_transformed_image(\"test_images/Boston1937.jpg\", render_factor=30)" ] }, { @@ -2187,7 +2184,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/BoulevardDuTemple1838.jpg\")" + "vis.plot_transformed_image(\"test_images/BoulevardDuTemple1838.jpg\", render_factor=25)" ] }, { @@ -2196,7 +2193,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/BumperCarsParis1930.jpg\")" + "vis.plot_transformed_image(\"test_images/BumperCarsParis1930.jpg\", render_factor=25)" ] }, { @@ -2205,7 +2202,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/CafeTerrace1925Paris.jpg\")" + "vis.plot_transformed_image(\"test_images/CafeTerrace1925Paris.jpg\", render_factor=27)" ] }, { @@ -2214,7 +2211,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/CoalDeliveryParis1915.jpg\")" + "vis.plot_transformed_image(\"test_images/CoalDeliveryParis1915.jpg\", render_factor=37)" ] }, { @@ -2223,7 +2220,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/CorkKids1910.jpg\")" + "vis.plot_transformed_image(\"test_images/CorkKids1910.jpg\", render_factor=32)" ] }, { @@ -2232,7 +2229,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/DeepSeaDiver1915.png\")" + "vis.plot_transformed_image(\"test_images/DeepSeaDiver1915.png\", render_factor=16)" ] }, { @@ -2259,7 +2256,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/HarrodsLondon1920.jpg\")" + "vis.plot_transformed_image(\"test_images/HarrodsLondon1920.jpg\", render_factor=45)" ] }, { @@ -2268,7 +2265,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/HerbSeller1899Paris.jpg\")" + "vis.plot_transformed_image(\"test_images/HerbSeller1899Paris.jpg\", render_factor=17)" ] }, { @@ -2277,7 +2274,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/CalcuttaPoliceman1920.jpg\")" + "vis.plot_transformed_image(\"test_images/CalcuttaPoliceman1920.jpg\", render_factor=20)" ] }, { @@ -2286,7 +2283,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/ElectricScooter1915.jpeg\")" + "vis.plot_transformed_image(\"test_images/ElectricScooter1915.jpeg\", render_factor=20)" ] }, { @@ -2304,7 +2301,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/HalloweenEarly1900s.jpg\")" + "vis.plot_transformed_image(\"test_images/HalloweenEarly1900s.jpg\", render_factor=11)" ] }, { @@ -2331,7 +2328,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/LittleAirplane1934.jpg\")" + "vis.plot_transformed_image(\"test_images/LittleAirplane1934.jpg\", render_factor=35)" ] }, { @@ -2367,7 +2364,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/Killarney1910.jpg\")" + "vis.plot_transformed_image(\"test_images/Killarney1910.jpg\", render_factor=41)" ] }, { @@ -2403,7 +2400,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/WaterfordIreland1909.jpg\")" + "vis.plot_transformed_image(\"test_images/WaterfordIreland1909.jpg\", render_factor=45)" ] }, { @@ -2421,7 +2418,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/London1918WartimeClothesManufacture.jpg\")" + "vis.plot_transformed_image(\"test_images/London1918WartimeClothesManufacture.jpg\", render_factor=45)" ] }, { @@ -2457,7 +2454,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/NativeWoman1926.jpg\")" + "vis.plot_transformed_image(\"test_images/NativeWoman1926.jpg\", render_factor=21)" ] }, { @@ -2484,7 +2481,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/ParisLadies1910.jpg\")" + "vis.plot_transformed_image(\"test_images/ParisLadies1910.jpg\", render_factor=25)" ] }, { @@ -2511,7 +2508,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/TheatreGroupBombay1875.jpg\")" + "vis.plot_transformed_image(\"test_images/TheatreGroupBombay1875.jpg\", render_factor=45)" ] }, { @@ -2529,7 +2526,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/London1850Coach.jpg\")" + "vis.plot_transformed_image(\"test_images/London1850Coach.jpg\", render_factor=25)" ] }, { @@ -2547,7 +2544,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/London1930sCheetah.jpg\")" + "vis.plot_transformed_image(\"test_images/London1930sCheetah.jpg\", render_factor=42)" ] }, { @@ -2574,7 +2571,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/LondonRailwayWork1931.jpg\")" + "vis.plot_transformed_image(\"test_images/LondonRailwayWork1931.jpg\", render_factor=45)" ] }, { @@ -2601,7 +2598,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/NativeCouple1912.jpg\")" + "vis.plot_transformed_image(\"test_images/NativeCouple1912.jpg\", render_factor=21)" ] }, { @@ -2619,7 +2616,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/PaddingtonStationLondon1907.jpg\")" + "vis.plot_transformed_image(\"test_images/PaddingtonStationLondon1907.jpg\", render_factor=45)" ] }, { @@ -2646,7 +2643,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/ParisWomenFurs1920s.jpg\")" + "vis.plot_transformed_image(\"test_images/ParisWomenFurs1920s.jpg\", render_factor=21)" ] }, { @@ -2673,7 +2670,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/SecondHandClothesLondonLate1800s.jpg\")" + "vis.plot_transformed_image(\"test_images/SecondHandClothesLondonLate1800s.jpg\", render_factor=21)" ] }, { @@ -2709,7 +2706,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/LondonStreetDoctor1877.png\")" + "vis.plot_transformed_image(\"test_images/LondonStreetDoctor1877.png\", render_factor=19)" ] }, { @@ -2772,7 +2769,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/FlyingMachinesParis1909.jpg\")" + "vis.plot_transformed_image(\"test_images/FlyingMachinesParis1909.jpg\", render_factor=25)" ] }, { @@ -2889,7 +2886,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/GoldenGateConstruction.jpg\")" + "vis.plot_transformed_image(\"test_images/GoldenGateConstruction.jpg\", render_factor=45)" ] }, { @@ -2943,7 +2940,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1941GeorgiaFarmhouse.jpg\")" + "vis.plot_transformed_image(\"test_images/1941GeorgiaFarmhouse.jpg\", render_factor=43)" ] }, { @@ -2952,7 +2949,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1934UmbriaItaly.jpg\")" + "vis.plot_transformed_image(\"test_images/1934UmbriaItaly.jpg\", render_factor=21)" ] }, { @@ -2988,7 +2985,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1940Connecticut.jpg\")" + "vis.plot_transformed_image(\"test_images/1940Connecticut.jpg\", render_factor=45)" ] }, { @@ -3033,7 +3030,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1890sChineseImmigrants.jpg\")" + "vis.plot_transformed_image(\"test_images/1890sChineseImmigrants.jpg\", render_factor=45)" ] }, { @@ -3051,7 +3048,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1929VictorianCosplayLondon.jpg\")" + "vis.plot_transformed_image(\"test_images/1929VictorianCosplayLondon.jpg\", render_factor=35)" ] }, { @@ -3060,7 +3057,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1959ParisFriends.png\")" + "vis.plot_transformed_image(\"test_images/1959ParisFriends.png\", render_factor=45)" ] }, { @@ -3069,7 +3066,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1925GypsyCampMaryland.jpg\")" + "vis.plot_transformed_image(\"test_images/1925GypsyCampMaryland.jpg\", render_factor=45)" ] }, { @@ -3078,7 +3075,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1941PoolTableGeorgia.jpg\")" + "vis.plot_transformed_image(\"test_images/1941PoolTableGeorgia.jpg\", render_factor=45)" ] }, { @@ -3159,7 +3156,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1940PAFamily.jpg\")" + "vis.plot_transformed_image(\"test_images/1940PAFamily.jpg\", render_factor=28)" ] }, { @@ -3168,7 +3165,7 @@ "metadata": {}, "outputs": [], "source": [ - "vis.plot_transformed_image(\"test_images/1910Finland.jpg\")" + "vis.plot_transformed_image(\"test_images/1910Finland.jpg\", render_factor=40)" ] }, { @@ -3198,6 +3195,60 @@ "vis.plot_transformed_image(\"test_images/CrystalPalaceLondon1854.PNG\")" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vis.plot_transformed_image(\"test_images/James1.jpg\", render_factor=15)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vis.plot_transformed_image(\"test_images/James2.jpg\", render_factor=20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vis.plot_transformed_image(\"test_images/James3.jpg\", render_factor=19)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vis.plot_transformed_image(\"test_images/James4.jpg\", render_factor=30)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vis.plot_transformed_image(\"test_images/James5.jpg\", render_factor=32)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vis.plot_transformed_image(\"test_images/James6.jpg\", render_factor=28)" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/VideoColorizer.ipynb b/VideoColorizer.ipynb index e044fd2..a12ee4d 100644 --- a/VideoColorizer.ipynb +++ b/VideoColorizer.ipynb @@ -16,20 +16,7 @@ "metadata": {}, "outputs": [], "source": [ - "import fastai\n", - "import ffmpeg\n", - "from fastai import *\n", - "from fastai.vision import *\n", - "from fastai.callbacks.tensorboard import *\n", - "from fastai.vision.gan import *\n", - "from fasterai.dataset import *\n", "from fasterai.visualize import *\n", - "from fasterai.loss import *\n", - "from fasterai.filters import *\n", - "from fasterai.generators import *\n", - "from pathlib import Path\n", - "from itertools import repeat\n", - "from IPython.display import HTML, display\n", "plt.style.use('dark_background')\n", "torch.backends.cudnn.benchmark=True" ] @@ -44,7 +31,7 @@ "#It literally just is a number multiplied by 16 to get the square render resolution. \n", "#Note that this doesn't affect the resolution of the final output- the output is the same resolution as the input.\n", "#Example: render_factor=21 => color is rendered at 16x21 = 336x336 px. \n", - "render_factor=43\n", + "render_factor=36\n", "\n", "#Specify media_url. Many sources will work (YouTube, Imgur, Twitter, Reddit, etc). \n", "#Complete list here: https://rg3.github.io/youtube-dl/supportedsites.html . \n", @@ -53,7 +40,7 @@ "#source_url = 'https://www.youtube.com/watch?v=gZShc8oshtU'\n", "#source_url = 'https://www.youtube.com/watch?v=fk6qiJjEEBo'\n", "#source_url = 'https://twitter.com/silentmoviegifs/status/1088830101863759872'\n", - "source_url = None\n", + "source_url = 'https://i.imgur.com/Ob9pZad.gifv'\n", "file_name = 'video14.mp4'" ] }, @@ -75,8 +62,7 @@ } ], "source": [ - "#colorizer = get_video_colorizer(render_factor=render_factor)\n", - "colorizer = get_video_colorizer2(render_factor=render_factor)" + "colorizer = get_video_colorizer(render_factor=render_factor)" ] }, { @@ -84,6 +70,15 @@ "execution_count": 5, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Imgur] Ob9pZad: Downloading webpage\n", + "[download] Destination: video/source/video14.mp4\n", + "[download] 100% of 10.08MiB in 00:02\n" + ] + }, { "data": { "text/html": [ @@ -101,8 +96,8 @@ " background: #F44336;\n", " }\n", " \n", - " \n", - " Interrupted\n", + " \n", + " 100.00% [755/755 02:57<00:00]\n", " \n", " " ], @@ -114,32 +109,10 @@ "output_type": "display_data" }, { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mcolorizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolorize_from_url\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msource_url\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mcolorizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolorize_from_file_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fasterai/visualize.py\u001b[0m in \u001b[0;36mcolorize_from_file_name\u001b[0;34m(self, file_name)\u001b[0m\n\u001b[1;32m 128\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mcolorize_from_file_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile_name\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 129\u001b[0m \u001b[0msource_path\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_folder\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mfile_name\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 130\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_colorize_from_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msource_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 131\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 132\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_colorize_from_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msource_path\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mPath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fasterai/visualize.py\u001b[0m in \u001b[0;36m_colorize_from_path\u001b[0;34m(self, source_path)\u001b[0m\n\u001b[1;32m 132\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_colorize_from_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msource_path\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mPath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 133\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_extract_raw_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msource_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 134\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_colorize_raw_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msource_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 135\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_build_video\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msource_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 136\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fasterai/visualize.py\u001b[0m in \u001b[0;36m_colorize_raw_frames\u001b[0;34m(self, source_path)\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[0mimg_path\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbwframes_folder\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mimg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 105\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misfile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg_path\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--> 106\u001b[0;31m \u001b[0mcolor_image\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_transformed_image\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg_path\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 107\u001b[0m \u001b[0mcolor_image\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolorframes_folder\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mimg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fasterai/visualize.py\u001b[0m in \u001b[0;36mget_transformed_image\u001b[0;34m(self, path, render_factor)\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_transformed_image\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mPath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrender_factor\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m->\u001b[0m\u001b[0mImage\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0morig_image\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_open_pil_image\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 41\u001b[0;31m \u001b[0mfiltered_image\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morig_image\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_image\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrender_factor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrender_factor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 42\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfiltered_image\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fasterai/filters.py\u001b[0m in \u001b[0;36mfilter\u001b[0;34m(self, orig_image, filtered_image, render_factor)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 102\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfilter\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilters\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 103\u001b[0;31m \u001b[0mfiltered_image\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfilter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morig_image\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfiltered_image\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrender_factor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 104\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 105\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfiltered_image\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fasterai/filters.py\u001b[0m in \u001b[0;36mfilter\u001b[0;34m(self, orig_image, filtered_image, render_factor)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfilter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_image\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mPilImage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfiltered_image\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mPilImage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrender_factor\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m->\u001b[0m\u001b[0mPilImage\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0mrender_sz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrender_factor\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender_base\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0mmodel_image\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_model_process\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morig\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfiltered_image\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msz\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrender_sz\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap_to_orig\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fasterai/filters.py\u001b[0m in \u001b[0;36m_model_process\u001b[0;34m(self, orig, sz)\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnorm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdo_x\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 45\u001b[0m result = self.learn.pred_batch(ds_type=DatasetType.Valid, \n\u001b[0;32m---> 46\u001b[0;31m batch=(x[None].cuda(),y[None]), reconstruct=True)\n\u001b[0m\u001b[1;32m 47\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdenorm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdo_x\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fastai/basic_train.py\u001b[0m in \u001b[0;36mpred_batch\u001b[0;34m(self, ds_type, batch, reconstruct)\u001b[0m\n\u001b[1;32m 315\u001b[0m \u001b[0mcb_handler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCallbackHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 316\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0myb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0myb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrain\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 317\u001b[0;31m \u001b[0mpreds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mloss_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcb_handler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 318\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_loss_func2activ\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpreds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mreconstruct\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fastai/basic_train.py\u001b[0m in \u001b[0;36mloss_batch\u001b[0;34m(model, xb, yb, loss_func, opt, cb_handler)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_listy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mxb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mxb\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_listy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0myb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0myb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0myb\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mxb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_loss_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\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[0m\n\u001b[1;32m 488\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 489\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\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[0m\n\u001b[0m\u001b[1;32m 490\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\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 491\u001b[0m \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/media/jason/Projects/Deep Learning/DeOldifyV2/DeOldify/fastai/layers.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m 131\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ml\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayers\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 132\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0morig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 133\u001b[0;31m \u001b[0mnres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 134\u001b[0m \u001b[0;31m# We have to remove res.orig to avoid hanging refs and therefore memory leaks\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 135\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0morig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\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[0m\n\u001b[1;32m 488\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 489\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\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[0m\n\u001b[0m\u001b[1;32m 490\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\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 491\u001b[0m \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/container.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mmodule\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_modules\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\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---> 92\u001b[0;31m \u001b[0minput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 93\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\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[0m\n\u001b[1;32m 488\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 489\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\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[0m\n\u001b[0m\u001b[1;32m 490\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\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 491\u001b[0m \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/container.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mmodule\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_modules\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\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---> 92\u001b[0;31m \u001b[0minput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 93\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 483\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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[1;32m 484\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_pre_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\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--> 485\u001b[0;31m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 486\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_C\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tracing_state\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 487\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\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[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/utils/spectral_norm.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, module, inputs)\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 100\u001b[0;31m \u001b[0msetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute_weight\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdo_power_iteration\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodule\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtraining\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 101\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 102\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_solve_v_and_rescale\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight_mat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_sigma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/utils/spectral_norm.py\u001b[0m in \u001b[0;36mcompute_weight\u001b[0;34m(self, module, do_power_iteration)\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[0mv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 86\u001b[0;31m \u001b[0msigma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mweight_mat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\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 87\u001b[0m \u001b[0mweight\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mweight\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0msigma\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 88\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mweight\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "name": "stdout", + "output_type": "stream", + "text": [ + "Video created here: video/result/video14.mp4\n" ] } ], diff --git a/VideoColorizerColab.ipynb b/VideoColorizerColab.ipynb index cec7f59..b5dd287 100644 --- a/VideoColorizerColab.ipynb +++ b/VideoColorizerColab.ipynb @@ -271,7 +271,7 @@ }, "outputs": [], "source": [ - "colorizer = get_video_colorizer2(render_factor=render_factor)" + "colorizer = get_video_colorizer(render_factor=render_factor)" ] }, { diff --git a/fasterai/critics.py b/fasterai/critics.py index 8bb752d..adb7ba6 100644 --- a/fasterai/critics.py +++ b/fasterai/critics.py @@ -27,24 +27,3 @@ def custom_gan_critic(n_channels:int=3, nf:int=256, n_blocks:int=3, p:int=0.15): def colorize_crit_learner(data:ImageDataBunch, loss_critic=AdaptiveLoss(nn.BCEWithLogitsLoss()), nf:int=256)->Learner: return Learner(data, custom_gan_critic(nf=nf), metrics=accuracy_thresh_expand, loss_func=loss_critic, wd=1e-3) - - - -def custom_gan_critic2(n_channels:int=3, nf:int=256, n_blocks:int=3, p:int=0.15): - "Critic to train a `GAN`." - layers = [ - _conv(n_channels, nf, ks=4, stride=2), - nn.Dropout2d(p/2), - _conv(nf, nf, ks=3, stride=1)] - for i in range(n_blocks): - layers += [ - nn.Dropout2d(p), - _conv(nf, nf*2, ks=4, stride=2, self_attention=(i==0))] - nf *= 2 - layers += [ - _conv(nf, 1, ks=4, bias=False, padding=0, use_activ=False), - Flatten()] - return nn.Sequential(*layers) - -def colorize_crit_learner2(data:ImageDataBunch, loss_critic=AdaptiveLoss(nn.BCEWithLogitsLoss()), nf:int=256)->Learner: - return Learner(data, custom_gan_critic2(nf=nf), metrics=accuracy_thresh_expand, loss_func=loss_critic, wd=1e-3) \ No newline at end of file diff --git a/fasterai/generators.py b/fasterai/generators.py index 62b028d..2b65f69 100644 --- a/fasterai/generators.py +++ b/fasterai/generators.py @@ -4,6 +4,38 @@ from .unet import DynamicUnetWide, DynamicUnetDeep from .loss import FeatureLoss from .dataset import * +#Weights are implicitly read from ./models/ folder +def gen_inference_wide(root_folder:Path, weights_name:str, nf_factor:int=2, arch=models.resnet101)->Learner: + data = get_dummy_databunch() + learn = gen_learner_wide(data=data, gen_loss=F.l1_loss, nf_factor=nf_factor, arch=arch) + learn.path = root_folder + learn.load(weights_name) + learn.model.eval() + return learn + +def gen_learner_wide(data:ImageDataBunch, gen_loss=FeatureLoss(), arch=models.resnet101, nf_factor:int=2)->Learner: + return unet_learner_wide(data, arch=arch, wd=1e-3, blur=True, norm_type=NormType.Spectral, + self_attention=True, y_range=(-3.,3.), loss_func=gen_loss, nf_factor=nf_factor) + +#The code below is meant to be merged into fastaiv1 ideally +def unet_learner_wide(data:DataBunch, arch:Callable, pretrained:bool=True, blur_final:bool=True, + norm_type:Optional[NormType]=NormType, split_on:Optional[SplitFuncOrIdxList]=None, + blur:bool=False, self_attention:bool=False, y_range:Optional[Tuple[float,float]]=None, last_cross:bool=True, + bottle:bool=False, nf_factor:int=1, **kwargs:Any)->Learner: + "Build Unet learner from `data` and `arch`." + meta = cnn_config(arch) + body = create_body(arch, pretrained) + model = to_device(DynamicUnetWide(body, n_classes=data.c, blur=blur, blur_final=blur_final, + self_attention=self_attention, y_range=y_range, norm_type=norm_type, last_cross=last_cross, + bottle=bottle, nf_factor=nf_factor), data.device) + learn = Learner(data, model, **kwargs) + learn.split(ifnone(split_on,meta['split'])) + if pretrained: learn.freeze() + apply_init(model[2], nn.init.kaiming_normal_) + return learn + +#---------------------------------------------------------------------- + #Weights are implicitly read from ./models/ folder def gen_inference_deep(root_folder:Path, weights_name:str, arch=models.resnet34, nf_factor:float=1.25)->Learner: data = get_dummy_databunch() @@ -34,34 +66,4 @@ def unet_learner_deep(data:DataBunch, arch:Callable, pretrained:bool=True, blur_ apply_init(model[2], nn.init.kaiming_normal_) return learn -#----------------------------- - -#Weights are implicitly read from ./models/ folder -def gen_inference_wide(root_folder:Path, weights_name:str, nf_factor:int=2, arch=models.resnet34)->Learner: - data = get_dummy_databunch() - learn = gen_learner_wide(data=data, gen_loss=F.l1_loss, nf_factor=nf_factor, arch=arch) - learn.path = root_folder - learn.load(weights_name) - learn.model.eval() - return learn - -def gen_learner_wide(data:ImageDataBunch, gen_loss=FeatureLoss(), arch=models.resnet34, nf_factor:int=2)->Learner: - return unet_learner_wide(data, arch=arch, wd=1e-3, blur=True, norm_type=NormType.Spectral, - self_attention=True, y_range=(-3.,3.), loss_func=gen_loss, nf_factor=nf_factor) - -#The code below is meant to be merged into fastaiv1 ideally -def unet_learner_wide(data:DataBunch, arch:Callable, pretrained:bool=True, blur_final:bool=True, - norm_type:Optional[NormType]=NormType, split_on:Optional[SplitFuncOrIdxList]=None, - blur:bool=False, self_attention:bool=False, y_range:Optional[Tuple[float,float]]=None, last_cross:bool=True, - bottle:bool=False, nf_factor:int=1, **kwargs:Any)->Learner: - "Build Unet learner from `data` and `arch`." - meta = cnn_config(arch) - body = create_body(arch, pretrained) - model = to_device(DynamicUnetWide(body, n_classes=data.c, blur=blur, blur_final=blur_final, - self_attention=self_attention, y_range=y_range, norm_type=norm_type, last_cross=last_cross, - bottle=bottle, nf_factor=nf_factor), data.device) - learn = Learner(data, model, **kwargs) - learn.split(ifnone(split_on,meta['split'])) - if pretrained: learn.freeze() - apply_init(model[2], nn.init.kaiming_normal_) - return learn \ No newline at end of file +#----------------------------- \ No newline at end of file diff --git a/fasterai/loss.py b/fasterai/loss.py index 0ec5e45..09cd92e 100644 --- a/fasterai/loss.py +++ b/fasterai/loss.py @@ -4,39 +4,8 @@ from fastai.torch_core import * from fastai.callbacks import hook_outputs import torchvision.models as models -class FeatureLoss3(nn.Module): - def __init__(self, layer_wgts=[5,15,2]): - super().__init__() - self.m_feat = models.vgg16_bn(True).features.cuda().eval() - requires_grad(self.m_feat, False) - blocks = [i-1 for i,o in enumerate(children(self.m_feat)) if isinstance(o,nn.MaxPool2d)] - layer_ids = blocks[2:5] - self.loss_features = [self.m_feat[i] for i in layer_ids] - self.hooks = hook_outputs(self.loss_features, detach=False) - self.wgts = layer_wgts - self.metric_names = ['pixel',] + [f'feat_{i}' for i in range(len(layer_ids))] - self.base_loss = F.l1_loss - - def _make_features(self, x, clone=False): - self.m_feat(x) - return [(o.clone() if clone else o) for o in self.hooks.stored] - - def forward(self, input, target): - out_feat = self._make_features(target, clone=True) - in_feat = self._make_features(input) - self.feat_losses = [self.base_loss(input,target)] - self.feat_losses += [self.base_loss(f_in, f_out)*w - for f_in, f_out, w in zip(in_feat, out_feat, self.wgts)] - - self.metrics = dict(zip(self.metric_names, self.feat_losses)) - return sum(self.feat_losses) - - - - def __del__(self): self.hooks.remove() - -class FeatureLoss2(nn.Module): +class FeatureLoss(nn.Module): def __init__(self, layer_wgts=[20,70,10]): super().__init__() @@ -67,81 +36,6 @@ class FeatureLoss2(nn.Module): def __del__(self): self.hooks.remove() -#"Before activations" in ESRGAN paper -class FeatureLoss(nn.Module): - def __init__(self, layer_wgts=[5,15,2]): - super().__init__() - - self.m_feat = models.vgg16_bn(True).features.cuda().eval() - requires_grad(self.m_feat, False) - blocks = [i-2 for i,o in enumerate(children(self.m_feat)) if isinstance(o,nn.MaxPool2d)] - layer_ids = blocks[2:5] - self.loss_features = [self.m_feat[i] for i in layer_ids] - self.hooks = hook_outputs(self.loss_features, detach=False) - self.wgts = layer_wgts - self.metric_names = ['pixel',] + [f'feat_{i}' for i in range(len(layer_ids))] - self.base_loss = F.l1_loss - - def _make_features(self, x, clone=False): - self.m_feat(x) - return [(o.clone() if clone else o) for o in self.hooks.stored] - - def forward(self, input, target): - out_feat = self._make_features(target, clone=True) - in_feat = self._make_features(input) - self.feat_losses = [self.base_loss(input,target)] - self.feat_losses += [self.base_loss(f_in, f_out)*w - for f_in, f_out, w in zip(in_feat, out_feat, self.wgts)] - - self.metrics = dict(zip(self.metric_names, self.feat_losses)) - return sum(self.feat_losses) - - - - def __del__(self): self.hooks.remove() - - - -class PretrainFeatureLoss(nn.Module): - def __init__(self, layer_wgts=[5,15,2], gram_wgt:float=5e3): - super().__init__() - self.gram_wgt = gram_wgt - self.m_feat = models.vgg16_bn(True).features.cuda().eval() - requires_grad(self.m_feat, False) - blocks = [i-2 for i,o in enumerate(children(self.m_feat)) if isinstance(o,nn.MaxPool2d)] - layer_ids = blocks[2:5] - self.loss_features = [self.m_feat[i] for i in layer_ids] - self.hooks = hook_outputs(self.loss_features, detach=False) - self.wgts = layer_wgts - self.metric_names = ['pixel',] + [f'feat_{i}' for i in range(len(layer_ids))] - self.base_loss = F.l1_loss - - def _gram_matrix(self, x:torch.Tensor): - n,c,h,w = x.size() - x = x.view(n, c, -1) - return (x @ x.transpose(1,2))/(c*h*w) - - def _make_features(self, x, clone=False): - self.m_feat(x) - return [(o.clone() if clone else o) for o in self.hooks.stored] - - def forward(self, input, target): - out_feat = self._make_features(target, clone=True) - in_feat = self._make_features(input) - self.feat_losses = [self.base_loss(input,target)] - - self.feat_losses += [self.base_loss(self._gram_matrix(f_in), self._gram_matrix(f_out))*w**2 * self.gram_wgt - for f_in, f_out, w in zip(in_feat, out_feat, self.wgts)] - - self.feat_losses += [self.base_loss(f_in, f_out)*w - for f_in, f_out, w in zip(in_feat, out_feat, self.wgts)] - - self.metrics = dict(zip(self.metric_names, self.feat_losses)) - return sum(self.feat_losses) - - def __del__(self): self.hooks.remove() - - #Includes wasserstein loss class WassFeatureLoss(nn.Module): def __init__(self, layer_wgts=[5,15,2], wass_wgts=[3.0,0.7,0.01]): diff --git a/fasterai/visualize.py b/fasterai/visualize.py index 3def8aa..484f335 100644 --- a/fasterai/visualize.py +++ b/fasterai/visualize.py @@ -134,25 +134,16 @@ class VideoColorizer(): self._colorize_raw_frames(source_path) self._build_video(source_path) - -def get_video_colorizer2(root_folder:Path=Path('./'), weights_name:str='ColorizeVideos_gen2', +def get_video_colorizer(root_folder:Path=Path('./'), weights_name:str='ColorizeVideos_gen', results_dir = 'result_images', render_factor:int=36)->VideoColorizer: learn = gen_inference_wide(root_folder=root_folder, weights_name=weights_name, arch=models.resnet101) filtr = MasterFilter([ColorizerFilter(learn=learn)], render_factor=render_factor) vis = ModelImageVisualizer(filtr, results_dir=results_dir) return VideoColorizer(vis) - -def get_video_colorizer(root_folder:Path=Path('./'), weights_name:str='ColorizeVideos_gen', - results_dir = 'result_images', render_factor:int=21, nf_factor:float=1.25)->VideoColorizer: - learn = gen_inference_deep(root_folder=root_folder, weights_name=weights_name, nf_factor=nf_factor) - filtr = MasterFilter([ColorizerFilter(learn=learn)], render_factor=render_factor) - vis = ModelImageVisualizer(filtr, results_dir=results_dir) - return VideoColorizer(vis) - def get_image_colorizer(root_folder:Path=Path('./'), weights_name:str='ColorizeImages_gen', - results_dir = 'result_images', render_factor:int=21, arch=models.resnet34)->ModelImageVisualizer: - learn = gen_inference_wide(root_folder=root_folder, weights_name=weights_name, arch=arch) + results_dir = 'result_images', render_factor:int=21)->ModelImageVisualizer: + learn = gen_inference_wide(root_folder=root_folder, weights_name=weights_name, arch=models.resnet101) filtr = MasterFilter([ColorizerFilter(learn=learn)], render_factor=render_factor) vis = ModelImageVisualizer(filtr, results_dir=results_dir) return vis diff --git a/test_images/LittleAirplane1934.jpg b/test_images/LittleAirplane1934.jpg index b99ce49..6b6b059 100644 --- a/test_images/LittleAirplane1934.jpg +++ b/test_images/LittleAirplane1934.jpg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b06c958ff878b962410047379219d73f56e9202a50d36b9930360ef1a5a63618 -size 758956 +oid sha256:aa2c33c044e68f1821e82221960f535927f81f92c02bde7e1d1148dbfc89fe0c +size 865210 diff --git a/test_images/ParisWomenFurs1920s.jpg b/test_images/ParisWomenFurs1920s.jpg index 6891ee0..0d524e1 100644 --- a/test_images/ParisWomenFurs1920s.jpg +++ b/test_images/ParisWomenFurs1920s.jpg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16cbf5c4eda1c272fba854e0bd4864dd5f4ac72aab7f9b496a70320f3cbd65f2 -size 78956 +oid sha256:f3bca916f97811587da59dd240ec4b497497ed52a94f93a81a0c77b23cbe6cb3 +size 61827