{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|default_exp resnet" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ResNets" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "import pickle,gzip,math,os,time,shutil,torch,matplotlib as mpl,numpy as np,matplotlib.pyplot as plt\n", "import fastcore.all as fc\n", "from collections.abc import Mapping\n", "from pathlib import Path\n", "from operator import attrgetter,itemgetter\n", "from functools import partial\n", "from copy import copy\n", "from contextlib import contextmanager\n", "\n", "import torchvision.transforms.functional as TF,torch.nn.functional as F\n", "from torch import tensor,nn,optim\n", "from torch.utils.data import DataLoader,default_collate\n", "from torch.nn import init\n", "from torch.optim import lr_scheduler\n", "from torcheval.metrics import MulticlassAccuracy\n", "from datasets import load_dataset,load_dataset_builder\n", "\n", "from miniai.datasets import *\n", "from miniai.conv import *\n", "from miniai.learner import *\n", "from miniai.activations import *\n", "from miniai.init import *\n", "from miniai.sgd import *" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from fastcore.test import test_close\n", "\n", "torch.set_printoptions(precision=2, linewidth=140, sci_mode=False)\n", "torch.manual_seed(1)\n", "mpl.rcParams['image.cmap'] = 'gray'\n", "\n", "import logging\n", "logging.disable(logging.WARNING)\n", "\n", "set_seed(42)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "10218e9f603241a7906a86c053b3b4dd", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/2 [00:00\n", " /* Turns off some styling */\n", " progress {\n", " /* gets rid of default border in Firefox and Opera. */\n", " border: none;\n", " /* Needs to be in here for Safari polyfill so background images work as expected. */\n", " background-size: auto;\n", " }\n", " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n", " background: #F44336;\n", " }\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
accuracylossepochtrain
0.8060.7030train
0.8470.4560eval
0.8840.3331train
0.8560.4151eval
0.9060.2632train
0.8820.3252eval
0.9230.2153train
0.9100.2513eval
0.9400.1704train
0.9170.2324eval
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit(epochs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Skip Connections" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ResNet (*residual network*) was introduced in 2015 by Kaiming He et al in the article [\"Deep Residual Learning for Image Recognition\"](https://arxiv.org/abs/1512.03385). The key idea is using a *skip connection* to allow deeper networks to train successfully." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _conv_block(ni, nf, stride, act=act_gr, norm=None, ks=3):\n", " return nn.Sequential(conv(ni, nf, stride=1, act=act, norm=norm, ks=ks),\n", " conv(nf, nf, stride=stride, act=None, norm=norm, ks=ks))\n", "\n", "class ResBlock(nn.Module):\n", " def __init__(self, ni, nf, stride=1, ks=3, act=act_gr, norm=None):\n", " super().__init__()\n", " self.convs = _conv_block(ni, nf, stride, act=act, ks=ks, norm=norm)\n", " self.idconv = fc.noop if ni==nf else conv(ni, nf, ks=1, stride=1, act=None)\n", " self.pool = fc.noop if stride==1 else nn.AvgPool2d(2, ceil_mode=True)\n", " self.act = act()\n", "\n", " def forward(self, x): return self.act(self.convs(x) + self.idconv(self.pool(x)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Post-lesson update**: Piotr Czapla noticed that we forgot to include `norm=norm` in the call to `_conv_block` above, so the resnets in the lesson didn't have batchnorm in the resblocks! After fixing this, we discovered that initializing the `conv2` batchnorm weights to zero makes things worse in every model we tried, so we removed that. That init method was originally introduced to handle training extremely deep models (much deeper than we use here) -- it appears from this little test that it might be worse for less deep models." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def get_model(act=nn.ReLU, nfs=(8,16,32,64,128,256), norm=nn.BatchNorm2d):\n", " layers = [ResBlock(1, 8, stride=1, act=act, norm=norm)]\n", " layers += [ResBlock(nfs[i], nfs[i+1], act=act, norm=norm, stride=2) for i in range(len(nfs)-1)]\n", " layers += [nn.Flatten(), nn.Linear(nfs[-1], 10, bias=False), nn.BatchNorm1d(10)]\n", " return nn.Sequential(*layers).to(def_device)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ResBlock torch.Size([1024, 1, 28, 28]) torch.Size([1024, 8, 28, 28])\n", "ResBlock torch.Size([1024, 8, 28, 28]) torch.Size([1024, 16, 14, 14])\n", "ResBlock torch.Size([1024, 16, 14, 14]) torch.Size([1024, 32, 7, 7])\n", "ResBlock torch.Size([1024, 32, 7, 7]) torch.Size([1024, 64, 4, 4])\n", "ResBlock torch.Size([1024, 64, 4, 4]) torch.Size([1024, 128, 2, 2])\n", "ResBlock torch.Size([1024, 128, 2, 2]) torch.Size([1024, 256, 1, 1])\n", "Flatten torch.Size([1024, 256, 1, 1]) torch.Size([1024, 256])\n", "Linear torch.Size([1024, 256]) torch.Size([1024, 10])\n", "BatchNorm1d torch.Size([1024, 10]) torch.Size([1024, 10])\n" ] } ], "source": [ "def _print_shape(hook, mod, inp, outp): print(type(mod).__name__, inp[0].shape, outp.shape)\n", "model = get_model()\n", "learn = TrainLearner(model, dls, F.cross_entropy, cbs=[DeviceCB(), SingleBatchCB()])\n", "with Hooks(model, _print_shape) as hooks: learn.fit(1, train=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@fc.patch\n", "def summary(self:Learner):\n", " res = '|Module|Input|Output|Num params|\\n|--|--|--|--|\\n'\n", " tot = 0\n", " def _f(hook, mod, inp, outp):\n", " nonlocal res,tot\n", " nparms = sum(o.numel() for o in mod.parameters())\n", " tot += nparms\n", " res += f'|{type(mod).__name__}|{tuple(inp[0].shape)}|{tuple(outp.shape)}|{nparms}|\\n'\n", " with Hooks(self.model, _f) as hooks: self.fit(1, lr=1, train=False, cbs=SingleBatchCB())\n", " print(\"Tot params: \", tot)\n", " if fc.IN_NOTEBOOK:\n", " from IPython.display import Markdown\n", " return Markdown(res)\n", " else: print(res)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tot params: 1228908\n" ] }, { "data": { "text/markdown": [ "|Module|Input|Output|Num params|\n", "|--|--|--|--|\n", "|ResBlock|(1024, 1, 28, 28)|(1024, 8, 28, 28)|712|\n", "|ResBlock|(1024, 8, 28, 28)|(1024, 16, 14, 14)|3696|\n", "|ResBlock|(1024, 16, 14, 14)|(1024, 32, 7, 7)|14560|\n", "|ResBlock|(1024, 32, 7, 7)|(1024, 64, 4, 4)|57792|\n", "|ResBlock|(1024, 64, 4, 4)|(1024, 128, 2, 2)|230272|\n", "|ResBlock|(1024, 128, 2, 2)|(1024, 256, 1, 1)|919296|\n", "|Flatten|(1024, 256, 1, 1)|(1024, 256)|0|\n", "|Linear|(1024, 256)|(1024, 10)|2560|\n", "|BatchNorm1d|(1024, 10)|(1024, 10)|20|\n" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TrainLearner(get_model(), dls, F.cross_entropy, cbs=DeviceCB()).summary()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model = get_model(act_gr, norm=nn.BatchNorm2d).apply(iw)\n", "MomentumLearner(model, dls, F.cross_entropy, cbs=DeviceCB()).lr_find()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lr = 2e-2\n", "tmax = epochs * len(dls.train)\n", "sched = partial(lr_scheduler.OneCycleLR, max_lr=lr, total_steps=tmax)\n", "xtra = [BatchSchedCB(sched)]\n", "model = get_model(act_gr, norm=nn.BatchNorm2d).apply(iw)\n", "learn = TrainLearner(model, dls, F.cross_entropy, lr=lr, cbs=cbs+xtra, opt_func=optim.AdamW)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
accuracylossepochtrain
0.8270.6810train
0.8140.6090eval
0.8940.3521train
0.8870.3261eval
0.9130.2622train
0.9100.2652eval
0.9340.1963train
0.9220.2273eval
0.9500.1494train
0.9280.2114eval
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit(epochs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import timm\n", "from timm.models.resnet import BasicBlock, ResNet, Bottleneck" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'cspresnet50 cspresnet50d cspresnet50w eca_resnet33ts ecaresnet26t ecaresnet50d ecaresnet50d_pruned ecaresnet50t ecaresnet101d ecaresnet101d_pruned ecaresnet200d ecaresnet269d ecaresnetlight ens_adv_inception_resnet_v2 gcresnet33ts gcresnet50t gluon_resnet18_v1b gluon_resnet34_v1b gluon_resnet50_v1b gluon_resnet50_v1c gluon_resnet50_v1d gluon_resnet50_v1s gluon_resnet101_v1b gluon_resnet101_v1c gluon_resnet101_v1d gluon_resnet101_v1s gluon_resnet152_v1b gluon_resnet152_v1c gluon_resnet152_v1d gluon_resnet152_v1s inception_resnet_v2 lambda_resnet26rpt_256 lambda_resnet26t lambda_resnet50ts legacy_seresnet18 legacy_seresnet34 legacy_seresnet50 legacy_seresnet101 legacy_seresnet152 nf_ecaresnet26 nf_ecaresnet50 nf_ecaresnet101 nf_resnet26 nf_resnet50 nf_resnet101 nf_seresnet26 nf_seresnet50 nf_seresnet101 resnet10t resnet14t resnet18 resnet18d resnet26 resnet26d resnet26t resnet32ts resnet33ts resnet34 resnet34d resnet50 resnet50_gn resnet50d resnet50t resnet51q resnet61q resnet101 resnet101d resnet152 resnet152d resnet200 resnet200d resnetaa50 resnetaa50d resnetaa101d resnetblur18 resnetblur50 resnetblur50d resnetblur101d resnetrs50 resnetrs101 resnetrs152 resnetrs200 resnetrs270 resnetrs350 resnetrs420 resnetv2_50 resnetv2_50d resnetv2_50d_evob resnetv2_50d_evos resnetv2_50d_frn resnetv2_50d_gn resnetv2_50t resnetv2_50x1_bit_distilled resnetv2_50x1_bitm resnetv2_50x1_bitm_in21k resnetv2_50x3_bitm resnetv2_50x3_bitm_in21k resnetv2_101 resnetv2_101d resnetv2_101x1_bitm resnetv2_101x1_bitm_in21k resnetv2_101x3_bitm resnetv2_101x3_bitm_in21k resnetv2_152 resnetv2_152d resnetv2_152x2_bit_teacher resnetv2_152x2_bit_teacher_384 resnetv2_152x2_bitm resnetv2_152x2_bitm_in21k resnetv2_152x4_bitm resnetv2_152x4_bitm_in21k seresnet18 seresnet33ts seresnet34 seresnet50 seresnet50t seresnet101 seresnet152 seresnet152d seresnet200d seresnet269d seresnetaa50d skresnet18 skresnet34 skresnet50 skresnet50d ssl_resnet18 ssl_resnet50 swsl_resnet18 swsl_resnet50 tresnet_l tresnet_l_448 tresnet_m tresnet_m_448 tresnet_m_miil_in21k tresnet_v2_l tresnet_xl tresnet_xl_448 tv_resnet34 tv_resnet50 tv_resnet101 tv_resnet152 vit_base_resnet26d_224 vit_base_resnet50_224_in21k vit_base_resnet50_384 vit_base_resnet50d_224 vit_small_resnet26d_224 vit_small_resnet50d_s16_224 wide_resnet50_2 wide_resnet101_2'" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "' '.join(timm.list_models('*resnet*'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "resnet18: block=BasicBlock, layers=[2, 2, 2, 2]\n", "resnet18d: block=BasicBlock, layers=[2, 2, 2, 2], stem_width=32, stem_type='deep', avg_down=True\n", "resnet10t: block=BasicBlock, layers=[1, 1, 1, 1], stem_width=32, stem_type='deep_tiered', avg_down=True\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model = timm.create_model('resnet18d', in_chans=1, num_classes=10)\n", "# model = ResNet(in_chans=1, block=BasicBlock, layers=[2,2,2,2], stem_width=32, avg_down=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lr = 2e-2\n", "tmax = epochs * len(dls.train)\n", "sched = partial(lr_scheduler.OneCycleLR, max_lr=lr, total_steps=tmax)\n", "xtra = [BatchSchedCB(sched)]\n", "learn = TrainLearner(model, dls, F.cross_entropy, lr=lr, cbs=cbs+xtra, opt_func=optim.AdamW)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
accuracylossepochtrain
0.7810.6330train
0.6641.3160eval
0.8780.3291train
0.8700.3621eval
0.9050.2552train
0.8890.3072eval
0.9260.1973train
0.9110.2443eval
0.9450.1504train
0.9200.2234eval
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit(epochs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Export -" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import nbdev; nbdev.nbdev_export()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "jupytext": { "split_at_heading": true }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 4 }