├── README.md ├── ResNet18_224.ipynb ├── ResNet18_224_finetune.ipynb ├── ResNet18_Baseline.ipynb ├── img ├── baseline.png ├── baseline_no_pretrain.png ├── resnet18_224.png ├── resnet18_224_64.png └── restnet18_224_64_fine_tune.png └── utils ├── Bicubic Interpolation.ipynb ├── tiny-imgnet-val-reformat.ipynb └── train_model.py /README.md: -------------------------------------------------------------------------------- 1 | # Tiny-ImageNet-Classifier 2 | Tiny-ImageNet Classifier using Pytorch 3 | 4 | ## Tiny-ImageNet 5 | 6 | | Properties | | 7 | | --------------------------- | --------- | 8 | | Number of Classes | 200 | 9 | | Number of training Images | 500 | 10 | | Number of validation Images | 50 | 11 | | Number of test Images | 50 | 12 | | Image Size | (64,64,3) | 13 | 14 | [Tiny-ImageNet][Tiny-ImageNet] 15 | 16 | ## Step.1 Create Baseline Classifier 17 | 18 | We will use a ResNet18 model as our baseline model. 19 | 20 | | Layer Name | Output Size (Input 224x224x3) | ResNet-18 | 21 | | --------------- | ----------------------------- | --------------------------- | 22 | | conv1 | 112x112x64 | 7x7, 64, stride=2, pad=3 | 23 | | max pool | 56x56x64 | 3x3, stride=2, pad=1 | 24 | | layer1 | 56x56x64 | [3x3, 64] x 2, stride = 1 | 25 | | layer2 | 28x28x128 | [3x3, 128] x2, stride = 2 | 26 | | layer3 | 14x14x256 | [3x3, 256] x2, stride = 2 | 27 | | layer4 | 7x7x512 | [3x3, 512] x2, stride = 2 | 28 | | average pool | 1x1x512 | Adaptive Average Pooling(1) | 29 | | Fully Connected | 1000 | 512x1000 | 30 | | softmax | 1000 | | 31 | 32 | Since ResNet18 is trained with 224x224 images and output of 1000 classes, we would have to modify the architecture to fit 64x64 images and output of 200 classes. 33 | 34 | 35 | 36 | #### Model with no pretrained weight 37 | 38 | ```python 39 | #Load Resnet18 40 | model_ft = models.resnet18() 41 | #Finetune Final few layers to adjust for tiny imagenet input 42 | model_ft.avgpool = nn.AdaptiveAvgPool2d(1) 43 | num_ftrs = model_ft.fc.in_features 44 | model_ft.fc = nn.Linear(num_ftrs, 200) 45 | ``` 46 | 47 | Following is the loss function and optimization used for baseline model 48 | 49 | ```python 50 | #Loss Function 51 | criterion = nn.CrossEntropyLoss() 52 | # Observe that all parameters are being optimized 53 | optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9) 54 | 55 | # Decay LR by a factor of 0.1 every 7 epochs 56 | exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1) 57 | ``` 58 | 59 | Following figure shows the training and validation results. 60 | 61 | ![](https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/img/baseline_no_pretrain.png?raw=true) 62 | 63 | | Model | pretrained weight | Dataset | Validation Accuracy | 64 | | -------- | ----------------- | ------- | ------------------- | 65 | | ResNet18 | None | 64x64 | 25.9% | 66 | 67 | #### Model with pretrained weight 68 | 69 | ```python 70 | #Load Resnet18 with pretrained weights 71 | model_ft = models.resnet18(pretrained=True) 72 | #Finetune Final few layers to adjust for tiny imagenet input 73 | model_ft.avgpool = nn.AdaptiveAvgPool2d(1) 74 | num_ftrs = model_ft.fc.in_features 75 | model_ft.fc = nn.Linear(num_ftrs, 200) 76 | ``` 77 | 78 | Same loss function and optimization were used. 79 | 80 | The following figure shows the training and validation results. 81 | 82 | ![](https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/img/baseline.png?raw=true) 83 | 84 | | Model | pretrained weight | Dataset | Validation Accuracy | 85 | | -------- | ----------------- | ------- | ------------------- | 86 | | ResNet18 | ImageNet | 64x64 | 56.9% | 87 | 88 | Reference [Baseline][Baseline] for detail python code. 89 | 90 | 91 | 92 | ## Step.2 Preprocessing 93 | 94 | Validation accuracy increased from 25.9% to 56.9% by using pretrained weight from ImageNet. The validity of pretrained weight was confirmed, even though the image size was 64x64. For the next step, we would like to observe the efficacy of pretrained weight when we train the model with 224x224 images. Images have to be preprocessed from 64x64 to 224x224. We used bicubic interpolation to improve the quality of a low-resolution image when expanding it to 224x224. 95 | 96 | ```python 97 | import cv2 98 | 99 | def resize_img(image_path, size): 100 | img = cv2.imread(image_path) 101 | img = cv2.resize(img,(size,size), interpolation = cv2.INTER_CUBIC) 102 | cv2.imwrite(image_path,img) 103 | ``` 104 | 105 | The following figure shows the training and validation results. 106 | 107 | ![](https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/img/resnet18_224.png?raw=true) 108 | 109 | | Model | pretrained weight | Dataset | Validation Accuracy | 110 | | -------- | ----------------- | ------- | ------------------- | 111 | | ResNet18 | ImageNet | 224x224 | 73.1% | 112 | 113 | Reference [224][224] for detail python code. 114 | 115 | 116 | 117 | ## Step.3 Finetuning 118 | 119 | We achieved a classifier model with validation accuracy of 73.1%. However, if we evaluate 64x64 validation images with this model, validation accuracy drops to 15.3%. This drop happens due to the difference in input image size. 120 | 121 | 122 | 123 | In order to use the 64x64 image, we have to retrain the model with 64x64 images. We used the weight from the previous (224x224 trained) model. 124 | 125 | ```python 126 | #Load ResNet18 127 | model_ft = models.resnet18() 128 | #Finetune Final few layers to adjust for tiny imagenet input 129 | model_ft.avgpool = nn.AdaptiveAvgPool2d(1) 130 | num_ftrs = model_ft.fc.in_features 131 | model_ft.fc = nn.Linear(num_ftrs, 200) 132 | #Load weights from 224x224 trained model 133 | model_ft.load_state_dict(torch.load('./models/resnet18_224_w.pt')) 134 | ``` 135 | 136 | The following figure shows the training and validation results. 137 | 138 | ![](https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/img/resnet18_224_64.png?raw=true) 139 | 140 | | Model | pretrained weight | Dataset | Validation Accuracy | 141 | | -------- | ----------------- | ------- | ------------------- | 142 | | ResNet18 | 224x224 model | 64x64 | 54.5% | 143 | 144 | Validation accuracy of this model was not as high as expected. It is even lower than the model trained from ImageNet pretrained weight. 145 | 146 | 147 | 148 | If we compare the output size of each convolutional layer, we can observe output size of 64x64 input image is much smaller than 224x224 input image. 149 | 150 | | Layer Name | Output Size (Input 224x224x3) | Output Size (Input 64x64x3) | ResNet-18 | 151 | | ------------ | ----------------------------- | --------------------------- | --------------------------- | 152 | | conv1 | 112x112x64 | 32x32x64 | 7x7, 64, stride=2, pad=3 | 153 | | max pool | 56x56x64 | 16x16x64 | 3x3, stride=2, pad=1 | 154 | | layer1 | 56x56x64 | 16x16x64 | [3x3, 64] x 2, stride = 1 | 155 | | layer2 | 28x28x128 | 8x8x128 | [3x3, 128] x2, stride = 2 | 156 | | layer3 | 14x14x256 | 4x4x256 | [3x3, 256] x2, stride = 2 | 157 | | layer4 | 7x7x512 | 2x2x512 | [3x3, 512] x2, stride = 2 | 158 | | average pool | 1x1x512 | 1x1x512 | Adaptive Average Pooling(1) | 159 | 160 | 161 | 162 | First layer of ResNet18 has stride of 2 followed by maxpool layer with stride of 2. This reduces the information of the image in the early stage of CNN. 163 | 164 | 165 | 166 | For fine tuning, we decided to reduce the kernel size to 3x3, stride to 1, and padding to 1. Then remove max pool layer to keep the output size. 167 | 168 | 169 | 170 | | Layer Name | Output Size (Input 64x64x3) | ResNet-18 FineTune | 171 | | ------------ | --------------------------- | --------------------------- | 172 | | conv1 | 64x64x64 | (3x3, 64, stride=1, pad=1)* | 173 | | max pool | -------------- | (Removed)* | 174 | | layer1 | 64x64x64 | [3x3, 64] x 2, stride = 1 | 175 | | layer2 | 32x32x128 | [3x3, 128] x2, stride = 2 | 176 | | layer3 | 16x16x256 | [3x3, 256] x2, stride = 2 | 177 | | layer4 | 8x8x512 | [3x3, 512] x2, stride = 2 | 178 | | average pool | 1x1x512 | Adaptive Average Pooling(1) | 179 | 180 | 181 | 182 | After fine tuning the layer, we train the model with 64x64 images. 183 | 184 | ```python 185 | #Load Resnet18 with pretrained weights 186 | model_ft = models.resnet18() 187 | #Finetune Final few layers 188 | model_ft.avgpool = nn.AdaptiveAvgPool2d(1) 189 | num_ftrs = model_ft.fc.in_features 190 | model_ft.fc = nn.Linear(num_ftrs, 200) 191 | model_ft.conv1 = nn.Conv2d(3,64, kernel_size=(3,3), stride=(1,1), padding=(1,1)) 192 | model_ft.maxpool = nn.Sequential() 193 | #Load pretrained weight from 224x224 trained model 194 | pretrained_dict = torch.load('./models/resnet18_224_w.pt') 195 | ``` 196 | 197 | The following figure shows the training and validation results. 198 | 199 | ![](https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/img/restnet18_224_64_fine_tune.png?raw=true) 200 | 201 | | Model | pretrained weight | Dataset | Validation Accuracy | 202 | | ----------------- | ----------------- | ------- | ------------------- | 203 | | ResNet18-FineTune | 224x224 model | 64x64 | 72.3% | 204 | 205 | Reference [FineTune][Fine] for detail python code. 206 | 207 | 208 | 209 | ## Summary 210 | 211 | | | Model | pretrained weight | Dataset | Validation Accuracy | 212 | | ---- | ----------------- | ----------------- | ------- | ------------------- | 213 | | 1 | ResNet18 | None | 64x64 | 25.9% | 214 | | 2 | ResNet18 | ImageNet | 64x64 | 56.9% | 215 | | 3 | ResNet18 | ImageNet | 224x224 | 73.1% | 216 | | 4 | ResNet18 | From 3 | 64x64 | 54.5% | 217 | | 5 | ResNet18-FineTune | From 3 | 64x64 | 72.3% | 218 | 219 | 220 | 221 | | Layer Name | ResNet-18 | ResNet-18 FineTune | 222 | | ------------ | --------------------------- | --------------------------- | 223 | | conv1 | 7x7, 64, stride=2, pad=3 | (3x3, 64, stride=1, pad=1)* | 224 | | max pool | 3x3, stride=2, pad=1 | (Removed)* | 225 | | layer1 | [3x3, 64] x 2, stride = 1 | [3x3, 64] x 2, stride = 1 | 226 | | layer2 | [3x3, 128] x2, stride = 2 | [3x3, 128] x2, stride = 2 | 227 | | layer3 | [3x3, 256] x2, stride = 2 | [3x3, 256] x2, stride = 2 | 228 | | layer4 | [3x3, 512] x2, stride = 2 | [3x3, 512] x2, stride = 2 | 229 | | average pool | Adaptive Average Pooling(1) | Adaptive Average Pooling(1) | 230 | 231 | 232 | 233 | | Layer Name | ResNet-18 (224x224x3) | ResNet-18 (64x64x3) | ResNet-18-FineTune (64x64x3) | 234 | | ------------ | --------------------- | ------------------- | ---------------------------- | 235 | | conv1 | 112x112x64 | 32x32x64 | 64x64x64 | 236 | | max pool | 56x56x64 | 16x16x64 | --------------- | 237 | | layer1 | 56x56x64 | 16x16x64 | 64x64x64 | 238 | | layer2 | 28x28x128 | 8x8x128 | 32x32x128 | 239 | | layer3 | 14x14x256 | 4x4x256 | 16x16x256 | 240 | | layer4 | 7x7x512 | 2x2x512 | 8x8x512 | 241 | | average pool | 1x1x512 | 1x1x512 | 1x1x512 | 242 | 243 | 244 | 245 | Through this project we could observe the efficacy of transfer learning, using pretrained weight and fine tuning the layer. 246 | 247 | 248 | 249 | ## Reference 250 | 251 | http://cs231n.stanford.edu/reports/2016/pdfs/411_Report.pdf 252 | 253 | https://towardsdatascience.com/transfer-learning-946518f95666 254 | 255 | [https://medium.com/@14prakash/understanding-and-implementing-architectures-of-resnet-and-resnext-for-state-of-the-art-image-cf51669e1624](https://medium.com/@14prakash/understanding-and-implementing-architectures-of-resnet-and-resnext-for-state-of-the-art-image-cf51669e1624) 256 | 257 | https://tiny-imagenet.herokuapp.com/ 258 | 259 | 260 | 261 | [Tiny-ImageNet]: https://tiny-imagenet.herokuapp.com/ "Link to Tiny-ImageNet" 262 | [Baseline]: https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/ResNet18_Baseline.ipynb "Link to Baseline" 263 | [224]: https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/ResNet18_224.ipynb "Link to Baseline" 264 | [Fine]: https://github.com/tjmoon0104/Tiny-ImageNet-Classifier/blob/master/ResNet18_224_finetune.ipynb "Link to Baseline" 265 | 266 | 267 | 268 | 269 | 270 | -------------------------------------------------------------------------------- /ResNet18_224.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 9, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import torch, torchvision\n", 10 | "import torch.nn as nn\n", 11 | "import torch.optim as optim\n", 12 | "from torch.optim import lr_scheduler\n", 13 | "import torchvision.datasets as datasets\n", 14 | "import torch.utils.data as data\n", 15 | "import torchvision.transforms as transforms\n", 16 | "from torch.autograd import Variable\n", 17 | "import torchvision.models as models\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "import time, os, copy, numpy as np\n", 20 | "from livelossplot import PlotLosses\n", 21 | "from train_model import train_model\n", 22 | "from test_model import test_model\n", 23 | "%matplotlib inline" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 3, 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "data_transforms = { 'train': transforms.Compose([transforms.ToTensor()]),\n", 33 | " 'val' : transforms.Compose([transforms.ToTensor(),]) }\n", 34 | "\n", 35 | "data_dir = 'images/224'\n", 36 | "image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x])\n", 37 | " for x in ['train', 'val']}\n", 38 | "dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=100, shuffle=True, num_workers=32)\n", 39 | " for x in ['train', 'val']}\n", 40 | "dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 4, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "#Load Resnet18 with pretrained weights\n", 50 | "model_ft = models.resnet18(pretrained=True)\n", 51 | "#Finetune Final few layers to adjust for tiny imagenet input\n", 52 | "model_ft.avgpool = nn.AdaptiveAvgPool2d(1)\n", 53 | "num_ftrs = model_ft.fc.in_features\n", 54 | "model_ft.fc = nn.Linear(num_ftrs, 200)\n", 55 | "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", 56 | "model_ft = model_ft.to(device)\n", 57 | "#Multi GPU\n", 58 | "model_ft = torch.nn.DataParallel(model_ft, device_ids=[0, 1])\n", 59 | "\n", 60 | "#Loss Function\n", 61 | "criterion = nn.CrossEntropyLoss()\n", 62 | "# Observe that all parameters are being optimized\n", 63 | "optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)\n", 64 | "\n", 65 | "# Decay LR by a factor of 0.1 every 7 epochs\n", 66 | "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 5, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "data": { 76 | "image/png": "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RERERCRGFLBEhjgzm2tmmgJYRESGLLVVIn0UsERERERERGJEAUskRszsY2b2hpmtNbMHzSxoZm1m9p9mtsHM/mpmRdFjLzSz18zsLTN70szyovurzew5M3vTzFabWVX09Jlm9nsz22xmj1l0JUQREZHzobZKJP4UsERiwMxqgb8FLnXOXQiEgb8DMoCVzrk6YBlwf/RHfgH8b+fcBcC6fvsfA37onJsGzAH2RfdPB74ATAbGA5fG/aJERCShqK0SGRwhvwsQSRDXABcBK6If2KUBzUAE+E30mEeBJ8wsB8h1zi2L7n8E+J2ZZQHlzrknAZxzHQDR873hnNsdfbwWGAu8FP/LEhGRBKK2SmQQKGCJxIYBjzjnvjxgp9nXTjrOvcfzd/b7Poz+dkVE5PyprRIZBBoiKBIbfwVuNbNiADPLN7NKvL+xW6PHfBR4yTnXChw2s8uj++8EljnnjgK7zezm6DlSzCx9UK9CREQSmdoqkUGgTxZEYsA5t9HMvgosNrMA0AXcCxwDZkWfa8Yb+w7w98DCaKPUAHwiuv9O4EEzeyB6jtsG8TJERCSBqa0SGRzm3HvtBRaRszGzNudcpt91iIiInInaKpHY0hBBERERERGRGFEPloiIiIiISIyoB0tERERERCRGFLBERERERERiRAFLREREREQkRhSwREREREREYkQBS0REREREJEYUsERERERERGLk/wMK697+IIObvQAAAABJRU5ErkJggg==\n", 77 | "text/plain": [ 78 | "
" 79 | ] 80 | }, 81 | "metadata": {}, 82 | "output_type": "display_data" 83 | }, 84 | { 85 | "name": "stdout", 86 | "output_type": "stream", 87 | "text": [ 88 | "Train Loss: 0.6797 Acc: 0.8400\n", 89 | "Val Loss: 1.0313 Acc: 0.7305\n", 90 | "Best Val Accuracy: 0.7305\n", 91 | "\n", 92 | "Training complete in 14m 51s\n", 93 | "Best val Acc: 0.730500\n" 94 | ] 95 | } 96 | ], 97 | "source": [ 98 | "#Train\n", 99 | "model_ft = train_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, exp_lr_scheduler,\n", 100 | " num_epochs=7)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 7, 106 | "metadata": {}, 107 | "outputs": [], 108 | "source": [ 109 | "# torch.save(model_ft.state_dict(), \"./models/resnet18_224_w.pt\")\n", 110 | "# torch.save(model_ft, \"./models/resnet18_224_f.pt\")" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": 12, 116 | "metadata": {}, 117 | "outputs": [ 118 | { 119 | "name": "stdout", 120 | "output_type": "stream", 121 | "text": [ 122 | "Epoch 1/1\n", 123 | "----------\n", 124 | "Iteration: 100/100, Loss: 750.4265785217285.Val Loss: 7.6722 Acc: 0.1531\n", 125 | "Best Val Accuracy: 0.1531\n", 126 | "\n", 127 | "Training complete in 0m 5s\n", 128 | "Best val Acc: 0.153100\n" 129 | ] 130 | } 131 | ], 132 | "source": [ 133 | "data_transforms = { 'train': transforms.Compose([transforms.ToTensor()]),\n", 134 | " 'val' : transforms.Compose([transforms.ToTensor(),]) }\n", 135 | "\n", 136 | "data_dir = 'images/64'\n", 137 | "image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x])\n", 138 | " for x in ['train', 'val']}\n", 139 | "dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=100, shuffle=True, num_workers=32)\n", 140 | " for x in ['train', 'val']}\n", 141 | "dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}\n", 142 | "\n", 143 | "test_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, exp_lr_scheduler, num_epochs=1)" 144 | ] 145 | } 146 | ], 147 | "metadata": { 148 | "kernelspec": { 149 | "display_name": "Python 3", 150 | "language": "python", 151 | "name": "python3" 152 | }, 153 | "language_info": { 154 | "codemirror_mode": { 155 | "name": "ipython", 156 | "version": 3 157 | }, 158 | "file_extension": ".py", 159 | "mimetype": "text/x-python", 160 | "name": "python", 161 | "nbconvert_exporter": "python", 162 | "pygments_lexer": "ipython3", 163 | "version": "3.5.2" 164 | } 165 | }, 166 | "nbformat": 4, 167 | "nbformat_minor": 2 168 | } 169 | -------------------------------------------------------------------------------- /ResNet18_224_finetune.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "import torch, torchvision\n", 18 | "import torch.nn as nn\n", 19 | "import torch.optim as optim\n", 20 | "from torch.optim import lr_scheduler\n", 21 | "import torchvision.datasets as datasets\n", 22 | "import torch.utils.data as data\n", 23 | "import torchvision.transforms as transforms\n", 24 | "from torch.autograd import Variable\n", 25 | "import torchvision.models as models\n", 26 | "import matplotlib.pyplot as plt\n", 27 | "import time, os, copy, numpy as np\n", 28 | "from livelossplot import PlotLosses\n", 29 | "from train_model import train_model\n", 30 | "%matplotlib inline" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 8, 36 | "metadata": {}, 37 | "outputs": [], 38 | "source": [ 39 | "data_transforms = { 'train': transforms.Compose([transforms.ToTensor()]),\n", 40 | " 'val' : transforms.Compose([transforms.ToTensor(),]) }\n", 41 | "\n", 42 | "data_dir = 'images/64'\n", 43 | "image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x])\n", 44 | " for x in ['train', 'val']}\n", 45 | "dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=100, shuffle=True, num_workers=64)\n", 46 | " for x in ['train', 'val']}\n", 47 | "dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 11, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "#Load Resnet18 with pretrained weights\n", 57 | "model_ft = models.resnet18()\n", 58 | "#Finetune Final few layers to adjust for tiny imagenet input\n", 59 | "model_ft.avgpool = nn.AdaptiveAvgPool2d(1)\n", 60 | "num_ftrs = model_ft.fc.in_features\n", 61 | "model_ft.fc = nn.Linear(num_ftrs, 200)\n", 62 | "# model_ft.conv1 = nn.Conv2d(3,64, kernel_size=(3,3), stride=(1,1), padding=(1,1))\n", 63 | "# model_ft.maxpool = nn.Sequential()\n", 64 | "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", 65 | "model_ft = model_ft.to(device)\n", 66 | "#Multi GPU\n", 67 | "model_ft = torch.nn.DataParallel(model_ft, device_ids=[0, 1])\n", 68 | "model_ft.load_state_dict(torch.load('./models/resnet18_224_w.pt'))\n", 69 | "\n", 70 | "# pretrained_dict = torch.load('./models/resnet18_224_w.pt')\n", 71 | "# model_ft_dict = model_ft.state_dict()\n", 72 | "# first_layer_weight = model_ft_dict['module.conv1.weight']\n", 73 | "# first_layer_bias = model_ft_dict['module.conv1.bias']\n", 74 | "# pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_ft_dict}\n", 75 | "\n", 76 | "# model_ft_dict.update(pretrained_dict) \n", 77 | "# model_ft_dict['module.conv1.weight'] = first_layer_weight\n", 78 | "# model_ft_dict['module.conv1.bias'] = first_layer_bias\n", 79 | "# model_ft.load_state_dict(model_ft_dict)\n", 80 | "\n", 81 | "\n", 82 | "#Loss Function\n", 83 | "criterion = nn.CrossEntropyLoss()\n", 84 | "# Observe that all parameters are being optimized\n", 85 | "optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)\n", 86 | "\n", 87 | "# Decay LR by a factor of 0.1 every 7 epochs\n", 88 | "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 12, 94 | "metadata": {}, 95 | "outputs": [ 96 | { 97 | "data": { 98 | "image/png": "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cRZwjde1hJMo6rNA/ZaEL/VbEciLfitsl2kXERERERGpbTRFUEREREREJEgUsERERERERIJEAUtERERERCRIFLBERERERESCRAFLREREREQkSBSwRGoxM+tvZlr2V0REaj31WSJ+ClgiIiIiIiJBooAlEgRmdqmZzTCzuWb2uJnFmNlOM3vAzOab2btmlhp4bYGZfW5mJWb2ipk1CmxvZWbvmNk8M5ttZnmBw9czs4lmtsjMnrPAFRBFREROhvoskdBSwBL5gcysPXAx0Mc5VwBUAJcAdYFi51xH4EPgjsBbngFucc7lA6VVtj8HPOyc6wKcApQHtncFfgV0AFoCfULeKBERiUjqs0RCL9brAkQiwACgOzAz8EVdHWAjUAn8J/CaZ4GXzSwZaOic+zCw/WngRTOrD2Q5514BcM7tBQgcb4ZzrizwfC7QHPgk9M0SEZEIpD5LJMQUsER+OAOeds7ddthGsz8c8Tp3ksffV+VxBfp3KyIiJ099lkiIaYqgyA/3LnChmaUBmFljM2uG/9/XhYHXjAQ+cc5tA7aY2WmB7ZcBHzrndgBlZjYscIwEM0uq0VaIiEg0UJ8lEmL6VkHkB3LOLTCz3wNvmZkPOABcD+wCigL7NuKf8w5wOfBYoDNaDlwR2H4Z8LiZ3RU4xk9qsBkiIhIF1GeJhJ45d7IjwCJyPGa20zlXz+s6REREvo/6LJHg0RRBERERERGRINEIloiIiIiISJBoBEtERERERCRIFLBERERERESCRAFLREREREQkSBSwREREREREgkQBS0REREREJEgUsERERERERILk/wNy9gx6JxSCBQAAAABJRU5ErkJggg==\n", 99 | "text/plain": [ 100 | "
" 101 | ] 102 | }, 103 | "metadata": {}, 104 | "output_type": "display_data" 105 | }, 106 | { 107 | "name": "stdout", 108 | "output_type": "stream", 109 | "text": [ 110 | "Train Loss: 0.5321 Acc: 0.8608\n", 111 | "Val Loss: 2.1013 Acc: 0.5390\n", 112 | "Best Val Accuracy: 0.5452\n", 113 | "\n", 114 | "Training complete in 7m 19s\n", 115 | "Best val Acc: 0.545200\n" 116 | ] 117 | } 118 | ], 119 | "source": [ 120 | "#Train\n", 121 | "model_ft = train_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, exp_lr_scheduler,\n", 122 | " num_epochs=7)" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": null, 128 | "metadata": {}, 129 | "outputs": [], 130 | "source": [] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 6, 135 | "metadata": {}, 136 | "outputs": [], 137 | "source": [ 138 | "#Load Resnet18 with pretrained weights\n", 139 | "model_ft = models.resnet18()\n", 140 | "#Finetune Final few layers to adjust for tiny imagenet input\n", 141 | "model_ft.avgpool = nn.AdaptiveAvgPool2d(1)\n", 142 | "num_ftrs = model_ft.fc.in_features\n", 143 | "model_ft.fc = nn.Linear(num_ftrs, 200)\n", 144 | "model_ft.conv1 = nn.Conv2d(3,64, kernel_size=(3,3), stride=(1,1), padding=(1,1))\n", 145 | "model_ft.maxpool = nn.Sequential()\n", 146 | "\n", 147 | "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", 148 | "model_ft = model_ft.to(device)\n", 149 | "#Multi GPU\n", 150 | "model_ft = torch.nn.DataParallel(model_ft, device_ids=[0, 1])\n", 151 | "pretrained_dict = torch.load('./models/resnet18_224_w.pt')\n", 152 | "model_ft_dict = model_ft.state_dict()\n", 153 | "first_layer_weight = model_ft_dict['module.conv1.weight']\n", 154 | "first_layer_bias = model_ft_dict['module.conv1.bias']\n", 155 | "pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_ft_dict}\n", 156 | "\n", 157 | "model_ft_dict.update(pretrained_dict) \n", 158 | "model_ft_dict['module.conv1.weight'] = first_layer_weight\n", 159 | "model_ft_dict['module.conv1.bias'] = first_layer_bias\n", 160 | "model_ft.load_state_dict(model_ft_dict)\n", 161 | "\n", 162 | "\n", 163 | "#Loss Function\n", 164 | "criterion = nn.CrossEntropyLoss()\n", 165 | "# Observe that all parameters are being optimized\n", 166 | "optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)\n", 167 | "\n", 168 | "# Decay LR by a factor of 0.1 every 7 epochs\n", 169 | "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 7, 175 | "metadata": {}, 176 | "outputs": [ 177 | { 178 | "data": { 179 | "image/png": "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l3Pw4MFj+912222kpKSQmJjIkCFDAHj99dfJycmha9eudO3aFYB69eqxfft2AF5++WWSkpJISkri1VdfPXa9+Ph4brnlFhITE7n44ouPu47IuWKMoU9yFL/e14VbO5/H2IXZXPjiFIZPX0dufoHT4YmUS+qbjqd7sKRYtu09zH8nLOPbBdnE1Ajm4xtb06VxTafDEnHOxIdh8xLPnrNWU+jx7Cl36d+/P/fccw933HEHACNHjmTSpEncfffdVKlShe3bt3P++efTu3fvkxaZeeeddwgODmbZsmUsXryYli1bHmt7+umnqVGjBvn5+XTr1o3Fixdz99138/LLLzN58mTCw8OPO9e8efP46KOP+P3337HW0rZtWzp37kz16tVZtWoVX375Je+//z79+vVj9OjRXHfddSX8IYkUT0igHw/3aEK/lLo8MT6DYd9lMGLuRob2TqT9eeGnP4FIWeVA/6S+6XgadpBTKiiwfD57A91emsJ3i3O468IG/PjvC5RciTikRYsWbN26lZycHBYtWkT16tWpVasW//nPf2jWrBndu3cnOzubLVu2nPQcv/3227HOpFmzZjRr1uxY28iRI2nZsiUtWrRg6dKlZGRknDKe6dOnc/nllxMSEkLlypW54oormDZtGgBxcXEkJycD0KpVK9avX1/C717kzNWPqMzHN7bm/etTOJibzzXv/84dX8wnZ5dGVEU8RX3T8TSCJSe1NGc3j36bzsLMXbSrH8aTfZNoULOy02GJeIfTjDSdS1dddRWjRo1i8+bN9O/fn//9739s27aNefPm4e/vT7169Th06NAZn3fdunW8+OKLzJ07l+rVqzNw4MCzOs9RgYGBx577+vpqiqA4xhjDRQmRdGoYzv9NXcvbU1bz67Kt3HlhA27uFEegn9ZqlHLEof5JfdOfNIIlf7HvcB7DxmfQ643pZP1xgFf7J/PFLW2VXIl4if79+zNixAhGjRrFVVddxe7du6lZsyb+/v5MnjyZDRs2nPL4Cy64gC+++AKA9PR0Fi9eDMCePXsICQmhatWqbNmyhYkTJx47JjQ0lL179/7lXJ06dWLMmDEcOHCA/fv38+2339KpUycPfrcinhPk78u/ujfk53s707lRBC9MWsElr/zGr8tP/qm6iBSP+qY/aQRLjrHWMjF9M8PGZ7Bl7yGuaRPDg5c0oWqwyq6LeJPE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\n", 180 | "text/plain": [ 181 | "
" 182 | ] 183 | }, 184 | "metadata": {}, 185 | "output_type": "display_data" 186 | }, 187 | { 188 | "name": "stdout", 189 | "output_type": "stream", 190 | "text": [ 191 | "Train Loss: 0.3367 Acc: 0.9360\n", 192 | "Val Loss: 1.0571 Acc: 0.7186\n", 193 | "Best Val Accuracy: 0.7230000000000001\n", 194 | "\n", 195 | "Training complete in 13m 17s\n", 196 | "Best val Acc: 0.723000\n" 197 | ] 198 | } 199 | ], 200 | "source": [ 201 | "#Train\n", 202 | "model_ft = train_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, exp_lr_scheduler,\n", 203 | " num_epochs=7)" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": null, 209 | "metadata": {}, 210 | "outputs": [], 211 | "source": [] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": null, 216 | "metadata": {}, 217 | "outputs": [], 218 | "source": [] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 5, 223 | "metadata": {}, 224 | "outputs": [], 225 | "source": [ 226 | "# torch.save(model_ft.state_dict(), \"./models/resnet18_256_64.pt\") " 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": 6, 232 | "metadata": {}, 233 | "outputs": [], 234 | "source": [ 235 | "# torch.save(model_ft, \"./models/resnet18_64_full_model.pt\")" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": null, 241 | "metadata": {}, 242 | "outputs": [], 243 | "source": [] 244 | } 245 | ], 246 | "metadata": { 247 | "kernelspec": { 248 | "display_name": "Python 3", 249 | "language": "python", 250 | "name": "python3" 251 | }, 252 | "language_info": { 253 | "codemirror_mode": { 254 | "name": "ipython", 255 | "version": 3 256 | }, 257 | "file_extension": ".py", 258 | "mimetype": "text/x-python", 259 | "name": "python", 260 | "nbconvert_exporter": "python", 261 | "pygments_lexer": "ipython3", 262 | "version": "3.5.2" 263 | } 264 | }, 265 | "nbformat": 4, 266 | "nbformat_minor": 2 267 | } 268 | -------------------------------------------------------------------------------- /ResNet18_Baseline.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "import torch, torchvision\n", 18 | "import torch.nn as nn\n", 19 | "import torch.optim as optim\n", 20 | "from torch.optim import lr_scheduler\n", 21 | "import torchvision.datasets as datasets\n", 22 | "import torch.utils.data as data\n", 23 | "import torchvision.transforms as transforms\n", 24 | "from torch.autograd import Variable\n", 25 | "import torchvision.models as models\n", 26 | "import matplotlib.pyplot as plt\n", 27 | "import time, os, copy, numpy as np\n", 28 | "from livelossplot import PlotLosses\n", 29 | "from train_model import train_model\n", 30 | "%matplotlib inline" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 2, 36 | "metadata": {}, 37 | "outputs": [], 38 | "source": [ 39 | "data_transforms = {\n", 40 | " 'train': transforms.Compose([\n", 41 | " transforms.RandomHorizontalFlip(),\n", 42 | " transforms.ToTensor(),\n", 43 | " ]),\n", 44 | " 'val': transforms.Compose([\n", 45 | " transforms.ToTensor(),\n", 46 | " ]),\n", 47 | "}\n", 48 | "\n", 49 | "data_dir = 'tiny-imagenet-200'\n", 50 | "\n", 51 | "image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),\n", 52 | " data_transforms[x])\n", 53 | " for x in ['train', 'val']}\n", 54 | "dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=100,\n", 55 | " shuffle=True, num_workers=64)\n", 56 | " for x in ['train', 'val']}\n", 57 | "dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}\n", 58 | "# class_names = image_datasets['train'].classes\n", 59 | "\n" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 3, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "#Load Resnet18\n", 69 | "model_ft = models.resnet18()\n", 70 | "#Finetune Final few layers to adjust for tiny imagenet input\n", 71 | "model_ft.avgpool = nn.AdaptiveAvgPool2d(1)\n", 72 | "num_ftrs = model_ft.fc.in_features\n", 73 | "model_ft.fc = nn.Linear(num_ftrs, 200)\n", 74 | "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", 75 | "model_ft = model_ft.to(device)\n", 76 | "#Multi GPU\n", 77 | "model_ft = torch.nn.DataParallel(model_ft, device_ids=[0, 1])\n", 78 | "\n", 79 | "#Loss Function\n", 80 | "criterion = nn.CrossEntropyLoss()\n", 81 | "# Observe that all parameters are being optimized\n", 82 | "optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)\n", 83 | "\n", 84 | "# Decay LR by a factor of 0.1 every 7 epochs\n", 85 | "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 4, 91 | "metadata": {}, 92 | "outputs": [ 93 | { 94 | "data": { 95 | "image/png": "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\n", 96 | "text/plain": [ 97 | "
" 98 | ] 99 | }, 100 | "metadata": {}, 101 | "output_type": "display_data" 102 | }, 103 | { 104 | "name": "stdout", 105 | "output_type": "stream", 106 | "text": [ 107 | "Train Loss: 3.0634 Acc: 0.3006\n", 108 | "Val Loss: 3.2662 Acc: 0.2594\n", 109 | "Best Val Accuracy: 0.2594\n", 110 | "\n", 111 | "Training complete in 16m 6s\n", 112 | "Best val Acc: 0.259400\n" 113 | ] 114 | } 115 | ], 116 | "source": [ 117 | "#Train\n", 118 | "model_ft = train_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, exp_lr_scheduler,\n", 119 | " num_epochs=15)" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": 5, 125 | "metadata": {}, 126 | "outputs": [], 127 | "source": [ 128 | "# torch.save(model_ft.state_dict(), \"./models/resnet18_baseline.pt\") " 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 5, 134 | "metadata": {}, 135 | "outputs": [], 136 | "source": [ 137 | "#Load Resnet18 with pretrained weights\n", 138 | "model_ft = models.resnet18(pretrained=True)\n", 139 | "#Finetune Final few layers to adjust for tiny imagenet input\n", 140 | "model_ft.avgpool = nn.AdaptiveAvgPool2d(1)\n", 141 | "num_ftrs = model_ft.fc.in_features\n", 142 | "model_ft.fc = nn.Linear(num_ftrs, 200)\n", 143 | "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", 144 | "model_ft = model_ft.to(device)\n", 145 | "#Multi GPU\n", 146 | "model_ft = torch.nn.DataParallel(model_ft, device_ids=[0, 1])\n", 147 | "\n", 148 | "#Loss Function\n", 149 | "criterion = nn.CrossEntropyLoss()\n", 150 | "# Observe that all parameters are being optimized\n", 151 | "optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)\n", 152 | "\n", 153 | "# Decay LR by a factor of 0.1 every 7 epochs\n", 154 | "exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 6, 160 | "metadata": {}, 161 | "outputs": [ 162 | { 163 | "data": { 164 | "image/png": "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\n", 165 | "text/plain": [ 166 | "
" 167 | ] 168 | }, 169 | "metadata": {}, 170 | "output_type": "display_data" 171 | }, 172 | { 173 | "name": "stdout", 174 | "output_type": "stream", 175 | "text": [ 176 | "Train Loss: 0.9274 Acc: 0.7631\n", 177 | "Val Loss: 1.7688 Acc: 0.5661\n", 178 | "Best Val Accuracy: 0.5677\n", 179 | "\n", 180 | "Training complete in 22m 54s\n", 181 | "Best val Acc: 0.567700\n" 182 | ] 183 | } 184 | ], 185 | "source": [ 186 | "#Train\n", 187 | "model_ft = train_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, exp_lr_scheduler,\n", 188 | " num_epochs=15)" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": null, 194 | "metadata": {}, 195 | "outputs": [], 196 | "source": [] 197 | } 198 | ], 199 | "metadata": { 200 | "kernelspec": { 201 | "display_name": "Python 3", 202 | "language": "python", 203 | "name": "python3" 204 | }, 205 | "language_info": { 206 | "codemirror_mode": { 207 | "name": "ipython", 208 | "version": 3 209 | }, 210 | "file_extension": ".py", 211 | "mimetype": "text/x-python", 212 | "name": "python", 213 | "nbconvert_exporter": "python", 214 | "pygments_lexer": "ipython3", 215 | "version": "3.5.2" 216 | } 217 | }, 218 | "nbformat": 4, 219 | "nbformat_minor": 2 220 | } 221 | -------------------------------------------------------------------------------- /img/baseline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tjmoon0104/Tiny-ImageNet-Classifier/ae836f1202b17b05da8782f0e594bbe9aea8b476/img/baseline.png -------------------------------------------------------------------------------- /img/baseline_no_pretrain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tjmoon0104/Tiny-ImageNet-Classifier/ae836f1202b17b05da8782f0e594bbe9aea8b476/img/baseline_no_pretrain.png -------------------------------------------------------------------------------- /img/resnet18_224.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tjmoon0104/Tiny-ImageNet-Classifier/ae836f1202b17b05da8782f0e594bbe9aea8b476/img/resnet18_224.png -------------------------------------------------------------------------------- /img/resnet18_224_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tjmoon0104/Tiny-ImageNet-Classifier/ae836f1202b17b05da8782f0e594bbe9aea8b476/img/resnet18_224_64.png -------------------------------------------------------------------------------- /img/restnet18_224_64_fine_tune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tjmoon0104/Tiny-ImageNet-Classifier/ae836f1202b17b05da8782f0e594bbe9aea8b476/img/restnet18_224_64_fine_tune.png -------------------------------------------------------------------------------- /utils/Bicubic Interpolation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import cv2\n", 10 | "import glob\n", 11 | "\n", 12 | "def resize_img(image_path, size):\n", 13 | " img = cv2.imread(image_path)\n", 14 | " img = cv2.resize(img,(size,size), interpolation = cv2.INTER_CUBIC)\n", 15 | " cv2.imwrite(image_path,img)" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 5, 21 | "metadata": {}, 22 | "outputs": [], 23 | "source": [ 24 | "target_folder = './images/256/'\n", 25 | "train_img = glob.glob(target_folder + 'train/*/*/*')\n", 26 | "val_img = glob.glob(target_folder + 'val/*/*')" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 7, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "# target_folder = './299/'\n", 36 | "# train_img = glob.glob(target_folder + 'train/*/*/*')\n", 37 | "# val_img = glob.glob(target_folder + 'val/*/*')" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 6, 43 | "metadata": { 44 | "scrolled": true 45 | }, 46 | "outputs": [], 47 | "source": [ 48 | "for image in val_img:\n", 49 | " resize_img(image,256)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 7, 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "for image in train_img:\n", 59 | " resize_img(image,256)" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 4, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "target_folder = './NTAT/PNG/*.png'\n", 69 | "imgs = glob.glob(target_folder)\n", 70 | "for img in imgs:\n", 71 | " resize_img(img, 299)" 72 | ] 73 | } 74 | ], 75 | "metadata": { 76 | "kernelspec": { 77 | "display_name": "Python 3", 78 | "language": "python", 79 | "name": "python3" 80 | }, 81 | "language_info": { 82 | "codemirror_mode": { 83 | "name": "ipython", 84 | "version": 3 85 | }, 86 | "file_extension": ".py", 87 | "mimetype": "text/x-python", 88 | "name": "python", 89 | "nbconvert_exporter": "python", 90 | "pygments_lexer": "ipython3", 91 | "version": "3.5.2" 92 | } 93 | }, 94 | "nbformat": 4, 95 | "nbformat_minor": 2 96 | } 97 | -------------------------------------------------------------------------------- /utils/tiny-imgnet-val-reformat.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 5, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import io\n", 10 | "import pandas as pd\n", 11 | "import glob\n", 12 | "import os\n", 13 | "from shutil import move\n", 14 | "from os.path import join\n", 15 | "from os import listdir, rmdir\n", 16 | "\n", 17 | "target_folder = './tiny-imagenet-200/val/'\n", 18 | "\n", 19 | "val_dict = {}\n", 20 | "with open(target_folder + 'val_annotations.txt', 'r') as f:\n", 21 | " for line in f.readlines():\n", 22 | " split_line = line.split('\\t')\n", 23 | " val_dict[split_line[0]] = split_line[1]\n", 24 | " \n", 25 | "paths = glob.glob(target_folder + 'images/*')\n", 26 | "paths[0].split('/')[-1]\n", 27 | "for path in paths:\n", 28 | " file = path.split('/')[-1]\n", 29 | " folder = val_dict[file]\n", 30 | " if not os.path.exists(target_folder + str(folder)):\n", 31 | " os.mkdir(target_folder + str(folder))\n", 32 | " \n", 33 | "for path in paths:\n", 34 | " file = path.split('/')[-1]\n", 35 | " folder = val_dict[file]\n", 36 | " dest = target_folder + str(folder) + '/' + str(file)\n", 37 | " move(path, dest)\n", 38 | " \n", 39 | "os.remove('./tiny-imagenet-200/val/val_annotations.txt')\n", 40 | "rmdir('./tiny-imagenet-200/val/images')" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [] 49 | } 50 | ], 51 | "metadata": { 52 | "kernelspec": { 53 | "display_name": "Python 3", 54 | "language": "python", 55 | "name": "python3" 56 | }, 57 | "language_info": { 58 | "codemirror_mode": { 59 | "name": "ipython", 60 | "version": 3 61 | }, 62 | "file_extension": ".py", 63 | "mimetype": "text/x-python", 64 | "name": "python", 65 | "nbconvert_exporter": "python", 66 | "pygments_lexer": "ipython3", 67 | "version": "3.5.2" 68 | } 69 | }, 70 | "nbformat": 4, 71 | "nbformat_minor": 2 72 | } 73 | -------------------------------------------------------------------------------- /utils/train_model.py: -------------------------------------------------------------------------------- 1 | import torch, torchvision 2 | import torch.nn as nn 3 | import torch.optim as optim 4 | from torch.optim import lr_scheduler 5 | import torchvision.datasets as datasets 6 | import torch.utils.data as data 7 | import torchvision.transforms as transforms 8 | from torch.autograd import Variable 9 | import torchvision.models as models 10 | import matplotlib.pyplot as plt 11 | import time, os, copy, numpy as np 12 | from livelossplot import PlotLosses 13 | import sys 14 | 15 | def train_model(model, dataloaders, dataset_sizes, criterion, optimizer, scheduler, num_epochs=25): 16 | device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 17 | since = time.time() 18 | liveloss = PlotLosses() 19 | best_model_wts = copy.deepcopy(model.state_dict()) 20 | best_acc = 0.0 21 | 22 | for epoch in range(num_epochs): 23 | print('Epoch {}/{}'.format(epoch+1, num_epochs)) 24 | print('-' * 10) 25 | 26 | # Each epoch has a training and validation phase 27 | for phase in ['train', 'val']: 28 | if phase == 'train': 29 | scheduler.step() 30 | model.train() # Set model to training mode 31 | else: 32 | model.eval() # Set model to evaluate mode 33 | 34 | running_loss = 0.0 35 | running_corrects = 0 36 | 37 | # Iterate over data. 38 | for i,(inputs, labels) in enumerate(dataloaders[phase]): 39 | inputs = inputs.to(device) 40 | labels = labels.to(device) 41 | 42 | # zero the parameter gradients 43 | optimizer.zero_grad() 44 | 45 | # forward 46 | # track history if only in train 47 | with torch.set_grad_enabled(phase == 'train'): 48 | outputs = model(inputs) 49 | _, preds = torch.max(outputs, 1) 50 | loss = criterion(outputs, labels) 51 | 52 | # backward + optimize only if in training phase 53 | if phase == 'train': 54 | loss.backward() 55 | optimizer.step() 56 | 57 | # statistics 58 | running_loss += loss.item() * inputs.size(0) 59 | running_corrects += torch.sum(preds == labels.data) 60 | print("\rIteration: {}/{}, Loss: {}.".format(i+1, len(dataloaders[phase]), loss.item() * inputs.size(0)), end="") 61 | 62 | # print( (i+1)*100. / len(dataloaders[phase]), "% Complete" ) 63 | sys.stdout.flush() 64 | 65 | 66 | epoch_loss = running_loss / dataset_sizes[phase] 67 | epoch_acc = running_corrects.double() / dataset_sizes[phase] 68 | if phase == 'train': 69 | avg_loss = epoch_loss 70 | t_acc = epoch_acc 71 | else: 72 | val_loss = epoch_loss 73 | val_acc = epoch_acc 74 | 75 | # print('{} Loss: {:.4f} Acc: {:.4f}'.format( 76 | # phase, epoch_loss, epoch_acc)) 77 | 78 | # deep copy the model 79 | if phase == 'val' and epoch_acc > best_acc: 80 | best_acc = epoch_acc 81 | best_model_wts = copy.deepcopy(model.state_dict()) 82 | 83 | liveloss.update({ 84 | 'log loss': avg_loss, 85 | 'val_log loss': val_loss, 86 | 'accuracy': t_acc, 87 | 'val_accuracy': val_acc 88 | }) 89 | 90 | liveloss.draw() 91 | print('Train Loss: {:.4f} Acc: {:.4f}'.format(avg_loss, t_acc)) 92 | print( 'Val Loss: {:.4f} Acc: {:.4f}'.format(val_loss, val_acc)) 93 | print('Best Val Accuracy: {}'.format(best_acc)) 94 | print() 95 | 96 | time_elapsed = time.time() - since 97 | print('Training complete in {:.0f}m {:.0f}s'.format( 98 | time_elapsed // 60, time_elapsed % 60)) 99 | print('Best val Acc: {:4f}'.format(best_acc)) 100 | 101 | # load best model weights 102 | model.load_state_dict(best_model_wts) 103 | return model 104 | --------------------------------------------------------------------------------