1220 lines (1219 with data), 281.3 kB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "nDXW7A7pwZ7a"
},
"source": [
"# UNET SEGMENTATION (SUJAL)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "M5oF6qqZwZ70"
},
"outputs": [],
"source": [
"## Imports\n",
"import os\n",
"import sys\n",
"import random\n",
"\n",
"import numpy as np\n",
"import cv2\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import tensorflow as tf\n",
"from tensorflow import keras\n",
"\n",
"## Seeding\n",
"seed = 42\n",
"random.seed = seed\n",
"np.random.seed = seed\n",
"tf.seed = seed"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "70jPovBLwZ7-"
},
"source": [
"## Data "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "SvRbQp8LwZ8B"
},
"outputs": [],
"source": [
"class DataGen(keras.utils.Sequence):\n",
" def __init__(self, ids, path, batch_size=8, image_size=128):\n",
" self.ids = ids\n",
" self.path = path\n",
" self.batch_size = batch_size\n",
" self.image_size = image_size\n",
" self.on_epoch_end()\n",
"\n",
" def __load__(self, id_name):\n",
" # Construct image path\n",
" image_path = os.path.join(self.path, \"images\", id_name)\n",
"\n",
" # Construct mask path\n",
" mask_path = os.path.join(self.path, \"masks\", id_name)\n",
"\n",
" # Read and resize image\n",
" image = cv2.imread(image_path, 1)\n",
" image = cv2.resize(image, (self.image_size, self.image_size))\n",
"\n",
" # Read and resize mask\n",
" mask = cv2.imread(mask_path, 0) # mask often is a single-channel image\n",
" mask = cv2.resize(mask, (self.image_size, self.image_size))\n",
" mask = np.expand_dims(mask, axis=-1)\n",
"\n",
" # Normalize\n",
" image = image / 255.0\n",
" mask = mask / 255.0\n",
"\n",
" return image, mask\n",
"\n",
" def __getitem__(self, index):\n",
" if(index+1)*self.batch_size > len(self.ids):\n",
" self.batch_size = len(self.ids) - index*self.batch_size\n",
"\n",
" files_batch = self.ids[index*self.batch_size : (index+1)*self.batch_size]\n",
"\n",
" image = []\n",
" mask = []\n",
"\n",
" for id_name in files_batch:\n",
" _img, _mask = self.__load__(id_name)\n",
" image.append(_img)\n",
" mask.append(_mask)\n",
"\n",
" image = np.array(image)\n",
" mask = np.array(mask)\n",
"\n",
" return image, mask\n",
"\n",
" def on_epoch_end(self):\n",
" pass\n",
"\n",
" def __len__(self):\n",
" return int(np.ceil(len(self.ids)/float(self.batch_size)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "lcEkbVTQWGv-",
"outputId": "5df2d48b-d9fc-47c6-d2d4-75d385054910"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mounted at /content/drive\n"
]
}
],
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rUG6cDK1wZ8I"
},
"source": [
"## Hyperparameters"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "2QwbWknPwZ8M"
},
"outputs": [],
"source": [
"image_size = 128\n",
"train_path = \"/content/drive/MyDrive/UNet Dataset/Cardiac Dataset/train\"\n",
"epochs = 30\n",
"batch_size = 8\n",
"\n",
"## Training Ids\n",
"train_ids = os.listdir(os.path.join(train_path, \"images\"))\n",
"\n",
"\n",
"## Validation Data Size\n",
"val_data_size = 10\n",
"\n",
"valid_ids = train_ids[:val_data_size]\n",
"train_ids = train_ids[val_data_size:]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6_cMh29vwZ8R",
"outputId": "534e3fce-2174-4f8d-99d3-c19550f24f70"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(8, 128, 128, 3) (8, 128, 128, 1)\n"
]
}
],
"source": [
"gen = DataGen(train_ids, train_path, batch_size=batch_size, image_size=image_size)\n",
"x, y = gen.__getitem__(0)\n",
"print(x.shape, y.shape)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 309
},
"id": "NCG2jWo9wZ8c",
"outputId": "f158147f-b3b7-4c7f-e0a0-13219d136aa7",
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7caa566820b0>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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qlWrcMMNN+C2227D9ddfj2effRYnnXQSRkdHsWHDBmSzWQwMDMSuCeOZDI7LdPfghg0bsO+++8a+7+7uxsKFC8O47gUIz6GdQ3gGzSzm0zOoI3czDthxvOMd73C/v+51r8OqVatwwAEH4Nvf/jYKhcIstiwgIGA+IDyDAnYVHaWgLFq0CF1dXVMivDdu3IjBwcFZalVnYWBgAIceeiiefvppDA4OotFoYGhoKHZOGM9kcFymuwcHBwenBEuOj49j69atYVz3AoTn0KtDeAa9OsynZ1BHEZRsNovjjz8ea9eudcfa7TbWrl2L1atXz2LLOgdjY2P4zW9+g6VLl+L4449HJpOJjef69evx/PPPh/FMwIoVKzA4OBgbs5GREdxzzz1uzFavXo2hoSE88MAD7pw77rgD7XYbq1at2uNtDphZhOfQq0N4Br06zKtn0GxH6e4svvWtb0W5XC664YYbosceeyy64IILooGBgWjDhg2z3bQ5ib/4i7+Ifvazn0XPPvts9Itf/CJas2ZNtGjRomjTpk1RFEXRhz/84Wj//feP7rjjjuj++++PVq9eHa1evXqWWz27GB0djR566KHooYceigBEf/d3fxc99NBD0XPPPRdFURT99V//dTQwMBB973vfi371q19Fp556arRixYqoWq26Mk455ZTo9a9/fXTPPfdEP//5z6NDDjkkOvvss2erSwEzjPAc2nGEZ9DOIzyDJtBxBCWKoujv//7vo/333z/KZrPRCSecEN19992z3aQ5i/e///3R0qVLo2w2G73mNa+J3v/+90dPP/20+75arUZ/9md/Fi1YsCAqFovR6aefHv3ud7+bxRbPPn76059GAKZ8zj333CiKJpb5XX755dGSJUuiXC4Xvf3tb4/Wr18fK2PLli3R2WefHfX09ER9fX3ReeedF42Ojs5CbwJ2F8JzaMcQnkE7j/AMmkAqiqJodrSbgICAgICAgAA/OioGJSAgICAgIGB+IBCUgICAgICAgDmHQFACAgICAgIC5hwCQQkICAgICAiYcwgEJSAgICAgIGDOIRCUgICAgICAgDmHQFACAgICAgIC5hwCQQkICAgICAiYcwgEJSAgICAgIGDOIRCUgICAgICAgDmHQFACAgICAgIC5hwCQQkICAgICAiYc/j/AYK9TW0jqFS5AAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"r = random.randint(0, len(x)-1)\n",
"\n",
"fig = plt.figure()\n",
"fig.subplots_adjust(hspace=0.4, wspace=0.4)\n",
"ax = fig.add_subplot(1, 2, 1)\n",
"ax.imshow(x[r])\n",
"ax = fig.add_subplot(1, 2, 2)\n",
"ax.imshow(np.reshape(y[r], (image_size, image_size)), cmap=\"gray\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1xJMvRqswZ8o"
},
"source": [
"## Different Convolutional Blocks"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "xtA9Rr75wZ8p"
},
"outputs": [],
"source": [
"def down_block(x, filters, kernel_size=(3, 3), padding=\"same\", strides=1):\n",
" c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation=\"relu\")(x)\n",
" c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation=\"relu\")(c)\n",
" p = keras.layers.MaxPool2D((2, 2), (2, 2))(c)\n",
" return c, p\n",
"\n",
"def up_block(x, skip, filters, kernel_size=(3, 3), padding=\"same\", strides=1):\n",
" us = keras.layers.UpSampling2D((2, 2))(x)\n",
" concat = keras.layers.Concatenate()([us, skip])\n",
" c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation=\"relu\")(concat)\n",
" c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation=\"relu\")(c)\n",
" return c\n",
"\n",
"def bottleneck(x, filters, kernel_size=(3, 3), padding=\"same\", strides=1):\n",
" c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation=\"relu\")(x)\n",
" c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation=\"relu\")(c)\n",
" return c"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QMdNQ_HVwZ82"
},
"source": [
"## UNet Model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "YAa1RbB8wZ89"
},
"outputs": [],
"source": [
"def UNet():\n",
" f = [16, 32, 64, 128, 256]\n",
" inputs = keras.layers.Input((image_size, image_size, 3))\n",
"\n",
" p0 = inputs\n",
" c1, p1 = down_block(p0, f[0]) # 128 --> 64\n",
" c2, p2 = down_block(p1, f[1]) # 64 --> 32\n",
" c3, p3 = down_block(p2, f[2]) # 32 --> 16\n",
" c4, p4 = down_block(p3, f[3]) # 16 --> 8\n",
"\n",
" bn = bottleneck(p4, f[4])\n",
"\n",
" u1 = up_block(bn, c4, f[3]) # 8 --> 16\n",
" u2 = up_block(u1, c3, f[2]) # 16 --> 32\n",
" u3 = up_block(u2, c2, f[1]) # 32 --> 64\n",
" u4 = up_block(u3, c1, f[0]) # 64 --> 128\n",
"\n",
" outputs = keras.layers.Conv2D(1, (1, 1), padding=\"same\", activation=\"sigmoid\")(u4)\n",
" model = keras.models.Model(inputs, outputs)\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "ntBPY06awZ9E",
"outputId": "bc8241cf-1ca4-46a5-ddf1-afcb43ddc395",
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"functional\"</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mModel: \"functional\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃<span style=\"font-weight: bold\"> Connected to </span>┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
"│ input_layer (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">InputLayer</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">3</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ - │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">448</span> │ input_layer[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">2,320</span> │ conv2d[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">4,640</span> │ max_pooling2d[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">9,248</span> │ conv2d_2[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d_1 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_3[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_4 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">18,496</span> │ max_pooling2d_1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_5 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">36,928</span> │ conv2d_4[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d_2 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_5[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_6 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">73,856</span> │ max_pooling2d_2[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_7 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">147,584</span> │ conv2d_6[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d_3 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_7[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_8 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">295,168</span> │ max_pooling2d_3[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_9 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">590,080</span> │ conv2d_8[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_9[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">UpSampling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Concatenate</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ up_sampling2d[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>], │\n",
"│ │ │ │ conv2d_7[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_10 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">442,496</span> │ concatenate[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_11 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">147,584</span> │ conv2d_10[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d_1 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_11[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">UpSampling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate_1 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ up_sampling2d_1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>], │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Concatenate</span>) │ │ │ conv2d_5[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_12 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">110,656</span> │ concatenate_1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_13 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">36,928</span> │ conv2d_12[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d_2 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_13[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">UpSampling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate_2 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ up_sampling2d_2[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>], │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Concatenate</span>) │ │ │ conv2d_3[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_14 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">27,680</span> │ concatenate_2[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_15 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">9,248</span> │ conv2d_14[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d_3 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ conv2d_15[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">UpSampling2D</span>) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate_3 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">48</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │ up_sampling2d_3[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>], │\n",
"│ (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Concatenate</span>) │ │ │ conv2d_1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_16 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">6,928</span> │ concatenate_3[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_17 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">2,320</span> │ conv2d_16[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_18 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">17</span> │ conv2d_17[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] │\n",
"└───────────────────────────┴────────────────────────┴────────────────┴────────────────────────┘\n",
"</pre>\n"
],
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mConnected to \u001b[0m\u001b[1m \u001b[0m┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
"│ input_layer (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m448\u001b[0m │ input_layer[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_1 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m2,320\u001b[0m │ conv2d[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_2 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m4,640\u001b[0m │ max_pooling2d[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_3 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m9,248\u001b[0m │ conv2d_2[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d_1 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_3[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_4 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │ max_pooling2d_1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_5 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │ conv2d_4[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d_2 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_5[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_6 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │ max_pooling2d_2[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_7 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m147,584\u001b[0m │ conv2d_6[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ max_pooling2d_3 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_7[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_8 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m295,168\u001b[0m │ max_pooling2d_3[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_9 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m590,080\u001b[0m │ conv2d_8[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_9[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mUpSampling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate (\u001b[38;5;33mConcatenate\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m384\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ up_sampling2d[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
"│ │ │ │ conv2d_7[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_10 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m442,496\u001b[0m │ concatenate[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_11 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m147,584\u001b[0m │ conv2d_10[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d_1 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_11[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mUpSampling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate_1 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m192\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ up_sampling2d_1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
"│ (\u001b[38;5;33mConcatenate\u001b[0m) │ │ │ conv2d_5[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_12 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m110,656\u001b[0m │ concatenate_1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_13 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │ conv2d_12[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d_2 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_13[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mUpSampling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate_2 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m96\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ up_sampling2d_2[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
"│ (\u001b[38;5;33mConcatenate\u001b[0m) │ │ │ conv2d_3[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_14 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m27,680\u001b[0m │ concatenate_2[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_15 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m64\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m9,248\u001b[0m │ conv2d_14[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ up_sampling2d_3 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ conv2d_15[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"│ (\u001b[38;5;33mUpSampling2D\u001b[0m) │ │ │ │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ concatenate_3 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m48\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ up_sampling2d_3[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n",
"│ (\u001b[38;5;33mConcatenate\u001b[0m) │ │ │ conv2d_1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_16 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m6,928\u001b[0m │ concatenate_3[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_17 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m2,320\u001b[0m │ conv2d_16[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤\n",
"│ conv2d_18 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m128\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m17\u001b[0m │ conv2d_17[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n",
"└───────────────────────────┴────────────────────────┴────────────────┴────────────────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">1,962,625</span> (7.49 MB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m1,962,625\u001b[0m (7.49 MB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">1,962,625</span> (7.49 MB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m1,962,625\u001b[0m (7.49 MB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = UNet()\n",
"model.compile(optimizer=\"adam\", loss=\"binary_crossentropy\", metrics=[\"acc\"])\n",
"model.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Nmkxq4-BwZ9Q"
},
"source": [
"## Training the model"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6I34e4tcwZ9T",
"outputId": "427bd73a-0c95-4b03-ce95-6584de960233",
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/30\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.10/dist-packages/keras/src/trainers/data_adapters/py_dataset_adapter.py:122: UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored.\n",
" self._warn_if_super_not_called()\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m631s\u001b[0m 3s/step - acc: 0.8556 - loss: 0.3451 - val_acc: 0.9528 - val_loss: 0.0973\n",
"Epoch 2/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 679us/step - acc: 0.9566 - loss: 0.0906 - val_acc: 0.9547 - val_loss: 0.1025\n",
"Epoch 3/30\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/lib/python3.10/contextlib.py:153: UserWarning: Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches. You may need to use the `.repeat()` function when building your dataset.\n",
" self.gen.throw(typ, value, traceback)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m215s\u001b[0m 727ms/step - acc: 0.9470 - loss: 0.1336 - val_acc: 0.9685 - val_loss: 0.0766\n",
"Epoch 4/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m156s\u001b[0m 735ms/step - acc: 0.9662 - loss: 0.0772 - val_acc: 0.9793 - val_loss: 0.0495\n",
"Epoch 5/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m110s\u001b[0m 516ms/step - acc: 0.9653 - loss: 0.0823 - val_acc: 0.9794 - val_loss: 0.0416\n",
"Epoch 6/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m155s\u001b[0m 725ms/step - acc: 0.9696 - loss: 0.0687\n",
"Epoch 7/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m158s\u001b[0m 741ms/step - acc: 0.9718 - loss: 0.0647 - val_acc: 0.9770 - val_loss: 0.0795\n",
"Epoch 8/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m103s\u001b[0m 484ms/step - acc: 0.9697 - loss: 0.0692 - val_acc: 0.9852 - val_loss: 0.0317\n",
"Epoch 9/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m188s\u001b[0m 762ms/step - acc: 0.9759 - loss: 0.0537 - val_acc: 0.9818 - val_loss: 0.0413\n",
"Epoch 10/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m156s\u001b[0m 729ms/step - acc: 0.9766 - loss: 0.0518 - val_acc: 0.9870 - val_loss: 0.0268\n",
"Epoch 11/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m106s\u001b[0m 495ms/step - acc: 0.9774 - loss: 0.0493 - val_acc: 0.9907 - val_loss: 0.0196\n",
"Epoch 12/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m174s\u001b[0m 735ms/step - acc: 0.9782 - loss: 0.0475\n",
"Epoch 13/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m164s\u001b[0m 768ms/step - acc: 0.9804 - loss: 0.0416 - val_acc: 0.9888 - val_loss: 0.0219\n",
"Epoch 14/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m106s\u001b[0m 499ms/step - acc: 0.9798 - loss: 0.0431 - val_acc: 0.9835 - val_loss: 0.0333\n",
"Epoch 15/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m156s\u001b[0m 733ms/step - acc: 0.9802 - loss: 0.0433 - val_acc: 0.9824 - val_loss: 0.0368\n",
"Epoch 16/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m158s\u001b[0m 742ms/step - acc: 0.9822 - loss: 0.0369 - val_acc: 0.9895 - val_loss: 0.0231\n",
"Epoch 17/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m104s\u001b[0m 489ms/step - acc: 0.9821 - loss: 0.0374 - val_acc: 0.9927 - val_loss: 0.0176\n",
"Epoch 18/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m186s\u001b[0m 762ms/step - acc: 0.9823 - loss: 0.0369\n",
"Epoch 19/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m154s\u001b[0m 722ms/step - acc: 0.9827 - loss: 0.0366 - val_acc: 0.9879 - val_loss: 0.0248\n",
"Epoch 20/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m103s\u001b[0m 482ms/step - acc: 0.9820 - loss: 0.0384 - val_acc: 0.9872 - val_loss: 0.0247\n",
"Epoch 21/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m156s\u001b[0m 728ms/step - acc: 0.9836 - loss: 0.0339 - val_acc: 0.9885 - val_loss: 0.0257\n",
"Epoch 22/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m161s\u001b[0m 756ms/step - acc: 0.9826 - loss: 0.0369 - val_acc: 0.9905 - val_loss: 0.0205\n",
"Epoch 23/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m104s\u001b[0m 490ms/step - acc: 0.9843 - loss: 0.0324 - val_acc: 0.9920 - val_loss: 0.0178\n",
"Epoch 24/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m157s\u001b[0m 734ms/step - acc: 0.9848 - loss: 0.0307\n",
"Epoch 25/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m156s\u001b[0m 733ms/step - acc: 0.9840 - loss: 0.0330 - val_acc: 0.9902 - val_loss: 0.0202\n",
"Epoch 26/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m103s\u001b[0m 483ms/step - acc: 0.9852 - loss: 0.0306 - val_acc: 0.9871 - val_loss: 0.0251\n",
"Epoch 27/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m164s\u001b[0m 767ms/step - acc: 0.9842 - loss: 0.0333 - val_acc: 0.9803 - val_loss: 0.0453\n",
"Epoch 28/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m156s\u001b[0m 731ms/step - acc: 0.9821 - loss: 0.0389 - val_acc: 0.9901 - val_loss: 0.0196\n",
"Epoch 29/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m104s\u001b[0m 485ms/step - acc: 0.9840 - loss: 0.0330 - val_acc: 0.9919 - val_loss: 0.0153\n",
"Epoch 30/30\n",
"\u001b[1m213/213\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m171s\u001b[0m 713ms/step - acc: 0.9847 - loss: 0.0307\n"
]
},
{
"data": {
"text/plain": [
"<keras.src.callbacks.history.History at 0x7caa5404be20>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_gen = DataGen(train_ids, train_path, image_size=image_size, batch_size=batch_size)\n",
"valid_gen = DataGen(valid_ids, train_path, image_size=image_size, batch_size=batch_size)\n",
"\n",
"train_steps = len(train_ids)//batch_size\n",
"valid_steps = len(valid_ids)//batch_size\n",
"\n",
"history = model.fit(train_gen, validation_data=valid_gen, steps_per_epoch=train_steps,\n",
" validation_steps=valid_steps, epochs=epochs)\n",
"\n",
"# Save the weights\n",
"model.save_weights(\"UNetW.weights.h5\")\n",
"\n",
"# Plot training & validation accuracy and loss\n",
"acc = history.history['acc']\n",
"val_acc = history.history['val_acc']\n",
"loss = history.history['loss']\n",
"val_loss = history.history['val_loss']\n",
"num_epochs = min(len(acc), len(val_acc))\n",
"epochs_range = range(1, num_epochs + 1)\n",
"\n",
"plt.figure(figsize=(16, 6))\n",
"\n",
"# Accuracy plot\n",
"plt.subplot(1, 2, 1)\n",
"plt.plot(epochs_range, acc[:num_epochs], label='Training Accuracy')\n",
"plt.plot(epochs_range, val_acc[:num_epochs], label='Validation Accuracy')\n",
"plt.title('Training & Validation Accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Accuracy')\n",
"plt.legend()\n",
"\n",
"# Loss plot\n",
"plt.subplot(1, 2, 2)\n",
"plt.plot(epochs_range, loss[:num_epochs], label='Training Loss')\n",
"plt.plot(epochs_range, val_loss[:num_epochs], label='Validation Loss')\n",
"plt.title('Training & Validation Loss')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iDUykT_awZ9h"
},
"source": [
"## Testing the model"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "i_oY4H3LwZ9l",
"outputId": "371b3f40-25d0-416c-fd0f-e3eb6b0df943"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 543ms/step\n"
]
}
],
"source": [
"## Save the Weights\n",
"model.save_weights(\"UNetW.weights.h5\")\n",
"\n",
"## Dataset for prediction\n",
"x, y = valid_gen.__getitem__(2)\n",
"result = model.predict(x)\n",
"\n",
"result = result > 0.5"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "DLdgSxZKpQcQ"
},
"outputs": [],
"source": [
"\n",
"# Load the weights\n",
"model.load_weights(\"UNetW.weights.h5\")\n",
"\n",
"# Now you can use the model for predictions or further training\n",
"x, y = valid_gen.__getitem__(2)\n",
"result = model.predict(x)\n",
"result = result > 0.5"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 309
},
"id": "uSdH42qVwZ9q",
"outputId": "95c65b4e-5f31-4a9e-88a1-d416166ec239"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7caa43522c80>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"fig.subplots_adjust(hspace=0.4, wspace=0.4)\n",
"\n",
"ax = fig.add_subplot(1, 2, 1)\n",
"ax.imshow(np.reshape(y[0]*255, (image_size, image_size)), cmap=\"gray\")\n",
"\n",
"ax = fig.add_subplot(1, 2, 2)\n",
"ax.imshow(np.reshape(result[0]*255, (image_size, image_size)), cmap=\"gray\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 309
},
"id": "1OKwJGbVwZ-A",
"outputId": "8ef32166-359f-4023-f3a4-f12aeb895db0"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7caa56311c30>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAD/CAYAAADbqS07AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAp70lEQVR4nO3de3QUZZo/8G93OukOCZ3OZelOIIFwvwcIECKog0QDy2FAEF02nkWGlVGYGQSdg6wnIONgUHZwxUEY3QEv63rBWWBlZJQBhGUmBkwiLAKBSIQgdAKEdCchN9LP7w/X/k1L0CZdnarq/n7Oec4xVZW3nq50Pz5Uv1VlEBEBERERkYYY1U6AiIiI6LvYoBAREZHmsEEhIiIizWGDQkRERJrDBoWIiIg0hw0KERERaQ4bFCIiItIcNihERESkOWxQiIiISHPYoBAREZHmqNqgbNiwAb169YLFYkFWVhYOHTqkZjpEFGZYg4i0S7UG5d1338XSpUuxcuVKlJSUICMjA7m5uaiurlYrJSIKI6xBRNpmUOthgVlZWRgzZgx++9vfAgA8Hg9SU1Px85//HE8++aQaKRFRGGENItI2kxo7bWlpQXFxMZYvX+5dZjQakZOTg8LCwhu2b25uRnNzs/dnj8eDmpoaJCYmwmAwdErORKFARFBXV4eUlBQYjeE7BY01iEgdt1KDVGlQLl++jLa2Ntjtdp/ldrsdJ0+evGH7goICrFq1qrPSIwp5lZWV6NGjh9ppqIY1iEhd/tQgXfwTavny5XC5XN44d+6c2ikR6VrXrl3VTkFXWIOIlOVPDVLlDEpSUhIiIiJQVVXls7yqqgoOh+OG7c1mM8xmc2elRxTywv1rCdYgInX5U4NUOYMSFRWFzMxM7Nmzx7vM4/Fgz549yM7OViMlIgojrEFE2qfKGRQAWLp0KebOnYvRo0dj7Nix+Ld/+zc0NDRg3rx5aqVERGGENYhI21RrUB544AFcunQJK1asgNPpxIgRI/CnP/3phklrRETBwBpEpG2q3QclEG63G3FxcWqnQaRbLpcLVqtV7TR0izWIKDD+1CBdXMVDRERE4YUNChEREWkOGxQiIiLSHDYoREREpDlsUIiIiEhz2KAQERGR5rBBISIiIs1hg0JERESawwaFiIiINIcNChEREWkOGxQiIiLSHDYoREREpDlsUIiIiEhz2KAQERGR5rBBISIiIs1hg0JERESawwaFiIiINIcNChEREWkOGxQiIiLSHDYoREREpDlsUIiIiEhzFG9QCgoKMGbMGHTt2hXdunXDjBkzUFZW5rNNU1MTFi1ahMTERMTGxmLWrFmoqqpSOhUiCkOsQUShQfEGZf/+/Vi0aBE+/fRT7N69G62trbjnnnvQ0NDg3WbJkiX44IMPsHXrVuzfvx8XLlzAzJkzlU6FiMIQaxBRiJAgq66uFgCyf/9+ERGpra2VyMhI2bp1q3ebEydOCAApLCz0a0yXyyUAGAxGB8PlcgXl865FrEEMhvbCnxoU9DkoLpcLAJCQkAAAKC4uRmtrK3JycrzbDBw4EGlpaSgsLAx2OkQUZliDiPTJFMzBPR4PHnvsMYwfPx5Dhw4FADidTkRFRcFms/lsa7fb4XQ62x2nubkZzc3N3p/dbnfQciai0MEaRKRfQT2DsmjRIhw7dgzvvPNOQOMUFBQgLi7OG6mpqQplSEShjDWISL+C1qD87Gc/w86dO7Fv3z706NHDu9zhcKClpQW1tbU+21dVVcHhcLQ71vLly+FyubxRWVkZrLSJKESwBhHpXMemnd2cx+ORRYsWSUpKipw6deqG9d9OUHv//fe9y06ePCkAJ6gxGJ0VoTxJljWIwdB++FODFG9QHn30UYmLi5NPPvlELl686I1r1655t3nkkUckLS1N9u7dK5999plkZ2dLdna23/tgcWAwAotQblBYgxgM7YcqDcrNktmyZYt3m8bGRlm4cKHEx8dLly5d5N5775WLFy/6vQ8WBwYjsAjlBuVmr5k1iMHQTvhTgwz/94HWFbfbjbi4OLXTINItl8sFq9Wqdhq6xRpEFBh/ahCfxUNERESawwaFiIiINIcNChEREWkOGxQiIiLSHDYoREREpDlsUIiIiEhz2KAQERGR5rBBISIiIs1hg0JERESawwaFiIiINIcNChEREWkOGxQiIiLSHDYoREREpDlsUIiIiEhz2KAQERGR5rBBISIiIs1hg0JERESawwaFiIiINIcNChEREWkOGxQiIiLSHDYoREREpDlsUIiIiEhzgt6grFmzBgaDAY899ph3WVNTExYtWoTExETExsZi1qxZqKqqCnYqRBSGWIOI9CmoDcrhw4fxu9/9DsOHD/dZvmTJEnzwwQfYunUr9u/fjwsXLmDmzJnBTIWIwhBrEJGOSZDU1dVJv379ZPfu3XLnnXfK4sWLRUSktrZWIiMjZevWrd5tT5w4IQCksLDQr7FdLpcAYDAYHQyXyxWMj72msAYxGNoNf2pQ0M6gLFq0CFOnTkVOTo7P8uLiYrS2tvosHzhwINLS0lBYWNjuWM3NzXC73T5BRPR9WIOI9M0UjEHfeecdlJSU4PDhwzesczqdiIqKgs1m81lut9vhdDrbHa+goACrVq0KRqpEFIJYg4j0T/EzKJWVlVi8eDHeeustWCwWRcZcvnw5XC6XNyorKxUZl4hCD2sQUWhQvEEpLi5GdXU1Ro0aBZPJBJPJhP3792P9+vUwmUyw2+1oaWlBbW2tz+9VVVXB4XC0O6bZbIbVavUJIqL2sAYRhQbFv+KZNGkS/vd//9dn2bx58zBw4EAsW7YMqampiIyMxJ49ezBr1iwAQFlZGc6dO4fs7Gyl0yGiMMMaRBQaFG9QunbtiqFDh/osi4mJQWJionf5/PnzsXTpUiQkJMBqteLnP/85srOzMW7cOKXTIaIwwxpEFBqCMkn2h7zwwgswGo2YNWsWmpubkZubi5dfflmNVIgoDLEGEWmfQURE7SRuldvtRlxcnNppEOmWy+XiPIoAsAYRBcafGsRn8RAREZHmsEEhIiIizWGDQkRERJrDBoWIiIg0hw0KERERaQ4bFCIiItIcNihERESkOWxQiIiISHPYoBAREZHmsEEhIiIizWGDQp3KYrEgMjJS7TSIiEjj2KBQp4mPj8eLL76If/zHf1Q7FSIi0jhVnmZM4WfUqFEYMmQIRo4cia+++krtdIiISOPYoFCnePzxx71nToqKilTOhoiItI4NCgWFwWBAnz59MGTIEOTl5SErK0vtlIiISEfYoJDiYmNjYbVaMXjwYGRnZ2P27Nlqp0RERDrDBoUUN336dDz44IPIzMyE1WpVOx0iItIhNiikmISEBDz44IPIzs5G//79YbPZfC4pbmxsxMcff4ySkhIVsySiUPVtDYqIiGh3fX19Pd544w00Nzd3cmbUEWxQKGBGoxEGgwEpKSl47rnnYLFY2t2uoaEB//7v/46TJ092coZEFEqMRiOMxhvvkvFDNej8+fN4//332aDoBBsUCkjfvn1x11134e///u/Rp08fmM3mm27b2tqKI0eOoLq6uhMzJKJQ88tf/rLduW1ms/l7axDpCxsU6hCTyYQRI0ZgyJAhGDduHMaMGYOUlJTv/Z22tjbU19fzXy9E1CFdu3bFsGHDkJWVhczMzFv+fYvFgqysLJw6dQpnzpwJQoakKAmC8+fPS15eniQkJIjFYpGhQ4fK4cOHves9Ho/k5+eLw+EQi8UikyZNklOnTvk9vsvlEgAMFSMhIUEqKyulra1NPB6PX3+3yspKiY+PVz13BsTlct3y51pPWINCM2677TZpbW31u+a0p62tTdavX6/6awn38KcGKX6r+6tXr2L8+PGIjIzErl27cPz4cfzmN79BfHy8d5vnn38e69evx6ZNm1BUVISYmBjk5uaiqalJ6XRIQRaLBX379sUjjzyC3/zmN0hISPDOPyHSCtag0GM0GvHkk0/il7/8JUwmU0A1hzVLRzrcht7EsmXLZMKECTdd7/F4xOFwyNq1a73LamtrxWw2y9tvv+3XPvivl86PmJgYSU1NlWnTpsmHH37YofcGz6BoJ0L5DAprUGiE0WiU+Ph4SUxMlG7duklJSUnA741vvfTSS6q/vnAPVc6g/Pd//zdGjx6N2bNno1u3bhg5ciReffVV7/qKigo4nU7k5OR4l8XFxSErKwuFhYXtjtnc3Ay32+0T1HmMRiPy8/OxefNmbN68GRMnTlQ7JaKbYg0KDcnJySgsLMTRo0fx+eefY+jQoWqnRJ1M8UmyZ86cwcaNG7F06VL8y7/8Cw4fPoxf/OIXiIqKwty5c+F0OgEAdrvd5/fsdrt33XcVFBRg1apVSqdKfhg4cCCysrIwduxY9O7dG0lJSWqnRPS9WIP0q0ePHt5/ACUlJSEtLQ3R0dEqZ0VqUbxB8Xg8GD16NJ599lkAwMiRI3Hs2DFs2rQJc+fO7dCYy5cvx9KlS70/u91upKamKpIvfb8pU6Zg3bp1aqdB5DfWIP0aOXIk3njjDbXTII1Q/Cue5ORkDB482GfZoEGDcO7cOQCAw+EAAFRVVflsU1VV5V33XWazGVar1ScoeHr27Ik777wTO3bswE9/+lO10yG6JaxB+mOxWLBly5ZOO0s1ffp07Nq1CwMHDuyU/VHHKN6gjB8/HmVlZT7LTp06hZ49ewIA0tPT4XA4sGfPHu96t9uNoqIiZGdnK50O3YLo6Gj07NkTgwcPxujRo3H33XdjwIABio1vMpmQmJiI2NhYxcYk+i7WIH3p1q0bhgwZgrvuugsjR47slH2mpqbinnvugc1m65T9UQcpNi36/xw6dEhMJpOsXr1aTp8+LW+99ZZ06dJF/uM//sO7zZo1a8Rms8mOHTvk6NGjMn36dElPT5fGxka/9sEZ9MGJcePGyUcffSSVlZXS0tKi9FtD3G63rF69WiZPnqz6aw33COWreFiD9BW/+tWvpKmpKaB7m3REW1ubjBs3TvXXH67hTw0Kyo3aPvjgAxk6dKiYzWYZOHCgvPLKKz7rv71Jkt1uF7PZLJMmTZKysjK/x2dxUDYiIyNl8eLFsnnzZvnqq6+koaFB6beEiIg0NzfLX/7yF1m8eLHqrzncI5QbFBHWID3Fs88+q/Sf3y9sUNQN1RqUYGNxUCZMJpNERUVJUlKSlJeXd9rfb+PGjRIVFSUGg0H1YxCuEeoNSrCxBgUeBoNBLBaLPP/886r8Ddva2uRHP/qRmM1m1Y9FOIYq90EhfUhMTMTDDz+MLVu24K9//SvS0tI6bd8TJ07EK6+8gt69e3faPolIW/r3749Dhw5h/vz5quzfaDTi9ddfx5tvvomIiAhVcqDvx4cFhimTyeS9z0C/fv06dd9JSUnIyMhATExMp+6XiLTDbDZjwIABiIqKUi2HtLS0m977htTHBoU6XWJiIuLj49GlSxe1UyEiIo3iVzxhyuVyYdu2bTh58qQq+zcajVi1ahV+9atfwWjk25CI1NGnTx+8+eabyM3NVTsV+g7+nyFMNTU14dixY7h06ZJqOdxzzz3Izc3lk0WJSDWJiYmYM2eOovd8ImWwQSEiIiLNYYNCqrLb7Vi4cCGGDx+udipEFMZuv/12PPzww7zTtYawQSFV9ezZE+vXr8ddd93FuShEpJr77rsPa9euRVJSEmuRRvCvQJowa9YsPPfcc4iPj1c7FSIKU7GxsfjDH/7QaQ8tpO/Hy4xJE3r16oW2tjaYzWa1UyGiMBUREYFRo0ahpqYGY8eOBfD/LyjweDwqZxd+2KCQJvTo0QOxsbGIjIxUOxUiCnOTJk3CxIkTAQCnT59GZmYmrl27pnJW4Ydf8ZBmdOnSBatWrcJDDz2kdipEFMYMBgMiIiIQEREBh8OBtWvXYurUqWqnFXbYoJBmREVFYd68eZg2bRpiYmL4fAwiUp3NZsPChQsxbtw4tVMJO2xQSHPGjBmDzZs3IyMjQ+1UiIhIJWxQwpTNZsPs2bMxePBgtVO5QVxcHIYOHYqpU6diypQpPJNCRKobOnQoZs+ejbi4OLVTCRsGERG1k7hVbrebb5IADR8+HIcPH1b1SaL+OH36NEaMGMEJagpzuVywWq1qp6FbrEGB00sN+lstLS3IzMzEsWPH1E5F9/ypQTyDQprWtWtX3H///bzTLBFRmOFlxqRp0dHRGDduHJqbm1FTU4Oqqiq0traqnRYRhSGDwYBevXqhtrYW58+fVzudkMczKKRpcXFxmD9/PlatWoWXX34ZKSkpaqdERGEqMjISW7duxcaNG9VOJSywQSHNM5lM+Lu/+zsMGDAA6enp6Natm9opEVGYslgsGDRoEJ566il+9Rxk/IqHdMFmsyEmJgb9+/dHXV0dLl++zFtPE5Eq+vTpg1//+teorq7GyZMn0dLSonZKIUnxMyhtbW3Iz89Heno6oqOj0adPHzzzzDP424uFRAQrVqxAcnIyoqOjkZOTg9OnTyudCoWYyMhI5OfnY8WKFRg1ahSSkpLUTok0iDWIOsuKFSvw0Ucf8SGnwSIKW716tSQmJsrOnTuloqJCtm7dKrGxsfLiiy96t1mzZo3ExcXJ9u3b5ciRI/LjH/9Y0tPTpbGx0a99uFwuAcAIIIYPHy7Nzc1K//k7xalTp+Txxx+XsWPHSlxcnBgMBtWPp97C5XKp/WcMGtYgfYSea9DfunjxoiQlJal+PPUW/tQgxRuUqVOnyk9+8hOfZTNnzpS8vDwREfF4POJwOGTt2rXe9bW1tWI2m+Xtt9/2ax8sDoFHKBSHNWvWyLhx4yQyMlL146m3COUGhTVIHxEKNUiEDUpHw58apPhXPLfddhv27NmDU6dOAQCOHDmCgwcPYsqUKQCAiooKOJ1O5OTkeH8nLi4OWVlZKCwsVDodCmFTp07F4sWLER0drXYqpCGsQUShQfFJsk8++STcbjcGDhyIiIgItLW1YfXq1cjLywMAOJ1OAIDdbvf5Pbvd7l33Xc3NzWhubvb+7Ha7lU477Hg8HtTX16Nr166IjIz8we3dbjdaW1u/9x4kBoMBkZGR6NKlCywWi5Lptmvo0KGw2+1ITU1FZWUl3xcEgDVIL65fvw6n04mEhATExsaqnU6HuFwuVFdXc8J+kCh+BuW9997DW2+9hf/8z/9ESUkJXn/9dfzrv/4rXn/99Q6PWVBQgLi4OG+kpqYqmHF4unLlCl555RWUlJT84LYejwfPPPMMZs+ejeHDh2PYsGHtxtixY/HQQw9hx44dnfAKvpGUlIT9+/fj6aef7rR9kraxBulDWVkZMjMz8fvf/17tVDosPz8fEydOxNWrV9VOJTQp/X1cjx495Le//a3PsmeeeUYGDBggIiJffvmlAJDS0lKfbe644w75xS9+0e6YTU1N4nK5vFFZWan692d6D6vVKlOmTJH33nuv3WNeV1cnW7ZskU2bNsnGjRvljjvukNTU1O8dMyoqSvr27SsPPfSQbNq0STZt2iQffvhh4G8qP/zP//yPLFiwQJKTk1U/tnqIUJ6Dwhqkr5gxY4b8/ve/19V7srKyUn73u9/JuHHjVD9+eg1//t6Kf8Vz7do1GI2+J2YiIiK8p8DS09PhcDiwZ88ejBgxAsA3p0uLiorw6KOPtjum2WyG2WxWOtWw5na7sWvXLkyYMMHn8stvXb58GY899hhcLpffY7a0tKC8vBzl5eV47bXXAACTJ09Gbm4uDAYDDAaDUunfYMKECRg/fjzKysrgdDrbfU0UHliD9GX79u3YvXs3JkyYgK5duwZtP0rWn7KyMjz66KPe91R7Y7MGBU7xBmXatGlYvXo10tLSMGTIEJSWlmLdunX4yU9+AuCbP+Rjjz2GX//61+jXrx/S09ORn5+PlJQUzJgxQ+l06Ae8+uqr+Oijj25Y3tTUhPr6+oDHLyoqwsSJE3HHHXdg2LBhmDFjRtCeXmowGPDiiy/is88+w09/+lO0tbUFZT+kbaxB+tPY2Ii8vDx06dIlaPvIz8/3mRgdiMzMTHzyyScoKChAUVERXnvtNZ+nW58+fZo1SAlKn/pyu92yePFiSUtLE4vFIr1795annnrK53Iyj8cj+fn5YrfbxWw2y6RJk6SsrMzvffASP/3FxIkTZcmSJfLXv/5VvvzyS6mrq5O2tjal334iInLy5EkZO3as2O121V+3VkNPp9NvFWsQo7145pln5OjRo3L9+nXF3mtPP/203H333XL16lWf5axBPxyq3AelM7A46C8MBoMYjUYxmUxy3333yf79+8XtdgftPdLa2ipLlixR/XVrNUK5QekMrEH6i4iICOnZs6fU1NQo9j64fv26tLa2truONej7Q5U5KETtkW+aYXg8Hnz++efYuHEjRo4cib59++Lee+9VfH6KyWSCycS3NxF9o62tDVeuXMHKlSthsVhgMBiwaNEipKWldXjMiIiIm64zmUyYPn06EhIS8MILL6CmpqbD+wlXrODU6b6dSHvixAmMGTMG99xzDywWi+INhdlsRmxsLBoaGjhhjYhQX1+Pl156CQBgNBqRm5uLpKSkoM19ufPOO5GZmYktW7awQekAxe+DQuSvEydO4I9//CP++Z//GX/+858VH3/p0qUoLCxEjx49FB+biPTN4/HgwQcfRF5eHiezahQbFFJNS0sLamtrcezYMRw6dAiFhYU+d+sMVHx8PHr16gW73R7UyxeJSJ8uXryIY8eOYdu2bfjyyy+Dsg+TyYTc3FxkZWUFZfxQxgaFVNXY2IgvvvgCb775Jp599tlbuu+KPyIiItCvX7+AvmcmotBVXl6O2bNn449//GNQxrdYLHj55ZexbNmyoIwfygyiwy/n3W63zzXnpH8xMTGIjY3FqFGjkJmZiQceeAA9e/YM+MxHW1sbSktL8fHHH+Opp55SKFv9c7lcsFqtaqehW6xBoWfo0KHo27cvAGD8+PF44oknFB3/4sWLKCoqwnPPPYdPP/1U0bH1yJ8axEmypAkNDQ1oaGjArl27cPXqVQwePBgJCQkBNygREREYPXo0ampq0Lt3bzidTly7dk2hrIkoVBw7dgzHjh0D8M3DIWfOnAmHw6HYBNrk5GTMmDEDb7zxhiLjhQN+xUOac/jwYcyfPx9HjhxRbMy77roLR44cwaRJkxQbk4hC0+7duzFixAgcOHBA7VTCGhsU0py2tjY0NjYqOrPeZDIhNjYWs2fPxoIFC4J2u30i0r/r16+jrq4O7777Ll599VVcv35dsbHvvfdeLFiwAJGRkYqNGao4B4U0a/v27Zg6dari90epqKjAqFGj4Ha7vQ/7CjecgxIY1qDw0bdvXxw5ckTRe6WcOXMGGRkZijzvTK/8qUE8g0KatXTpUtx3331oampSdNykpCS88MILmDlzpqLjEhGRcjhJljTrzJkz8Hg8+Oqrr+BwOGCz2RQZ12w2Y9SoUbhw4QJOnjyJ8vJyxZsgIgoNTU1NOHjwICwWC4xGI0aNGhXw2ZTo6GhMmDABJ0+exFdffaVMoiGIZ1BI09xuN9566y2UlpYqNmZUVBSGDx+OBx98EOvWreOdZonops6fP4/JkyfjRz/6Ee6++26cOXMm4DGTk5Px4YcfYuHChQpkGLrYoJCmNTQ0YOfOnThx4oTiYyckJGDQoEFYvXo1nnjiCcUfWEhEoeHbh522tLTg6aefxgsvvBDwmKw3P4wNCmlac3MzPv/8c5SXl+Py5cuKXtkTGxuLHj164P7778f06dMRExPDJyAT0U15PB784Q9/wPbt23Hp0iVFH81BN2KDQrrwyiuvYNSoUTh9+nRQxu/evTseffRRDB48OCjjE1Ho+PTTTzFs2DBs27ZN7VRCGv+5SLrQ0NCA5uZmvP/++945I2lpaejWrRsGDRqEiIiIgMaPiIhAbGwsz6AQ0Q9qaWlBVVUVPv74Y+8E+/79++O22277wd/dt28fzp49CwD47LPPgpqn3rEak25cv34d+fn53p+nT5+O22+/Hb169UJsbGxAY3/7HTMRkb+2bNmCLVu2AAAefvhhvxqUl156iWde/MQbtZFuJSUlwWazoXv37jAab/y2snv37khNTcUTTzyBhISE7x3r0KFDmDNnDi5duoS6urpgpawZvFFbYFiD6LtSUlIwYMCAH9zu2LFjuHTpUidkpG18WCCFtMuXL+Py5csoLy9vd32PHj3Qq1cv5OTkIDk5GWazGRaLxedrHBFBTU0Njh8/joqKCp5FIaIOuXDhAi5cuKB2GiGFDQqFrPPnz+PChQuYMmUKkpKSMGTIEAwePBhJSUnebTweDzZv3owLFy6wOSEi0pBbvornwIEDmDZtGlJSUmAwGLB9+3af9SKCFStWIDk5GdHR0cjJybnhyouamhrk5eXBarXCZrNh/vz5Yf1MAgoej8eDlpYWXL16FWVlZTh48CA++ugjb+zevRuXL19Ga2ur2qmSn1iDiMLDLTcoDQ0NyMjIwIYNG9pd//zzz2P9+vXYtGkTioqKEBMTg9zcXJ9biefl5eGLL77A7t27sXPnThw4cAALFizo+Ksg+gGNjY04d+4ciouLcfDgQZ9oaGhQOz26BaxBRGFCAgBAtm3b5v3Z4/GIw+GQtWvXepfV1taK2WyWt99+W0REjh8/LgDk8OHD3m127dolBoNBvv76a7/263K5BACDwehguFyuQD76mgGwBjEYegx/apCiN2qrqKiA0+lETk6Od1lcXByysrJQWFgIACgsLITNZsPo0aO92+Tk5MBoNKKoqEjJdIgozLAGEYUORSfJOp1OAIDdbvdZbrfbveucTie6devmm4TJhISEBO8239Xc3OxzS2G3261k2kQUIliDiEKHLm51X1BQgLi4OG+kpqaqnRIRhRHWIKLOp2iD4nA4AABVVVU+y6uqqrzrHA4HqqurfdZfv34dNTU13m2+a/ny5XC5XN6orKxUMm0iChGsQUShQ9EGJT09HQ6HA3v27PEuc7vdKCoqQnZ2NgAgOzsbtbW1KC4u9m6zd+9eeDweZGVltTuu2WyG1Wr1CSKi72INIgohfk6W96qrq5PS0lIpLS0VALJu3TopLS2Vs2fPiojImjVrxGazyY4dO+To0aMyffp0SU9Pl8bGRu8YkydPlpEjR0pRUZEcPHhQ+vXrJ3PmzPE7B86gZzACCz1fxcMaxGDoP/ypQbfcoOzbt6/dnc2dO1dEvrnMLz8/X+x2u5jNZpk0aZKUlZX5jHHlyhWZM2eOxMbGitVqlXnz5kldXZ3fObA4MBiBhZ4bFNYgBkP/4U8N4sMCicIQHxYYGNYgosD4U4N0cRUPERERhRc2KERERKQ5bFCIiIhIc9igEBERkeawQSEiIiLNYYNCREREmsMGhYiIiDSHDQoRERFpDhsUIiIi0hw2KERERKQ5bFCIiIhIc9igEBERkeawQSEiIiLNYYNCREREmsMGhYiIiDSHDQoRERFpDhsUIiIi0hw2KERERKQ5bFCIiIhIc9igEBERkeawQSEiIiLNYYNCREREmnPLDcqBAwcwbdo0pKSkwGAwYPv27d51ra2tWLZsGYYNG4aYmBikpKTgn/7pn3DhwgWfMWpqapCXlwer1QqbzYb58+ejvr4+4BdDRKGPNYgoPNxyg9LQ0ICMjAxs2LDhhnXXrl1DSUkJ8vPzUVJSgv/6r/9CWVkZfvzjH/tsl5eXhy+++AK7d+/Gzp07ceDAASxYsKDjr4KIwgZrEFGYkAAAkG3btn3vNocOHRIAcvbsWREROX78uACQw4cPe7fZtWuXGAwG+frrr/3ar8vlEgAMBqOD4XK5Ovy51xKANYjB0GP4U4OCPgfF5XLBYDDAZrMBAAoLC2Gz2TB69GjvNjk5OTAajSgqKmp3jObmZrjdbp8gIvIHaxCRPgW1QWlqasKyZcswZ84cWK1WAIDT6US3bt18tjOZTEhISIDT6Wx3nIKCAsTFxXkjNTU1mGkTUYhgDSLSr6A1KK2trbj//vshIti4cWNAYy1fvhwul8sblZWVCmVJRKGKNYhI30zBGPTbwnD27Fns3bvX+y8XAHA4HKiurvbZ/vr166ipqYHD4Wh3PLPZDLPZHIxUiSgEsQYR6Z/iZ1C+LQynT5/Gn//8ZyQmJvqsz87ORm1tLYqLi73L9u7dC4/Hg6ysLKXTIaIwwxpEFBpu+QxKfX09ysvLvT9XVFTg888/R0JCApKTk3HfffehpKQEO3fuRFtbm/c73YSEBERFRWHQoEGYPHkyHn74YWzatAmtra342c9+hn/4h39ASkqKcq+MiEISaxBRmPDrmrq/sW/fvnYvGZo7d65UVFTc9JKiffv2ece4cuWKzJkzR2JjY8Vqtcq8efOkrq7O7xx4iR+DEVjo+TJj1iAGQ//hTw0yiIhAZ9xuN+Li4tROg0i3XC6Xz7wMujWsQUSB8acG8Vk8REREpDlsUIiIiEhz2KAQERGR5rBBISIiIs3RZYOiw3m9RJrCz1BgePyIAuPPZ0iXDUpdXZ3aKRDpGj9DgeHxIwqMP58hXV5m7PF4UFZWhsGDB6OyspKXS3aQ2+1Gamoqj2EH6fH4iQjq6uqQkpICo1GX/z7RBNYgZejxM6Q1ejuGt1KDgvIsnmAzGo3o3r07AMBqterij6JlPIaB0dvx4/07AscapCwew8Dp6Rj6W4P4TygiIiLSHDYoREREpDm6bVDMZjNWrlzJR6AHgMcwMDx+4Y1//8DxGAYulI+hLifJEhERUWjT7RkUIiIiCl1sUIiIiEhz2KAQERGR5rBBISIiIs3RZYOyYcMG9OrVCxaLBVlZWTh06JDaKWnW008/DYPB4BMDBw70rm9qasKiRYuQmJiI2NhYzJo1C1VVVSpmrL4DBw5g2rRpSElJgcFgwPbt233WiwhWrFiB5ORkREdHIycnB6dPn/bZpqamBnl5ebBarbDZbJg/fz7q6+s78VVQsLEO+Yc16NaxBn1Ddw3Ku+++i6VLl2LlypUoKSlBRkYGcnNzUV1drXZqmjVkyBBcvHjRGwcPHvSuW7JkCT744ANs3boV+/fvx4ULFzBz5kwVs1VfQ0MDMjIysGHDhnbXP//881i/fj02bdqEoqIixMTEIDc3F01NTd5t8vLy8MUXX2D37t3YuXMnDhw4gAULFnTWS6AgYx26NaxBt4Y16P+IzowdO1YWLVrk/bmtrU1SUlKkoKBAxay0a+XKlZKRkdHuutraWomMjJStW7d6l504cUIASGFhYSdlqG0AZNu2bd6fPR6POBwOWbt2rXdZbW2tmM1mefvtt0VE5Pjx4wJADh8+7N1m165dYjAY5Ouvv+603Cl4WIf8xxoUmHCuQbo6g9LS0oLi4mLk5OR4lxmNRuTk5KCwsFDFzLTt9OnTSElJQe/evZGXl4dz584BAIqLi9Ha2upzPAcOHIi0tDQez5uoqKiA0+n0OWZxcXHIysryHrPCwkLYbDaMHj3au01OTg6MRiOKioo6PWdSFuvQrWMNUk441SBdNSiXL19GW1sb7Ha7z3K73Q6n06lSVtqWlZWF1157DX/605+wceNGVFRU4Pbbb0ddXR2cTieioqJgs9l8fofH8+a+PS7f9x50Op3o1q2bz3qTyYSEhAQe1xDAOnRrWIOUFU41SJdPMyb/TZkyxfvfw4cPR1ZWFnr27In33nsP0dHRKmZGROGANYg6SldnUJKSkhAREXHDDO+qqio4HA6VstIXm82G/v37o7y8HA6HAy0tLaitrfXZhsfz5r49Lt/3HnQ4HDdMlrx+/Tpqamp4XEMA61BgWIMCE041SFcNSlRUFDIzM7Fnzx7vMo/Hgz179iA7O1vFzPSjvr4eX375JZKTk5GZmYnIyEif41lWVoZz587xeN5Eeno6HA6HzzFzu90oKiryHrPs7GzU1taiuLjYu83evXvh8XiQlZXV6TmTsliHAsMaFJiwqkFqz9K9Ve+8846YzWZ57bXX5Pjx47JgwQKx2WzidDrVTk2THn/8cfnkk0+koqJC/vKXv0hOTo4kJSVJdXW1iIg88sgjkpaWJnv37pXPPvtMsrOzJTs7W+Ws1VVXVyelpaVSWloqAGTdunVSWloqZ8+eFRGRNWvWiM1mkx07dsjRo0dl+vTpkp6eLo2Njd4xJk+eLCNHjpSioiI5ePCg9OvXT+bMmaPWSyKFsQ75jzXo1rEGfUN3DYqIyEsvvSRpaWkSFRUlY8eOlU8//VTtlDTrgQcekOTkZImKipLu3bvLAw88IOXl5d71jY2NsnDhQomPj5cuXbrIvffeKxcvXlQxY/Xt27dPANwQc+fOFZFvLvPLz88Xu90uZrNZJk2aJGVlZT5jXLlyRebMmSOxsbFitVpl3rx5UldXp8KroWBhHfIPa9CtYw36hkFERJ1zN0RERETt09UcFCIiIgoPbFCIiIhIc9igEBERkeawQSEiIiLNYYNCREREmsMGhYiIiDSHDQoRERFpDhsUIiIi0hw2KERERKQ5bFCIiIhIc9igEBERkeawQSEiIiLN+X+TXZkSrSjLKAAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"fig.subplots_adjust(hspace=0.4, wspace=0.4)\n",
"\n",
"ax = fig.add_subplot(1, 2, 1)\n",
"ax.imshow(np.reshape(y[1]*255, (image_size, image_size)), cmap=\"gray\")\n",
"\n",
"ax = fig.add_subplot(1, 2, 2)\n",
"ax.imshow(np.reshape(result[1]*255, (image_size, image_size)), cmap=\"gray\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CNN Model (Madhurya)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "xBk2k9vzKRD5",
"outputId": "e9880f4e-a1a6-4c3b-aac7-bacca57154e5"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dataset shape : (1717, 64, 64, 1) (1717, 32, 32, 1)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.10/dist-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
" super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model Summary:\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
"│ conv2d_19 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">54</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">54</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">100</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">12,200</span> │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ average_pooling2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">AveragePooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">9</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">9</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">100</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ reshape (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Reshape</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8100</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1024</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">8,295,424</span> │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ reshape_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Reshape</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n",
"</pre>\n"
],
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
"│ conv2d_19 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m54\u001b[0m, \u001b[38;5;34m54\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m12,200\u001b[0m │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ average_pooling2d (\u001b[38;5;33mAveragePooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m9\u001b[0m, \u001b[38;5;34m9\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ reshape (\u001b[38;5;33mReshape\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8100\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m8,295,424\u001b[0m │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ reshape_1 (\u001b[38;5;33mReshape\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">8,307,624</span> (31.69 MB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m8,307,624\u001b[0m (31.69 MB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">8,307,624</span> (31.69 MB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m8,307,624\u001b[0m (31.69 MB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m24s\u001b[0m 260ms/step - accuracy: 0.9048 - loss: 0.1698 - val_accuracy: 0.9131 - val_loss: 0.0750\n",
"Epoch 2/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 266ms/step - accuracy: 0.9424 - loss: 0.0506 - val_accuracy: 0.9195 - val_loss: 0.0692\n",
"Epoch 3/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 260ms/step - accuracy: 0.9451 - loss: 0.0481 - val_accuracy: 0.9209 - val_loss: 0.0683\n",
"Epoch 4/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 291ms/step - accuracy: 0.9532 - loss: 0.0424 - val_accuracy: 0.9235 - val_loss: 0.0640\n",
"Epoch 5/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 262ms/step - accuracy: 0.9594 - loss: 0.0375 - val_accuracy: 0.9282 - val_loss: 0.0603\n",
"Epoch 6/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 262ms/step - accuracy: 0.9649 - loss: 0.0328 - val_accuracy: 0.9348 - val_loss: 0.0550\n",
"Epoch 7/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 265ms/step - accuracy: 0.9682 - loss: 0.0304 - val_accuracy: 0.9350 - val_loss: 0.0541\n",
"Epoch 8/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 262ms/step - accuracy: 0.9701 - loss: 0.0286 - val_accuracy: 0.9352 - val_loss: 0.0531\n",
"Epoch 9/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 296ms/step - accuracy: 0.9712 - loss: 0.0270 - val_accuracy: 0.9343 - val_loss: 0.0536\n",
"Epoch 10/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 277ms/step - accuracy: 0.9725 - loss: 0.0262 - val_accuracy: 0.9375 - val_loss: 0.0515\n",
"Epoch 11/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 260ms/step - accuracy: 0.9727 - loss: 0.0255 - val_accuracy: 0.9396 - val_loss: 0.0502\n",
"Epoch 12/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 258ms/step - accuracy: 0.9733 - loss: 0.0247 - val_accuracy: 0.9399 - val_loss: 0.0493\n",
"Epoch 13/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 288ms/step - accuracy: 0.9743 - loss: 0.0239 - val_accuracy: 0.9381 - val_loss: 0.0498\n",
"Epoch 14/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 266ms/step - accuracy: 0.9742 - loss: 0.0237 - val_accuracy: 0.9384 - val_loss: 0.0498\n",
"Epoch 15/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 268ms/step - accuracy: 0.9752 - loss: 0.0230 - val_accuracy: 0.9387 - val_loss: 0.0498\n",
"Epoch 16/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 289ms/step - accuracy: 0.9754 - loss: 0.0227 - val_accuracy: 0.9392 - val_loss: 0.0496\n",
"Epoch 17/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 262ms/step - accuracy: 0.9752 - loss: 0.0227 - val_accuracy: 0.9382 - val_loss: 0.0500\n",
"Epoch 18/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 289ms/step - accuracy: 0.9758 - loss: 0.0221 - val_accuracy: 0.9403 - val_loss: 0.0489\n",
"Epoch 19/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 271ms/step - accuracy: 0.9764 - loss: 0.0214 - val_accuracy: 0.9387 - val_loss: 0.0491\n",
"Epoch 20/20\n",
"\u001b[1m86/86\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 264ms/step - accuracy: 0.9763 - loss: 0.0217 - val_accuracy: 0.9396 - val_loss: 0.0494\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAHWCAYAAACbsXOkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACEd0lEQVR4nOzdeXwU9f3H8dfu5ticm5CEhCMQgSA3KEcIHqCkBEU0ShWRyiGeP7EiahUP1NpKrUepglJUoFYtSFW0iiBQ8ACUW0GQS0i4khAg9727vz822WRJAgk5Nsf7+XjMY2dnvjP7mWEJefOd+Y7BbrfbERERERERkVoxursAERERERGR5kDhSkREREREpA4oXImIiIiIiNQBhSsREREREZE6oHAlIiIiIiJSBxSuRERERERE6oDClYiIiIiISB1QuBIREREREakDClciIiIiIiJ1QOFKRESataioKCZNmuTuMkREpAVQuBIRkfNatGgRBoOBLVu2uLuUJic/P5+//e1vxMTEYLFYMJvNdO3alalTp7Jv3z53lyciInXIw90FiIiI1Ke9e/diNLrn/xLT0tIYOXIkW7du5brrruO2227D39+fvXv3snjxYubPn09hYaFbahMRkbqncCUiIk1GcXExNpsNLy+vam/j7e1djxWd26RJk9i+fTv/+c9/GDNmjMu6559/nieffLJOPudCzouIiNQ9XRYoIiJ15tixY9xxxx2Eh4fj7e1Nz549WbBggUubwsJCZs6cSf/+/bFYLPj5+XHFFVewdu1al3aHDx/GYDDw8ssvM3v2bDp37oy3tze7d+/m2WefxWAwcODAASZNmkRQUBAWi4XJkyeTm5vrsp+z77kqvcRx/fr1TJ8+nbCwMPz8/Ljxxhs5efKky7Y2m41nn32Wtm3b4uvry1VXXcXu3burdR/XDz/8wBdffMGUKVMqBCtwhL6XX37Z+X7YsGEMGzasQrtJkyYRFRV13vOyfft2PDw8eO655yrsY+/evRgMBubMmeNclp6ezrRp04iMjMTb25suXbrw4osvYrPZznlcIiJSNfVciYhInUhJSWHw4MEYDAamTp1KWFgYX375JVOmTCEzM5Np06YBkJmZydtvv824ceO46667yMrK4p133iE+Pp5NmzbRr18/l/0uXLiQ/Px87r77bry9vWnVqpVz3S233MJFF13ErFmz2LZtG2+//TatW7fmxRdfPG+9DzzwAMHBwTzzzDMcPnyY2bNnM3XqVJYsWeJsM2PGDP76178yevRo4uPj+fHHH4mPjyc/P/+8+//ss88AuP3226tx9mru7PPSpk0bhg4dyocffsgzzzzj0nbJkiWYTCZuvvlmAHJzcxk6dCjHjh3jnnvuoUOHDmzYsIEZM2Zw4sQJZs+eXS81i4g0dwpXIiJSJ5588kmsVis7d+4kJCQEgHvvvZdx48bx7LPPcs899+Dj40NwcDCHDx92uYTtrrvuolu3brz++uu88847Lvs9evQoBw4cICwsrMJnXnLJJS7tT506xTvvvFOtcBUSEsJXX32FwWAAHL1Ur732GhkZGVgsFlJSUnj11VdJSEjgk08+cW733HPP8eyzz553/3v27AGgd+/e5217ISo7L2PHjuWee+5h165d9OrVy7l8yZIlDB06lPDwcABeffVVDh48yPbt24mOjgbgnnvuoW3btrz00ks8/PDDREZG1kvdIiLNmS4LFBGRWrPb7Xz00UeMHj0au91OWlqac4qPjycjI4Nt27YBYDKZnMHKZrNx+vRpiouLGTBggLNNeWPGjKk0WIEjvJV3xRVXcOrUKTIzM89b89133+0MVqXbWq1WEhMTAVizZg3FxcX83//9n8t2DzzwwHn3DThrCAgIqFb7mqrsvNx00014eHi49L7t2rWL3bt3M3bsWOeypUuXcsUVVxAcHOzyZxUXF4fVauWbb76pl5pFRJo79VyJiEitnTx5kvT0dObPn8/8+fMrbZOamuqc/+c//8krr7zCL7/8QlFRkXP5RRddVGG7ypaV6tChg8v74OBgAM6cOUNgYOA5az7XtoAzZHXp0sWlXatWrZxtz6X087OysggKCjpv+5qq7LyEhoYyfPhwPvzwQ55//nnA0Wvl4eHBTTfd5Gy3f/9+fvrppypDa/k/KxERqT6FKxERqbXSQRB+97vfMXHixErb9OnTB4D33nuPSZMmkZCQwKOPPkrr1q0xmUzMmjWLgwcPVtjOx8enys81mUyVLrfb7eetuTbbVke3bt0A2LlzJ1dcccV52xsMhko/22q1Vtq+qvNy6623MnnyZHbs2EG/fv348MMPGT58OKGhoc42NpuN3/zmN/zhD3+odB9du3Y9b70iIlKRwpWIiNRaWFgYAQEBWK1W4uLiztn2P//5D506deLjjz92uSzv7EEY3K1jx44AHDhwwKWX6NSpU87erXMZPXo0s2bN4r333qtWuAoODubXX3+tsLy0B626EhISuOeee5yXBu7bt48ZM2a4tOncuTPZ2dnn/bMSEZGa0T1XIiJSayaTiTFjxvDRRx+xa9euCuvLD3Fe2mNUvpfmhx9+YOPGjfVfaA0MHz4cDw8P3nzzTZfl5YczP5fY2FhGjhzJ22+/zbJlyyqsLyws5JFHHnG+79y5M7/88ovLufrxxx9Zv359jeoOCgoiPj6eDz/8kMWLF+Pl5UVCQoJLm1tuuYWNGzeycuXKCtunp6dTXFxco88UEREH9VyJiEi1LViwgBUrVlRY/uCDD/KXv/yFtWvXEhMTw1133UWPHj04ffo027ZtY/Xq1Zw+fRqA6667jo8//pgbb7yRUaNGcejQIebNm0ePHj3Izs5u6EOqUnh4OA8++CCvvPIK119/PSNHjuTHH3/kyy+/JDQ01KXXrSrvvvsuI0aM4KabbmL06NEMHz4cPz8/9u/fz+LFizlx4oTzWVd33HEHr776KvHx8UyZMoXU1FTmzZtHz549qzVAR3ljx47ld7/7HW+88Qbx8fEV7vl69NFH+eyzz7juuuuYNGkS/fv3Jycnh507d/Kf//yHw4cPu1xGKCIi1aNwJSIi1XZ2L06pSZMm0b59ezZt2sQf//hHPv74Y9544w1CQkLo2bOny9DokyZNIjk5mX/84x+sXLmSHj168N5777F06VLWrVvXQEdSPS+++CK+vr689dZbrF69mtjYWL766isuv/xyzGbzebcPCwtjw4YNvPHGGyxZsoQnn3ySwsJCOnbsyPXXX8+DDz7obNu9e3feffddZs6cyfTp0+nRowf/+te/+OCDD2p8Xq6//np8fHzIyspyGSWwlK+vL19//TUvvPACS5cu5d133yUwMJCuXbvy3HPPYbFYavR5IiLiYLDX1Z27IiIiLUB6ejrBwcH86U9/4sknn3R3OSIi0ojonisREZEq5OXlVVg2e/ZsAIYNG9awxYiISKOnywJFRESqsGTJEhYtWsS1116Lv78/3333Hf/+978ZMWIEl112mbvLExGRRkbhSkREpAp9+vTBw8ODv/71r2RmZjoHufjTn/7k7tJERKQR0j1XIiIiIiIidUD3XImIiIiIiNQBhSsREREREZE6oHuuKmGz2Th+/DgBAQHVekikiIiIiIg0T3a7naysLNq2bYvReO6+KYWrShw/fpzIyEh3lyEiIiIiIo3EkSNHaN++/TnbKFxVIiAgAHCcwMDAQDdXIyIiIiIi7pKZmUlkZKQzI5yLwlUlSi8FDAwMVLgSEREREZFq3S6kAS1ERERERETqgMKViIiIiIhIHVC4EhERERERqQO650pEREREmgSr1UpRUZG7y5BmxmQy4eHhUSePYFK4EhEREZFGLzs7m6NHj2K3291dijRDvr6+tGnTBi8vr1rtR+FKRERERBo1q9XK0aNH8fX1JSwsrE56GETA8YDgwsJCTp48yaFDh4iOjj7vg4LPReFKRERERBq1oqIi7HY7YWFh+Pj4uLscaWZ8fHzw9PQkMTGRwsJCzGbzBe9LA1qIiIiISJOgHiupL7XprXLZT53sRUREREREpIVTuBIREREREakDClciIiIiIk1EVFQUs2fPrnb7devWYTAYSE9Pr7eapIzClYiIiIhIHTMYDOecnn322Qva7+bNm7n77rur3X7IkCGcOHECi8VyQZ9XXQpxDhotUERERESkjp04ccI5v2TJEmbOnMnevXudy/z9/Z3zdrsdq9WKh8f5fzUPCwurUR1eXl5ERETUaBu5cOq5auSmLd7OZX/5H7uOZbi7FBEREZFGwW63k1tY7Japug8xjoiIcE4WiwWDweB8/8svvxAQEMCXX35J//798fb25rvvvuPgwYPccMMNhIeH4+/vz8CBA1m9erXLfs++LNBgMPD2229z44034uvrS3R0NJ999plz/dk9SosWLSIoKIiVK1fSvXt3/P39GTlypEsYLC4u5ve//z1BQUGEhITw2GOPMXHiRBISEi74z+zMmTNMmDCB4OBgfH19ueaaa9i/f79zfWJiIqNHjyY4OBg/Pz969uzJ8uXLnduOHz/eORR/dHQ0CxcuvOBa6pN6rhq54+n5HEvP40BqNr3a1W93roiIiEhTkFdkpcfMlW757N1/jMfXq25+hX788cd5+eWX6dSpE8HBwRw5coRrr72WP//5z3h7e/Puu+8yevRo9u7dS4cOHarcz3PPPcdf//pXXnrpJV5//XXGjx9PYmIirVq1qrR9bm4uL7/8Mv/6178wGo387ne/45FHHuH9998H4MUXX+T9999n4cKFdO/enb///e8sW7aMq6666oKPddKk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iIg0gGHDhjFt2jTn+6ioKGbPnn3ObQwGA8uWLav1Z9fVfloShasmwuxpokPJKIG670pERESkcRs9ejQjR46sdN23336LwWDgp59+qvF+N2/ezN13313b8lw8++yz9OvXr8LyEydOcM0119TpZ51t0aJFBAUF1etnNCSFqyakS1jJoBYnFa5EREREGrMpU6awatUqjh49WmHdwoULGTBgAH369KnxfsPCwvD1bZjH8kRERDTqxxU1RgpXTUjpoBYHUrLcXImIiIhII1CYU/VUlF+DtnnVa1sD1113HWFhYSxatMhleXZ2NkuXLmXKlCmcOnWKcePG0a5dO3x9fenduzf//ve/z7nfsy8L3L9/P1deeSVms5kePXqwatWqCts89thjdO3aFV9fXzp16sTTTz9NUVER4Og5eu655/jxxx8xGAwYDAZnzWdfFrhz506uvvpqfHx8CAkJ4e677yY7u+w//SdNmkRCQgIvv/wybdq0ISQkhPvvv9/5WRciKSmJG264AX9/fwIDA7nllltcnmn7448/ctVVVxEQEEBgYCD9+/dny5YtACQmJjJ69GiCg4Px8/OjZ8+eLF++/IJrqQ63jhYoNeMcjl09VyIiIiLwQtuq10WPgPFLy96/1AWKcitv2/FymPxF2fvZvSH3VMV2z2ZUuzQPDw8mTJjAokWLePLJJ52DkS1duhSr1cq4cePIzs6mf//+PPbYYwQGBvLFF19w++2307lzZwYNGnTez7DZbNx0002Eh4fzww8/kJGR4XJ/VqmAgAAWLVpE27Zt2blzJ3fddRcBAQH84Q9/YOzYsezatYsVK1awevVqACwWS4V95OTkEB8fT2xsLJs3byY1NZU777yTqVOnugTItWvX0qZNG9auXcuBAwcYO3Ys/fr146677qr2uSt/fKXB6uuvv6a4uJj777+fsWPHOkcKHz9+PJdccglvvvkmJpOJHTt24OnpCcD9999PYWEh33zzDX5+fuzevRt/f/8a11ETCldNSBc960pERESkybjjjjt46aWX+Prrrxk2bBjguCRwzJgxWCwWLBYLjzzyiLP9Aw88wMqVK/nwww+rFa5Wr17NL7/8wsqVK2nb1hE0X3jhhQr3ST311FPO+aioKB555BEWL17MH/7wB3x8fPD398fDw4OIiIgqP+uDDz4gPz+fd999Fz8/PwDmzJnD6NGjefHFF52PPQoODmbOnDmYTCa6devGqFGjWLNmzQWFqzVr1rBz504OHTpEZGQkAO+++y49e/Zk8+bNDBw4kKSkJB599FG6desGQHR0tHP7pKQkxowZQ+/evQHo1KlTjWuoKYWrJqQ0XKVkFpCZX0Sg2dPNFYmIiIi40RPHq15nMLm+f/TAOdqedafMtJ0XXlM53bp1Y8iQISxYsIBhw4Zx4MABvv32W/74xz8CYLVaeeGFF/jwww85duwYhYWFFBQUVPueqj179hAZGekMVgCxsbEV2i1ZsoTXXnuNgwcPkp2dTXFxcY0fN7Rnzx769u3rDFYAl112GTabjb179zrDVc+ePTGZys59mzZt2Lnzws5n6fGVBiuAHj16EBQUxJ49exg4cCDTp0/nzjvv5F//+hdxcXHcfPPNdO7cGYDf//733HfffXz11VfExcUxZsyYC7rPrSZ0z1UTEmj2JDzQcVPhQfVeiYiISEvn5Vf15GmuQVuf6rW9AFOmTOGjjz4iKyuLhQsX0rlzZ4YOHQrASy+9xN///ncee+wx1q5dy44dO4iPj6ewsO4eu7Nx40bGjx/Ptddey+eff8727dt58skn6/Qzyiu9JK+UwWDAZrPVy2eBY6TDn3/+mVGjRvG///2PHj168MknnwBw55138uuvv3L77bezc+dOBgwYwOuvv15vtYDCVZOjSwNFREREmo5bbrkFo9HIBx98wLvvvssdd9zhvP9q/fr13HDDDfzud7+jb9++dOrUiX379lV73927d+fIkSOcOHHCuez77793abNhwwY6duzIk08+yYABA4iOjiYxMdGljZeXF1ar9byf9eOPP5KTUzawx/r16zEajVx88cXVrrkmSo/vyJEjzmW7d+8mPT2dHj16OJd17dqVhx56iK+++oqbbrqJhQsXOtdFRkZy77338vHHH/Pwww/z1ltv1UutpRSumhjncOwKVyIiIiKNnr+/P2PHjmXGjBmcOHGCSZMmOddFR0ezatUqNmzYwJ49e7jnnntcRsI7n7i4OLp27crEiRP58ccf+fbbb3nyySdd2kRHR5OUlMTixYs5ePAgr732mrNnp1RUVBSHDh1ix44dpKWlUVBQUOGzxo8fj9lsZuLEiezatYu1a9fywAMPcPvttzsvCbxQVquVHTt2uEx79uwhLi6O3r17M378eLZt28amTZuYMGEC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c+tzrhqrpvScK4D1B9IY//YPdAr143+PDHN3OSIiIiIizUaTeM6V1J3SEQMTT+dSUGx1czUiIiIiIi2TwlUz0DrAmwBvD6w2O4fTct1djoiIiIhIi6Rw1QwYDAY6t9Z9VyIiIiIi7qRw1Ux0UbgSEREREXErhatmIro0XGk4dhERERERt1C4aibUcyUiIiIi4l4KV81Eabg6eDIbq02j64uIiIiINDSFq2aifbAvXh5GCottHD2jEQNFRERERBqawlUzYTIa6BTqB+jSQBERERERd1C4akaiwwMAhSsREREREXdQuGpGuoRpUAsREREREXdRuGpGSge12K9wJSIiIiLS4BSumhHniIGp2djtGjFQRERERKQhKVw1I1GhvhgNkFVQTGpWgbvLERERERFpURSumhFvDxNRIRoxUERERETEHRSumpnOrTWohYiIiIiIOyhcNTNlg1pkubkSEREREZGWReGqmdFw7CIiIiIi7qFw1cx0cV4WmOPmSkREREREWhaFq2am9J6rtOwCMnKL3FyNiIiIiEjLoXDVzPh7e9DWYgbgwEnddyUiIiIi0lAUrpqh0t6r/Sm670pEREREpKEoXDVDXTQcu4iIiIhIg1O4aoac4eqkwpWIiIiISENRuGqGolsHAOq5EhERERFpSApXzVBpz9Wx9DzyCq1urkZEREREpGVQuGqGWvl50crPC7sdDurSQBERERGRBqFw1Ux1CdOgFiIiIiIiDUnhqpnqrBEDRUREREQalMJVMxWtcCUiIiIi0qAUrpopDccuIiIiItKwFK6aqdJwdTgthyKrzc3ViIiIiIg0fwpXzVQbixk/LxPFNjuJp3LcXY6IiIiISLPn9nA1d+5coqKiMJvNxMTEsGnTpnO2X7p0Kd26dcNsNtO7d2+WL1/usj47O5upU6fSvn17fHx86NGjB/PmzavPQ2iUDAaDBrUQEREREWlAbg1XS5YsYfr06TzzzDNs27aNvn37Eh8fT2pqaqXtN2zYwLhx45gyZQrbt28nISGBhIQEdu3a5Wwzffp0VqxYwXvvvceePXuYNm0aU6dO5bPPPmuow2o0uihciYiIiIg0GLeGq1dffZW77rqLyZMnO3uYfH19WbBgQaXt//73vzNy5EgeffRRunfvzvPPP8+ll17KnDlznG02bNjAxIkTGTZsGFFRUdx999307dv3vD1izZHClYiIiIhIw3FbuCosLGTr1q3ExcWVFWM0EhcXx8aNGyvdZuPGjS7tAeLj413aDxkyhM8++4xjx45ht9tZu3Yt+/btY8SIEVXWUlBQQGZmpsvUHDgfJKwRA0VERERE6p3bwlVaWhpWq5Xw8HCX5eHh4SQnJ1e6TXJy8nnbv/766/To0YP27dvj5eXFyJEjmTt3LldeeWWVtcyaNQuLxeKcIiMja3FkjUf5niubze7makREREREmje3D2hR115//XW+//57PvvsM7Zu3corr7zC/fffz+rVq6vcZsaMGWRkZDinI0eONGDF9adDK1+8TEbyi2wcS89zdzkiIiIiIs2ah7s+ODQ0FJPJREpKisvylJQUIiIiKt0mIiLinO3z8vJ44okn+OSTTxg1ahQAffr0YceOHbz88ssVLiks5e3tjbe3d20PqdHxMBm5KNSPvSlZHDiZTWQrX3eXJCIiIiLSbLmt58rLy4v+/fuzZs0a5zKbzcaaNWuIjY2tdJvY2FiX9gCrVq1yti8qKqKoqAij0fWwTCYTNlvLfJBu6aWBBzWohYiIiIhIvXJbzxU4hk2fOHEiAwYMYNCgQcyePZucnBwmT54MwIQJE2jXrh2zZs0C4MEHH2To0KG88sorjBo1isWLF7Nlyxbmz58PQGBgIEOHDuXRRx/Fx8eHjh078vXXX/Puu+/y6quvuu043UnPuhIRERERaRhuDVdjx47l5MmTzJw5k+TkZPr168eKFSucg1YkJSW59EINGTKEDz74gKeeeoonnniC6Oholi1bRq9evZxtFi9ezIwZMxg/fjynT5+mY8eO/PnPf+bee+9t8ONrDEp7rvYrXImIiIiI1CuD3W7XMHJnyczMxGKxkJGRQWBgoLvLqZXdxzO59rVvsfh4smPmbzAYDO4uSURERESkyahJNmh2owWKq05hfhgMkJFXRFp2obvLERERERFpthSumjmzp4kOJaME6r4rEREREZH6o3DVAnQJKxnU4qTClYiIiIhIfVG4agFKB7U4kJLl5kpERERERJovhasWwDkcu3quRERERETqjcJVC9BFz7oSEREREal3ClctQGm4SsksIDO/yM3ViIiIiIg0TwpXLUCg2ZPwQG8ADqr3SkRERESkXihctRClvVf7Fa5EREREROqFwlULUTocu3quRERERETqh8JVC6FBLURERERE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06ZN52y/dOlSunXrhtlspnfv3ixfvryBKm36Zs2axcCBAwkICKB169YkJCSwd+/ec26zaNEiDAaDy2Q2mxuo4qbv2WefrXD+unXrds5t9B2vnaioqArn3GAwcP/991faXt/xmvnmm28YPXo0bdu2xWAwsGzZMpf1drudmTNn0qZNG3x8fIiLi2P//v3n3W9N/y1oSc51zouKinjsscfo3bs3fn5+tG3blgkTJnD8+PFz7vNCfja1JOf7nk+aNKnC+Rs5cuR596vveeXOd74r+5luMBh46aWXqtynvuPuoXDlZkuWLGH69Ok888wzbNu2jb59+xIfH09qamql7Tds2MC4ceOYMmUK27dvJyEhgYSEBHbt2tXAlTdNX3/9Nffffz/ff/89q1atoqioiBEjRpCTk3PO7QIDAzlx4oRzSkxMbKCKm4eePXu6nL/vvvuuyrb6jtfe5s2bXc73qlWrALj55pur3Ebf8erLycmhb9++zJ07t9L1f/3rX3nttdeYN28eP/zwA35+fsTHx5Ofn1/lPmv6b0FLc65znpuby7Zt23j66afZtm0bH3/8MXv37uX6668/735r8rOppTnf9xxg5MiRLufv3//+9zn3qe951c53vsuf5xMnTrBgwQIMBgNjxow55371HXcDu7jVoEGD7Pfff7/zvdVqtbdt29Y+a9asStvfcsst9lGjRrksi4mJsd9zzz31WmdzlZqaagfsX3/9dZVtFi5caLdYLA1XVDPzzDPP2Pv27Vvt9vqO170HH3zQ3rlzZ7vNZqt0vb7jFw6wf/LJJ873NpvNHhERYX/ppZecy9LT0+3e3t72f//731Xup6b/FrRkZ5/zymzatMkO2BMTE6tsU9OfTS1ZZed84sSJ9htuuKFG+9H3vHqq8x2/4YYb7FdfffU52+g77h7quXKjwsJCtm7dSlxcnHOZ0WgkLi6OjRs3VrrNxo0bXdoDxMfHV9lezi0jIwOAVq1anbNddnY2HTt2JDIykhtuuIGff/65IcprNvbv30/btm3p1KkT48ePJykpqcq2+o7XrcLCQt577z3uuOMODAZDle30Ha8bhw4dIjk52eU7bLFYiImJqfI7fCH/Fsi5ZWRkYDAYCAoKOme7mvxskorWrVtH69atufjii7nvvvs4depUlW31Pa87KSkpfPHFF0yZMuW8bfUdb3gKV26UlpaG1WolPDzcZXl4eDjJycmVbpOcnFyj9lI1m83GtGnTuOyyy+jVq1eV7S6++GIWLFjAp59+ynvvvYfNZmPIkCEcPXq0AattumJiYli0aBErVqzgzTff5NChQ1xxxRVkZWVV2l7f8bq1bNky0tPTmTRpUpVt9B2vO6Xf05p8hy/k3wKpWn5+Po899hjjxo0jMDCwynY1/dkkrkaOHMm7777LmjVrePHFF/n666+55pprsFqtlbbX97zu/POf/yQgIICbbrrpnO30HXcPD3cXIOIu999/P7t27Trv9cexsbHExsY63w8ZMoTu3bvzj3/8g+eff76+y2zyrrnmGud8nz59iImJoWPHjnz44YfV+l83qZ133nmHa665hrZt21bZRt9xaS6Kioq45ZZbsNvtvPnmm+dsq59NtXPrrbc653v37k2fPn3o3Lkz69atY/jw4W6srPlbsGAB48ePP+/AQ/qOu4d6rtwoNDQUk8lESkqKy/KUlBQiIiIq3SYiIqJG7aVyU6dO5fPPP2ft2rW0b9++Rtt6enpyySWXcODAgXqqrnkLCgqia9euVZ4/fcfrTmJiIqtXr+bOO++s0Xb6jl+40u9pTb7DF/JvgVRUGqwSExNZtWrVOXutKnO+n01ybp06dSI0NLTK86fved349ttv2bt3b41/roO+4w1F4cqNvLy86N+/P2vWrHEus9lsrFmzxuV/kcuLjY11aQ+watWqKtuLK7vdztSpU/nkk0/43//+x0UXXVTjfVitVnbu3EmbNm3qocLmLzs7m4MHD1Z5/vQdrzsLFy6kdevWjBo1qkbb6Tt+4S666CIiIiJcvsOZmZn88MMPVX6HL+TfAnFVGqz279/P6tWrCQkJqfE+zvezSc7t6NGjnDp1qsrzp+953XjnnXfo378/ffv2rfG2+o43EHePqNHSLV682O7t7W1ftGiRfffu3fa7777bHhQUZE9OTrbb7Xb77bffbn/88ced7devX2/38PCwv/zyy/Y9e/bYn3nmGbunp6d9586d7jqEJuW+++6zWywW+7p16+wnTpxwTrm5uc42Z5/z5557zr5y5Ur7wYMH7Vu3brXfeuutdrPZbP/555/dcQhNzsMPP2xft26d/dChQ/b169fb4+Li7KGhofbU1FS73a7veH2xWq32Dh062B977LEK6/Qdr52srCz79u3b7du3b7cD9ldffdW+fft258h0f/nLX+xBQUH2Tz/91P7TTz/Zb7jhBvtFF11kz8vLc+7j6quvtr/++uvO9+f7t6ClO9c5LywstF9//fX29u3b23fs2OHys72goMC5j7PP+fl+NrV05zrnWVlZ9kceecS+ceNG+6FDh+yrV6+2X3rppfbo6Gh7fn6+cx/6nlff+X6u2O12e0ZGht3X19f+5ptvVroPfccbB4WrRuD111+3d+jQwe7l5WUfNGiQ/fvvv3euGzp0qH3ixIku7T/88EN7165d7V5eXvaePXvav/jiiwauuOkCKp0WLlzobHP2OZ82bZrzzyc8PNx+7bXX2rdt29bwxTdRY8eOtbdp08bu5eVlb9eunX3s2LH2AwcOONfrO14/Vq5caQfse/furbBO3/HaWbt2baU/R0rPqc1msz/99NP28PBwu7e3t3348OEV/hw6duxof+aZZ1yWnevfgpbuXOf80KFDVf5sX7t2rXMfZ5/z8/1saunOdc5zc3PtI0aMsIeFhdk9PT3tHTt2tN91110VQpK+59V3vp8rdrvd/o9//MPu4+NjT09Pr3Qf+o43Dga73W6v164xERERERGRFkD3XImIiIiIiNQBhSsREREREZE6oHAlIiIiIiJSBxSuRERERERE6oDClYiIiIiISB1QuBIREREREakDClciIiIiIiJ1QOFKRERERESkDihciYiI1JLBYGDZsmXuLkNERNxM4UpERJq0SZMmYTAYKkwjR450d2kiItLCeLi7ABERkdoaOXIkCxcudFnm7e3tpmpERKSlUs+ViIg0ed7e3kRERLhMwcHBgOOSvTfffJNrrrkGHx8fOnXqxH/+8x+X7Xfu3MnVV1+Nj48PISEh3H333WRnZ7u0WbBgAT179sTb25s2bdowdepUl/VpaWnceOON+Pr6Eh0dzWeffeZcd+bMGcaPH09YWBg+Pj5ER0dXCIMiItL0KVyJiEiz9/TTTzNmzBh+/PFHxo8fz6233sqePXsAyMnJIT4+nuDgYDZv3szSpUtZvXq1S3h68803uf/++7n77rvZuXMnn332GV26dHH5jOeee45bbrmFn376iWuvvZbx48dz+vRp5+fv3r2bL7/8kj179vDmm28SGhracCdAREQahMFut9vdXYSIiMiFmjRpEu+99x5ms9ll+RNPPMETTzyBwWDg3nvv5c0333SuGzx4MJdeeilvvPEGb731Fo899hhHjhzBz88PgOXLlzN69GiOHz9OeHg47dq1Y/LkyfzpT3+qtAaDwcBTTz3F888/DzgCm7+/P19++SUjR47k+uuvJzQ0lAULFtTTWRARkcZA91yJiEiTd9VVV7mEJ4BWrVo552NjY13WxcbGsmPHDgD27NlD3759ncEK4LLLLsNms7F3714MBgPHjx9n+PDh56yhT58+znk/Pz8CAwNJTU0F4L777mPMmDFs27aNESNGkJCQwJAhQy7oWEVEpPFSuBIRkSbPz8+vwmV6dcXHx6da7Tw9PV3eGwwGbDYbANdccw2JiYksX76cVatWMXz4cO6//35efvnlOq9XRETcR/dciYhIs/f9999XeN+9e3cAunfvzo8//khOTo5z/fr16zEajVx88cUEBAQQFRXFmjVralVDWFgYEydO5L333mP27NnMnz+/VvsTEZHGRz1XIiLS5BUUFJCcnOyyzMPj/9u5e5RWwjAMw49wEJw6JGQFgimjXVxAuoDpRKYNgZAmjU2cFSQrsAwJWKSx0AWkcQWW9pY2pjvFAeF0FsP5CddVTjG8U97M970/vpZGPDw85Pz8PL1eL6vVKi8vL7m/v0+SXF9f5+7uLmVZpqqqvL+/ZzKZ5ObmJq1WK0lSVVVGo1GazWb6/X4+Pj6y2+0ymUy+Nd98Pk+3202n08l+v8/j4+NX3AFwOMQVAP+9p6entNvt356dnp7m9fU1ya9NfpvNJuPxOO12O+v1OmdnZ0mSoijy/Pyc6XSai4uLFEWRq6urLBaLr3eVZZnPz88sl8vMZrM0Go0Mh8Nvz3d8fJzb29u8vb3l5OQkl5eX2Ww2NXw5AP8S2wIBOGhHR0fZbrcZDAZ/exQADpw7VwAAADUQVwAAADVw5wqAg+b0OwB/ij9XAAAANRBXAAAANRBXAAAANRBXAAAANRBXAAAANRBXAAAANRBXAAAANRBXAAAANfgJSwyIrXdTGEEAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m108/108\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 67ms/step\n",
"y_pred shape: (1717, 32, 32, 1)\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAFbCAYAAACakkVNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABlmElEQVR4nO3deXgV5fk//neAbJDkQEJWCRh22TUgRlARIhGVglD3Klg/LjSgQP1Y6VdRrDUuFXGhWFsLtIpUVNC6QBEFP8oiIKhoi0BjWZNAIAsJBEjm94e/nGbuuZN5Es4kJ/h+XVeui5k8M/PMM3Mmw8x93yfEsiwLREREREQeaNHUHSAiIiKiMxdvNomIiIjIM7zZJCIiIiLP8GaTiIiIiDzDm00iIiIi8gxvNomIiIjIM7zZJCIiIiLP8GaTiIiIiDzDm00iIiIi8gxvNomIiILM2WefjYkTJ/qnV69ejZCQEKxevbrJ+iTJPgazs88+G1dddVVTd+NHizebhAULFiAkJASbNm1q6q4AAMrLy/Hwww8bX1SrL8JvvPGGtx0joh+F6mti9U9ERAS6d++OyZMnIz8/v6m7Vy/vv/8+Hn744SbtQ/U4/s///I/6+//3//6fv82hQ4cauXfUGHizSUGnvLwcs2bNCqr/wRPRj88jjzyCv/71r3jhhRdw4YUXYt68ecjIyEB5eXmj9+Xiiy/GsWPHcPHFF9druffffx+zZs3yqFfmIiIi8Oabb+LEiROO37322muIiIhogl5RY+HNJhERkWLUqFH42c9+hv/5n//BggULMHXqVOTm5uLtt9+udZmysjJP+tKiRQtERESgRYvm+Wf78ssvR0lJCT744APb/LVr1yI3NxdXXnllE/WMGkPzPGvJcxMnTkRUVBT27duHsWPHIioqCvHx8bj33ntRWVnpb/f9998jJCQEv/vd7/DMM8+gU6dOiIyMxCWXXIJt27bZ1jls2DAMGzZM3dbZZ5/tX198fDwAYNasWf5XK/V9DfTwww8jJCQE3333HX72s5/B5/MhPj4eDz74ICzLwp49ezBmzBjExMQgKSkJTz/9tG35EydOYObMmUhPT4fP50ObNm1w0UUX4eOPP3Zsq7CwEDfffDNiYmLQtm1bTJgwAV9++SVCQkKwYMECW9t//etf+OlPf4rY2FhERERg4MCBeOedd+q1b0TUNIYPHw4AyM3NBfDf6+SuXbtwxRVXIDo6GjfddBMAoKqqCnPmzEHv3r0RERGBxMRE3HnnnThy5IhtnZZl4dFHH0WHDh3QunVrXHrppfjmm28c264tZnPDhg244oor0K5dO7Rp0wb9+vXDs88+6+/f3LlzAcAWFlAt0H2sy1lnnYWLL74YixYtss1/9dVX0bdvX/Tp08exzP/93//hmmuuQceOHREeHo7U1FRMmzYNx44ds7XLy8vDrbfeig4dOiA8PBzJyckYM2YMvv/++zr7tHDhQrRq1Qr/+7//W699ofpr1dQdoOBVWVmJrKwsDB48GL/73e/w4Ycf4umnn0aXLl0wadIkW9u//OUvKC0tRXZ2No4fP45nn30Ww4cPx9dff43ExETjbcbHx2PevHmYNGkSrr76aowbNw4A0K9fvwbtw3XXXYdzzjkHjz/+ON577z08+uijiI2NxR/+8AcMHz4cTzzxBF599VXce++9GDRokP8VVUlJCf70pz/hhhtuwO23347S0lK8/PLLyMrKwueff44BAwYA+OFiPXr0aHz++eeYNGkSevbsibfffhsTJkxw9OWbb77BkCFDcNZZZ+H+++9HmzZt8Prrr2Ps2LF48803cfXVVzdoH4mocezatQsAEBcX55936tQpZGVlYejQofjd736H1q1bAwDuvPNOLFiwALfeeivuvvtu5Obm4oUXXsCWLVvw2WefITQ0FAAwc+ZMPProo7jiiitwxRVX4IsvvsDIkSPV183SypUrcdVVVyE5ORn33HMPkpKS8M9//hPvvvsu7rnnHtx5553Yv38/Vq5cib/+9a+O5RujjzXdeOONuOeee3D06FFERUXh1KlTWLJkCaZPn47jx4872i9ZsgTl5eWYNGkS4uLi8Pnnn+P555/H3r17sWTJEn+78ePH45tvvsGUKVNw9tlno6CgACtXrsTu3bv9DzKkl156CXfddRd+/etf49FHH63XflADWPSjN3/+fAuAtXHjRv+8CRMmWACsRx55xNb23HPPtdLT0/3Tubm5FgArMjLS2rt3r3/+hg0bLADWtGnT/PMuueQS65JLLnFsf8KECVanTp380wcPHrQAWA899JBR/z/++GMLgLVkyRL/vIceesgCYN1xxx3+eadOnbI6dOhghYSEWI8//rh//pEjR6zIyEhrwoQJtrYVFRW27Rw5csRKTEy0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+eWXjbZ/ROSdSy65BHfeeSdycnKwdetWjBw5EqGhodixYweWLFmCZ599Fj/96U/9tYtzcnJw1VVX4YorrsCWLVvwwQcf1PrEr1qLFi0wb948jB49GgMGDMCtt96K5ORk/Otf/8I333yDFStWAADS09MBAHfffTeysrLQsmVLXH/99Y3Sx9r0798f/fv3r7NNz5490aVLF9x7773Yt28fYmJi8Oabbzqepn733XcYMWIErr32WvTq1QutWrXC0qVLkZ+fj+uvv15dd9euXfGPf/wDw4YNQ1ZWFj766CPExMQ0aF/IUBNlwVMQqa30UZs2bRxtq8tTVKsuffTUU09ZTz/9tJWammqFh4dbF110kfXll186ln/llVeszp07W2FhYdaAAQOsFStWOEofWZZlrV271kpPT7fCwsJcyyDVVfqoZhmNuvbrkksusXr37u2frqqqsh577DGrU6dOVnh4uHXuueda7777rtrXgwcPWjfeeKMVHR1t+Xw+a+LEidZnn31mAbAWL15sa7tr1y7rlltusZKSkqzQ0FDrrLPOsq666irrjTfeqHX/iKhxaddETW3Xk2ovvfSSlZ6ebkVGRlrR0dFW3759rfvuu8/av3+/v01lZaU1a9YsKzk52YqMjLSGDRtmbdu2zerUqVOdpY+qffrpp9Zll11mRUdHW23atLH69etnPf/88/7fnzp1ypoyZYoVHx9vhYSEOMogBbKPtcH/X/qoLto1+9tvv7UyMzOtqKgoq3379tbtt99uffnll7aycocOHbKys7Otnj17Wm3atLF8Pp81ePBg6/XXX7etv2bpo2obNmywoqOjrYsvvlgts0SBE2JZSsYGkaHvv/8eaWlpeOqpp3Dvvfc2dXeCxrJly3D11Vfj008/xZAhQ5q6O0RERE2GMZtEp0l+dVplZSWef/55xMTE4LzzzmuiXhEREQUHxmwSnaYpU6bg2LFjyMjIQEVFBd566y2sXbsWjz32WJ1ZnkRERD8GvNkkOk3Dhw/H008/jXfffRfHjx9H165d8fzzz2Py5MlN3TUiIqImx5hNIiIiIvIMYzaJiIiIyDOevUafO3cunnrqKeTl5aF///54/vnncf7557suV1VVhf379yM6OjoovkmGiM48lmWhtLQUKSkpjq8aPFPwWkpEXqrXddSLekqLFy+2wsLCrD//+c/WN998Y91+++1W27Ztrfz8fNdl9+zZYwHgD3/4wx/Pf/bs2ePFJTAo8FrKH/7wpzF+TK6jnsRsDh48GIMGDcILL7wA4If/YaempmLKlCm4//7761y2uLgYbdu2xXXXXYewsDAAUL9/NTU11TZdVVXlaCO/hurkyZO26eqv8apJfiNCze+7ro38+sGuXbs62kRFRdmmtf5K8n8KJ06ccLSR82p+E0+16nGsS3FxsW26srLSNh0eHu5YRo5f9deL1ST3QY6ndvrJpzARERGONomJiXX2T463tm3t6zCrv/mnmjz3Tp065VhGnlehoaGu25b7qI2d3Cftq9fkPPm1bVp/ZRvtf6RyH6Kjox1t5HnVqpX9RYk8hwDn+apl68s+y8+KNg55eXm2ae1zULM/J06cwJ/+9CcUFRXB5/M52gaLhr4hAv57LQVq/35sIqKGqv77bXIdDfhr9BMnTmDz5s2YMWOGf16LFi2QmZnp+F5p4Ic/HDX/eJSWlgL44Q9Z9R8z7Y+3/EOs/WHTlqtJuwmT69VudOQNklyPtoz8o9qQm02TmzntD7F2oyjJGxCTm025nyb9k+PQ0JtNefMm22j/kZDz5E0i4BwHk5s3eZOlnXdyv+U+ynUAzjE3GV+5Xq2/busAnOe0dlMo+2dysyn3QfvPnOyzXI/WX3n8tc+B1p9gvgn729/+hunTp+PFF1/E4MGDMWfOHGRlZWH79u1ISEhwXb5630JCQoJ6P4mo+bIsy+j6EvBgpUOHDqGystLx5CkxMdHx9AEAcnJy4PP5/D/yiSUR0Y/R7Nmzcfvtt+PWW29Fr1698OKLL6J169b485//3NRdIyKqlyavszljxgxMnz7dP11SUoLU1FRERkb6n65oj2flkwv5LS4AEBMTY5uWT6m0p2rl5eW2ae3Ji3wqKZ+QlZWVOZZxe8qqrddkHfJpnTYO2ut3ST7Jkk+XTJ5syfEFnK+z5dMl7cmbfHKlPZGSy8kwAO1/WnJstKeJbk8ytWXcnrICzvNKPuHTzkW5be3psttTYO18kOvV+iv3U9tvuW23p6zaerSntbKNPH+1viQnJ9umtfP14MGD/n97ED0UUPV9QwQ43xJpoQRERE0h4E8227dvj5YtWyI/P982Pz8/H0lJSY724eHhiImJsf0QEf2Y1fcNEcC3REQUvAJ+sxkWFob09HSsWrXKP6+qqgqrVq1CRkZGoDdHRET44S1RcXGx/2fPnj1N3SUiIgAevUafPn06JkyYgIEDB+L888/HnDlzUFZWhltvvdWLzRERnVHq+4YI+OEtkUkyIBFRY/OkmvF1112H3/3ud5g5cyYGDBiArVu3Yvny5Y5XQkRE5MQ3RER0JvEsQWjy5MmYPHlyg5ePj4/3Jy60a9fO8XuZlCETRABnEoBMNNCSU2SyhJbsI5Nyqss1VdOSHkwSQtxoCThu5WcAZ5KItm25nGyjjZVMetHWK8fcpOanTAjSElhkgphJ/U4t0UiS2zp69Kht2uTbZrTEGFnT06TuqtyWVs6puo5iNfk50EoAmZRdMilj5HaOaMdNnsNaIo8kPzva50BuWzvPao65ts/Bhm+IiOhMEfxXXCKiH6HrrrsOBw8exMyZM5GXl4cBAwbwDRERNUu82SQiClKn+4aIiCgYeBKzSUREREQEBPGTzYiICH/Ml0lMmfb1bTLeriFflahxixc0iTHUYv/cYum0WFC5XpNYNJP4O8nkaw81suC9jB/V4hBl8XotbtZtzLVxkOeDplOnTrZp+Z3g8rvSAedx0/orX32afBGAyVdlyvGUfdGOq4zz1dZrUlDebT1aQXnZP5OvDG3IVy1qy2ifSyIi8h6fbBIRERGRZ3izSURERESe4c0mEREREXmGN5tERERE5JmgTRAKDQ31J4rIhBHAWQRbS3KQhbNNinrLhAVtvW7JNIcPH3bMk8kUPp/P0UYmNciEIK0AtkyE0ZJgTJKGZMKSSQF8OZ7auGgJQDVpSRtyvTJJB3Aef5kwpI1vbV/zV5McB9kXLUlLK8guyWQZ2V/t2JokCMnzVRYz1469TEbS9kkWh5fF4wHn2Jh8wYCcJ7+OEXB+3uX4mnyOTdoQEVHj4JNNIiIiIvIMbzaJiIiIyDO82SQiIiIizwRtzGZpaak/Hk3GXgLOmCwZqwY4Y71kDJxJDKQW+yXjDGNjY23TMt4RcMbWacWs27dvX2d/tULwMo5PLgM44zi12EoZt2eybbmMtl4Z+2cSYypj9rSxKi0ttU23a9euzmnAOVZaDKTsj4xD1IqFy+OtjYPsj8kXDMj93rdvn6ONLOrv9sUAgHOf5DoAIC4uzjZdXl7uaCPPEble7TMp91P7DGoxpDVp+yT3QYujrXm8tfOZiIi8wSsuEREREXmGN5tERERE5BnebBIRERGRZ4I2ZrOystIfY1VYWOj4vYwP02IVZeyfW81HjRY/JuPOZEzpoUOHHMvEx8fbpmX/AWd8qKzNWFJS4lhGxkRq69ViHiW5T3LstPhGOU+Lv5OxcbJ/Wp1Nk3hGWXvzyJEjrsvI46TV75RxhnI92vjKNlocqhwreUy0WrKSjOkFnOeaPF+1mGO5j9oxcItdBZx9ltuW9TwBZyylFi8q16MdJ0l+trXztaioyP9v1uEkImo8fLJJRERERJ7hzSYREREReYY3m0RERETkGd5sEhEREZFngjZBKD4+3p8oogX7ywD//fv3u67TpJCzLNCtJU/IJAe5TEFBgWMZmeSgJU/I/ZRJGTExMY5lZLFwrZB227ZtbdNaAotM1JB90YqZy+LaWlKObONWsFvbdmJioqONPP4yeUYbBzl+2nkll5Pb0RJ5ZMFzrY0cGzme2hcByGOinYtuRee1c0YWxNeOrTyv8vLyHG1qJtwAznNc2yeTovOSW/F4UzU/Bw1dBxER1R+fbBIRERGRZ3izSURERESe4c0mEREREXkmaGM2jx075o9z0+K6ZOxfQkKCo42Mt5NxklrMnlyvLKwOOOO95DJarJqMOzPZJ7ltk5g9LRZN7qe2bVkcXsa3arGWcj1a7J+c5zYNOPdTK+ofFxdnm5ZjpcUqyv5qRf7lOSPjc1u3bu1YRsZjasXt5TGQ8Y0yjhJw7rcWEytjVWXhf5NzXCusLovOa2Ml98GkAL5bbLC2Xnk+aDHHclvaemuuRxtLIiLyBp9sEhEREZFneLNJRERERJ7hzSYREREReYY3m0RERETkmaBNEMrLy/MH/ScnJzt+L5McTBIhZLFtrfC3TOTRElhk0ojJ72XSiEzAAJxJDrKNlqxkMg5yntxHwD0JQ0sqkmOjJc/IMZf7qK1X7qfWRiaayGntuKWkpNimtePv8/ls0zJhSEvkSUpKcsyTZP9Mkqvk2GnHze04yf5r29KSf+R6tKQcuW7ZPy2pzCTxTCbyyWntPHPbDmAvvq99loiIyBt8sklEREREnuHNJhERERF5pt43m5988glGjx6NlJQUhISEYNmyZbbfW5aFmTNnIjk5GZGRkcjMzMSOHTsC1V8iIiIiakbqHbNZVlaG/v374+c//znGjRvn+P2TTz6J5557DgsXLkRaWhoefPBBZGVl4dtvv1WLktempKTEH1MnC1cDZjFXWoxbTVosoIwplHFzgHth6q5duzqWkbFpWkyZ7I/bNOCMD5XF2QGzwu8yLk6OuTYOcttaoWy5nzIOVTtGJsdAxk7K+EEtVlFKTEx0zHNbzqRovlbUXY6VnNaObe/evW3Thw4dcrSRcaf5+fl19g1wxmxqx0D2x+T4mxRWl/O0WFW3uFOT64i2bSIiahr1frI5atQoPProo7j66qsdv7MsC3PmzMEDDzyAMWPGoF+/fvjLX/6C/fv3O56AEhGR7uGHH0ZISIjtp2fPnk3dLSKiBgloNnpubi7y8vKQmZnpn+fz+TB48GCsW7cO119/vWOZiooK25NC+XV7REQ/Rr1798aHH37on9aefhMRNQcBvXrl5eUBcL6eTExM9P9OysnJwaxZswLZDSKiZq9Vq1ZGZbWIiIJdk/9XecaMGZg+fbp/uqSkBKmpqTh+/Lg/VqugoMCxnIwPlHGUgDO2S9YT1OLF5Hq12C/ZRsZjxsbGOpbZt2+fbbpjx46ONjJuUsY7anGeMt5Oq5koaW3c4uC0eohyzLV4Rre4Uy3GVI65VrdU1lqU69XiR4uKimzT2jjI5WT8pVZnU/ZFi/uUNw25ubm26RMnTjiWkdvW6kvK5Tp06GCb1uq5ymW0+GdZV1OL69TiOGvSnsTJefKYAPq5VlffAOf5q227Zn+1z1Kw2bFjB1JSUhAREYGMjAzk5OSo141qfEtERMEqoFfc6j+oMkkhPz+/1v+hh4eHIyYmxvZDRPRjNnjwYCxYsADLly/HvHnzkJubi4suukj9z061nJwc+Hw+/09qamoj9piIqHYBvdlMS0tDUlISVq1a5Z9XUlKCDRs2ICMjI5CbIiI6Y40aNQrXXHMN+vXrh6ysLLz//vsoKirC66+/XusyM2bMQHFxsf9nz549jdhjIqLa1fs1+tGjR7Fz507/dG5uLrZu3YrY2Fh07NgRU6dOxaOPPopu3br5Sx+lpKRg7Nixgew3EdGPRtu2bdG9e3fbtVcKDw9XQ1mIiJpavW82N23ahEsvvdQ/XR1vOWHCBCxYsAD33XcfysrKcMcdd6CoqAhDhw7F8uXL61Vjk4iI/uvo0aPYtWsXbr755qbuChFRvdX7ZnPYsGFq8kW1kJAQPPLII3jkkUdOr2OtWvkD+rUEBpmcIotbA85kjvLyctftmtwUR0VF2aZlAouWVCTjWNu2betoIxOWTNYrEyG0hBA5NloylTymMnZWG1/ZH5P+yYQgbRm531rCjUwicSu0DwDR0dG26cOHD7tuWybGaIknMslFS2CRUlJSXPuiJcZJcj/l+aslFcnz1yTxTDuvZEKbnNaK0JskrcjPgTzW2vngNg6A/diZFP1vSvfeey9Gjx6NTp06Yf/+/XjooYfQsmVL3HDDDU3dNSIjdd0nAHqCLp25mjwbnYiI7Pbu3YsbbrgBhYWFiI+Px9ChQ7F+/XrEx8c3ddeIiOqNN5tEREFm8eLFTd0FIqKACf5ic0RERETUbAXtk802bdr44wS1GDgZc6XF6MlYL7cYEsAZU6jF6Mn+yHhBrVi4jIGT8W3atmQsnVb422Sf5Nho8ZeyQLdJ3KSMizt48KCjjYybles1KfytFRSXYyP7r/VXjp92XsljJ8dKOwYynlHLCJbfoCVjeLVi3bIvWtykHAeTYy1jV7WYaJ/PZ5vWxlP2R45n+/btHcvILzzQ1ivPmcLCQtu0/IYyUzVjtrV9JiIib/DJJhERERF5hjebREREROQZ3mwSERERkWd4s0lEREREngnaBKGaiRha0WmZqKEVcZbJKJKWeCKTfWTiCeBMwpBFsrXi8QkJCbbp/fv3O9rIGnoyeUJLppH7KJM/tOVkAgbg3AeZ7KElmsgkJ5mQBTgTmGQbLelFHgNtvXI5OVZako483tr54VaQXTsG8nxo166do43cB1nQWBaGB8wSeSR5vmrjK9ejfb7ksdXGSi4nv6hA2yc5VpGRkY428lyU46mtV+6n1t+abZggRMHE7W+ViUAVSTdZTyD6a5Lcql37G7Ieanp8sklEREREnuHNJhERERF5hjebREREROSZoI3ZLCsr88dlajFlMkZTi7+U8R4yzkQrBC9jyEyKxZvEf8n+yqLeAJCUlGSblnFoWiyoFqsqybH5/vvvHW1koWwZt6MVqpfHRYuvkevRxlOSMThaHKU8TjJGU9uO7ItJwX5JGwc5TztOrVu3tk3LY6uNneyf1l8ZqyrPh5iYGMcysn8lJSWONrI/JsdftunUqZNjGRkLqm1bfk7lPmlxyfK4HTlyxNGm5jztekFERN7gk00iIiIi8gxvNomIiIjIM7zZJCIiIiLPBG3MZmFhoT9GTYtVk/FhWuyitlxNWuyXpNUplDGFWkypJGtbavUFi4uLbdNyn7T9kXGIWo20goIC1zYydk7G+sl1AIDP57NNy/qYgHucrEk8ptZfuV45NjI2EDCrhypjIBsSc6odW3nOyL5oMZEyDlXGfQLO/hYWFrouI+dpbeT4anVL4+LibNMyDlL2DXCeV9pnRx4XuV4tvlWOp9bfmucI62z+uJnUkgxU/UaTuHqT64p2TteXds2TTMbGpP6lG+1vq+T2NxzQ/+5IJn+jyVs8AkRERETkGd5sEhEREZFneLNJRERERJ7hzSYREREReSZoE4QiIyMRGhoKQA+eNklGkEHMJglBMthYC5bWtlVTdb9rkoHOsog64EwQkvstE3IA5zjIBBHAmeyh9a+6gH41mbgjEzAAoKioyDZtEjQug+W1sZRjrgXqy22bBPPLJCdtn+Q5IsdBJsUAzkD3du3aOdrI/ZbLHD582LGMTNrSjr9cr0w00pKV5DJa8Lw8BtpxchtzrXC6PBe15KSwsDDbtEkReklLymjbtm2t2yAiIu/wySYREREReYY3m0RERETkGd5sEhEREZFngjZmMzo62h9XZVLwVosXlPNkbJrJemUsI+CMv5QxkFosm1xGW6+M2ZQFsOXvAbPCuCYxkHJsZLydFn8nl9H2Se6DjInVjoEcK61or4zJk/3TigHL/dYKe8t9kPGXWkysjCHU+iv7J+MvtdhKt/MXcMZoyv5qx0SuxyQuWTtOssi0SdysbCNjOAHnfsvPlxaPKderxZjW7K/JZ5+Ck0lsuFsxcC1mXtLiqCWTPAAt1lrSriuSW587d+7sug7tyy6k9evXu7aR13WNFrte0/fff++6DpNjbVLUXYsNl0wK3lPD8ckmEREREXmGN5tERERE5BnebBIRERGRZ3izSURERESeCdoEIcuy6kw4kAHKWuCzTCyQSQNaco1MnjApeC37qS0jExK0BAUZxCwDlk2SlbRkDxlkrW1bFi+XRa9lMojWH61QtlsCkxbIL/unJZHIhBu5jzJxBjA7/vI8ksdSCzSXx187F+W2Zf+14H9ZdF5LEJPrldvu0KGDYxk5vlpykjz3tM+i3LYM1NeOrTxHtHNRnsNuyR6AWZJezW25fTEDEREFDp9sEhEREZFneLNJRERERJ6p181mTk4OBg0ahOjoaCQkJGDs2LHYvn27rc3x48eRnZ2NuLg4REVFYfz48cjPzw9op4mIiIioeahXzOaaNWuQnZ2NQYMG4dSpU/j1r3+NkSNH4ttvv/XHyE2bNg3vvfcelixZAp/Ph8mTJ2PcuHH47LPP6tWxw4cP++OwtKK4Ml5QizuT8WAy7lCLQ5RxfFqcpCwGLotMazF7cltakXQZm7Zv3z7bdHJysmMZ2T8tvq2oqMgxz41cjxZbJ+MktbFyKw6uxc7J9Wr75BYvqB1bGZdaWlrqaCPPI7lPWpFh2RctxlTGkMqYQm0fZdykVkhZ7pOc1vorYyJlbKjWRsZEAs7PgRw7bRwkLbZWfjbkWGmxwSZq7pMW20xNLy4uLiBttOtrTSbFzWfPnu3a5rrrrnNtY1KYXF7rNW+++Wadv1+8eLHrOjp16uTaxmSf2rdv79rG7e9OQ76QRGPyBQ1aHoXkVoT+yJEjruug2tXryeby5csxceJE9O7dG/3798eCBQuwe/dubN68GcAPCQwvv/wyZs+ejeHDhyM9PR3z58/H2rVrjb6VgIjox+CTTz7B6NGjkZKSgpCQECxbtsz2e8uyMHPmTCQnJyMyMhKZmZnYsWNH03SWiOg0nVbMZnV2bGxsLABg8+bNOHnyJDIzM/1tevbsiY4dO2LdunXqOioqKlBSUmL7ISI6k5WVlaF///6YO3eu+vsnn3wSzz33HF588UVs2LABbdq0QVZWlusTOyKiYNTg0kdVVVWYOnUqhgwZgj59+gAA8vLyEBYWhrZt29raJiYmIi8vT11PTk4OZs2a1dBuEBE1O6NGjcKoUaPU31mWhTlz5uCBBx7AmDFjAAB/+ctfkJiYiGXLluH6669vzK4SEZ22Bj/ZzM7OxrZt24ziROoyY8YMFBcX+3/27NlzWusjImrOcnNzkZeXZ3tD5PP5MHjw4FrfEAF8S0REwatBTzYnT56Md999F5988omtaHRSUhJOnDiBoqIi29PN/Px8JCUlqesKDw9XkzmOHz/uD/zVAollUoNWxFkmKMjEAi1oWK5HS2CRiRByGW1/TJIlJNk/LQFHttEC302SiAoKCmzTMgBcS+SQSSPafrsVSY+Pj3csc+jQIdu0liAmg89lYoz2nxaZyKUVPJdJQ3IZ7ZyR46m1kck08nWofBsAOI+bdvMgkw/kMdDeKMhEM5NkCY1MYJKB+g1NwpGfFa2Qvtsybl8EEMyvo6uPmSz0X9cbIoBviYgoeNXryaZlWZg8eTKWLl2Kjz76CGlpabbfp6enIzQ0FKtWrfLP2759O3bv3o2MjIzA9JiIiBz4loiIglW9nmxmZ2dj0aJFePvttxEdHe3/X7bP50NkZCR8Ph9uu+02TJ8+HbGxsYiJicGUKVOQkZGBCy64wJMdICI6k1S/BcrPz7c9hc7Pz8eAAQNqXa62t0RERE2tXk82582bh+LiYgwbNgzJycn+n7/97W/+Ns888wyuuuoqjB8/HhdffDGSkpLw1ltvBbzjRERnorS0NCQlJdneEJWUlGDDhg18Q0REzVK9nmxqcZFSREQE5s6dW2tJD1MRERH+mECT2EqTQs9yPVqhahkDp8V+yRhSGdenFZk1KQ4ul5Pr1YqQR0dH26a1Jxty2zK+USNjOLW4Odlfk+K6MhZU+3YpeZx2797tum1J66+Md9Pi9mTspIzH1MZXttHifGUbeWyry4jVtS2tjYw7ldvWzhm5nvT0dEcbec5o4y33qbCw0DYt91Fj8sUKJsWf5Tkj40kB+/GWXwLQ2I4ePYqdO3f6p3Nzc7F161bExsaiY8eOmDp1Kh599FF069YNaWlpePDBB5GSkoKxY8c2XadPU21x+zWZxOeaXGe0z0pNH3zwges6zjvvPNc2JgXbTfprMjbXXnttnb//yU9+4roO7YtBJJO/pdo1TnI7Btp1R6orRrna/PnzT7svgH6trMlkXLS8CvpBg0sfERFRw2zatAmXXnqpf3r69OkAgAkTJmDBggW47777UFZWhjvuuANFRUUYOnQoli9fbnQDT0QUbHizSUTUyIYNG1bnm6KQkBA88sgjeOSRRxqxV0RE3jitbxAiIiIiIqpL0D7ZrBnnotV4lPFi2lMCGU8j6/6ZxE1qMRgydsOkxp9cRluv7I+c3r59u2MZWfNT2yc5Vtq25Tw5njKGU6PF38n+yBqaJmOlxezKeTLWS4uTkvGiWv1OGcsnY320WL/Dhw/bprXzVY7NWWedZZvW4oXk2Mj4XAA4cuSIbVrut7aM7MvevXsdbTp37myblnVCAeexleeiSS1L7TjJeDBZwkerEyvjr7U4z5rnlUkcKBERBQafbBIRERGRZ3izSURERESe4c0mEREREXmGN5tERERE5JmgTRCKioqqs6i7Sb05mWBhkngiackIMoFBrkdbr+yLtt6ysrI6t6MV/pUJK1pCiOyPLFwOuCdzJCQkOObt37+/zu0Azn0wKW4vj5NWTNetwK5JcV0t2cet4L123slkE5PEGNm/1NRURxuZwKQlwckxl/3TEmFkUo5WNF+eizL5B/jhM1pXX2QyGGBWDFp+NmRin3Zs5Xpl3wD7sTX57JM5LdlO0q5NkskXh5gU6B48eHCdvx84cKDrOuR511Dal4dIJgXDtXO6Ji3ZsiECtR63Av0333yz6zpMrhcm6/n6669d29xxxx11/t7kvGPh99rxiktEREREnuHNJhERERF5hjebREREROSZoI3ZbN26tT/+QcaPAc64My0GUsYDyhg9LZZGrkeL65NxRSYxLiaF1WV/ZeyfVjT9P//5T53b0balFdKWy8k2JSUljmVkf7R4KzlPjrkWO2dybKXy8nLXZeR4arGVMuZRTsvtAM590mK94uLibNPyWJsUzZdF6QEgPj7eNi1jNLVzXB43rWB7YWGhbVqL85UxWXKstDhfeS5qx0AWyZdttLhZeZ7l5eU52tSMOzWJBSMiosDgk00iIiIi8gxvNomIiIjIM7zZJCIiIiLP8GaTiIiIiDwTtAlCJ06c8Af9myS0mBTOlUkZ2jIywUJLNJFtZNJImzZtHMvIfdASj+R6ZKKJlsghEze0BBaZUKElZbgVo9WSoEwK1bsVsNWOrUwaMknkMUkiktvS+uZW7Fv7vVsRcsDZX1k8Xib6aMtox1auRxbX1hJh5Dztc3DkyBHbtFbUXSaNyf5qCWNaopnkVixeSxiU56+2TzU/cz/WwsoN5fa5SExMdF2HSSKlyfmxevVq1zadO3eu8/cmBdu1z5ukXesbsi2TYvaB2I5Jm8b6wgPtCz0kk3MmJSXFtY2W4Ci9/fbbdf7+7rvvdl3HP//5T9c22hdtSIE4H4INn2wSERERkWd4s0lEREREnuHNJhERERF5JmhjNouLi/2xcCbFwrXYDhlnZhLX6VbcHHDGtMji1lp/5TImRehlXJlW1F3Gqu3du9fRJjY21jFPkuMn+6vFUpnESco2cjtarKhJzJAccxnXaVIsXisOLvsj+6stI+NvtXNx3759tml5bmpxiHLMtbGS2yoqKrJNd+3a1bGMPI9MYmJLS0sdbaKjo23Tcnzl7wHnfmvF1+XnR4sXlWQheO3crDlWJrFgREQUGHyySURERESe4c0mEREREXmGN5tERERE5Jmgjdk8duyYP+7KpB6mpri42DYta6Jp8ZgyzkyrSyZj5+R6tNqGcj1a/KWMnZMxnFpfZC24mJgYRxuTeDbJpIamSS0wtxhYLbZSjq+2bbdanFpMnlyPFqvoFmOq1d6T/dXiOuX5KsdOqwMnzyNtvTLWs3379rZpbR+ldu3aOeaZ1IUtKCioc1tnn322YxmTOGT5uZVttPNBxnVq14eay5l8BsicFnMsaXWCG9Lm6quvdm3zzTff1Pl7k5hdk8+OSTyx9vdAMql/6VaX0mQdzY1J/L7JfsvavZrk5OQ6f//000+7rmPMmDGubUw0Vm3WxsQnm0RERETkGd5sEhEREZFneLNJRERERJ7hzSYREREReSZoo+RTUlL8iUFaoLYM8NaCp2WQrUxy0JIEjh496to3t0QeWXBc25ZMlACcAb+y/1pyilsxdsCZ7KEFS8v+yP5qBcVlG2083RKEGlpcWyZ7yWOiJX/JIunaWMlxkPutLeOWVKQtJ9erJeCYFNaX29LWI6WmptqmtbHSEnckmRwhk+sOHTrkWMYkUN/n89mmTRI1TM7XmkksZ2IyBRFRsOKTTSIiIiLyDG82iYiIiMgz9brZnDdvHvr164eYmBjExMQgIyMDH3zwgf/3x48fR3Z2NuLi4hAVFYXx48cjPz8/4J0mIiIiouahXjGbHTp0wOOPP45u3brBsiwsXLgQY8aMwZYtW9C7d29MmzYN7733HpYsWQKfz4fJkydj3Lhx+Oyzz+rdsZKSEn/MpklhVy1mU8ZOajGPkozl0uLvZLygLGhsUphYKzrtVhjZpAi5FjcZGxtrmz548KCjjSzsLfdbK0xsclzcirhr/ZXFy7WYwsLCQtu0SRH6lJQU27QWnyu3LcdcOwYydlE7F+Vysv/ynAKc54jWX1kAXcY7audUXFycbVqLH+7WrZttWiteLY+lPE7aemUcp4zz1NrIgvcm551WAL9mvKhJbDb9l1uMq0mMr1tRcpPtAMAFF1zg2satkLp2TZG0c0gyudabMIlldotvN9mnoqIi1zbyiyEa0hfA7Hi7CVThcpPzSv59kD799FPXdSxevNi1zciRI13bmIyvyXUwmNSrt6NHj8YVV1yBbt26oXv37vjtb3+LqKgorF+/HsXFxXj55Zcxe/ZsDB8+HOnp6Zg/fz7Wrl2L9evXe9V/IqJm55NPPsHo0aORkpKCkJAQLFu2zPb7iRMnIiQkxPZz+eWXN01niYhOU4NvjSsrK7F48WKUlZUhIyMDmzdvxsmTJ5GZmelv07NnT3Ts2BHr1q2rdT0VFRUoKSmx/RARncnKysrQv39/zJ07t9Y2l19+OQ4cOOD/ee211xqxh0REgVPv0kdff/01MjIycPz4cURFRWHp0qXo1asXtm7dirCwMMcrr8TEROTl5dW6vpycHMyaNaveHSciaq5GjRqFUaNG1dkmPDwcSUlJjdQjIiLv1PvJZo8ePbB161Zs2LABkyZNwoQJE/Dtt982uAMzZsxAcXGx/2fPnj0NXhcR0Zli9erVSEhIQI8ePTBp0iRHnK/Et0REFKzq/WQzLCwMXbt2BQCkp6dj48aNePbZZ3HdddfhxIkTKCoqsj3dzM/Pr/N/5+Hh4WpweXh4uD9BSAvulQkgWsKNDKCV29ECmGXigFYkWwZiy+QJLSnDJFjapPC7W1+0BBbZRkvKOHz4sG06JibGNq0F3Mt9MimSbhJ0bxLoLvfTJFhaHieZFAU4E3dkQL1WLHzfvn22aS3Y362oe2lpqWMZeT5oSTpyrOQ+aQH2GzdutE337dvX0Ub7PEnysyLfashzCHCOg5Zg0bNnT9u0/DxpyV9yvdr5EKhkg8Zw+eWXY9y4cUhLS8OuXbvw61//GqNGjcK6detqvZbwLRERBavTTmeqqqpCRUUF0tPTERoailWrVvl/t337duzevRsZGRmnuxkioh+N66+/Hj/5yU/Qt29fjB07Fu+++y42btyI1atX17oM3xIRUbCq15PNGTNmYNSoUejYsSNKS0uxaNEirF69GitWrIDP58Ntt92G6dOnIzY2FjExMZgyZQoyMjKMSlUQEZGuc+fOaN++PXbu3IkRI0aobWp7S0RE1NTqdbNZUFCAW265BQcOHIDP50O/fv2wYsUKXHbZZQCAZ555Bi1atMD48eNRUVGBrKws/P73v/ek40REPxZ79+5FYWEhkpOTm7orRET1Vq+bzZdffrnO30dERGDu3Ll1lvMwVV5e7o/N0uKvZPxaQ+KxtFhQGc9YHTdak4wXlIH4WtykLDCvbdutKLYWqyaX0dpo8yRZRFYWwNfixEzWK4+dSRyqjOs0iQWVbbTYUBl/q8UlymPnVpRem6cVTpYxmnK9Mt4RcO6DNt7yuB05csQ2LQu4A87C77t27XK0kfGWiYmJjjbyKZocO22f5HmkPYmTY3PWWWfZprX4VvkZ3L9/v6NNzbEy+YIHLx09ehQ7d+70T+fm5mLr1q2IjY1FbGwsZs2ahfHjxyMpKQm7du3Cfffdh65duyIrK6tJ+utWFNskGUleAzUm15SGxBNL2nVdMims7VY8HtA/Bw3h9jdOyy+QTPbJpPC7yfi5HUuT+H2TYuwmTO4P3LZ1zTXXuK7jhRdecG0zb9481zZ33XWXa5tA7FNjqneCEBERnZ5Nmzbh0ksv9U9Pnz4dADBhwgTMmzcPX331FRYuXIiioiKkpKRg5MiR+M1vfsPX5ETULPFmk4iokQ0bNqzOJxMrVqxoxN4QEXmreX25JhERERE1K0H7ZDMmJsYfF6I9AZCxJyaxM24xZhqt5qOMO5NttFqMkhZf41aL0STexiSuU9un2NhY23RBQYFtWqsdaUL2R+6jyT5p4yljxOR2tH2UMUJa/KiMV5LnntYXuW2T/so22rko+6LFfskatvJzoMVFyZqqWtKJrH+p1Y6Vy8ltFxcXO5aRsaAm4ylrn2rLtGnTxjbdoUMHR5ua9VBN6t4SEVFg8MkmEREREXmGN5tERERE5BnebBIRERGRZ3izSURERESeCdoEofDwcH+CkFaAWSYEmBTobmhCkCQLpZokp8hEGK04uGRSEF220bbtVgBdayOTUWTCEOBMKtLI/TZJjHErbg84x9ykWLxMuDEZK9nGpBi/lpTjdo5ofTEZK5m4I7ddMymmWlpammOedODAAdu0liAmP5cymUqrCSmLbWtjJefJsdE+63LbWtHpmoXp3Yp+k51bAWmZ+KUxKfyuJXZJ119/vWsbt4RRkwQxk0RPkwLoJkXoTQp0u/VZ/k3UmCR6miRtBlOxcBMmf2/d9ttkHVdeeaVrm3/+85+ubQL1eQrEPgUKn2wSERERkWd4s0lEREREnuHNJhERERF5JmhjNkNDQ/0xM1pcgYyD0WITZMyNjOPSYmnkMrK4NeCMnZHxK1o8i9wHLaZIxgvKfdIKtkta7J9JIXU5T/alffv2jmUOHTpkm5YFxjUy7lCLIZJ90WJTZP9M4nFNyOMizxktNlSeMyaxNCaxtjJ2UTv+8ssBZJykVoxdi7+V5H5rsWnynDCJGdO+zECSYyzXq42VjHnTjlPNz7I2LkRE5A0+2SQiIiIiz/Bmk4iIiIg8w5tNIiIiIvIMbzaJiIiIyDNBmyBUUVHhTxTRitnKZAktKcetmLmWcOFWDBhwL9BuksijJUq4rUcrbm9ShF4yKdprQiaIFBYWOtr4fL46t3348GHHMiaFZt0KqWsJQzKJRDtnZIKNW4FxwHnOaIlnso1cr5awYnIeyeLkcuzatWvnug5tvGVCUGRkpKNNbm6ubbp37962aS35S34mtc+2HAuT5Dr5edKKxdc8/iZFtOm/3Ip4796923Ud8osiNCbF9rUvC5DcCrKbfLZMaF8eIJmcayaJc27XepNC6ybXA5O/D4EoBh5sheEDsU8mX5ixZ88e1zaBKPIPmN3PNBY+2SQiIiIiz/Bmk4iIiIg8w5tNIiIiIvJM0MZslpeX++NhtPgak0LlMp5GxryYFOjWyPWYxAJqxeElGa8k4w61ODTZF5N4G5M4T7ktLZ5FrkeLIZEFzuWxNClmrsVAynkyPjAmJsaxjBxPLa5TblueD9r4yr5ocTJy/OS2tfOuuLjYNq3FTco4OLlebXxlfJg2DnI89+7d62gjj7fJPsmxakiRfG29si9uX24QiPgsIiIywysuEREREXmGN5tERERE5BnebBIRERGRZ4I2ZvPUqVN11uGSMVcmtQ3l+kziM9u0aeOYJ2PeZMymSW0rrb6kjGeU01oNOjkOWiyaSXyrJMdGi+uT/dNiSuVYyVqhWl9M4jrlPJM4RJP4S7dltHNG7pNWM09uS05r54w8r7RzUY6DHDttHGR9VBkbCjjjQ+Uy2rYPHDhgm05ISHAsI2skarHM8nyV8aMyhlPrrxY/XFpaWud2qXZu1zSTuoCydqtGO1+ljIwM1zZu13aTGo8mse0mtQ61v02SyfkYFxdX5+9NjoFJX0z+fpnUF3UbYy1eWzL5G93cnHPOOa5tZs6c6dpm3rx5rm3+/e9/1/l7k3MmUPVQ+WSTiIiIiDzDm00iIiIi8gxvNomIiIjIM7zZJCIiIiLPBG2CUEhIiD8wVQvUNgkclsHQMtBVKxavzZNkUK1Jks6hQ4ds09o+yaQRkwB1kyQXyaSgtUmgvuyf1l8ZQC8TOQoLCx3LyCQSLUBZzjMJdJZB+FogvAxal+OgnR8yQUjri1xOttGWkYXptW3Lz0F0dLRtWkvakvuoFcA3IRN35DjIaW0ZrVC9JBOuWrdu7bqMW0KbSWIHEREFBp9sEhEREZFneLNJRERERJ45rZvNxx9/HCEhIZg6dap/3vHjx5GdnY24uDhERUVh/PjxyM/PP91+EhEREVEz1OCYzY0bN+IPf/gD+vXrZ5s/bdo0vPfee1iyZAl8Ph8mT56McePG4bPPPqvX+i3L8sexaXGJJjGFMi5Lxvlp8Wwm63Xbjha7KLelxU3KGDeTAt1yPSZxnlq8qxxjk0LwJjGbbgVhtXhBuYy2bbdYPy0mT46nVlRYxk6axGyWlZXZprV9lnGHMnZRI/dbi1V0iwU1ic/ViqTL5bSC0m6FnU3Oca2NHBu5He08M/nc1hwbk6LU9F8mMdFuTAqKm1y/unfv7tpm27Ztdf7eJE7ZpC8FBQWubUyKl6ekpLi2cSu2bvJZN8lJMIlnNtmWWz5Bc/sMBqoAukmbbt26ubbZs2fPaW/LpC+B+OwDDXyyefToUdx000344x//iHbt2vnnFxcX4+WXX8bs2bMxfPhwpKenY/78+Vi7di3Wr18fkA4TETVnOTk5GDRoEKKjo5GQkICxY8di+/bttjZ8Q0REZ5IG3WxmZ2fjyiuvRGZmpm3+5s2bcfLkSdv8nj17omPHjli3bp26roqKCpSUlNh+iIjOVGvWrEF2djbWr1+PlStX4uTJkxg5cqTtCfm0adPw97//HUuWLMGaNWuwf/9+jBs3rgl7TUTUcPV+jb548WJ88cUX2Lhxo+N3eXl5CAsLQ9u2bW3zExMTkZeXp64vJycHs2bNqm83iIiapeXLl9umFyxYgISEBGzevBkXX3yx/w3RokWLMHz4cADA/Pnzcc4552D9+vW44IILmqLbREQNVq8nm3v27ME999yDV199VY13bIgZM2aguLjY/2MSh0BEdKYoLi4GAMTGxgJo2BsigG+JiCh41evJ5ubNm1FQUIDzzjvPP6+yshKffPIJXnjhBaxYsQInTpxAUVGR7elmfn4+kpKS1HWGh4c7ingDPwSTVwemagHLJsHmMhjaLcAacAaFa8k0bokxWkC4THrQbtar/9hU+/77723TWlC2nKeNixw/bZ/kWB09etS1v27LAM6xkYkcWqKPPB9kAg7gTDSR6zEJfNbOK+1crEkLepeB7tpxksu5JWQBzuNkkkwj91sbB/k5iI+Pd7SR56I2VrI/8jPu8/kcy8gvN9DI8ZT9NfkcuCX/mZwfjaGqqgpTp07FkCFD0KdPHwANe0ME8C0REQWvej3ZHDFiBL7++mts3brV/zNw4EDcdNNN/n+HhoZi1apV/mW2b9+O3bt3IyMjI+CdJyJqzrKzs7Ft2zYsXrz4tNfFt0REFKzq9WQzOjra/7/vam3atEFcXJx//m233Ybp06cjNjYWMTExmDJlCjIyMhhnRERUw+TJk/Huu+/ik08+QYcOHfzzk5KS6v2GCKj9LRERUVML+DcIPfPMM7jqqqswfvx4XHzxxUhKSsJbb70V6M0QETVLlmVh8uTJWLp0KT766COkpaXZfp+ens43RER0RgmxAlWxM0BKSkrg8/kwdOhQf0ygFl8lu63F0sl5Ml5QiymTcYjaemWBbhnPpsVNyvVoxXXleuR2tALCMlZNixeVsX/atrU4zpq0otlyPSZFvOV65D4CPzwtd1uvW8FgLc5Tbkt7CiTPNVn8WeuvPG4m25Zjpx0TrYi7G1kcOjo62tFGzktNTXW0kZ8N7fyQhYcTEhJs0zWf1lWT8ZcmsaDynNaKbcv1auNZnYgD/HCMMjMzUVxcbFTgO5B+8YtfYNGiRXj77bfRo0cP/3yfz+ePPZ40aRLef/99LFiwwP+GCADWrl1rvJ3qa2lISEjQxKgGgttnH3CPva5ZH7o2u3btcm2jxalLJp9jkwLybl8EYVKw3SRvwaSN29+LM5HJrZJJAf+vvvrKtc2oUaNc2xw5csS1jVuBfpPcl7oK+Fd/+Y7JdbTB3yBERET1N2/ePADAsGHDbPPnz5+PiRMnAvjhDVGLFi0wfvx4VFRUICsrC7///e8buadERIHBm00iokZk8oQkIiICc+fOxdy5cxuhR0RE3gp4zCYRERERUbWgfbK5f/9+f6yAFh8i42C0OB4ZayDXo8XfyfVobdxiyrQYBxmr6FYHUGsjax9qyzSkxiPgjD2SbUxiO7T4QBlHJGPHZHwmoI+N5Bb7qdWOPHz4cJ19AZyxUzLm1CT+SosFlueIHE8t9kseAy1mS57TRUVFtum64m2qaSVy5HHp0qWLo01cXJxtun379rZpLfZL1tDUjvWxY8ds0yb1Rk1il2vGFJmMCxERBQavuERERETkGd5sEhEREZFneLNJRERERJ7hzSYREREReSZoE4SOHDniT+DQkjK0IuOSLDIqk1W0QroyscCkSKtM5DBJPtC27dY/bRmZPKElU8kkl5KSEtdty2mtSLJMytGSXOR6qotWV9PG12S/5RjLNocOHXLtizZWcj9lgXaZgAM490kmwQDuCVfJycmOZWTyjDyOgHO/5edC20c5dvIbbACga9eutmkt4UoWxpb7qB03bWwkWYhYrlfbJ3kuagltNRPCTAqDU3AyKVDvdt0uLCx0XYf80gJNx44dXdtU106ty4gRI1zbaNftmkwKrcsvXtCYfEYb6/PTmF9G4JYEW1pa6roOmYSqueyyy4z7VBeTsXH7sgC3ou+AWak2E3yySURERESe4c0mEREREXmGN5tERERE5JmgjdmsSYsPkbFpWhuTQuSSLGatFZ2W25LxQQ2Jx9TamMQYSlq8qNwHGcuqrVvGB2nxQjKWwyT+Qx43uY8aWSxcI4+JFlspt6XFdcl9kvGY2jklj6VWzFzGSsltawXb5ZhrbSR5bGX/ASAlJcU2fdZZZznayC8Q0M4ZOVbyPNPifGWckXbOuB0nbXxlX7Rt14x5dYtlIiKiwOGTTSIiIiLyDG82iYiIiMgzvNkkIiIiIs/wZpOIiIiIPBO0CULHjh3zJxNoyT8miQaSTJ7RlpGFs7Xi8W5JLSZJL1ob2T+TZBqZ2KMlCMnx0xJNZNKFTAiRBbwBZ7KM1j+3xB0t6cmkqLskk4hMkmm0/sptFRQU2Ka1/sptaeeMXE5+UYGWrNSlSxfbtHZsExMTbdMdOnSwTctEH8D52RkwYICjjaQV9pWfHzl2WlKRyRceyKLScrq4uNixjNwnt0QuJgid2dwKXpsUxN6/f79rm7y8PNc2GzdudG1jUjg7Ojq6zt9rnzfptttuc22Tnp7u2uaCCy5wbeOW0Pr999+7rsOkwLxJG5Mk0y1bttT5+xtvvNF1HSZfAmPSJlCF1N1oyZaSyTXbBJ9sEhEREZFneLNJRERERJ7hzSYREREReSZoYzaPHz/uj6vR4qtknIYWfynjEWSMnkksqBY74Rbvo8WQaLFzktxPWSS7obGgMnZGGyu3GFgtDlH2TysgLsdPjo1WNF8eN1loHzArpC7J2EotBurYsWO26SNHjtimCwsLHcuYxNYePXrUNi1jiLR9lHGdWtzROeecY5uWxyA+Pt6xjEmMqSxCr53TclsyFkmLTZL7qZ2LcjkZM6SdM7IAvhZnVPNcbKyYKCIi4pNNIiIiIvIQbzaJiIiIyDO82SQiIiIiz4RYQRa8VFJSAp/PZ5un1Q+TMXtajJaMnZNxieHh4a7LmMSLynhBk5qfWoyejEXTYtMkud/aemUbLVZVbkvGLmoxkXKsTI6BHDstvlHO09rIY2kSzyr3W6sDJ8fBJF7QrT4qAJSWltqm5XhqxyQlJcU2nZqa6tpfk5pzcqy0WFv52dDiReV5LmNBtdhm+VnWjoHsnzaekozzlDGcct7Ro0cxYsQIFBcXG9UnbI6qr6UhISFGdSXPJIH4s2ZyHTeJFTdZTyDqvpocY5OaiYE6V9zqbGp/qySTXAeT8TXZp7Kysjp/r11TJJPzwaSNVie4IW3cPgcm50Nd67AsC5ZlGV1H+WSTiIiIiDzDm00iIiIi8gxvNomIiIjIM7zZJCIiIiLPBG1R94iICH9Qr1YcWgb8agkWcp4MJNYCdWXArJZw4VYsXiODpbXA3PLyctu0TIyQRb4BZ4KINg4mCTcy2Nhkn+R4mhTAl9PaMZDr0YLn3RKEtOB0uYzWxm2fTMZXJsoAziLpbkX0tTZaooxbApZJkpnWX9kfrX9uwefa74uKimzT2udAJgjKRAJZIB9wXiO0Y1vz86MdRyIi8gafbBIRERGRZ3izSURERESeqdfN5sMPP+yv2Vb907NnT//vjx8/juzsbMTFxSEqKgrjx49Hfn5+wDtNRERERM1DvWM2e/fujQ8//PC/K6gRMzZt2jS89957WLJkCXw+HyZPnoxx48bhs88+q3fHWrZs6Y9Z0+KrTAq5usVfmqzDZL0y3lErICuXMYmJlG202FUZ56nF30nR0dGu25LxdtpYyVhKk0LKJm1MCr+7xdxpx0Dug9ZGxpDK4uYmBeY1bjGx2npNxqqioqLO9WgxxzKe0eSLC7SCxzKWUsaUasXiTWKtCwsLbdN79uyxTcfHxzuWkee9FtdZ8xiYFESm5isQhclN4npNtmOynkAUkA9UUfdAxTO7fRmDSXFz+fdNY/KlDNr1QJLXUslk7EzamHzxhkmRf+36Krkdg8b8Tp96v0Zv1aoVkpKS/D/V3yxSXFyMl19+GbNnz8bw4cORnp6O+fPnY+3atVi/fn3AO05E1Bzl5ORg0KBBiI6ORkJCAsaOHYvt27fb2gwbNszxFumuu+5qoh4TEZ2eet9s7tixAykpKejcuTNuuukm7N69GwCwefNmnDx5EpmZmf62PXv2RMeOHbFu3bpa11dRUYGSkhLbDxHRmWrNmjXIzs7G+vXrsXLlSpw8eRIjR450PD2+/fbbceDAAf/Pk08+2UQ9JiI6PfV6jT548GAsWLAAPXr0wIEDBzBr1ixcdNFF2LZtG/Ly8hAWFoa2bdvalklMTEReXl6t68zJycGsWbMa1HkiouZm+fLltukFCxYgISEBmzdvxsUXX+yf37p1ayQlJTV294iIAq5eTzZHjRqFa665Bv369UNWVhbef/99FBUV4fXXX29wB2bMmIHi4mL/j4zPIiI6kxUXFwMAYmNjbfNfffVVtG/fHn369MGMGTNc49f4loiIgtVpFXVv27Ytunfvjp07d+Kyyy7DiRMnUFRUZHu6mZ+fX+f/zsPDwx1JGMAPxairg21lwkD1tmvSAnPdCmdrAcqyCLZJIoFcrxZgLYOPtW3LhAstIUgyCUiWSSNaIHRpaWmd29YClmWRea2AuBwLk+Lbsn/yWGtkoLMWLC/naYHabuvRAqpNCsrL422SrCbPPa2/8rMjx1s7f2Ubk3NI+0IBGXwuz19ZwB0wO5ZuRfIPHTrkWEZeI2QRfcAeUG+SnNAYqqqqMHXqVAwZMgR9+vTxz7/xxhvRqVMnpKSk4KuvvsKvfvUrbN++HW+99Vat6+JbIiIKVqd1s3n06FHs2rULN998M9LT0xEaGopVq1Zh/PjxAIDt27dj9+7dyMjICEhniYjOJNnZ2di2bRs+/fRT2/w77rjD/+++ffsiOTkZI0aMwK5du9ClSxd1XTNmzMD06dP90yUlJUhNTfWm40RE9VCvm817770Xo0ePRqdOnbB//3489NBDaNmyJW644Qb4fD7cdtttmD59OmJjYxETE4MpU6YgIyMDF1xwgVf9JyJqliZPnox3330Xn3zyCTp06FBn28GDBwMAdu7cWevNZm1viYiImlq9bjb37t2LG264AYWFhYiPj8fQoUOxfv16f927Z555Bi1atMD48eNRUVGBrKws/P73v/ek40REzZFlWZgyZQqWLl2K1atXIy0tzXWZrVu3AgCSk5M97h0RUeCFWI1Z1dNASUkJfD4f2rdv748l0wqTmhRFd4tF09Yh4+K0WEW3IdNiLeW2tBg4Nyb7rMULNqSgvAm5Xm2sZH9kXKcW5ynnmRwnGfNoUszcpOi4PE7asZWJHSZPl0ziJOV4yphIwDlWJgWDZf+0eFGT9cp5cqy046btg9t65edNi4mWyTAyBhmw73dZWRkuv/xyFBcXGxWFDqRf/OIXWLRoEd5++2306NHDP9/n8yEyMhK7du3CokWLcMUVVyAuLg5fffUVpk2bhg4dOmDNmjXG26m+llbX6aQzW6CK0Jvw+XyubbQvgqivQH1RiAm3sTHZZ5McD5NC9SbHsjEL9NfGsixYlmV0HQ3MXQcRERmZN28egB8Kt9c0f/58TJw4EWFhYfjwww8xZ84clJWVITU1FePHj8cDDzzQBL0lIjp9vNkkImpEbk9iUlNT6/UEk4go2NX7G4SIiIiIiEzxZpOIiIiIPNMsXqNrSSQyUUNLRpDBsSbF12VShklxcLkeLVBWFirXEk1k/7TEDUlLypHk2JgsI2mJRyZt3JKRtOLaJv2TyT1yrLREFJNAcrke2RdtH2XAt0n/G5JEdOzYMUcbt21pSVAmRd1Ngs/l50Am8mmfW5k0oJ0f8pyQ01rf5GdOW++RI0f8/9a+2ICIiLzBJ5tERERE5BnebBIRERGRZ3izSURERESeCdqYzVOnTvljwrT4KxknpxVJlzFlMh5Pixd0i8fUlpNFqLV4MLleLfZPxt81JLbSZBmtjRxjOW0S32pSoF2OlUlsoEYef5O4VLci5ICzv/K4acdWxkVqbeS25TlkEk9qEpcs2xw9etSxjIwX1eI6tZhiN3IftGNgUtRfFkY2iReW8azaWEVHR/v/zSLndKZp6LW0IYqLixttW24a67NcM+a7NoEqrG/y96Axj3cgNK/eEhEREVGzwptNIiIiIvIMbzaJiIiIyDNBG7NZWVlZZ2yDjMmSMXGAewykFi8m22ixazKeQsbfafUxTWJBZRs5rfXFJJ7NLa6vtnluTJZxqxWqHWOTYyvjVeR6tHhBOU+Li5F1IGU8oxbn6XY+AM59km20upsydlGL0ZHblueI1he5Xq2N3JbJeuTnyaROrNbGrQ6o9tmR29aOf81zhDGbRESNh082iYiIiMgzvNkkIiIiIs/wZpOIiIiIPMObTSIiIiLyTNAmCLVq1cofxG+ScKMV0pbLyUQDLYlAJkJoSRlyObkdk6QHjVxOLqMlA8n+aUk7JvvdkALyMinj+PHjrsv4fL461wE4E4K08ZTz5Nho492QIrhyPdo+yqQc7TjJeSbJSnIftW3L9Zoca7ktbazktrRtuyVpmSSQaZ/bmJiYOretjZXcB+28qrktLeGJiMwEU4JdYxVSN1lHYxZaN7mGBdNx4pNNIiIiIvIMbzaJiIiIyDO82SQiIiIizwRtzGZVVVW9irofPXrU0aZNmza2aRm/phXSNolnk3Fysri1toxXRdNlG5OC7VpMoRwbk0LwbuvQ5smi6doysbGxtmkt/k6Sx81kH7Xj71agX1vGZKzKy8tt03KftP7K898kZlf2xaRovtZGjpXWRsbWlpSU2KZlQXzA+TmVn1HA+XmS29HWa/JlDDWPrUl8MRERBQafbBIRERGRZ3izSURERESe4c0mEREREXmGN5tERERE5JmgTRA6deqUPylBK5QqE0JksXDAmQQgEwtMikNr5HIyiUQmNGjLaAkMMmmkIck/moYUfjdJeglEQXltmYMHD9a5DOBM1DEpBG8yViYF+iWZuKMl8shzUY6vTIrRaMk0clsykUdbr1sxdm2elqTllpSlFWyXx00rTCzHXLY5dOiQYxk5Nm7rlQlbRNQ8BaqQultRdxOBKjAfTMXYA4VPNomIiIjIM7zZJCIiIiLP8GaTiIiIiDwTtDGbrVq18sctmMTAaY4dO2abNonrk3EbJoW/5Xq1eDFJi7+TsScmsSgmy5i0kfGMMqbUpFC9dpwkOVYm46vFHcoYXbc4P8AZB2NynOQy2jjI9WgxpnJs5Dho8UJyfE3iL6Ojox1tJJM4VHlcTGKIGvJFAFrssltRd229chm3NiYxskREFBh8sklEREREnuHNJhERERF5pt43m/v27cPPfvYzxMXFITIyEn379sWmTZv8v7csCzNnzkRycjIiIyORmZmJHTt2BLTTRERERNQ81Ctm88iRIxgyZAguvfRSfPDBB4iPj8eOHTvQrl07f5snn3wSzz33HBYuXIi0tDQ8+OCDyMrKwrfffqvW6qtNixYt6qyzKWPKtDi5tm3b2qaPHj1qm46KinIsYxLXJ+fJeDutvzExMY55bkxiNmWcnLaMjIvTjoNsI8dGi60z6Z+MnZNjpcXOmcQzFhYW2qZjY2PrXIemITGx2nkm91GL65Trkfsta8ACZjGlss2RI0dcl5Hb0j4Hcp+0mE23mqTaMvJYmoynZHIuuo2dydgS0Y9HIGpbBqrm55moXiPzxBNPIDU1FfPnz8f555+PtLQ0jBw5El26dAHwwx+SOXPm4IEHHsCYMWPQr18//OUvf8H+/fuxbNkyL/pPRNSszJs3D/369UNMTAxiYmKQkZGBDz74wP/748ePIzs7G3FxcYiKisL48eORn5/fhD0mIjo99brZfOeddzBw4EBcc801SEhIwLnnnos//vGP/t/n5uYiLy8PmZmZ/nk+nw+DBw/GunXr1HVWVFSgpKTE9kNEdKbq0KEDHn/8cWzevBmbNm3C8OHDMWbMGHzzzTcAgGnTpuHvf/87lixZgjVr1mD//v0YN25cE/eaiKjh6nWz+e9//xvz5s1Dt27dsGLFCkyaNAl33303Fi5cCADIy8sDACQmJtqWS0xM9P9OysnJgc/n8/+kpqY2ZD+IiJqF0aNH44orrkC3bt3QvXt3/Pa3v0VUVBTWr1+P4uJivPzyy5g9ezaGDx+O9PR0zJ8/H2vXrsX69eubuutERA1Sr5vNqqoqnHfeeXjsscdw7rnn4o477sDtt9+OF198scEdmDFjBoqLi/0/e/bsafC6iIiak8rKSixevBhlZWXIyMjA5s2bcfLkSdvboZ49e6Jjx461vh2qxrdERBSs6pUglJycjF69etnmnXPOOXjzzTcBAElJSQCA/Px8JCcn+9vk5+djwIAB6jrDw8PVwt4tWrSoV7CtlkQikwBkIkRDC3+7FRBv3bq1YxmTRB7ZxqRItkyw0AqruxVsr22eG5N9cgu61pJp5DLaPsnjLf+wtm/f3rGM7J82nnKePLbaPpoUCJf7JLdjUgi+IbR9lGNXXFzsaCOL5mtJZTIJS/bX5LNTUVHhul6Tgu1yfLXxrLkeky+F8NLXX3+NjIwMHD9+HFFRUVi6dCl69eqFrVu3IiwszJHcWNfboWo5OTmYNWuWh70mImqYej3ZHDJkCLZv326b991336FTp04AgLS0NCQlJWHVqlX+35eUlGDDhg3IyMgIQHeJiJq/Hj16YOvWrdiwYQMmTZqECRMm4Ntvvz2tdfItEREFq3o92Zw2bRouvPBCPPbYY7j22mvx+eef46WXXsJLL70E4IenC1OnTsWjjz6Kbt26+UsfpaSkYOzYsV70n4io2QkLC0PXrl0BAOnp6di4cSOeffZZXHfddThx4gSKiopsTzfz8/P9b45qU9tbIiKiplavJ5uDBg3C0qVL8dprr6FPnz74zW9+gzlz5uCmm27yt7nvvvswZcoU3HHHHRg0aBCOHj2K5cuX16vGJhHRj0lVVRUqKiqQnp6O0NBQ29uh7du3Y/fu3Xw7RETNVoilBTs2oZKSEvh8PsTGxvrj40ziG03iL2W8WFlZmWMZ+WRAGx4ZMyantRvrhsToNaRouhbnJ+MxTWIBG1KcVotVlWMux1eL6XQbX229bdq0cV2vjNltSOyfScF2t6LkgLP/WhF6eZxMCqvLbcvfA8590J6GyXnaPsnxNPkPpdxP7XMrP3NyH7TPjtwnbb9rxmyWl5dj4sSJKC4ubtAXLpyOGTNmYNSoUejYsSNKS0uxaNEiPPHEE1ixYgUuu+wyTJo0Ce+//z4WLFiAmJgYTJkyBQCwdu3aem2n+loaEhISkILVREQ1WZYFy7KMrqP1eo1ORESnp6CgALfccgsOHDgAn8+Hfv36+W80AeCZZ55BixYtMH78eFRUVCArKwu///3vm7jXREQNx5tNIqJG9PLLL9f5+4iICMydOxdz585tpB4REXmLX+RJRERERJ7hzSYREREReSZoX6OHhYX5Ey+0guMyIUBL5JHzZCFnLQlGJg3JxBNAL0Rdk5b00JAC7SaJJ3JstOQJE7J/MjnFJKGpvLzc0cYtYUU7bjI5RUtoioyMdF2PdOzYsTr7pm1L9kWuQ1uPVuRd7rdJApbb+aCtV46DltAkz2ntfJW0BBN5vOW5qCWMuRW3N6ElIsmx0a4ZNceTCTNERI2HTzaJiIiIyDO82SQiIiIizwTda/Tq14A1X/9prwLl60KT16gmyzSkjdt3mgPO13ZaGzcmr+dNxkF7hehWt1Tbtpxnsm35alhbRr6GbsjrY5OalA05BtrrWbltLeRA7oPJ2MllTOrNmryul/O0cZD90/apIa/EZZ3NhrxG12poyr5ooQw1w1+qwyGCrMxwQFXv25m8j0TUdOpzjQm6m83S0lIAP9SiCwZFRUVN3QUi8khpaSl8Pl9Td8MT1ddSgDecROQdk+to0H2DUFVVFfbv34/o6GiUlpYiNTUVe/bsafRv+fgxKCkp4fh6iOPrrdMZX8uyUFpaipSUlAZ9W1ZzUPNaGhISwvPRYxxfb3F8vdWQ8a3PdTTonmy2aNECHTp0APDfV2MxMTE8uTzE8fUWx9dbDR3fM/WJZrWa19KaeD56i+PrLY6vt+o7vqbX0TPzv/REREREFBR4s0lEREREngnqm83w8HA89NBDjsLaFBgcX29xfL3F8a0fjpe3OL7e4vh6y+vxDboEISIiIiI6cwT1k00iIiIiat54s0lEREREnuHNJhERERF5hjebREREROQZ3mwSERERkWeC9mZz7ty5OPvssxEREYHBgwfj888/b+ouNUs5OTkYNGgQoqOjkZCQgLFjx2L79u22NsePH0d2djbi4uIQFRWF8ePHIz8/v4l63Lw9/vjjCAkJwdSpU/3zOL6nZ9++ffjZz36GuLg4REZGom/fvti0aZP/95ZlYebMmUhOTkZkZCQyMzOxY8eOJuxx8OH1NHA++eQTjB49GikpKQgJCcGyZctsv+f52HD8e+WtefPmoV+/fv5vCcrIyMAHH3zg/72XYxuUN5t/+9vfMH36dDz00EP44osv0L9/f2RlZaGgoKCpu9bsrFmzBtnZ2Vi/fj1WrlyJkydPYuTIkSgrK/O3mTZtGv7+979jyZIlWLNmDfbv349x48Y1Ya+bp40bN+IPf/gD+vXrZ5vP8W24I0eOYMiQIQgNDcUHH3yAb7/9Fk8//TTatWvnb/Pkk0/iueeew4svvogNGzagTZs2yMrKwvHjx5uw58GD19PAKisrQ//+/TF37lz19zwfG45/r7zVoUMHPP7449i8eTM2bdqE4cOHY8yYMfjmm28AeDy2VhA6//zzrezsbP90ZWWllZKSYuXk5DRhr84MBQUFFgBrzZo1lmVZVlFRkRUaGmotWbLE3+af//ynBcBat25dU3Wz2SktLbW6detmrVy50rrkkkuse+65x7Isju/p+tWvfmUNHTq01t9XVVVZSUlJ1lNPPeWfV1RUZIWHh1uvvfZaY3Qx6PF66h0A1tKlS/3TPB8Di3+vvNeuXTvrT3/6k+djG3RPNk+cOIHNmzcjMzPTP69FixbIzMzEunXrmrBnZ4bi4mIAQGxsLABg8+bNOHnypG28e/bsiY4dO3K86yE7OxtXXnmlbRwBju/peueddzBw4EBcc801SEhIwLnnnos//vGP/t/n5uYiLy/PNr4+nw+DBw/m+ILX08bG8zGw+PfKO5WVlVi8eDHKysqQkZHh+dgG3c3moUOHUFlZicTERNv8xMRE5OXlNVGvzgxVVVWYOnUqhgwZgj59+gAA8vLyEBYWhrZt29racrzNLV68GF988QVycnIcv+P4np5///vfmDdvHrp164YVK1Zg0qRJuPvuu7Fw4UIA8I8hrxc6Xk8bF8/HwOHfK298/fXXiIqKQnh4OO666y4sXboUvXr18nxsW532GqjZyM7OxrZt2/Dpp582dVfOGHv27ME999yDlStXIiIioqm7c8apqqrCwIED8dhjjwEAzj33XGzbtg0vvvgiJkyY0MS9IyKv8O+VN3r06IGtW7eiuLgYb7zxBiZMmIA1a9Z4vt2ge7LZvn17tGzZ0pEBlZ+fj6SkpCbqVfM3efJkvPvuu/j444/RoUMH//ykpCScOHECRUVFtvYcbzObN29GQUEBzjvvPLRq1QqtWrXCmjVr8Nxzz6FVq1ZITEzk+J6G5ORk9OrVyzbvnHPOwe7duwHAP4a8Xuh4PW1cPB8Dg3+vvBMWFoauXbsiPT0dOTk56N+/P5599lnPxzbobjbDwsKQnp6OVatW+edVVVVh1apVyMjIaMKeNU+WZWHy5MlYunQpPvroI6Slpdl+n56ejtDQUNt4b9++Hbt37+Z4GxgxYgS+/vprbN261f8zcOBA3HTTTf5/c3wbbsiQIY7SJ9999x06deoEAEhLS0NSUpJtfEtKSrBhwwaOL3g9bWw8H08P/141vqqqKlRUVHg/tqedYuSBxYsXW+Hh4daCBQusb7/91rrjjjustm3bWnl5eU3dtWZn0qRJls/ns1avXm0dOHDA/1NeXu5vc9ddd1kdO3a0PvroI2vTpk1WRkaGlZGR0YS9bt5qZqNbFsf3dHz++edWq1atrN/+9rfWjh07rFdffdVq3bq19corr/jbPP7441bbtm2tt99+2/rqq6+sMWPGWGlpadaxY8easOfBg9fTwCotLbW2bNlibdmyxQJgzZ4929qyZYv1n//8x7Isno+ng3+vvHX//fdba9assXJzc62vvvrKuv/++62QkBDrH//4h2VZ3o5tUN5sWpZlPf/881bHjh2tsLAw6/zzz7fWr1/f1F1qlgCoP/Pnz/e3OXbsmPWLX/zCateundW6dWvr6quvtg4cONB0nW7m5M0mx/f0/P3vf7f69OljhYeHWz179rReeukl2++rqqqsBx980EpMTLTCw8OtESNGWNu3b2+i3gYnXk8D5+OPP1avqRMmTLAsi+fj6eDfK2/9/Oc/tzp16mSFhYVZ8fHx1ogRI/w3mpbl7diGWJZlnf7zUSIiIiIip6CL2SQiIiKiMwdvNomIiIjIM7zZJCIiIiLP8GaTiIiIiDzDm00iIiIi8gxvNomIiIjIM7zZJCIiIiLP8GaTiIiIiDzDm00iIiIi8gxvNomIiIjIM7zZJCIiIiLP/H+GLXjIr0ylvwAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 800x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import os\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import keras\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense, Activation, Flatten, Reshape\n",
"from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\n",
"from keras import regularizers\n",
"\n",
"# Set your data directory\n",
"data_dir = '/content/drive/MyDrive/UNet Dataset/Cardiac Dataset/train'\n",
"image_dir = os.path.join(data_dir, \"images\")\n",
"mask_dir = os.path.join(data_dir, \"masks\")\n",
"\n",
"# List files\n",
"image_names = sorted(os.listdir(image_dir))\n",
"image_names = [name for name in image_names if name in mask_names]\n",
"mask_names = sorted(os.listdir(mask_dir))\n",
"\n",
"# Make sure that image_names and mask_names correspond one-to-one\n",
"# If they differ, ensure file naming consistency before running.\n",
"assert len(image_names) == len(mask_names), \"Number of images and masks do not match.\"\n",
"\n",
"# Desired shapes\n",
"input_image_shape = (64, 64) # For the CNN input\n",
"mask_shape = (32, 32) # For the CNN output\n",
"\n",
"X = []\n",
"Y = []\n",
"\n",
"for img_name, msk_name in zip(image_names, mask_names):\n",
" img_path = os.path.join(image_dir, img_name)\n",
" msk_path = os.path.join(mask_dir, msk_name)\n",
"\n",
" # Read images in grayscale\n",
" img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)\n",
" msk = cv2.imread(msk_path, cv2.IMREAD_GRAYSCALE)\n",
"\n",
" # Resize to desired shapes\n",
" img = cv2.resize(img, input_image_shape)\n",
" msk = cv2.resize(msk, mask_shape)\n",
"\n",
" # Normalize (if you want to normalize)\n",
" img = img.astype(np.float32) / 255.0\n",
" msk = msk.astype(np.float32) / 255.0\n",
"\n",
" # Add channel dimension\n",
" img = np.expand_dims(img, axis=-1) # (64,64,1)\n",
" msk = np.expand_dims(msk, axis=-1) # (32,32,1)\n",
"\n",
" X.append(img)\n",
" Y.append(msk)\n",
"\n",
"X = np.array(X)\n",
"Y = np.array(Y)\n",
"\n",
"print('Dataset shape :', X.shape, Y.shape) # X: (N,64,64,1), Y: (N,32,32,1)\n",
"\n",
"# Create the CNN model\n",
"def create_model(input_shape=(64, 64, 1)):\n",
" \"\"\"\n",
" Simple convnet model: one convolution, one average pooling and one fully connected layer\n",
" ending with a reshape to (32,32,1).\n",
" \"\"\"\n",
" model = Sequential()\n",
" # Conv layer\n",
" model.add(Conv2D(100, (11,11), padding='valid', strides=(1, 1), input_shape=input_shape))\n",
" # Average Pooling\n",
" model.add(AveragePooling2D((6,6)))\n",
" # Flatten/Reshape step\n",
" # After Conv+Pool:\n",
" # Input: (64x64x1) -> Conv(11x11): (54x54x100) -> AvgPool(6x6): (9x9x100) = 8100 features\n",
" model.add(Reshape((8100,))) # Flatten to (8100,)\n",
" model.add(Dense(1024, activation='sigmoid', kernel_regularizer=regularizers.l2(0.0001)))\n",
" # Now we have (1024,). We want (32,32,1):\n",
" # 32*32 = 1024, so we reshape to (32,32,1)\n",
" model.add(Reshape((32,32,1)))\n",
" return model\n",
"\n",
"m = create_model()\n",
"m.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])\n",
"print('Model Summary:')\n",
"m.summary()\n",
"\n",
"# Train the model\n",
"epochs = 20\n",
"batch_size = 16\n",
"history = m.fit(X, Y, batch_size=batch_size, epochs=epochs, validation_split=0.2)\n",
"\n",
"# Plot training and validation loss\n",
"plt.figure(figsize=(10,5))\n",
"plt.plot(history.history['loss'], label='Training Loss')\n",
"plt.plot(history.history['val_loss'], label='Validation Loss', linestyle='--')\n",
"plt.title(\"Learning Curve\")\n",
"plt.xlabel(\"Epochs\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.legend()\n",
"plt.show()\n",
"\n",
"# Save the weights\n",
"m.save_weights(\"UNetW.weights.h5\")\n",
"\n",
"# Example prediction\n",
"y_pred = m.predict(X, batch_size=batch_size)\n",
"print(\"y_pred shape:\", y_pred.shape)\n",
"\n",
"# Visualize a sample\n",
"idx = 0\n",
"fig, ax = plt.subplots(1, 2, figsize=(8,4))\n",
"ax[0].imshow(X[idx].reshape(64,64), cmap='gray')\n",
"ax[0].set_title('Input Image')\n",
"ax[1].imshow(y_pred[idx].reshape(32,32), cmap='gray')\n",
"ax[1].set_title('Predicted Mask')\n",
"plt.show()\n"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 0
}