wko-on-cloud-n/unet.ipynb

204 lines
8.7 KiB
Plaintext
Raw Normal View History

2022-02-16 16:51:52 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"import shutil\n",
"import tensorflow as tf\n",
"from tensorflow.keras import backend as K\n",
"from tensorflow.keras.layers import Activation, Lambda, GlobalAveragePooling2D, concatenate\n",
"from tensorflow.keras.layers import UpSampling2D, Conv2D, Dropout, MaxPooling2D, Conv2DTranspose\n",
"from tensorflow.keras.layers import Dense, Flatten, Input\n",
"from tensorflow.keras.models import Model, Sequential, load_model\n",
"from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import cv2\n",
"import pickle\n",
"import random\n",
"import os"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"from src.metrics import IOU\n"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"IMG_HEIGHT = 512\n",
"IMG_WIDTH = 512\n",
"img_dir = '/images'"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"EPOCHS = 30\n",
"batch_size = 16"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Unet model"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"class Unet():\n",
" def __init__(self, num_classes=1):\n",
" self.num_classes=num_classes\n",
"\n",
" def build_model(self):\n",
" in1 = Input(shape=(IMG_HEIGHT, IMG_WIDTH, 3 ))\n",
"\n",
" conv1 = Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(in1)\n",
" conv1 = Dropout(0.2)(conv1)\n",
" conv1 = Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(conv1)\n",
" pool1 = MaxPooling2D((2, 2))(conv1)\n",
"\n",
" conv2 = Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(pool1)\n",
" conv2 = Dropout(0.2)(conv2)\n",
" conv2 = Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(conv2)\n",
" pool2 = MaxPooling2D((2, 2))(conv2)\n",
"\n",
" conv3 = Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(pool2)\n",
" conv3 = Dropout(0.2)(conv3)\n",
" conv3 = Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(conv3)\n",
" pool3 = MaxPooling2D((2, 2))(conv3)\n",
"\n",
" conv4 = Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(pool3)\n",
" conv4 = Dropout(0.2)(conv4)\n",
" conv4 = Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(conv4)\n",
"\n",
" up1 = concatenate([UpSampling2D((2, 2))(conv4), conv3], axis=-1)\n",
" conv5 = Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(up1)\n",
" conv5 = Dropout(0.2)(conv5)\n",
" conv5 = Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(conv5)\n",
" \n",
" up2 = concatenate([UpSampling2D((2, 2))(conv5), conv2], axis=-1)\n",
" conv6 = Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(up2)\n",
" conv6 = Dropout(0.2)(conv6)\n",
" conv6 = Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(conv6)\n",
"\n",
" up2 = concatenate([UpSampling2D((2, 2))(conv6), conv1], axis=-1)\n",
" conv7 = Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(up2)\n",
" conv7 = Dropout(0.2)(conv7)\n",
" conv7 = Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(conv7)\n",
" segmentation = Conv2D(self.num_classes, (1, 1), activation='sigmoid', name='seg')(conv7)\n",
" #segmentation = Conv2D(3, (1, 1), activation='sigmoid', name='seg')(conv7)\n",
" model = Model(inputs=[in1], outputs=[segmentation])\n",
"\n",
" return model\n",
"\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"from src.loss import jaccard_loss"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'jaccard_loss' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb Cell 7'\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=0'>1</a>\u001b[0m model \u001b[39m=\u001b[39m Unet(num_classes\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m)\u001b[39m.\u001b[39mbuild_model()\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=2'>3</a>\u001b[0m compile_params \u001b[39m=\u001b[39m{\n\u001b[0;32m----> <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=3'>4</a>\u001b[0m \u001b[39m'\u001b[39m\u001b[39mloss\u001b[39m\u001b[39m'\u001b[39m:jaccard_loss(smooth\u001b[39m=\u001b[39m\u001b[39m90\u001b[39m), \n\u001b[1;32m <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=4'>5</a>\u001b[0m \u001b[39m'\u001b[39m\u001b[39moptimizer\u001b[39m\u001b[39m'\u001b[39m:\u001b[39m'\u001b[39m\u001b[39mrmsprop\u001b[39m\u001b[39m'\u001b[39m,\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=5'>6</a>\u001b[0m \u001b[39m'\u001b[39m\u001b[39mmetrics\u001b[39m\u001b[39m'\u001b[39m:[IOU]\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=6'>7</a>\u001b[0m }\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=9'>10</a>\u001b[0m model\u001b[39m.\u001b[39mcompile(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mcompile_params)\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/patrycjalazna/Desktop/wko-projekt/unet.ipynb#ch0000003?line=11'>12</a>\u001b[0m tf\u001b[39m.\u001b[39mkeras\u001b[39m.\u001b[39mutils\u001b[39m.\u001b[39mplot_model(model, show_shapes\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n",
"\u001b[0;31mNameError\u001b[0m: name 'jaccard_loss' is not defined"
]
}
],
"source": [
"model = Unet(num_classes=1).build_model()\n",
"\n",
"compile_params ={\n",
" 'loss':jaccard_loss(smooth=90), \n",
" 'optimizer':'rmsprop',\n",
" 'metrics':[IOU]\n",
" }\n",
" \n",
" \n",
"model.compile(**compile_params)\n",
"\n",
"tf.keras.utils.plot_model(model, show_shapes=True)\n",
"\n",
"model_name = \"models/unet.h5\"\n",
"\n",
"modelcheckpoint = ModelCheckpoint(model_name,\n",
" monitor='val_loss',\n",
" mode='auto',\n",
" verbose=1,\n",
" save_best_only=True)\n",
"\n",
"\n",
"history = model.fit_generator(train_gen,\n",
" validation_data=val_gen,\n",
" epochs=EPOCHS,\n",
" steps_per_epoch=100,\n",
" validation_steps = 100,\n",
" shuffle=True,\n",
" validation_freq=1\n",
")"
]
}
],
"metadata": {
"interpreter": {
"hash": "1be0d4179f0eed29061aece4de36a3b887fc5990f515aa1f08bfa33b9ed547bc"
},
"kernelspec": {
"display_name": "Python 3.9.7 64-bit ('widzenie-komputerowe-env': conda)",
"language": "python",
"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.9.7"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}