{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.9","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":8089,"databundleVersionId":44321,"sourceType":"competition"},{"sourceId":19989,"databundleVersionId":1160143,"sourceType":"competition"}],"dockerImageVersionId":30056,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<div align='center'><font size=\"5\" color='#353B47'>Image Segmentation</font></div>\n<div align='center'><font size=\"4\" color=\"#353B47\">Using U-Net with Keras</font></div>\n<br>\n<hr>","metadata":{}},{"cell_type":"markdown","source":"## Identifying the cells’ nuclei","metadata":{}},{"cell_type":"markdown","source":"**<font color=\"#5963ab\" size=\"4\">Objective</font>**\n\n> This notebook is dedicated to implementing the U-Net algorithm, a specialized convolutional neural network architecture, to perform a task of image segmentation accurately and efficiently.","metadata":{}},{"cell_type":"markdown","source":"## <div id=\"summary\">Table of contents</div>\n\n**<font size=\"2\"><a href=\"#chap1\">1. Introduction</a></font>**\n**<br><font size=\"2\"><a href=\"#chap2\">2. Load Data</a></font>**\n**<br><font size=\"2\"><a href=\"#chap3\">3. Get Masks</a></font>**\n**<br><font size=\"2\"><a href=\"#chap4\">4. Training Model</a></font>**\n**<br><font size=\"2\"><a href=\"#chap5\">5. Predict and Visualize</a></font>**","metadata":{}},{"cell_type":"markdown","source":"# <div id=\"chap1\"><h1 style=\"color:white;background:#5963ab;border-radius:5px;padding:30px;font-family:'Arial', cursive;font-size:50px;text-align:center\">Introduction</h1></div>","metadata":{}},{"cell_type":"markdown","source":"**<font color=\"#5963ab\" size=\"4\">What is a a U-net ?</font>**\n\n> The U-Net is a type of convolutional neural network (CNN) that's specifically designed for swift and accurate segmentation of images.","metadata":{}},{"cell_type":"markdown","source":"\n\n![](https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/u-net-architecture.png)\n\n> The illustration depicts the U-Net architecture, using 32x32 pixels at the lowest resolution as an example. In this diagram, each blue box represents a multi-channel feature map. The quantity of channels for each feature map is indicated above the corresponding box, while the spatial dimensions (x-y size) are indicated at the lower left corner of the box. Boxes in white denote feature maps that have been copied from a previous layer. The arrows present in the diagram symbolize various operations carried out in the architecture.\n>\n> Please note that while this illustration serves as an example of the U-Net architecture, the actual dimensions or layout of the layers can vary, depending on specific use cases or modifications to the architecture.","metadata":{}},{"cell_type":"markdown","source":"<div id=\"chap2\"><h1 style=\"color:white;background:#5963ab;border-radius:5px;padding:30px;font-family:'Arial', cursive;font-size:50px;text-align:center\">Setup</h1></div>","metadata":{}},{"cell_type":"code","source":"import keras\nprint(f\"Keras version: {keras.__version__}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T16:56:26.111338Z","iopub.execute_input":"2025-04-06T16:56:26.111759Z","iopub.status.idle":"2025-04-06T16:56:36.712675Z","shell.execute_reply.started":"2025-04-06T16:56:26.111667Z","shell.execute_reply":"2025-04-06T16:56:36.711750Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import tensorflow as tf\nimport zipfile\nimport numpy as np\nimport random\nimport os\nfrom tqdm import tqdm\nfrom skimage.io import imread, imshow\nfrom skimage.transform import resize\nimport matplotlib.pyplot as plt\n\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2025-04-06T16:56:36.714647Z","iopub.execute_input":"2025-04-06T16:56:36.714893Z","iopub.status.idle":"2025-04-06T16:56:38.206422Z","shell.execute_reply.started":"2025-04-06T16:56:36.714868Z","shell.execute_reply":"2025-04-06T16:56:38.205466Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SEED = 42\nnp.random.seed = SEED\n\nUNZIP_PATH = '../input/data-science-bowl-2018/'\nTRAIN_PATH = './train/'\nTEST_PATH = './test/'\n\nIMG_WIDTH = 128\nIMG_HEIGHT = 128\nIMG_CHANNELS = 3","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2025-04-06T16:56:38.207771Z","iopub.execute_input":"2025-04-06T16:56:38.208025Z","iopub.status.idle":"2025-04-06T16:56:38.211656Z","shell.execute_reply.started":"2025-04-06T16:56:38.208000Z","shell.execute_reply":"2025-04-06T16:56:38.211013Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<div id=\"chap2\"><h1 style=\"color:white;background:#5963ab;border-radius:5px;padding:30px;font-family:'Arial', cursive;font-size:50px;text-align:center\">Import data</h1></div>","metadata":{}},{"cell_type":"code","source":"# Unzip data\nwith zipfile.ZipFile(UNZIP_PATH + 'stage1_train.zip', 'r') as zip_ref:\n    zip_ref.extractall('./train')\n    \nwith zipfile.ZipFile(UNZIP_PATH + 'stage1_test.zip', 'r') as zip_ref:\n    zip_ref.extractall('./test')","metadata":{"execution":{"iopub.status.busy":"2025-04-06T16:56:38.212899Z","iopub.execute_input":"2025-04-06T16:56:38.213243Z","iopub.status.idle":"2025-04-06T16:56:43.324399Z","shell.execute_reply.started":"2025-04-06T16:56:38.213207Z","shell.execute_reply":"2025-04-06T16:56:43.323659Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\n# get list of all subfolders\ntrain_ids = next(os.walk(TRAIN_PATH))[1]\ntest_ids = next(os.walk(TEST_PATH))[1]","metadata":{"execution":{"iopub.status.busy":"2025-04-06T16:56:43.325406Z","iopub.execute_input":"2025-04-06T16:56:43.325678Z","iopub.status.idle":"2025-04-06T16:56:43.331392Z","shell.execute_reply.started":"2025-04-06T16:56:43.325653Z","shell.execute_reply":"2025-04-06T16:56:43.330374Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# define placeholders (also used to replace NaN in images to resize by 0)\nX_train = np.zeros((len(train_ids), IMG_HEIGHT, IMG_WIDTH, IMG_CHANNELS), dtype = np.uint8)\nY_train = np.zeros((len(train_ids), IMG_HEIGHT, IMG_WIDTH, 1), dtype = np.bool)","metadata":{"execution":{"iopub.status.busy":"2025-04-06T16:56:43.332631Z","iopub.execute_input":"2025-04-06T16:56:43.333004Z","iopub.status.idle":"2025-04-06T16:56:43.361544Z","shell.execute_reply.started":"2025-04-06T16:56:43.332978Z","shell.execute_reply":"2025-04-06T16:56:43.360899Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <div id=\"chap3\"><h1 style=\"color:white;background:#5963ab;border-radius:5px;padding:30px;font-family:'Arial', cursive;font-size:50px;text-align:center\">Get groundtruths</h1></div>","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"![image.png](attachment:4a070882-9270-4761-9f5e-15f541254f4a.png)\n\nAn input image has more than one masks, we need to combine all associated masks into a single mask image.","metadata":{},"attachments":{"4a070882-9270-4761-9f5e-15f541254f4a.png":{"image/png":"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"}}},{"cell_type":"code","source":"# Loop through all train_ids\nfor n, id_ in tqdm(enumerate(train_ids), total=len(train_ids)):  \n    \n    # Get the path to the image and mask directories\n    path = TRAIN_PATH + id_  \n    \n    # Read the image and keep the first IMG_CHANNELS channels\n    img = imread(path + '/images/' + id_ + '.png')[:, :, :IMG_CHANNELS]  \n    \n    # Resize the image to IMG_HEIGHT x IMG_WIDTH while keeping the pixel values (mode='constant')\n    img = resize(img, (IMG_HEIGHT, IMG_WIDTH), mode='constant', preserve_range=True)  \n    \n    # Store the processed image into the X_train array at index n\n    X_train[n] = img \n    \n    # Initialize an empty mask of dimensions IMG_HEIGHT x IMG_WIDTH x 1 with boolean values\n    mask = np.zeros((IMG_HEIGHT, IMG_WIDTH, 1), dtype=np.bool)  \n    \n    # Loop through each file in the masks directory\n    for mask_file in next(os.walk(path + '/masks/'))[2]:  \n        \n        # Read the mask file\n        mask_ = imread(path + '/masks/' + mask_file)\n        \n        # Resize the mask to IMG_HEIGHT x IMG_WIDTH while keeping the pixel values (mode='constant'), and add an extra dimension\n        mask_ = np.expand_dims(resize(mask_, (IMG_HEIGHT, IMG_WIDTH), mode='constant', preserve_range=True), axis=-1)\n        \n        # Merge all the masks associated with the same image by taking the maximum value at each pixel location\n        mask = np.maximum(mask, mask_)\n    \n    # Store the processed mask into the Y_train array at index n\n    Y_train[n] = mask","metadata":{"execution":{"iopub.status.busy":"2025-04-06T16:56:43.364011Z","iopub.execute_input":"2025-04-06T16:56:43.364326Z","iopub.status.idle":"2025-04-06T17:00:47.148878Z","shell.execute_reply.started":"2025-04-06T16:56:43.364283Z","shell.execute_reply":"2025-04-06T17:00:47.148049Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Y_train.shape","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:00:47.150628Z","iopub.execute_input":"2025-04-06T17:00:47.150857Z","iopub.status.idle":"2025-04-06T17:00:47.157359Z","shell.execute_reply.started":"2025-04-06T17:00:47.150834Z","shell.execute_reply":"2025-04-06T17:00:47.156524Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create an empty array for test images with dimensions as (number of test images, height, width, channels)\n# The datatype for the array is uint8 which can hold values from 0 to 255\nX_test = np.zeros((len(test_ids), IMG_HEIGHT, IMG_WIDTH, IMG_CHANNELS), dtype=np.uint8)\n\n# Initialize an empty list to store the original sizes of the test images\nsizes_test = []\n\n# Loop through all the test_ids\nfor n, id_ in tqdm(enumerate(test_ids), total=len(test_ids)):\n    \n    # Get the path to the test image\n    path = TEST_PATH + id_\n    \n    # Read the image and keep the first IMG_CHANNELS channels\n    img = imread(path + '/images/' + id_ + '.png')[:, :, :IMG_CHANNELS]\n    \n    # Append the original size of the image to sizes_test list\n    sizes_test.append([img.shape[0], img.shape[1]])\n    \n    # Resize the image to IMG_HEIGHT x IMG_WIDTH while keeping the pixel values\n    img = resize(img, (IMG_HEIGHT, IMG_WIDTH), mode='constant', preserve_range=True)\n    \n    # Store the processed image into the X_test array at index n\n    X_test[n] = img","metadata":{"execution":{"iopub.status.busy":"2025-04-06T17:00:47.158744Z","iopub.execute_input":"2025-04-06T17:00:47.159072Z","iopub.status.idle":"2025-04-06T17:00:48.359899Z","shell.execute_reply.started":"2025-04-06T17:00:47.159040Z","shell.execute_reply":"2025-04-06T17:00:48.359136Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <div id=\"chap4\"><h1 style=\"color:white;background:#5963ab;border-radius:5px;padding:30px;font-family:'Arial', cursive;font-size:50px;text-align:center\">Training Unet</h1></div>","metadata":{}},{"cell_type":"code","source":"# Implement a function for a convolution block\ndef conv_block(inputs, num_filters):\n    x = tf.keras.layers.Conv2D(num_filters, (3, 3), activation=\"relu\", \n                               kernel_initializer=\"he_normal\", padding=\"same\")(inputs)\n    x = tf.keras.layers.Dropout(0.1)(x)\n    x = tf.keras.layers.Conv2D(num_filters, (3, 3), activation=\"relu\", \n                               kernel_initializer=\"he_normal\", padding=\"same\")(x)\n    return x\n\n# Implement a function for the expanding path\ndef upsample_block(inputs, conv_prev, num_filters):\n    up = tf.keras.layers.Conv2DTranspose(num_filters, (2, 2), strides=(2, 2), padding=\"same\")(inputs)\n    concat = tf.keras.layers.concatenate([up, conv_prev])\n    conv = conv_block(concat, num_filters)\n    return conv","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:00:48.360932Z","iopub.execute_input":"2025-04-06T17:00:48.361154Z","iopub.status.idle":"2025-04-06T17:00:48.367173Z","shell.execute_reply.started":"2025-04-06T17:00:48.361132Z","shell.execute_reply":"2025-04-06T17:00:48.366347Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Inputs\ninputs = tf.keras.layers.Input((IMG_WIDTH, IMG_HEIGHT, IMG_CHANNELS))\n\n# Normalization\ns = tf.keras.layers.Lambda(lambda x: x/255.0)(inputs) \n\n# Contraction path\nc1 = conv_block(s, 16)\np1 = tf.keras.layers.MaxPooling2D((2, 2))(c1)\n\nc2 = conv_block(p1, 32)\np2 = tf.keras.layers.MaxPooling2D((2, 2))(c2)\n\nc3 = conv_block(p2, 64)\np3 = tf.keras.layers.MaxPooling2D((2, 2))(c3)\n\nc4 = conv_block(p3, 128)\np4 = tf.keras.layers.MaxPooling2D((2, 2))(c4)\n\nc5 = conv_block(p4, 256)\n\n# Expansive path\nc6 = upsample_block(c5, c4, 128)\nc7 = upsample_block(c6, c3, 64)\nc8 = upsample_block(c7, c2, 32)\nc9 = upsample_block(c8, c1, 16)\n\n# Output layer\noutputs = tf.keras.layers.Conv2D(1, (1, 1), activation='sigmoid')(c9)","metadata":{"execution":{"iopub.status.busy":"2025-04-06T17:00:48.368435Z","iopub.execute_input":"2025-04-06T17:00:48.368805Z","iopub.status.idle":"2025-04-06T17:00:54.208875Z","shell.execute_reply.started":"2025-04-06T17:00:48.368769Z","shell.execute_reply":"2025-04-06T17:00:54.208086Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Model\nmodel = tf.keras.Model(inputs=[inputs], outputs=[outputs])\n\n# Compilation\nmodel.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n\n# Summary\nmodel.summary()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:00:54.209973Z","iopub.execute_input":"2025-04-06T17:00:54.210248Z","iopub.status.idle":"2025-04-06T17:00:54.240404Z","shell.execute_reply.started":"2025-04-06T17:00:54.210221Z","shell.execute_reply":"2025-04-06T17:00:54.239621Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import keras\nprint(f\"Keras version: {keras.__version__}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:00:54.241586Z","iopub.execute_input":"2025-04-06T17:00:54.241802Z","iopub.status.idle":"2025-04-06T17:00:54.246383Z","shell.execute_reply.started":"2025-04-06T17:00:54.241780Z","shell.execute_reply":"2025-04-06T17:00:54.245640Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import keras\nkeras.utils.plot_model(\n        model,\n        #to_file=plot_filename,     # if you need specify file name here to save in it\n        show_shapes=True,          # Show layer output shapes\n        show_dtype=True,           # Show layer data types\n        show_layer_names=True,     # Show layer names\n        #show_layer_activations=True,# Show activation functions, new to Keras 3.0\n        dpi=50,\n        #show_trainable=True        # Show if layer is trainable, new to Keras 3.0\n    )","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:00:54.248277Z","iopub.execute_input":"2025-04-06T17:00:54.248492Z","iopub.status.idle":"2025-04-06T17:00:54.259486Z","shell.execute_reply.started":"2025-04-06T17:00:54.248471Z","shell.execute_reply":"2025-04-06T17:00:54.258818Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nlayers = [(layer, layer.name, layer.trainable) for layer in model.layers]\npd.DataFrame(layers, columns=['Layer Type', 'Layer Name', 'Layer Trainable'])  ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:00:54.260768Z","iopub.execute_input":"2025-04-06T17:00:54.261140Z","iopub.status.idle":"2025-04-06T17:00:54.308049Z","shell.execute_reply.started":"2025-04-06T17:00:54.261107Z","shell.execute_reply":"2025-04-06T17:00:54.307231Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Callbacks\ncheckpoint = tf.keras.callbacks.ModelCheckpoint('model.h5', verbose = 1, save_best_only = True)\ncallbacks = [\n    tf.keras.callbacks.EarlyStopping(patience = 5, monitor = 'val_loss'),\n    tf.keras.callbacks.TensorBoard(log_dir = 'logs')\n            ]","metadata":{"execution":{"iopub.status.busy":"2025-04-06T17:00:54.309004Z","iopub.execute_input":"2025-04-06T17:00:54.309202Z","iopub.status.idle":"2025-04-06T17:00:54.887594Z","shell.execute_reply.started":"2025-04-06T17:00:54.309183Z","shell.execute_reply":"2025-04-06T17:00:54.886595Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"results = model.fit(\n    X_train, \n    Y_train, \n    validation_split = 0.1, \n    batch_size = 16, \n    epochs = 25, \n    callbacks = callbacks)","metadata":{"execution":{"iopub.status.busy":"2025-04-06T17:00:54.888968Z","iopub.execute_input":"2025-04-06T17:00:54.889306Z","iopub.status.idle":"2025-04-06T17:01:41.820379Z","shell.execute_reply.started":"2025-04-06T17:00:54.889271Z","shell.execute_reply":"2025-04-06T17:01:41.819596Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <div id=\"chap5\"><h1 style=\"color:white;background:#5963ab;border-radius:5px;padding:30px;font-family:'Arial', cursive;font-size:50px;text-align:center\">Inference</h1></div>","metadata":{}},{"cell_type":"code","source":"# Predictions\nidx = random.randint(0, len(X_train))\n\npreds_train = model.predict(X_train[:int(X_train.shape[0]*0.9)], verbose = 1)\npreds_val = model.predict(X_train[int(X_train.shape[0]*0.9):], verbose = 1)\npreds_test = model.predict(X_test, verbose = 1)\n\npreds_train_t = (preds_train > 0.5).astype(np.uint8)\npreds_val_t = (preds_val > 0.5).astype(np.uint8)\npreds_test_t = (preds_test > 0.5).astype(np.uint8)","metadata":{"execution":{"iopub.status.busy":"2025-04-06T17:01:41.822476Z","iopub.execute_input":"2025-04-06T17:01:41.822857Z","iopub.status.idle":"2025-04-06T17:01:43.291897Z","shell.execute_reply.started":"2025-04-06T17:01:41.822819Z","shell.execute_reply":"2025-04-06T17:01:43.291176Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Function to display images\ndef display_images(image):\n    plt.imshow(image)\n    plt.axis('off')\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:01:43.293244Z","iopub.execute_input":"2025-04-06T17:01:43.293603Z","iopub.status.idle":"2025-04-06T17:01:43.297674Z","shell.execute_reply.started":"2025-04-06T17:01:43.293568Z","shell.execute_reply":"2025-04-06T17:01:43.296864Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Select a random index from training set\nix = random.randint(0, len(preds_train_t))\n\n# Display the input image\nprint(\"Input Image:\")\ndisplay_images(X_train[ix])\n\n# Display the ground truth mask\nprint(\"Ground Truth Mask:\")\ndisplay_images(np.squeeze(Y_train[ix]))\n\n# Display the predicted mask\nprint(\"Predicted Mask:\")\ndisplay_images(np.squeeze(preds_train_t[ix]))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:01:43.298691Z","iopub.execute_input":"2025-04-06T17:01:43.298907Z","iopub.status.idle":"2025-04-06T17:01:43.512725Z","shell.execute_reply.started":"2025-04-06T17:01:43.298885Z","shell.execute_reply":"2025-04-06T17:01:43.511951Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Select a random index from validation set\nix = random.randint(0, len(preds_val_t))\n\n# Calculate the index from where validation data starts\nval_data_start = int(X_train.shape[0] * 0.9)\n\n# Display the validation input image\nprint(\"Validation Input Image:\")\ndisplay_images(X_train[val_data_start:][ix])\n\n# Display the validation ground truth mask\nprint(\"Validation Ground Truth Mask:\")\ndisplay_images(np.squeeze(Y_train[val_data_start:][ix]))\n\n# Display the validation predicted mask\nprint(\"Validation Predicted Mask:\")\ndisplay_images(np.squeeze(preds_val_t[ix]))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-06T17:01:43.514050Z","iopub.execute_input":"2025-04-06T17:01:43.514343Z","iopub.status.idle":"2025-04-06T17:01:43.703009Z","shell.execute_reply.started":"2025-04-06T17:01:43.514300Z","shell.execute_reply":"2025-04-06T17:01:43.702146Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 🥰 Acknowledgements\nhttps://www.kaggle.com/code/bryanb/image-segmentation-u-net ","metadata":{}}]}