microsoft/AI-For-Beginners

Public

mirrored from https://github.com/microsoft/AI-For-BeginnersAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
b1302fdf254dd6d2526bd5a41aca9dc28733f4ca

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb

782lines · modecode

1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {
6 "id": "3AbTeDP5Tbou"
7 },
8 "source": [
9 "# Semantic Segmentation\n",
10 "\n",
11 "**Segmentation** is one of the main computer vision task. For **each** pixel of image you must specify class(background included). Semantic segmentation only tells pixel class, instance segmentation divide classes into different instances. \n",
12 "\n",
13 "For instance segmentation ten cars is **different** objects, for semantic segmentation **all** cars is one class.\n",
14 "\n",
15 "<img src=\"images/instance_vs_semantic.jpeg\" width=\"50%\">\n",
16 "\n",
17 "> Image from [this blog post](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50)\n",
18 "\n",
19 "Almost all architectures have same structure. First part is **encoder** that extracts features from input image, second part is **decoder** that transforms this features into image with same height and width and some number of channels, may be equal to classes count.\n",
20 "\n",
21 "<img src=\"images/segm.png\" width=\"80%\">\n",
22 "\n",
23 "> Image from [this publication](https://arxiv.org/pdf/2001.05566.pdf)"
24 ]
25 },
26 {
27 "cell_type": "code",
28 "execution_count": null,
29 "metadata": {
30 "execution": {
31 "iopub.execute_input": "2022-04-08T15:48:06.861688Z",
32 "iopub.status.busy": "2022-04-08T15:48:06.861254Z",
33 "iopub.status.idle": "2022-04-08T15:48:06.868219Z",
34 "shell.execute_reply": "2022-04-08T15:48:06.867567Z",
35 "shell.execute_reply.started": "2022-04-08T15:48:06.861644Z"
36 },
37 "id": "tv1T3XemFMpE",
38 "trusted": true
39 },
40 "outputs": [],
41 "source": [
42 "import torch\n",
43 "import torchvision\n",
44 "import matplotlib.pyplot as plt\n",
45 "from torchvision import transforms\n",
46 "from torch import nn\n",
47 "from torch import optim\n",
48 "from tqdm import tqdm\n",
49 "import numpy as np\n",
50 "import torch.nn.functional as F\n",
51 "from skimage.io import imread\n",
52 "from skimage.transform import resize\n",
53 "import os\n",
54 "torch.manual_seed(42)\n",
55 "np.random.seed(42)"
56 ]
57 },
58 {
59 "cell_type": "code",
60 "execution_count": 12,
61 "metadata": {
62 "execution": {
63 "iopub.execute_input": "2022-04-08T16:03:32.933989Z",
64 "iopub.status.busy": "2022-04-08T16:03:32.933733Z",
65 "iopub.status.idle": "2022-04-08T16:03:32.937996Z",
66 "shell.execute_reply": "2022-04-08T16:03:32.937366Z",
67 "shell.execute_reply.started": "2022-04-08T16:03:32.933959Z"
68 },
69 "id": "xhSEogpDFMpK",
70 "trusted": true
71 },
72 "outputs": [],
73 "source": [
74 "device = 'cuda:0' if torch.cuda.is_available() else 'cpu'\n",
75 "train_size = 0.9\n",
76 "lr = 1e-3\n",
77 "weight_decay = 1e-6\n",
78 "batch_size = 32\n",
79 "epochs = 30"
80 ]
81 },
82 {
83 "cell_type": "markdown",
84 "metadata": {
85 "id": "D4if75qwFMpJ"
86 },
87 "source": [
88 "## Dataset"
89 ]
90 },
91 {
92 "cell_type": "code",
93 "execution_count": null,
94 "metadata": {
95 "execution": {
96 "iopub.execute_input": "2022-04-08T16:47:25.071036Z",
97 "iopub.status.busy": "2022-04-08T16:47:25.070746Z",
98 "iopub.status.idle": "2022-04-08T16:47:32.612115Z",
99 "shell.execute_reply": "2022-04-08T16:47:32.611253Z",
100 "shell.execute_reply.started": "2022-04-08T16:47:25.071005Z"
101 },
102 "id": "TkuYGLRKFMpK",
103 "trusted": true
104 },
105 "outputs": [],
106 "source": [
107 "!apt-get install rar\n",
108 "!wget https://www.dropbox.com/s/k88qukc20ljnbuo/PH2Dataset.rar\n",
109 "!unrar x -Y PH2Dataset.rar"
110 ]
111 },
112 {
113 "cell_type": "code",
114 "execution_count": 14,
115 "metadata": {
116 "id": "Rumy9ldAFteW"
117 },
118 "outputs": [],
119 "source": [
120 "def load_dataset(train_part, root='PH2Dataset'):\n",
121 " images = []\n",
122 " masks = []\n",
123 "\n",
124 " for root, dirs, files in os.walk(os.path.join(root, 'PH2 Dataset images')):\n",
125 " if root.endswith('_Dermoscopic_Image'):\n",
126 " images.append(imread(os.path.join(root, files[0])))\n",
127 " if root.endswith('_lesion'):\n",
128 " masks.append(imread(os.path.join(root, files[0])))\n",
129 "\n",
130 " size = (256, 256)\n",
131 " images = torch.permute(torch.FloatTensor([resize(image, size, mode='constant', anti_aliasing=True,) for image in images]), (0, 3, 1, 2))\n",
132 " masks = torch.FloatTensor([resize(mask, size, mode='constant', anti_aliasing=False) > 0.5 for mask in masks]).unsqueeze(1)\n",
133 "\n",
134 " indices = np.random.permutation(range(len(images)))\n",
135 " train_part = int(train_part * len(images))\n",
136 " train_ind = indices[:train_part]\n",
137 " test_ind = indices[train_part:]\n",
138 "\n",
139 " train_dataset = (images[train_ind, :, :, :], masks[train_ind, :, :, :])\n",
140 " test_dataset = (images[test_ind, :, :, :], masks[test_ind, :, :, :])\n",
141 "\n",
142 " return train_dataset, test_dataset"
143 ]
144 },
145 {
146 "cell_type": "code",
147 "execution_count": 15,
148 "metadata": {
149 "colab": {
150 "base_uri": "https://localhost:8080/"
151 },
152 "id": "kCjj0YKcGBKr",
153 "outputId": "8ee469e3-3ebd-4d5d-dfd6-bb18eec14b3e"
154 },
155 "outputs": [
156 {
157 "name": "stderr",
158 "output_type": "stream",
159 "text": [
160 "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:12: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at ../torch/csrc/utils/tensor_new.cpp:201.)\n",
161 " if sys.path[0] == '':\n"
162 ]
163 }
164 ],
165 "source": [
166 "train_dataset, test_dataset = load_dataset(train_size)"
167 ]
168 },
169 {
170 "cell_type": "code",
171 "execution_count": 16,
172 "metadata": {
173 "execution": {
174 "iopub.execute_input": "2022-04-08T16:03:58.247264Z",
175 "iopub.status.busy": "2022-04-08T16:03:58.246853Z",
176 "iopub.status.idle": "2022-04-08T16:03:58.256661Z",
177 "shell.execute_reply": "2022-04-08T16:03:58.255964Z",
178 "shell.execute_reply.started": "2022-04-08T16:03:58.247222Z"
179 },
180 "id": "rUGDAa61FMpN",
181 "trusted": true
182 },
183 "outputs": [],
184 "source": [
185 "train_dataloader = torch.utils.data.DataLoader(list(zip(train_dataset[0], train_dataset[1])), batch_size=batch_size, shuffle=True)\n",
186 "test_dataloader = torch.utils.data.DataLoader(list(zip(test_dataset[0], test_dataset[1])), batch_size=1, shuffle=False)\n",
187 "dataloaders = (train_dataloader, test_dataloader)"
188 ]
189 },
190 {
191 "cell_type": "code",
192 "execution_count": 17,
193 "metadata": {
194 "execution": {
195 "iopub.execute_input": "2022-04-08T16:03:58.259127Z",
196 "iopub.status.busy": "2022-04-08T16:03:58.258819Z",
197 "iopub.status.idle": "2022-04-08T16:03:58.266433Z",
198 "shell.execute_reply": "2022-04-08T16:03:58.265489Z",
199 "shell.execute_reply.started": "2022-04-08T16:03:58.259090Z"
200 },
201 "id": "jP2_-AjIFMpO",
202 "trusted": true
203 },
204 "outputs": [],
205 "source": [
206 "def plotn(n, data, only_mask=False):\n",
207 " images, masks = data[0], data[1]\n",
208 " fig, ax = plt.subplots(1, n)\n",
209 " fig1, ax1 = plt.subplots(1, n)\n",
210 " for i, (img, mask) in enumerate(zip(images, masks)):\n",
211 " if i == n:\n",
212 " break\n",
213 " if not only_mask:\n",
214 " ax[i].imshow(torch.permute(img, (1, 2, 0)))\n",
215 " else:\n",
216 " ax[i].imshow(img[0])\n",
217 " ax1[i].imshow(mask[0])\n",
218 " plt.show()"
219 ]
220 },
221 {
222 "cell_type": "markdown",
223 "metadata": {
224 "id": "9tBja_1KFMpP"
225 },
226 "source": [
227 "**Let's plot some images with corresponding masks.**"
228 ]
229 },
230 {
231 "cell_type": "code",
232 "execution_count": 18,
233 "metadata": {
234 "colab": {
235 "base_uri": "https://localhost:8080/",
236 "height": 203
237 },
238 "execution": {
239 "iopub.execute_input": "2022-04-08T16:03:58.268348Z",
240 "iopub.status.busy": "2022-04-08T16:03:58.268002Z",
241 "iopub.status.idle": "2022-04-08T16:03:59.237853Z",
242 "shell.execute_reply": "2022-04-08T16:03:59.237161Z",
243 "shell.execute_reply.started": "2022-04-08T16:03:58.268300Z"
244 },
245 "id": "IA8ziDUJFMpQ",
246 "outputId": "7d75d54a-c066-411f-cd48-4e54d669d091",
247 "trusted": true
248 },
249 "outputs": [
250 {
251 "data": {
252 "image/png": "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",
253 "text/plain": [
254 "<Figure size 432x288 with 5 Axes>"
255 ]
256 },
257 "metadata": {
258 "needs_background": "light"
259 },
260 "output_type": "display_data"
261 },
262 {
263 "data": {
264 "image/png": "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",
265 "text/plain": [
266 "<Figure size 432x288 with 5 Axes>"
267 ]
268 },
269 "metadata": {
270 "needs_background": "light"
271 },
272 "output_type": "display_data"
273 }
274 ],
275 "source": [
276 "plotn(5, train_dataset)"
277 ]
278 },
279 {
280 "cell_type": "markdown",
281 "metadata": {
282 "id": "ORmas8XhYfS8"
283 },
284 "source": [
285 "## SegNet\n",
286 "\n",
287 "Simple encoder - decoder architecture with convolutions, poolings in encoder and convolutions, upsamplings in decoder.\n",
288 "\n",
289 "<img src=\"images/segnet.png\" width=\"80%\">\n",
290 "\n",
291 "* Badrinarayanan, V., Kendall, A., & Cipolla, R. (2015). [SegNet: A deep convolutional\n",
292 "encoder-decoder architecture for image segmentation](https://arxiv.org/pdf/1511.00561.pdf)"
293 ]
294 },
295 {
296 "cell_type": "code",
297 "execution_count": null,
298 "metadata": {
299 "execution": {
300 "iopub.execute_input": "2022-04-08T16:03:59.239435Z",
301 "iopub.status.busy": "2022-04-08T16:03:59.239186Z",
302 "iopub.status.idle": "2022-04-08T16:03:59.257319Z",
303 "shell.execute_reply": "2022-04-08T16:03:59.256388Z",
304 "shell.execute_reply.started": "2022-04-08T16:03:59.239401Z"
305 },
306 "id": "QDsSrmbeTbp9",
307 "trusted": true
308 },
309 "outputs": [],
310 "source": [
311 "class SegNet(nn.Module):\n",
312 " def __init__(self):\n",
313 " super().__init__()\n",
314 " self.enc_conv0 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=(3,3), padding=1)\n",
315 " self.act0 = nn.ReLU()\n",
316 " self.bn0 = nn.BatchNorm2d(16)\n",
317 " self.pool0 = nn.MaxPool2d(kernel_size=(2,2))\n",
318 "\n",
319 " self.enc_conv1 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=(3,3), padding=1)\n",
320 " self.act1 = nn.ReLU()\n",
321 " self.bn1 = nn.BatchNorm2d(32)\n",
322 " self.pool1 = nn.MaxPool2d(kernel_size=(2,2))\n",
323 "\n",
324 " self.enc_conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=(3,3), padding=1)\n",
325 " self.act2 = nn.ReLU()\n",
326 " self.bn2 = nn.BatchNorm2d(64)\n",
327 " self.pool2 = nn.MaxPool2d(kernel_size=(2,2))\n",
328 "\n",
329 " self.enc_conv3 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=(3,3), padding=1)\n",
330 " self.act3 = nn.ReLU()\n",
331 " self.bn3 = nn.BatchNorm2d(128)\n",
332 " self.pool3 = nn.MaxPool2d(kernel_size=(2,2))\n",
333 "\n",
334 " self.bottleneck_conv = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=(3,3), padding=1)\n",
335 " \n",
336 " self.upsample0 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
337 " self.dec_conv0 = nn.Conv2d(in_channels=256, out_channels=128, kernel_size=(3,3), padding=1)\n",
338 " self.dec_act0 = nn.ReLU()\n",
339 " self.dec_bn0 = nn.BatchNorm2d(128)\n",
340 "\n",
341 " self.upsample1 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
342 " self.dec_conv1 = nn.Conv2d(in_channels=128, out_channels=64, kernel_size=(3,3), padding=1)\n",
343 " self.dec_act1 = nn.ReLU()\n",
344 " self.dec_bn1 = nn.BatchNorm2d(64)\n",
345 "\n",
346 " self.upsample2 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
347 " \n",
348 " self.dec_conv2 = nn.Conv2d(in_channels=64, out_channels=32, kernel_size=(3,3), padding=1)\n",
349 " self.dec_act2 = nn.ReLU()\n",
350 " self.dec_bn2 = nn.BatchNorm2d(32)\n",
351 "\n",
352 " self.upsample3 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
353 " self.dec_conv3 = nn.Conv2d(in_channels=32, out_channels=1, kernel_size=(1,1))\n",
354 "\n",
355 " self.sigmoid = nn.Sigmoid()\n",
356 "\n",
357 " def forward(self, x):\n",
358 " e0 = self.pool0(self.bn0(self.act0(self.enc_conv0(x))))\n",
359 " e1 = self.pool1(self.bn1(self.act1(self.enc_conv1(e0))))\n",
360 " e2 = self.pool2(self.bn2(self.act2(self.enc_conv2(e1))))\n",
361 " e3 = self.pool3(self.bn3(self.act3(self.enc_conv3(e2))))\n",
362 "\n",
363 " b = self.bottleneck_conv(e3)\n",
364 "\n",
365 " d0 = self.dec_bn0(self.dec_act0(self.dec_conv0(self.upsample0(b))))\n",
366 " d1 = self.dec_bn1(self.dec_act1(self.dec_conv1(self.upsample1(d0))))\n",
367 " d2 = self.dec_bn2(self.dec_act2(self.dec_conv2(self.upsample2(d1))))\n",
368 " d3 = self.sigmoid(self.dec_conv3(self.upsample3(d2)))\n",
369 " return d3"
370 ]
371 },
372 {
373 "cell_type": "code",
374 "execution_count": null,
375 "metadata": {
376 "execution": {
377 "iopub.execute_input": "2022-04-08T16:03:59.259154Z",
378 "iopub.status.busy": "2022-04-08T16:03:59.258856Z",
379 "iopub.status.idle": "2022-04-08T16:03:59.284201Z",
380 "shell.execute_reply": "2022-04-08T16:03:59.283559Z",
381 "shell.execute_reply.started": "2022-04-08T16:03:59.259108Z"
382 },
383 "id": "2GoR8-huFMpn",
384 "trusted": true
385 },
386 "outputs": [],
387 "source": [
388 "model = SegNet().to(device)\n",
389 "optimizer = optim.Adam(model.parameters(), lr=lr, weight_decay=weight_decay)\n",
390 "loss_fn = nn.BCEWithLogitsLoss()"
391 ]
392 },
393 {
394 "cell_type": "code",
395 "execution_count": 21,
396 "metadata": {
397 "execution": {
398 "iopub.execute_input": "2022-04-08T16:03:59.286008Z",
399 "iopub.status.busy": "2022-04-08T16:03:59.285826Z",
400 "iopub.status.idle": "2022-04-08T16:03:59.298404Z",
401 "shell.execute_reply": "2022-04-08T16:03:59.297656Z",
402 "shell.execute_reply.started": "2022-04-08T16:03:59.285986Z"
403 },
404 "id": "HQ_UFglyTbqM",
405 "trusted": true
406 },
407 "outputs": [],
408 "source": [
409 "def train(dataloaders, model, loss_fn, optimizer, epochs, device):\n",
410 " tqdm_iter = tqdm(range(epochs))\n",
411 " train_dataloader, test_dataloader = dataloaders[0], dataloaders[1]\n",
412 "\n",
413 " for epoch in tqdm_iter:\n",
414 " model.train()\n",
415 " train_loss = 0.0\n",
416 " test_loss = 0.0\n",
417 "\n",
418 " for batch in train_dataloader:\n",
419 " imgs, labels = batch\n",
420 " imgs = imgs.to(device)\n",
421 " labels = labels.to(device)\n",
422 "\n",
423 " preds = model(imgs)\n",
424 " loss = loss_fn(preds, labels)\n",
425 "\n",
426 " optimizer.zero_grad()\n",
427 " loss.backward()\n",
428 " optimizer.step()\n",
429 "\n",
430 " train_loss += loss.item()\n",
431 "\n",
432 " model.eval()\n",
433 " with torch.no_grad():\n",
434 " for batch in test_dataloader:\n",
435 " imgs, labels = batch\n",
436 " imgs = imgs.to(device)\n",
437 " labels = labels.to(device)\n",
438 "\n",
439 " preds = model(imgs)\n",
440 " loss = loss_fn(preds, labels)\n",
441 "\n",
442 " test_loss += loss.item()\n",
443 "\n",
444 " train_loss /= len(train_dataloader)\n",
445 " test_loss /= len(test_dataloader)\n",
446 "\n",
447 " tqdm_dct = {'train loss:': train_loss, 'test loss:': test_loss}\n",
448 " tqdm_iter.set_postfix(tqdm_dct, refresh=True)\n",
449 " tqdm_iter.refresh()"
450 ]
451 },
452 {
453 "cell_type": "code",
454 "execution_count": null,
455 "metadata": {
456 "colab": {
457 "base_uri": "https://localhost:8080/"
458 },
459 "execution": {
460 "iopub.execute_input": "2022-04-08T16:03:59.302207Z",
461 "iopub.status.busy": "2022-04-08T16:03:59.301979Z",
462 "iopub.status.idle": "2022-04-08T16:17:44.792683Z",
463 "shell.execute_reply": "2022-04-08T16:17:44.791975Z",
464 "shell.execute_reply.started": "2022-04-08T16:03:59.302184Z"
465 },
466 "id": "MsgM_kZRFMpo",
467 "outputId": "8ff2de4a-ad8d-4b57-bdeb-ecaa90f742e2",
468 "trusted": true
469 },
470 "outputs": [
471 {
472 "name": "stderr",
473 "output_type": "stream",
474 "text": [
475 "100%|██████████| 30/30 [01:11<00:00, 2.38s/it, train loss:=0.601, test loss:=0.62]\n"
476 ]
477 }
478 ],
479 "source": [
480 "train(dataloaders, model, loss_fn, optimizer, epochs, device)"
481 ]
482 },
483 {
484 "cell_type": "code",
485 "execution_count": null,
486 "metadata": {
487 "colab": {
488 "base_uri": "https://localhost:8080/",
489 "height": 203
490 },
491 "execution": {
492 "iopub.execute_input": "2022-04-08T16:17:44.795590Z",
493 "iopub.status.busy": "2022-04-08T16:17:44.794942Z",
494 "iopub.status.idle": "2022-04-08T16:17:45.663916Z",
495 "shell.execute_reply": "2022-04-08T16:17:45.663160Z",
496 "shell.execute_reply.started": "2022-04-08T16:17:44.795550Z"
497 },
498 "id": "FXvR7P1FFMpo",
499 "outputId": "16b1f56d-93e0-48a0-d0c2-a8214b537741",
500 "trusted": true
501 },
502 "outputs": [
503 {
504 "data": {
505 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAABdCAYAAABNV2buAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAdzUlEQVR4nO2deXgUVbr/P6e6k+5sZIOQsCUsCRAW2QQUVOYiiiLiDxTRucoMVxCUcQDHwXGcqz539HpFGcUdrl5xZEQGXNFxAXcIOwIhEJYAISEsCQESknTS3ef3RwIkZOt0qruqk/N5njx0V1ed89aXc96qs71HSClRKBQKRetCM9oAhUKhUPgf5fwVCoWiFaKcv0KhULRClPNXKBSKVohy/gqFQtEKUc5foVAoWiE+cf5CiLFCiEwhxAEhxKO+yCMQUbrURmlSG6VJ3Shd9EXoPc9fCGEB9gFjgBxgM3CXlDJD14wCDKVLbZQmtVGa1I3SRX988eY/FDggpcySUpYDy4EJPsgn0FC61EZpUhulSd0oXXTGF86/I3C02vecqmOtHaVLbZQmtVGa1I3SRWesRmUshJgBzACwYBkcSpvmp2nRwGqFCifS7W52enpiJ4wyzpcB99V3ji80MTOeaAKtSxc7YTgoBaVJDYysP0LTcIfZKY+FPm1OoSEu/lYsJdkn4ggqdCArnLrk1xSKKMyXUrbz5lpfOP9coHO1752qjtVASrkYWAzQRsTIYWK01xlaYmPYtyiRuQPXMMB+hG2lXfn0eH9OftqZhNe2ICvKvU5bL87IArbwXXVDaumipyaBgCeaQOvS5YwsYDs/VT/U6jUBA+vP8P44/3qG93u+T5wlDOhS65QK6eKZ/EF8/fS1hK/Y0Pw8m8AaufKIt9f6wvlvBpKFEF2p/M+ZAtztg3wuUjqkG5uvXUS0JRTQGGE/wu+ij5CTXMy9e+YQ9PUWX2bvEW2IBrD7UxezozSpTRuiceNGaVITI8pK0ZThPPP0YkaFuIGwes8LEhaeaJfByP/O5LnDd8OmXb40Szd07/OXUjqB2cBXwB5ghZRyt975VCdk00FuTr+HEvelF4McZzHXfDUXW1qmL7P2GE1oANn4URezozSpjSY07ISC0qQG/i4rWt9e/OaJT6scv2eMDnGx/8EgX5mkOz7p85dSfgF84Yu068JVWEjUZCfXTv49pwe60Uo1Oq+poOfa7bid/u+Ha4CzUsohRhthMpQml2ElCCllitF2mBC/lBURFMz+P4UwI/JYk6/989AvWNWuH65Tp3xgmb4YNuCrN+6iImLfSiO22jG1U0Elmt0OvbqRPygSV3DN38KPuwjPKEDm5OEuKTHGQEVgoVnA7TLaCp9RMm4A31+zEAhv8rVjwg6wousYUM5fYSSWlO4cmdSe4RN2Mj9hCd2tIVhEzZ6+YncZmRUaH50dzLL1V9H9n06C0jJwl5UZZLXCTGh2O1pCe84Oiuf4VYLoXqeJCSlhf04c3Ze40X7+xWgTdcUSG0Pyoxl0sjbd8QMkWEIoTgojfJPOhvkA5fxbIFpoKMdmDOA/H3iP28LOVDn8ugeswjU7g20wOG4Xf71tF9m3FDP70O2ce7Yz9m+2I83VbabwA9aEePImdKXwygrG9d/Fv8d+SP9gF6FatWZjb/h+pMafH51O+D83Gmesjgirlb1PJfNJ59cAi1dpaAjKooUXbQb/o5x/C0OLiCDzlWR2jl5IuGanqWP6XazhfJr8JQffKGbM6ofp9WRWQPRfKnRACAruG87UOV8wM+pzgsQFB2ihLmc4KsTNvKff562dN+DKPOBXU31BwT1Xsu7WBQQJ7123RWic7QFtdbTLV6ioni0JzcK+p/qw5/o3qxy/93QPCifztteoWG5H69tLJwMVpkUITj5wFf94/Hl+F32kmuNvmEnh5zh0Z5yPjfM95WOv5MW/vEqCl9091XFFBkZrWTn/FkTJbUP44fbnsQl9ppsFCQvf9P6Mf1u+GYb20yVNhTkpmjyMD/64gJSg+uez10f8NbmVg8ABijYglTHP/cgIuz7u8KaBuyonWZgc5fxbCJrdTuiDuV4PVDXEIzEHuen/fsI5erDuaSuMx9KjK7f8+TuvHD/AhA470MJCdbbKP1jj2yMXnuWxtvqtB3q0/RrKr+6jW3q+ImCdf8X1g9n/0nAsyd38mq/WvxcHFg6n6M7hIETjF/iJonFXsCzlA5+lPyf6MONe+g4xpK/P8lD4H2GzcfjZsGY5vxvDMhCd4nW0yj9odjuZCxP4vOdnuqbbxRpOyH8ewxIbo2u6emMa52/t2MHjcy1RkaT+dzpZd7zBnof9N7RiTezM4Hd3c3DKG7z87CLk1Vf4Le/GOHZrBW0t3r25ecq8mCyszxdgadOyg4i1Jo7NHsy6YYublUaE5sYVGaKTRX5CCA48NZBfrn2j1vRnPfgoeTV7nu6BFmreFpEpnL+w2ej0USHWTp5FaD09rjfPJVQGvxo3eAfCZvOleZUIwZ5HOvBUux0ADLYFc2iCOQq8JTaGh4Z865e8lvf4iNzfqrf/FsHw/jw/a0lVTCzvSbCEUtjTty8eelMwbThfTlnQ7IkR9REkLOy+5RX2Luxr2geAKZw/muDWmO3IEM+c+InRzotzjvuHH/WLuNakLrw29p0abwmxfc0xBbLwxhR+G7nHL3mFa3Zm3f9Jk1pqCvNhiY0h9oWj3BBa0fy0hEah+bu4LzG0H3+av4zuQb6djR+qBZv6AWAO5++WvJ7zKzhT1Oipwmrlmt77Ln7vbzsKsVGNXmftmkju/Ks5+perkSMGNHl2grtNKKnBBU26xh8IqxXHlEIiNf+1QqZHHuXwvUl+y0+hP9n39WJp0hrd0ovrf8JUY2D1oUVE4HzmLJPCz/klvwsPgKMPDTCdPqZw/tLhQN4lPV5MFCQuRdpbX5KMzDvZ4PnukQMY/dkudjz0ChmzXuOVf7zK0T8NQ1g9X+OmFZWyvvTSNgUu6eZEbrTH1/uKimuvYNUVb/k1T4vQuG7iNtX3H6CIoGD637rH47n8nnBH521Yohp/CTOavN/047NeK/2aZ6gWzNL7X6T8RnPFLzSF8wdw5h336rqPc6/AXVp/HBpLbAx9XkpnXkzWxS6blKAwvp+5gIJ7r/TcvqzDvHP3zXRfMZNu30wj5YMH6P241/so6IMQZE3R6Orj5mtdPJ/wIycnB1JbX3EBERzE0KhDuqZ5Y1gGsou5Z/xodju9puytGabCTwy2BTPkmS1YE8yjkWmcv6dIp5Nvt6UCUOgqwbEsvsEIgycn9uSZ9utrHY+zhDFsVtPeXuXW3fSYs4HkqdvoMW8DrhMNtzh8jda/F+9d/6YheYdqwcT/+2FEkP8rksJ8dAsKoribuVuCFVel8rfOnxqW/7Ptt7Ln8cQm9Tj4koBz/gCpC07wq90TGPr+w0R/sK3e80RQMNFTcup90j8Z/y1lQ5N9ZaZvEYK9syJ0W5XoDUu6/ZPSGwcYlr/CPNhEEAWp5l7le2SsTZfwDd5iERrrxr9AwT2e9zj4koB0/s5DR7DdnEe3+RuQDke954k+PXix+4p6f29rCeP4cD9ME/UB1i6deOX6dw21IcEajnN2vn+m2ip0w11axmd5/XVPV5rY9wurlZ7DDhttBgnWcF7+yyscn3u14a1mc7Q/vMCTTdkPTImkT3DDs2Dc/RufYWRGTo3qxPUhRYCx28atTH2XKWPmYV8dAAHMPcTaNZFjN3fkzKByhNWNLLXSdpOFdj8ex5WVHfgbmbhdnCwKhKDDOmKx0DPihNFWADDcbmHtvAVcPfQBejxRjGvfQUPsCFjn3xiW9nHcN67xqWwzUtexJqozrjNn/WCVfpy62qlbALfmkGAN59jd5XT7XIAM7L3TLLExHJzTk6cmL+eO8IIaazoqxrtYVxbEjE33kPiqQFu/K/AfAq0IS3wc46M+N9qMi7S1hLHvuqUs/qQDS56bQMzSTX4vTwHZ7eMJuXf1YF7M3kbPm9xmJxX9/BsfqNloFjon5RttxUXeGPZ3rF0TjTajWVhSU9BW2Uif9gpTIgprLfkPEhZGhbjZd91SFr33GvsWD/R4Rbrp0CzEt9G/xWtpvDFuHBYLEZr5dqebEXmMVU8tYP+LQ/y+EKxFOn9L+zjGTl3v0TzmTtZwDkzTTLcAoyE0u41xHdKNNuMi19rLybshwWgzvEaOGMCtK9exOuVfHpWZ3sGhHLr5fwla5sSa2LnR882GFmJnXPwuXdMscZcTm27eOPbyfAl7y81ZRrtYw0mf+DLZc/y7EKxFOv+823vw17itHp+/ctTriMFqzrq3BAkLxaPOG22GV1iTuhD/fBYzo3KbfO3HyV+x/9kYwwfumooWE00vW56uaZ51lxN8tvmhInyF+/QZNhaZt4UfqgWzbPrfkMP1H4ivjxbn/LWwMHrevbdJqxcH24I5+1+laBERPrSsZTM+OT0gNrCojhYWRt6iEN5N/NHrNH4Y8SplY8wT3dUT3DERuocqyaiIJDjLHAOqdSLd5DvMPcg9wGYja7bmt41xWpzzL7smlUVdmh6fe22/9zn4WN+A6v4xE/3CchDhgRXZMeeBK0gb/F6z0kiwhnPk1sAqM84IG3ady/mKgqG48s0X++oC0ukkLaOH0WY0yv8OX4qlR5Jf8mpxzv/IFDdxXsS1D9WCWX338xTcN9wHVumLdLnYd7690WbU4LqQLGR8O6PN8BhLj678ZfoyXWZMXT9wd0CtdTiTEuJVHWmI9NMJyHIzj/hCzGYrLulu/EQDucbu5NhY/9TtFuX8tYgI7hm4wevrU4LC+Ov8t3GPbMKqVc3CmXuvYv/SQX6b8SIdDtJykvySV5MIoNKUPSmBSWGFuqQ1KmovWlSkLmkFKnkH25l+qm/7H06x2WFuGy1Co+TqYr/0QARQdW0c2aMLv45q3mKjsaEOop89isXDylx4z1CW/9cCssa8zZ55/gvaJGVgdTWYCWGzMWBChm47OF1pz4aYwHH+Lh80Utpkmnh5bxXuw0d55fhoo81olNt7/oIW4vsQ7S3K+TviQuhkaX4z/p2kf3Ficmqj52l2O31mpV+MqjllZBpamH/6vV0u5fy9RevSkdnxa402wzAK++m7mMghKwg7bu7uFKhsMW/9uvF6bTS3RW1Fa+/7LtQW5fz1IlQLJubOnEaj74nETsxuf8mJjI3cidbWP5s2W9PNPXPBzJwZFMdAm/mdla8Iz9J3YX+O00GbjDO6pukruq7IZ0OZuVdmd7A4qOjg+71ClPOvhye7foKlS6cGzxFlDgpcl970rwgupaxHnK9NAyD4HKYfvDIr5+M1XUNjWJCgBU5VCsmXupadtSUpiEY2VDILrr0HuWfDfxhtRoO0t4RQkuD7CQSBU2I9xI0+hbpvsIPzvRtuermOn+SdEyMvfj9UoWHL80+guNh0B8Wy/oimivo510ffxUidrDbO9Tb/LlYXiN57npOuEt3S+8fRobgKAyQ2lttF0puCbGex0ZYYToty/iGHCsmo0GfgKVzYON++4eaxdDg49GpP9pRXVqRHD03EfdA/u3vZD57kh9JYv+TV0tBC9A1DYMWC0xY4YzCWA7l8WNxbt/SOb0gIqCB31s2ZPHfCvAO/xW4Hwed8r2eLcv7uIzk8k32LLmlZhMbpvo1PC2vz/kZmzJ1Ltw/vRz4a0+D+AnrizM7hsV3/zy95tSSE1cqo5P1Gm2EorvwCXvrkFl26fvKcxXT8wdzz+y/HXVLC12sHGW1GvRxxWrBn+X7BXIty/tLhIHdpN4rd+kTv82hzCikJ/WgjybM3wiZ9g2U1lm/4qgjd7rW1IEJC6Bqqf0RUYe7p47XovvwMW8ub/3Z57/67CF63WweL/Evi6lLTdv3kuiIRZb5/oLYo5w/QbuVu7s0ab7QZfiHmy30sOm2OuDJuQLjM7wG12GhuiND3IZ3rKiFynzkdSX24d+5lyg8zm5XGSdd5yl7tgLss8F5ArNv2mbbr59uzqbhO+T5ke4tz/q5z5yiZ154VxYGz6MZbXAWnWf7OaErcxje7vznfE3KPG21Gozjjo4i36Ns1VyYF2vkAG3yXkqT3IMfLt1+XdDPipwcJ+2y7zob5B3dJCd9+PNiUM+aOlkaDywR9/kKIzkKI74QQGUKI3UKI31cdjxFCfCOE2F/1b3TVcSGEWCSEOCCE2CmE8HvnmtySzusPTebj882bC28rrFueMlnCVvkDafIr0uTXZMvKPuQKWc42+SPr5Jdskz9SISudspSSTPkLQF+9Nen45g7+befdeiXnNRnZdjadXW0KTRqiKCmUBIu+qye3lXVCFJ6r8zdvykoZJfij/th+3s1juTd7de1jJweR8sdTHm2nejlmqT+Jn51mV7n5wlBvOZiIdPp+bwRP3vydwMNSylRgOPCgECIVeBRYK6VMBtZWfQe4CUiu+psBvK671R4Q/OVmFj04hfknmhCnpxoV0kX03rrfCgSCZPpzlbiRK/kVORykWJ7jMHuJIY4RYiwxxHGYyp3ECjhOCUUA6eisifv8eWIeFjyT31OvJL3i69xUkt19TaFJQxT0FU0K9+0JK04MqTeipTdlxY0L/FB/3GVlrNvY9BWv/1OQzI7pfXHmNH0PBDBP/ZGZh3jpxPV6JBWQNOr8pZR5UsptVZ+LgD1AR2ACsLTqtKXAbVWfJwDvyko2AFFCCEO20An6egvpExPptmYaJ11N22wkzWEhatupOn+ziRDaVDZ0sIogQonAQSmnOEYClcHdEkjkFMcAahz3hSauPfv5ceoQbtl3ExXSmCl37pOdTKVJfVR01r97ZntG13rf1LwpK0HY8Ff9ichqWs/vG2c68t1vhyG3eL+TnFnqj3Q4WPdd3+YmozvSYcJ4/kKIJGAgsBFoL6W8sB3QceBCHNKOwNFql+VUHTME56EjpEzbyfjH/sCLhUke9/FNXTsd1/6sRs8rlecp4gyRxFCOA5uo7FIIxk45lY7GQSl2auzPqbsmcvtu3LeXk7psNjvL/TsA55AVtN1xabDXLJrURWIHfafQVUgX7dI8q6ye6iJqVkuf6hKdWc5Zd6lH524oc/H3J8c3y/FfjtFlJfFz8836idyl3+rzhvDY+QshwoFVwBwpZY0OTimlBJo01UMIMUMIsUUIsaUC3w6WSaeTqL+n8c34AfT4agb7KhpuBSwriqXXy0WNhqh1Sic7SaMnA7BeFi5AeBGStbmauPIL6DZ/Aw9PncXAzVMo1HEVZ0P8XGYnelPlYK/emlRdp1tZ0Tsa6telYbT7PqfR88xWVi4QVFRBhQcvRPmu88x49XeEr/A+ZPrlmEET67Z9PHHspibn5UuEnxrvHjl/IUQQlY5/mZTyw6rDJy40var+vRDcIxeovqt1p6pjNZBSLpZSDpFSDgnCPxthOLMOk3LfdmbMmsOInRPJq+OJ/+65trz14G24d+5tMC23dLOTNOLpQpyofAkJxoZDVr5FOWQpwVX3ZSOEMmo4Yt9pIiXaD9uJv/Mw4/4wjzl5Q3w+o+EP6XfgPHzUJ5qAvmUlO1PfjTL+uGMSzuyGnX9TdZE1Q5T4tP4EZeezxdFwMMIK6eLKf82hw0vNC5deHbPUH3dJCbuW9PW49eNrit1lROT6frAXPJvtI4C3gD1SyoXVfvoUmFr1eSrwSbXj91bN+hkOnK3WPWQ8bhe2LzYTMT6Hu2fMpduq+7n70K+YfnQE3VfMZPmk0QStaXjzdyklGWwhjAgSRcrF4+3oQB6V4R3yOEI7OtQ67i9N3GVlRHywgf3jYkle+UCjrR1vKXSVELosCulyml4TgNhtGg6pzwyPbGcxcYtDGmwhelNWKnDgr/rjPl3I2nMND/pOPXw9vf98WLcZKGarP+2WbWfEpvtMMe0zvTyI8Azfz/EHELKRrg0hxEjgJ2AXXHwleYzKfv8VQBfgCDBZSnm66mHxCjAWKAF+K6Xc0lAebUSMHCaMW3AhrFYQmsfT1s7IfLbwPeFcWkvQg760IYZdbKCMUkIIpR/DCRLBlVPV+IUcDjqA/fhbE81C4b1Dmf/YMiaF1z0l0Vuu2jGJyNtyKCzL9bkm0HxdrPHtGbXmAI/EHPQ6jQsM2nIncZMONVhuvCkrP7KaChxZ+Kn+HFg4nINT3qjzt2VFsbx3x5hGW8JNwYz1x5oQT/fPCljUYbO3t6ULV2y6i4Tb93v8oF0jV26VUg7xJq9Gnb8/MNr5+4um/Ef5QhP3NQOZ9ObXzIzybore5TycN4g99ybj2p3pdRpNLbx66JJ//1WsfGzBxU14vGFVcRuW3DUeuVX/0AYb5VrOydMed3o3VxOtfy9ufj+N30XXDEr4+Ml+rJs/jOCvGn0m+wVf1x8xuA8j/28rj7fV70HXFHaWlzF32oNYv22456E6zXH+LW6Fr6J+tJ+28/GvRzHxwJhmpzUnb0izHb9RtF2yiduffoRlRd5FRf30fCgvz73TJ47fCNw797L6P65jVPptrC218HJhIt0+vJ/tE7ubxvH7A7l1Nz9PG8LyIt9vpHI5ha4S7nxnHtbvtvktT+X8Wxly+24cv7aR/P1vvAoKt6e8hG7fTGP/7R0D0vED4HbRdnEayyZeT7d/zmRVcRuP1ke4pJsnTvVh4UO/xva5sd0DurNhJ/bxeSwcOYZ/jexG8uyNOLMOG22V35Fb0ln0xJ0+GyOriwrpYvBHc0l8ekujMwz1RN/93BQBgfNoDj2m5TNy+jymz/qMmZFH6t3M3CXdnHSVsLKoDwvX30DyOxUkp+3AGUDx2+vDtTuT5N/D238bxXPXduTkcBf9+mTTPzKXWyMvvYG5pcbywmF8uXoo3ZccwZbTwhx/FdLhwJln/vhMviZixWYm9HyEzdMXEq7ZfZpXhXRxRdpUej2xD5cXoTKag3L+rRR3WRntX17PF6sH8ebE8USMOc60xPWEaZXzo9eeSSUtNwmRFkl8WglBe7JJKWiZTs95OJuow9lEvQvlVitbbW3Y3m4SXJhrLiXuk/kklqzHP5PwFIbidpG04BcG9JzJnuve0j0cSHVuyJhI0v3HcBUW+iyP+lDOv5XjPHSEhBeOwELBqqjeoFU6PHfxeTo6LvVpB/57vmdIpxPpdOI+779mv8J8uEtKSHngECnPzmLjuL8RZwlr/KIm8s65OOxzQ3AV+Gf3v8tRzl9RiZSGvH0oFGbFdeYsPWdv49afH6bk9rP0iKmcf595Ko6yoxGVJ0lAQLuUfJ7rtZKrbC6PWgqHKop586mZtEnXb8V0U1HOX6FQKOpBOp1EvreByGWCC23BTuTXHpjVLDzbfSI5t8Yzeeq3zI/dXe9D4Ky7lJvf/iNdPtjoW+MbQc32USgUisaQsubf5bhduPZnkfDCetaP7kzv7++rN6lB3z9A0v9sM3zTe1Ms8hJCFAEBOm/QY9oCYVLKdp6crDSpm1agi9KkNm2BfCBR1Z8aNLmsVMcs3T6Z3q5SCxSEEFuklElNuERpUjctWhelSW2qNGnq/bVoTcDrsnIR1e2jUCgUrRDl/BUKhaIVYhbnv9hoA/xAU+9RaaLfNYGE0qQ2SpO6adY9mmLAV6FQKBT+xSxv/gqFQqHwI4Y7fyHEWCFEphDigBDiUaPt8QYhRGchxHdCiAwhxG4hxO+rjj8phMgVQvxS9XdztWv+VHXPmUKIGy9LT2miNLlwTYvWBJQudaG3JnUipTTsD7AAB4FuQDCwA0g10iYv7yMBGFT1OQLYB6QCTwJ/qOP81Kp7tQFdqzSwKE2UJq1NE6WL7zWp78/oN/+hwAEpZZaUshxYDkww2KYmI6XMk1Juq/pcBOwBOjZwyQRguZTSIaU8BBygUgtQmihNLtHiNQGlS13orEmdGO38OwJHq33PoeEbND1CiCRgIJV7HAPMFkLsFEK8LYS4sEVQQ/etNKlEadLKNAGlS13ooEmdGO38WxRCiHBgFTBHSnkOeB3oDgwA8oAXDDTPEJQmtVGa1I3SpTa+1MRo558LdK72vVPVsYBDCBFE5X/SMinlhwBSyhNSSpeU0g0s4VIzrKH7VppUojRpJZqA0qUudNSkbgwe1LACWVQOUFwYnOljpE1e3ocA3gVevOx4QrXPc6nskwPoQ83BmSwuDVgpTZQmrUYTpYvvNanvz9DAblJKpxBiNvAVlaP0b0spdzdymRkZAdwD7BJC/FJ17DHgLiHEACq3fDgM3A8gpdwthFgBZABO4EEpK3cQV5ooTWhdmoDSpS5006Q+1ApfhUKhaIUY3eevUCgUCgNQzl+hUChaIcr5KxQKRStEOX+FQqFohSjnr1AoFK0Q5fwVCoWiFaKcv0KhULRClPNXKBSKVsj/BxTZuj/v49iMAAAAAElFTkSuQmCC",
506 "text/plain": [
507 "<Figure size 432x288 with 5 Axes>"
508 ]
509 },
510 "metadata": {
511 "needs_background": "light"
512 },
513 "output_type": "display_data"
514 },
515 {
516 "data": {
517 "image/png": "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",
518 "text/plain": [
519 "<Figure size 432x288 with 5 Axes>"
520 ]
521 },
522 "metadata": {
523 "needs_background": "light"
524 },
525 "output_type": "display_data"
526 }
527 ],
528 "source": [
529 "model.eval()\n",
530 "predictions = []\n",
531 "image_mask = []\n",
532 "plots = 5\n",
533 "images, masks = test_dataset[0], test_dataset[1]\n",
534 "for i, (img, mask) in enumerate(zip(images, masks)):\n",
535 " if i == plots:\n",
536 " break\n",
537 " img = img.to(device).unsqueeze(0)\n",
538 " predictions.append((model(img).detach().cpu()[0] > 0.5).float())\n",
539 " image_mask.append(mask)\n",
540 "plotn(plots, (predictions, image_mask), only_mask=True)"
541 ]
542 },
543 {
544 "cell_type": "markdown",
545 "metadata": {
546 "id": "RU5KGWXaTbso"
547 },
548 "source": [
549 "## U-Net\n",
550 "\n",
551 "Very simple architecture that used skip connections. Skip connections at each convolution level helps network doesn't lost information about features from original input at this level.\n",
552 "\n",
553 "U-Net usually has a default encoder for feature extraction, for example resnet50.\n",
554 "\n",
555 "<img src=\"images/unet.png\" width=\"70%\">\n",
556 "\n",
557 "* Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. [U-Net: Convolutional networks for biomedical image segmentation.](https://arxiv.org/pdf/1505.04597.pdf)"
558 ]
559 },
560 {
561 "cell_type": "code",
562 "execution_count": null,
563 "metadata": {
564 "execution": {
565 "iopub.execute_input": "2022-04-08T16:17:45.665392Z",
566 "iopub.status.busy": "2022-04-08T16:17:45.665102Z",
567 "iopub.status.idle": "2022-04-08T16:17:45.691051Z",
568 "shell.execute_reply": "2022-04-08T16:17:45.690314Z",
569 "shell.execute_reply.started": "2022-04-08T16:17:45.665341Z"
570 },
571 "id": "ZLKGrI4YTbs9",
572 "trusted": true
573 },
574 "outputs": [],
575 "source": [
576 "class UNet(nn.Module):\n",
577 " def __init__(self):\n",
578 " super().__init__()\n",
579 " self.enc_conv0 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=(3,3), padding=1)\n",
580 " self.act0 = nn.ReLU()\n",
581 " self.bn0 = nn.BatchNorm2d(16)\n",
582 " self.pool0 = nn.MaxPool2d(kernel_size=(2,2))\n",
583 "\n",
584 " self.enc_conv1 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=(3,3), padding=1)\n",
585 " self.act1 = nn.ReLU()\n",
586 " self.bn1 = nn.BatchNorm2d(32)\n",
587 " self.pool1 = nn.MaxPool2d(kernel_size=(2,2))\n",
588 "\n",
589 " self.enc_conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=(3,3), padding=1)\n",
590 " self.act2 = nn.ReLU()\n",
591 " self.bn2 = nn.BatchNorm2d(64)\n",
592 " self.pool2 = nn.MaxPool2d(kernel_size=(2,2))\n",
593 "\n",
594 " self.enc_conv3 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=(3,3), padding=1)\n",
595 " self.act3 = nn.ReLU()\n",
596 " self.bn3 = nn.BatchNorm2d(128)\n",
597 " self.pool3 = nn.MaxPool2d(kernel_size=(2,2))\n",
598 "\n",
599 " self.bottleneck_conv = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=(3,3), padding=1)\n",
600 " \n",
601 " self.upsample0 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
602 " self.dec_conv0 = nn.Conv2d(in_channels=384, out_channels=128, kernel_size=(3,3), padding=1)\n",
603 " self.dec_act0 = nn.ReLU()\n",
604 " self.dec_bn0 = nn.BatchNorm2d(128)\n",
605 "\n",
606 " self.upsample1 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
607 " self.dec_conv1 = nn.Conv2d(in_channels=192, out_channels=64, kernel_size=(3,3), padding=1)\n",
608 " self.dec_act1 = nn.ReLU()\n",
609 " self.dec_bn1 = nn.BatchNorm2d(64)\n",
610 "\n",
611 " self.upsample2 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
612 " self.dec_conv2 = nn.Conv2d(in_channels=96, out_channels=32, kernel_size=(3,3), padding=1)\n",
613 " self.dec_act2 = nn.ReLU()\n",
614 " self.dec_bn2 = nn.BatchNorm2d(32)\n",
615 "\n",
616 " self.upsample3 = nn.UpsamplingBilinear2d(scale_factor=2)\n",
617 " self.dec_conv3 = nn.Conv2d(in_channels=48, out_channels=1, kernel_size=(1,1))\n",
618 "\n",
619 " self.sigmoid = nn.Sigmoid()\n",
620 "\n",
621 " def forward(self, x):\n",
622 " e0 = self.pool0(self.bn0(self.act0(self.enc_conv0(x))))\n",
623 " e1 = self.pool1(self.bn1(self.act1(self.enc_conv1(e0))))\n",
624 " e2 = self.pool2(self.bn2(self.act2(self.enc_conv2(e1))))\n",
625 " e3 = self.pool3(self.bn3(self.act3(self.enc_conv3(e2))))\n",
626 "\n",
627 " cat0 = self.bn0(self.act0(self.enc_conv0(x)))\n",
628 " cat1 = self.bn1(self.act1(self.enc_conv1(e0)))\n",
629 " cat2 = self.bn2(self.act2(self.enc_conv2(e1)))\n",
630 " cat3 = self.bn3(self.act3(self.enc_conv3(e2)))\n",
631 "\n",
632 " b = self.bottleneck_conv(e3)\n",
633 "\n",
634 " d0 = self.dec_bn0(self.dec_act0(self.dec_conv0(torch.cat((self.upsample0(b), cat3), dim=1))))\n",
635 " d1 = self.dec_bn1(self.dec_act1(self.dec_conv1(torch.cat((self.upsample1(d0), cat2), dim=1))))\n",
636 " d2 = self.dec_bn2(self.dec_act2(self.dec_conv2(torch.cat((self.upsample2(d1), cat1), dim=1))))\n",
637 " d3 = self.sigmoid(self.dec_conv3(torch.cat((self.upsample3(d2), cat0), dim=1)))\n",
638 " return d3"
639 ]
640 },
641 {
642 "cell_type": "code",
643 "execution_count": null,
644 "metadata": {
645 "execution": {
646 "iopub.execute_input": "2022-04-08T16:17:45.692880Z",
647 "iopub.status.busy": "2022-04-08T16:17:45.692240Z",
648 "iopub.status.idle": "2022-04-08T16:17:45.719635Z",
649 "shell.execute_reply": "2022-04-08T16:17:45.719023Z",
650 "shell.execute_reply.started": "2022-04-08T16:17:45.692842Z"
651 },
652 "id": "15GA_43BTbtI",
653 "trusted": true
654 },
655 "outputs": [],
656 "source": [
657 "model = UNet().to(device)\n",
658 "optimizer = optim.Adam(model.parameters(), lr=lr, weight_decay=weight_decay)\n",
659 "loss_fn = nn.BCEWithLogitsLoss()"
660 ]
661 },
662 {
663 "cell_type": "code",
664 "execution_count": null,
665 "metadata": {
666 "colab": {
667 "base_uri": "https://localhost:8080/"
668 },
669 "execution": {
670 "iopub.execute_input": "2022-04-08T16:17:45.721443Z",
671 "iopub.status.busy": "2022-04-08T16:17:45.721062Z",
672 "iopub.status.idle": "2022-04-08T16:20:23.193420Z",
673 "shell.execute_reply": "2022-04-08T16:20:23.191453Z",
674 "shell.execute_reply.started": "2022-04-08T16:17:45.721410Z"
675 },
676 "id": "_dgiuvVVFMpr",
677 "outputId": "438c570f-9480-48c6-bce6-14fbdf5b2d5f",
678 "trusted": true
679 },
680 "outputs": [
681 {
682 "name": "stderr",
683 "output_type": "stream",
684 "text": [
685 "100%|██████████| 30/30 [01:45<00:00, 3.52s/it, train loss:=0.6, test loss:=0.609]\n"
686 ]
687 }
688 ],
689 "source": [
690 "train(dataloaders, model, loss_fn, optimizer, epochs, device)"
691 ]
692 },
693 {
694 "cell_type": "code",
695 "execution_count": null,
696 "metadata": {
697 "colab": {
698 "base_uri": "https://localhost:8080/",
699 "height": 203
700 },
701 "id": "iEu5wjuMFMps",
702 "outputId": "cf76869c-cf86-493f-fa73-a8790d21bf20"
703 },
704 "outputs": [
705 {
706 "data": {
707 "image/png": "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",
708 "text/plain": [
709 "<Figure size 432x288 with 5 Axes>"
710 ]
711 },
712 "metadata": {
713 "needs_background": "light"
714 },
715 "output_type": "display_data"
716 },
717 {
718 "data": {
719 "image/png": "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",
720 "text/plain": [
721 "<Figure size 432x288 with 5 Axes>"
722 ]
723 },
724 "metadata": {
725 "needs_background": "light"
726 },
727 "output_type": "display_data"
728 }
729 ],
730 "source": [
731 "model.eval()\n",
732 "predictions = []\n",
733 "image_mask = []\n",
734 "plots = 5\n",
735 "images, masks = test_dataset[0], test_dataset[1]\n",
736 "for i, (img, mask) in enumerate(zip(images, masks)):\n",
737 " if i == plots:\n",
738 " break\n",
739 " img = img.to(device).unsqueeze(0)\n",
740 " predictions.append((model(img).detach().cpu()[0] > 0.5).float())\n",
741 " image_mask.append(mask)\n",
742 "plotn(plots, (predictions, image_mask), only_mask=True)"
743 ]
744 },
745 {
746 "cell_type": "code",
747 "execution_count": null,
748 "metadata": {
749 "id": "2XCSTDlhWsSv"
750 },
751 "outputs": [],
752 "source": []
753 }
754 ],
755 "metadata": {
756 "accelerator": "GPU",
757 "colab": {
758 "collapsed_sections": [],
759 "name": "SemanticSegmentation.ipynb",
760 "provenance": []
761 },
762 "kernelspec": {
763 "display_name": "Python 3",
764 "language": "python",
765 "name": "python3"
766 },
767 "language_info": {
768 "codemirror_mode": {
769 "name": "ipython",
770 "version": 3
771 },
772 "file_extension": ".py",
773 "mimetype": "text/x-python",
774 "name": "python",
775 "nbconvert_exporter": "python",
776 "pygments_lexer": "ipython3",
777 "version": "3.9.7"
778 }
779 },
780 "nbformat": 4,
781 "nbformat_minor": 0
782}
783