Download this file

1 lines (1 with data), 162.6 kB

{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":5555,"status":"ok","timestamp":1696793933468,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"},"user_tz":-780},"id":"y-7VzDSyJqfZ","outputId":"676ecb79-db64-4924-8929-2d5011b2cd8f"},"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting segmentation-models\n","  Downloading segmentation_models-1.0.1-py3-none-any.whl (33 kB)\n","Collecting keras-applications<=1.0.8,>=1.0.7 (from segmentation-models)\n","  Downloading Keras_Applications-1.0.8-py3-none-any.whl (50 kB)\n","\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m50.7/50.7 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting image-classifiers==1.0.0 (from segmentation-models)\n","  Downloading image_classifiers-1.0.0-py3-none-any.whl (19 kB)\n","Collecting efficientnet==1.0.0 (from segmentation-models)\n","  Downloading efficientnet-1.0.0-py3-none-any.whl (17 kB)\n","Requirement already satisfied: scikit-image in /usr/local/lib/python3.10/dist-packages (from efficientnet==1.0.0->segmentation-models) (0.19.3)\n","Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.10/dist-packages (from keras-applications<=1.0.8,>=1.0.7->segmentation-models) (1.23.5)\n","Requirement already satisfied: h5py in /usr/local/lib/python3.10/dist-packages (from keras-applications<=1.0.8,>=1.0.7->segmentation-models) (3.9.0)\n","Requirement already satisfied: scipy>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->efficientnet==1.0.0->segmentation-models) (1.11.3)\n","Requirement already satisfied: networkx>=2.2 in /usr/local/lib/python3.10/dist-packages (from scikit-image->efficientnet==1.0.0->segmentation-models) (3.1)\n","Requirement already satisfied: pillow!=7.1.0,!=7.1.1,!=8.3.0,>=6.1.0 in /usr/local/lib/python3.10/dist-packages (from scikit-image->efficientnet==1.0.0->segmentation-models) (9.4.0)\n","Requirement already satisfied: imageio>=2.4.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->efficientnet==1.0.0->segmentation-models) (2.31.5)\n","Requirement already satisfied: tifffile>=2019.7.26 in /usr/local/lib/python3.10/dist-packages (from scikit-image->efficientnet==1.0.0->segmentation-models) (2023.9.26)\n","Requirement already satisfied: PyWavelets>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->efficientnet==1.0.0->segmentation-models) (1.4.1)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from scikit-image->efficientnet==1.0.0->segmentation-models) (23.2)\n","Installing collected packages: keras-applications, image-classifiers, efficientnet, segmentation-models\n","Successfully installed efficientnet-1.0.0 image-classifiers-1.0.0 keras-applications-1.0.8 segmentation-models-1.0.1\n"]}],"source":["# Note: Importing segmentation models library may give you generic_utils error on TF2.x\n","# When the error shows up, click the __init__.py link in the error message and change..\n","# keras.utils.generic_utils.get_custom_objects().update(custom_objects)\n","# to\n","# keras.utils.get_custom_objects().update(custom_objects)\n","!pip install -U segmentation-models"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":279},"executionInfo":{"elapsed":28480,"status":"error","timestamp":1697234479747,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"},"user_tz":-780},"id":"e5I4yWc3Ksc9","outputId":"06c1514e-f52c-4f50-affe-cc8f4c716ce3"},"outputs":[{"output_type":"stream","name":"stdout","text":["2.13.1\n","2.13.0\n","Mounted at /content/drive\n"]},{"output_type":"error","ename":"SystemError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mSystemError\u001b[0m                               Traceback (most recent call last)","\u001b[0;32m<ipython-input-1-c64ddfb85770>\u001b[0m in \u001b[0;36m<cell line: 45>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     44\u001b[0m \u001b[0mdevice_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgpu_device_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     45\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdevice_name\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m'/device:GPU:0'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 46\u001b[0;31m     \u001b[0;32mraise\u001b[0m \u001b[0mSystemError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'GPU device not found'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     47\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Found GPU at: {}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mSystemError\u001b[0m: GPU device not found"]}],"source":["# Note: Importing segmentation models library may give you generic_utils error on TF2.x\n","# When the error shows up, click the __init__.py link in the error message and change..\n","# keras.utils.generic_utils.get_custom_objects().update(custom_objects)\n","# to\n","# keras.utils.get_custom_objects().update(custom_objects)\n","# Then save the init.py file and restart runtime and run this cell\n","\n","import segmentation_models as sm\n","import keras\n","import tensorflow\n","print(keras.__version__)\n","print(tensorflow.__version__)\n","#from keras.utils import normalize\n","from sklearn.model_selection import train_test_split\n","from keras.utils import to_categorical\n","# import tensorflow\n","# from tensorflow import keras\n","from keras.models import load_model\n","from keras.callbacks import ModelCheckpoint, EarlyStopping\n","from keras.metrics import MeanIoU\n","from keras.callbacks import Callback\n","\n","import os\n","import glob\n","import cv2\n","import numpy as np\n","from matplotlib import pyplot as plt\n","import nibabel as nib\n","from tqdm import tqdm\n","from google.colab import drive\n","\n","\n","from google.colab import drive\n","drive.mount('/content/drive',force_remount = True)\n","\n","drive_dir = \"/content/drive/My Drive\"\n","mount_dir = os.path.join(drive_dir, \"Colab Notebooks\")\n","base_dir = os.getcwd()\n","\n","assert os.path.exists(drive_dir) # if this fails, something went wrong with mounting GoogleDrive\n","if os.path.exists(mount_dir) is False:\n","    os.makedirs(mount_dir)\n","\n","device_name = tensorflow.test.gpu_device_name()\n","if device_name != '/device:GPU:0':\n","    raise SystemError('GPU device not found')\n","print('Found GPU at: {}'.format(device_name))"]},{"cell_type":"code","source":["import numpy\n","print(numpy.__version__)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"FO6NM_CABhyA","executionInfo":{"status":"ok","timestamp":1696379292771,"user_tz":-780,"elapsed":343,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"}},"outputId":"b2c35ba0-107f-4d16-e2df-0306338f7869"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["1.23.5\n"]}]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":40785,"status":"ok","timestamp":1697234719187,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"},"user_tz":-780},"id":"j548lZXYSAsE","outputId":"fd2680ad-d2ad-4b8a-afae-e70f8c2e1209"},"outputs":[{"output_type":"stream","name":"stdout","text":["Number of Patients:  5\n","Number of Segmentation Classes:  5\n","Data Augmentation: True\n","\n","\n","['/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_001_0000.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_004_0000.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_007_0000.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_011_0000.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_021_0000.nii.gz']\n","['/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_001.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_004.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_007.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_011.nii.gz', '/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_021.nii.gz']\n","\n","\n"]},{"output_type":"stream","name":"stderr","text":["\rReading in Training MRI Images:   0%|          | 0/3 [00:00<?, ?it/s]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_001_0000.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["\rReading in Training MRI Images:  33%|███▎      | 1/3 [00:02<00:04,  2.17s/it]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_004_0000.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["\rReading in Training MRI Images:  67%|██████▋   | 2/3 [00:05<00:02,  2.56s/it]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_007_0000.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["Reading in Training MRI Images: 100%|██████████| 3/3 [00:07<00:00,  2.49s/it]\n","Reading in Training Multi-Class Labelled Masks:   0%|          | 0/3 [00:00<?, ?it/s]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_001.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["\rReading in Training Multi-Class Labelled Masks:  33%|███▎      | 1/3 [00:00<00:01,  1.59it/s]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_004.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["\rReading in Training Multi-Class Labelled Masks:  67%|██████▋   | 2/3 [00:01<00:00,  1.19it/s]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_007.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["Reading in Training Multi-Class Labelled Masks: 100%|██████████| 3/3 [00:02<00:00,  1.03it/s]\n","Reading in Validation MRI Images:   0%|          | 0/1 [00:00<?, ?it/s]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/msk_021_0000.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["Reading in Validation MRI Images: 100%|██████████| 1/1 [00:01<00:00,  1.70s/it]\n","Reading in Validation Multi-Class Labelled Masks:   0%|          | 0/1 [00:00<?, ?it/s]"]},{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/msk_021.nii.gz\n"]},{"output_type":"stream","name":"stderr","text":["Reading in Validation Multi-Class Labelled Masks: 100%|██████████| 1/1 [00:00<00:00,  1.50it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","\n","Max pixel value in training data:  0.9777405261993408\n","Labels in the training mask:  [0 1 2 3 4]\n","\n","\n","------------------------------\n","Data Augmentation Starting...\n","------------------------------\n"]},{"output_type":"stream","name":"stderr","text":["100%|██████████| 1656/1656 [00:07<00:00, 230.52it/s]\n"]},{"output_type":"stream","name":"stdout","text":["Number of Augmentation per Input:  1\n","\n","\n","Shape of Augmented Images:  (1656, 256, 256, 1)\n","Shape of Augmented Masks:  (1656, 256, 256, 1)\n","\n","\n","Shape of Training Image Data:  (3312, 256, 256, 1)\n","Shape of Training Image Masks:  (3312, 256, 256, 1)\n","------------------------------\n","Completed Data Augmentation Stage!\n","------------------------------\n","\n","\n","Training Images Shape:  (1656, 256, 256, 3)\n","Training Labels Shape:  (1656, 256, 256, 1)\n","Validation Images Shape:  (501, 256, 256, 3)\n","Validation Labels Shape;:  (501, 256, 256, 1)\n"]}],"source":["os.chdir(\"/content/drive/MyDrive/Colab Notebooks\")\n","from data_augmentation import DataAugmentation\n","\n","# Parameters to change according to experiment\n","n_training_subjects = 3\n","n_classes = 5 #Number of classes for segmentation\n","training_augmentation = True\n","num_augmentations = 1\n","patient_index_training = [1,4,7,11,21]\n","\n","print(\"Number of Patients: \", len(patient_index_training))\n","print(\"Number of Segmentation Classes: \", n_classes)\n","print((\"Data Augmentation: {}\").format(training_augmentation))\n","print('\\n')\n","\n","image_names = glob.glob(\"/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/*.nii.gz\")\n","image_names.sort()\n","\n","\n","mask_names = glob.glob(\"/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/*.nii.gz\")\n","mask_names.sort()\n","\n","\n","image_names_train, mask_names_train = [], []\n","for i in range (len(image_names)):\n","  patient_index = int((image_names[i].split('_'))[-2])\n","  for x in range (len(patient_index_training)):\n","    if (patient_index == patient_index_training[x]):\n","      image_names_train.append(image_names[i])\n","      mask_names_train.append(mask_names[i])\n","image_names = image_names_train\n","mask_names = mask_names_train\n","\n","image_names_train = image_names[0:n_training_subjects]\n","mask_names_train = mask_names[0:n_training_subjects]\n","\n","image_names_validation = image_names[n_training_subjects+1:]\n","mask_names_validation = mask_names[n_training_subjects+1:]\n","\n","\n","\n","print(image_names)\n","print(mask_names)\n","print('\\n')\n","\n","for image in tqdm(image_names_train, desc = 'Reading in Training MRI Images'):\n","  print(image)\n","  img = nib.load(image)\n","  img_data = img.get_fdata()\n","  if (image == image_names_train[0]):\n","    img_stack_train = img_data\n","  else:\n","    img_stack_train = np.concatenate((img_stack_train, img_data), axis = 0)\n","\n","\n","for mask in tqdm(mask_names_train, desc = 'Reading in Training Multi-Class Labelled Masks'):\n","  print(mask)\n","  msk = nib.load(mask)\n","  msk_data = msk.get_fdata()\n","  if (mask == mask_names_train[0]):\n","    msk_stack_train = msk_data\n","  else:\n","    msk_stack_train = np.concatenate((msk_stack_train, msk_data), axis = 0)\n","msk_stack_train = msk_stack_train.astype(np.uint8)\n","\n","\n","for image in tqdm(image_names_validation, desc = 'Reading in Validation MRI Images'):\n","  print(image)\n","  img = nib.load(image)\n","  img_data = img.get_fdata()\n","  if (image == image_names_validation[0]):\n","    img_stack_validation = img_data\n","  else:\n","    img_stack_validation = np.concatenate((img_stack_validation, img_data), axis = 0)\n","\n","\n","for mask in tqdm(mask_names_validation, desc = 'Reading in Validation Multi-Class Labelled Masks'):\n","  print(mask)\n","  msk = nib.load(mask)\n","  msk_data = msk.get_fdata()\n","  if (mask == mask_names_validation[0]):\n","    msk_stack_validation = msk_data\n","  else:\n","    msk_stack_validation = np.concatenate((msk_stack_validation, msk_data), axis = 0)\n","msk_stack_validation = msk_stack_validation.astype(np.uint8)\n","\n","\n","\n","print('\\n')\n","print(\"Max pixel value in training data: \", img_stack_train.max())\n","print(\"Labels in the training mask: \", np.unique(msk_stack_train))\n","\n","\n","if (training_augmentation == True):\n","  print('\\n')\n","  print('-'*30)\n","  print('Data Augmentation Starting...')\n","  print('-'*30)\n","\n","  img_stack_aug, msk_stack_aug = DataAugmentation(img_stack_train, msk_stack_train, num_augmentations)\n","\n","  img_stack_aug = np.expand_dims(img_stack_aug, axis=-1)\n","  msk_stack_aug = np.expand_dims(msk_stack_aug, axis=-1)\n","\n","  print('Number of Augmentation per Input: ', num_augmentations)\n","  print('\\n')\n","  print('Shape of Augmented Images: ', img_stack_aug.shape)\n","  print('Shape of Augmented Masks: ', msk_stack_aug.shape)\n","  print('\\n')\n","\n","  if True:\n","      img_stack = np.concatenate((img_stack_train, img_stack_aug), axis=0)\n","      msk_stack = np.concatenate((msk_stack_train, msk_stack_aug), axis=0)\n","\n","  print('Shape of Training Image Data: ', img_stack.shape)\n","  print('Shape of Training Image Masks: ', msk_stack.shape)\n","\n","  print('-'*30)\n","  print('Completed Data Augmentation Stage!')\n","  print('-'*30)\n","  print('\\n')\n","\n","# Channel = 3\n","img_stack_train = np.repeat(img_stack_train, 3, axis=3)\n","img_stack_validation = np.repeat(img_stack_validation, 3, axis=3)\n","\n","#Split training data\n","# X_train, X_test, y_train, y_test = train_test_split(img_stack, msk_stack, test_size = 0.2, random_state = 42)\n","\n","X_train = img_stack_train\n","X_test = img_stack_validation\n","y_train = msk_stack_train\n","y_test = msk_stack_validation\n","\n","train_masks_cat = to_categorical(msk_stack_train, num_classes=n_classes)\n","y_train_cat = train_masks_cat.reshape((y_train.shape[0], y_train.shape[1], y_train.shape[2], n_classes))\n","\n","test_masks_cat = to_categorical(msk_stack_validation, num_classes=n_classes)\n","y_test_cat = test_masks_cat.reshape((y_test.shape[0], y_test.shape[1], y_test.shape[2], n_classes))\n","\n","print('Training Images Shape: ', X_train.shape)\n","print('Training Labels Shape: ', y_train.shape)\n","print('Validation Images Shape: ', X_test.shape)\n","print('Validation Labels Shape;: ', y_test.shape)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3671,"status":"ok","timestamp":1696032515871,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"},"user_tz":-780},"id":"35St1v2qyJx0","outputId":"a08dffa4-386c-45d2-d730-3a508a571f0c"},"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"model_1\"\n","__________________________________________________________________________________________________\n"," Layer (type)                Output Shape                 Param #   Connected to                  \n","==================================================================================================\n"," data (InputLayer)           [(None, None, None, 3)]      0         []                            \n","                                                                                                  \n"," bn_data (BatchNormalizatio  (None, None, None, 3)        9         ['data[0][0]']                \n"," n)                                                                                               \n","                                                                                                  \n"," zero_padding2d (ZeroPaddin  (None, None, None, 3)        0         ['bn_data[0][0]']             \n"," g2D)                                                                                             \n","                                                                                                  \n"," conv0 (Conv2D)              (None, None, None, 64)       9408      ['zero_padding2d[0][0]']      \n","                                                                                                  \n"," bn0 (BatchNormalization)    (None, None, None, 64)       256       ['conv0[0][0]']               \n","                                                                                                  \n"," relu0 (Activation)          (None, None, None, 64)       0         ['bn0[0][0]']                 \n","                                                                                                  \n"," zero_padding2d_1 (ZeroPadd  (None, None, None, 64)       0         ['relu0[0][0]']               \n"," ing2D)                                                                                           \n","                                                                                                  \n"," pooling0 (MaxPooling2D)     (None, None, None, 64)       0         ['zero_padding2d_1[0][0]']    \n","                                                                                                  \n"," stage1_unit1_bn1 (BatchNor  (None, None, None, 64)       256       ['pooling0[0][0]']            \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit1_relu1 (Activa  (None, None, None, 64)       0         ['stage1_unit1_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage1_unit1_conv1 (Conv2D  (None, None, None, 64)       4096      ['stage1_unit1_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage1_unit1_bn2 (BatchNor  (None, None, None, 64)       256       ['stage1_unit1_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit1_relu2 (Activa  (None, None, None, 64)       0         ['stage1_unit1_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_2 (ZeroPadd  (None, None, None, 64)       0         ['stage1_unit1_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage1_unit1_conv2 (Conv2D  (None, None, None, 64)       36864     ['zero_padding2d_2[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage1_unit1_bn3 (BatchNor  (None, None, None, 64)       256       ['stage1_unit1_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit1_relu3 (Activa  (None, None, None, 64)       0         ['stage1_unit1_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage1_unit1_conv3 (Conv2D  (None, None, None, 256)      16384     ['stage1_unit1_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage1_unit1_sc (Conv2D)    (None, None, None, 256)      16384     ['stage1_unit1_relu1[0][0]']  \n","                                                                                                  \n"," add (Add)                   (None, None, None, 256)      0         ['stage1_unit1_conv3[0][0]',  \n","                                                                     'stage1_unit1_sc[0][0]']     \n","                                                                                                  \n"," stage1_unit2_bn1 (BatchNor  (None, None, None, 256)      1024      ['add[0][0]']                 \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit2_relu1 (Activa  (None, None, None, 256)      0         ['stage1_unit2_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage1_unit2_conv1 (Conv2D  (None, None, None, 64)       16384     ['stage1_unit2_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage1_unit2_bn2 (BatchNor  (None, None, None, 64)       256       ['stage1_unit2_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit2_relu2 (Activa  (None, None, None, 64)       0         ['stage1_unit2_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_3 (ZeroPadd  (None, None, None, 64)       0         ['stage1_unit2_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage1_unit2_conv2 (Conv2D  (None, None, None, 64)       36864     ['zero_padding2d_3[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage1_unit2_bn3 (BatchNor  (None, None, None, 64)       256       ['stage1_unit2_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit2_relu3 (Activa  (None, None, None, 64)       0         ['stage1_unit2_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage1_unit2_conv3 (Conv2D  (None, None, None, 256)      16384     ['stage1_unit2_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_1 (Add)                 (None, None, None, 256)      0         ['stage1_unit2_conv3[0][0]',  \n","                                                                     'add[0][0]']                 \n","                                                                                                  \n"," stage1_unit3_bn1 (BatchNor  (None, None, None, 256)      1024      ['add_1[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit3_relu1 (Activa  (None, None, None, 256)      0         ['stage1_unit3_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage1_unit3_conv1 (Conv2D  (None, None, None, 64)       16384     ['stage1_unit3_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage1_unit3_bn2 (BatchNor  (None, None, None, 64)       256       ['stage1_unit3_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit3_relu2 (Activa  (None, None, None, 64)       0         ['stage1_unit3_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_4 (ZeroPadd  (None, None, None, 64)       0         ['stage1_unit3_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage1_unit3_conv2 (Conv2D  (None, None, None, 64)       36864     ['zero_padding2d_4[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage1_unit3_bn3 (BatchNor  (None, None, None, 64)       256       ['stage1_unit3_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage1_unit3_relu3 (Activa  (None, None, None, 64)       0         ['stage1_unit3_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage1_unit3_conv3 (Conv2D  (None, None, None, 256)      16384     ['stage1_unit3_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_2 (Add)                 (None, None, None, 256)      0         ['stage1_unit3_conv3[0][0]',  \n","                                                                     'add_1[0][0]']               \n","                                                                                                  \n"," stage2_unit1_bn1 (BatchNor  (None, None, None, 256)      1024      ['add_2[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit1_relu1 (Activa  (None, None, None, 256)      0         ['stage2_unit1_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit1_conv1 (Conv2D  (None, None, None, 128)      32768     ['stage2_unit1_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit1_bn2 (BatchNor  (None, None, None, 128)      512       ['stage2_unit1_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit1_relu2 (Activa  (None, None, None, 128)      0         ['stage2_unit1_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_5 (ZeroPadd  (None, None, None, 128)      0         ['stage2_unit1_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage2_unit1_conv2 (Conv2D  (None, None, None, 128)      147456    ['zero_padding2d_5[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit1_bn3 (BatchNor  (None, None, None, 128)      512       ['stage2_unit1_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit1_relu3 (Activa  (None, None, None, 128)      0         ['stage2_unit1_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit1_conv3 (Conv2D  (None, None, None, 512)      65536     ['stage2_unit1_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit1_sc (Conv2D)    (None, None, None, 512)      131072    ['stage2_unit1_relu1[0][0]']  \n","                                                                                                  \n"," add_3 (Add)                 (None, None, None, 512)      0         ['stage2_unit1_conv3[0][0]',  \n","                                                                     'stage2_unit1_sc[0][0]']     \n","                                                                                                  \n"," stage2_unit2_bn1 (BatchNor  (None, None, None, 512)      2048      ['add_3[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit2_relu1 (Activa  (None, None, None, 512)      0         ['stage2_unit2_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit2_conv1 (Conv2D  (None, None, None, 128)      65536     ['stage2_unit2_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit2_bn2 (BatchNor  (None, None, None, 128)      512       ['stage2_unit2_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit2_relu2 (Activa  (None, None, None, 128)      0         ['stage2_unit2_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_6 (ZeroPadd  (None, None, None, 128)      0         ['stage2_unit2_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage2_unit2_conv2 (Conv2D  (None, None, None, 128)      147456    ['zero_padding2d_6[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit2_bn3 (BatchNor  (None, None, None, 128)      512       ['stage2_unit2_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit2_relu3 (Activa  (None, None, None, 128)      0         ['stage2_unit2_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit2_conv3 (Conv2D  (None, None, None, 512)      65536     ['stage2_unit2_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_4 (Add)                 (None, None, None, 512)      0         ['stage2_unit2_conv3[0][0]',  \n","                                                                     'add_3[0][0]']               \n","                                                                                                  \n"," stage2_unit3_bn1 (BatchNor  (None, None, None, 512)      2048      ['add_4[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit3_relu1 (Activa  (None, None, None, 512)      0         ['stage2_unit3_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit3_conv1 (Conv2D  (None, None, None, 128)      65536     ['stage2_unit3_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit3_bn2 (BatchNor  (None, None, None, 128)      512       ['stage2_unit3_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit3_relu2 (Activa  (None, None, None, 128)      0         ['stage2_unit3_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_7 (ZeroPadd  (None, None, None, 128)      0         ['stage2_unit3_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage2_unit3_conv2 (Conv2D  (None, None, None, 128)      147456    ['zero_padding2d_7[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit3_bn3 (BatchNor  (None, None, None, 128)      512       ['stage2_unit3_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit3_relu3 (Activa  (None, None, None, 128)      0         ['stage2_unit3_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit3_conv3 (Conv2D  (None, None, None, 512)      65536     ['stage2_unit3_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_5 (Add)                 (None, None, None, 512)      0         ['stage2_unit3_conv3[0][0]',  \n","                                                                     'add_4[0][0]']               \n","                                                                                                  \n"," stage2_unit4_bn1 (BatchNor  (None, None, None, 512)      2048      ['add_5[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit4_relu1 (Activa  (None, None, None, 512)      0         ['stage2_unit4_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit4_conv1 (Conv2D  (None, None, None, 128)      65536     ['stage2_unit4_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit4_bn2 (BatchNor  (None, None, None, 128)      512       ['stage2_unit4_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit4_relu2 (Activa  (None, None, None, 128)      0         ['stage2_unit4_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_8 (ZeroPadd  (None, None, None, 128)      0         ['stage2_unit4_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage2_unit4_conv2 (Conv2D  (None, None, None, 128)      147456    ['zero_padding2d_8[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage2_unit4_bn3 (BatchNor  (None, None, None, 128)      512       ['stage2_unit4_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage2_unit4_relu3 (Activa  (None, None, None, 128)      0         ['stage2_unit4_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage2_unit4_conv3 (Conv2D  (None, None, None, 512)      65536     ['stage2_unit4_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_6 (Add)                 (None, None, None, 512)      0         ['stage2_unit4_conv3[0][0]',  \n","                                                                     'add_5[0][0]']               \n","                                                                                                  \n"," stage3_unit1_bn1 (BatchNor  (None, None, None, 512)      2048      ['add_6[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit1_relu1 (Activa  (None, None, None, 512)      0         ['stage3_unit1_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit1_conv1 (Conv2D  (None, None, None, 256)      131072    ['stage3_unit1_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit1_bn2 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit1_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit1_relu2 (Activa  (None, None, None, 256)      0         ['stage3_unit1_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_9 (ZeroPadd  (None, None, None, 256)      0         ['stage3_unit1_relu2[0][0]']  \n"," ing2D)                                                                                           \n","                                                                                                  \n"," stage3_unit1_conv2 (Conv2D  (None, None, None, 256)      589824    ['zero_padding2d_9[0][0]']    \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit1_bn3 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit1_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit1_relu3 (Activa  (None, None, None, 256)      0         ['stage3_unit1_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit1_conv3 (Conv2D  (None, None, None, 1024)     262144    ['stage3_unit1_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit1_sc (Conv2D)    (None, None, None, 1024)     524288    ['stage3_unit1_relu1[0][0]']  \n","                                                                                                  \n"," add_7 (Add)                 (None, None, None, 1024)     0         ['stage3_unit1_conv3[0][0]',  \n","                                                                     'stage3_unit1_sc[0][0]']     \n","                                                                                                  \n"," stage3_unit2_bn1 (BatchNor  (None, None, None, 1024)     4096      ['add_7[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit2_relu1 (Activa  (None, None, None, 1024)     0         ['stage3_unit2_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit2_conv1 (Conv2D  (None, None, None, 256)      262144    ['stage3_unit2_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit2_bn2 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit2_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit2_relu2 (Activa  (None, None, None, 256)      0         ['stage3_unit2_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_10 (ZeroPad  (None, None, None, 256)      0         ['stage3_unit2_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage3_unit2_conv2 (Conv2D  (None, None, None, 256)      589824    ['zero_padding2d_10[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit2_bn3 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit2_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit2_relu3 (Activa  (None, None, None, 256)      0         ['stage3_unit2_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit2_conv3 (Conv2D  (None, None, None, 1024)     262144    ['stage3_unit2_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_8 (Add)                 (None, None, None, 1024)     0         ['stage3_unit2_conv3[0][0]',  \n","                                                                     'add_7[0][0]']               \n","                                                                                                  \n"," stage3_unit3_bn1 (BatchNor  (None, None, None, 1024)     4096      ['add_8[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit3_relu1 (Activa  (None, None, None, 1024)     0         ['stage3_unit3_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit3_conv1 (Conv2D  (None, None, None, 256)      262144    ['stage3_unit3_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit3_bn2 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit3_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit3_relu2 (Activa  (None, None, None, 256)      0         ['stage3_unit3_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_11 (ZeroPad  (None, None, None, 256)      0         ['stage3_unit3_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage3_unit3_conv2 (Conv2D  (None, None, None, 256)      589824    ['zero_padding2d_11[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit3_bn3 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit3_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit3_relu3 (Activa  (None, None, None, 256)      0         ['stage3_unit3_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit3_conv3 (Conv2D  (None, None, None, 1024)     262144    ['stage3_unit3_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_9 (Add)                 (None, None, None, 1024)     0         ['stage3_unit3_conv3[0][0]',  \n","                                                                     'add_8[0][0]']               \n","                                                                                                  \n"," stage3_unit4_bn1 (BatchNor  (None, None, None, 1024)     4096      ['add_9[0][0]']               \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit4_relu1 (Activa  (None, None, None, 1024)     0         ['stage3_unit4_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit4_conv1 (Conv2D  (None, None, None, 256)      262144    ['stage3_unit4_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit4_bn2 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit4_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit4_relu2 (Activa  (None, None, None, 256)      0         ['stage3_unit4_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_12 (ZeroPad  (None, None, None, 256)      0         ['stage3_unit4_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage3_unit4_conv2 (Conv2D  (None, None, None, 256)      589824    ['zero_padding2d_12[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit4_bn3 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit4_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit4_relu3 (Activa  (None, None, None, 256)      0         ['stage3_unit4_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit4_conv3 (Conv2D  (None, None, None, 1024)     262144    ['stage3_unit4_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_10 (Add)                (None, None, None, 1024)     0         ['stage3_unit4_conv3[0][0]',  \n","                                                                     'add_9[0][0]']               \n","                                                                                                  \n"," stage3_unit5_bn1 (BatchNor  (None, None, None, 1024)     4096      ['add_10[0][0]']              \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit5_relu1 (Activa  (None, None, None, 1024)     0         ['stage3_unit5_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit5_conv1 (Conv2D  (None, None, None, 256)      262144    ['stage3_unit5_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit5_bn2 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit5_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit5_relu2 (Activa  (None, None, None, 256)      0         ['stage3_unit5_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_13 (ZeroPad  (None, None, None, 256)      0         ['stage3_unit5_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage3_unit5_conv2 (Conv2D  (None, None, None, 256)      589824    ['zero_padding2d_13[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit5_bn3 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit5_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit5_relu3 (Activa  (None, None, None, 256)      0         ['stage3_unit5_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit5_conv3 (Conv2D  (None, None, None, 1024)     262144    ['stage3_unit5_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_11 (Add)                (None, None, None, 1024)     0         ['stage3_unit5_conv3[0][0]',  \n","                                                                     'add_10[0][0]']              \n","                                                                                                  \n"," stage3_unit6_bn1 (BatchNor  (None, None, None, 1024)     4096      ['add_11[0][0]']              \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit6_relu1 (Activa  (None, None, None, 1024)     0         ['stage3_unit6_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit6_conv1 (Conv2D  (None, None, None, 256)      262144    ['stage3_unit6_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit6_bn2 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit6_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit6_relu2 (Activa  (None, None, None, 256)      0         ['stage3_unit6_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_14 (ZeroPad  (None, None, None, 256)      0         ['stage3_unit6_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage3_unit6_conv2 (Conv2D  (None, None, None, 256)      589824    ['zero_padding2d_14[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage3_unit6_bn3 (BatchNor  (None, None, None, 256)      1024      ['stage3_unit6_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage3_unit6_relu3 (Activa  (None, None, None, 256)      0         ['stage3_unit6_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage3_unit6_conv3 (Conv2D  (None, None, None, 1024)     262144    ['stage3_unit6_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_12 (Add)                (None, None, None, 1024)     0         ['stage3_unit6_conv3[0][0]',  \n","                                                                     'add_11[0][0]']              \n","                                                                                                  \n"," stage4_unit1_bn1 (BatchNor  (None, None, None, 1024)     4096      ['add_12[0][0]']              \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit1_relu1 (Activa  (None, None, None, 1024)     0         ['stage4_unit1_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage4_unit1_conv1 (Conv2D  (None, None, None, 512)      524288    ['stage4_unit1_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage4_unit1_bn2 (BatchNor  (None, None, None, 512)      2048      ['stage4_unit1_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit1_relu2 (Activa  (None, None, None, 512)      0         ['stage4_unit1_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_15 (ZeroPad  (None, None, None, 512)      0         ['stage4_unit1_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage4_unit1_conv2 (Conv2D  (None, None, None, 512)      2359296   ['zero_padding2d_15[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage4_unit1_bn3 (BatchNor  (None, None, None, 512)      2048      ['stage4_unit1_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit1_relu3 (Activa  (None, None, None, 512)      0         ['stage4_unit1_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage4_unit1_conv3 (Conv2D  (None, None, None, 2048)     1048576   ['stage4_unit1_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage4_unit1_sc (Conv2D)    (None, None, None, 2048)     2097152   ['stage4_unit1_relu1[0][0]']  \n","                                                                                                  \n"," add_13 (Add)                (None, None, None, 2048)     0         ['stage4_unit1_conv3[0][0]',  \n","                                                                     'stage4_unit1_sc[0][0]']     \n","                                                                                                  \n"," stage4_unit2_bn1 (BatchNor  (None, None, None, 2048)     8192      ['add_13[0][0]']              \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit2_relu1 (Activa  (None, None, None, 2048)     0         ['stage4_unit2_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage4_unit2_conv1 (Conv2D  (None, None, None, 512)      1048576   ['stage4_unit2_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage4_unit2_bn2 (BatchNor  (None, None, None, 512)      2048      ['stage4_unit2_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit2_relu2 (Activa  (None, None, None, 512)      0         ['stage4_unit2_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_16 (ZeroPad  (None, None, None, 512)      0         ['stage4_unit2_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage4_unit2_conv2 (Conv2D  (None, None, None, 512)      2359296   ['zero_padding2d_16[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage4_unit2_bn3 (BatchNor  (None, None, None, 512)      2048      ['stage4_unit2_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit2_relu3 (Activa  (None, None, None, 512)      0         ['stage4_unit2_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage4_unit2_conv3 (Conv2D  (None, None, None, 2048)     1048576   ['stage4_unit2_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_14 (Add)                (None, None, None, 2048)     0         ['stage4_unit2_conv3[0][0]',  \n","                                                                     'add_13[0][0]']              \n","                                                                                                  \n"," stage4_unit3_bn1 (BatchNor  (None, None, None, 2048)     8192      ['add_14[0][0]']              \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit3_relu1 (Activa  (None, None, None, 2048)     0         ['stage4_unit3_bn1[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage4_unit3_conv1 (Conv2D  (None, None, None, 512)      1048576   ['stage4_unit3_relu1[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," stage4_unit3_bn2 (BatchNor  (None, None, None, 512)      2048      ['stage4_unit3_conv1[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit3_relu2 (Activa  (None, None, None, 512)      0         ['stage4_unit3_bn2[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," zero_padding2d_17 (ZeroPad  (None, None, None, 512)      0         ['stage4_unit3_relu2[0][0]']  \n"," ding2D)                                                                                          \n","                                                                                                  \n"," stage4_unit3_conv2 (Conv2D  (None, None, None, 512)      2359296   ['zero_padding2d_17[0][0]']   \n"," )                                                                                                \n","                                                                                                  \n"," stage4_unit3_bn3 (BatchNor  (None, None, None, 512)      2048      ['stage4_unit3_conv2[0][0]']  \n"," malization)                                                                                      \n","                                                                                                  \n"," stage4_unit3_relu3 (Activa  (None, None, None, 512)      0         ['stage4_unit3_bn3[0][0]']    \n"," tion)                                                                                            \n","                                                                                                  \n"," stage4_unit3_conv3 (Conv2D  (None, None, None, 2048)     1048576   ['stage4_unit3_relu3[0][0]']  \n"," )                                                                                                \n","                                                                                                  \n"," add_15 (Add)                (None, None, None, 2048)     0         ['stage4_unit3_conv3[0][0]',  \n","                                                                     'add_14[0][0]']              \n","                                                                                                  \n"," bn1 (BatchNormalization)    (None, None, None, 2048)     8192      ['add_15[0][0]']              \n","                                                                                                  \n"," relu1 (Activation)          (None, None, None, 2048)     0         ['bn1[0][0]']                 \n","                                                                                                  \n"," decoder_stage0_upsampling   (None, None, None, 2048)     0         ['relu1[0][0]']               \n"," (UpSampling2D)                                                                                   \n","                                                                                                  \n"," decoder_stage0_concat (Con  (None, None, None, 3072)     0         ['decoder_stage0_upsampling[0]\n"," catenate)                                                          [0]',                         \n","                                                                     'stage4_unit1_relu1[0][0]']  \n","                                                                                                  \n"," decoder_stage0a_conv (Conv  (None, None, None, 256)      7077888   ['decoder_stage0_concat[0][0]'\n"," 2D)                                                                ]                             \n","                                                                                                  \n"," decoder_stage0a_bn (BatchN  (None, None, None, 256)      1024      ['decoder_stage0a_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage0a_relu (Acti  (None, None, None, 256)      0         ['decoder_stage0a_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage0b_conv (Conv  (None, None, None, 256)      589824    ['decoder_stage0a_relu[0][0]']\n"," 2D)                                                                                              \n","                                                                                                  \n"," decoder_stage0b_bn (BatchN  (None, None, None, 256)      1024      ['decoder_stage0b_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage0b_relu (Acti  (None, None, None, 256)      0         ['decoder_stage0b_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage1_upsampling   (None, None, None, 256)      0         ['decoder_stage0b_relu[0][0]']\n"," (UpSampling2D)                                                                                   \n","                                                                                                  \n"," decoder_stage1_concat (Con  (None, None, None, 768)      0         ['decoder_stage1_upsampling[0]\n"," catenate)                                                          [0]',                         \n","                                                                     'stage3_unit1_relu1[0][0]']  \n","                                                                                                  \n"," decoder_stage1a_conv (Conv  (None, None, None, 128)      884736    ['decoder_stage1_concat[0][0]'\n"," 2D)                                                                ]                             \n","                                                                                                  \n"," decoder_stage1a_bn (BatchN  (None, None, None, 128)      512       ['decoder_stage1a_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage1a_relu (Acti  (None, None, None, 128)      0         ['decoder_stage1a_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage1b_conv (Conv  (None, None, None, 128)      147456    ['decoder_stage1a_relu[0][0]']\n"," 2D)                                                                                              \n","                                                                                                  \n"," decoder_stage1b_bn (BatchN  (None, None, None, 128)      512       ['decoder_stage1b_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage1b_relu (Acti  (None, None, None, 128)      0         ['decoder_stage1b_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage2_upsampling   (None, None, None, 128)      0         ['decoder_stage1b_relu[0][0]']\n"," (UpSampling2D)                                                                                   \n","                                                                                                  \n"," decoder_stage2_concat (Con  (None, None, None, 384)      0         ['decoder_stage2_upsampling[0]\n"," catenate)                                                          [0]',                         \n","                                                                     'stage2_unit1_relu1[0][0]']  \n","                                                                                                  \n"," decoder_stage2a_conv (Conv  (None, None, None, 64)       221184    ['decoder_stage2_concat[0][0]'\n"," 2D)                                                                ]                             \n","                                                                                                  \n"," decoder_stage2a_bn (BatchN  (None, None, None, 64)       256       ['decoder_stage2a_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage2a_relu (Acti  (None, None, None, 64)       0         ['decoder_stage2a_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage2b_conv (Conv  (None, None, None, 64)       36864     ['decoder_stage2a_relu[0][0]']\n"," 2D)                                                                                              \n","                                                                                                  \n"," decoder_stage2b_bn (BatchN  (None, None, None, 64)       256       ['decoder_stage2b_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage2b_relu (Acti  (None, None, None, 64)       0         ['decoder_stage2b_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage3_upsampling   (None, None, None, 64)       0         ['decoder_stage2b_relu[0][0]']\n"," (UpSampling2D)                                                                                   \n","                                                                                                  \n"," decoder_stage3_concat (Con  (None, None, None, 128)      0         ['decoder_stage3_upsampling[0]\n"," catenate)                                                          [0]',                         \n","                                                                     'relu0[0][0]']               \n","                                                                                                  \n"," decoder_stage3a_conv (Conv  (None, None, None, 32)       36864     ['decoder_stage3_concat[0][0]'\n"," 2D)                                                                ]                             \n","                                                                                                  \n"," decoder_stage3a_bn (BatchN  (None, None, None, 32)       128       ['decoder_stage3a_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage3a_relu (Acti  (None, None, None, 32)       0         ['decoder_stage3a_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage3b_conv (Conv  (None, None, None, 32)       9216      ['decoder_stage3a_relu[0][0]']\n"," 2D)                                                                                              \n","                                                                                                  \n"," decoder_stage3b_bn (BatchN  (None, None, None, 32)       128       ['decoder_stage3b_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage3b_relu (Acti  (None, None, None, 32)       0         ['decoder_stage3b_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage4_upsampling   (None, None, None, 32)       0         ['decoder_stage3b_relu[0][0]']\n"," (UpSampling2D)                                                                                   \n","                                                                                                  \n"," decoder_stage4a_conv (Conv  (None, None, None, 16)       4608      ['decoder_stage4_upsampling[0]\n"," 2D)                                                                [0]']                         \n","                                                                                                  \n"," decoder_stage4a_bn (BatchN  (None, None, None, 16)       64        ['decoder_stage4a_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage4a_relu (Acti  (None, None, None, 16)       0         ['decoder_stage4a_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," decoder_stage4b_conv (Conv  (None, None, None, 16)       2304      ['decoder_stage4a_relu[0][0]']\n"," 2D)                                                                                              \n","                                                                                                  \n"," decoder_stage4b_bn (BatchN  (None, None, None, 16)       64        ['decoder_stage4b_conv[0][0]']\n"," ormalization)                                                                                    \n","                                                                                                  \n"," decoder_stage4b_relu (Acti  (None, None, None, 16)       0         ['decoder_stage4b_bn[0][0]']  \n"," vation)                                                                                          \n","                                                                                                  \n"," final_conv (Conv2D)         (None, None, None, 5)        725       ['decoder_stage4b_relu[0][0]']\n","                                                                                                  \n"," softmax (Activation)        (None, None, None, 5)        0         ['final_conv[0][0]']          \n","                                                                                                  \n","==================================================================================================\n","Total params: 32561694 (124.21 MB)\n","Trainable params: 32514136 (124.03 MB)\n","Non-trainable params: 47558 (185.77 KB)\n","__________________________________________________________________________________________________\n","None\n"]}],"source":["# model parameters\n","\n","def dice_score(y_true, y_pred):\n","    y_true_f = tensorflow.keras.backend.flatten(y_true)\n","    y_pred_f = tensorflow.keras.backend.flatten(y_pred)\n","    intersection = tensorflow.keras.backend.sum(y_true_f * y_pred_f)\n","    return (2.0 * intersection + 1e-5) / (tensorflow.keras.backend.sum(y_true_f) + tensorflow.keras.backend.sum(y_pred_f) + 1e-5)\n","\n","class DiceScoreCallback(tensorflow.keras.callbacks.Callback):\n","    def __init__(self, validation_data):\n","        super().__init__()\n","        self.validation_data = validation_data\n","\n","    def on_epoch_end(self, epoch, logs=None):\n","        val_x, val_y = self.validation_data\n","        val_preds = self.model.predict(val_x)\n","        val_dice = dice_score(val_y, val_preds)\n","        print(f\"Val Dice Score: {val_dice:.4f}\")\n","\n","\n","\n","activation='softmax'\n","\n","initial_lr = 0.0001\n","optim = tensorflow.keras.optimizers.Adam(learning_rate=initial_lr)\n","def lr_schedule(epoch):\n","    return initial_lr - (0.000001 * epoch)\n","lr_scheduler = tensorflow.keras.callbacks.LearningRateScheduler(lr_schedule)\n","\n","dice_loss = sm.losses.DiceLoss()\n","focal_loss = sm.losses.CategoricalFocalLoss()\n","total_loss = dice_loss + focal_loss\n","\n","# total_loss = sm.losses.binary_focal_dice_loss # or sm.losses.categorical_focal_dice_loss\n","\n","metrics = [\n","    sm.metrics.IOUScore(threshold=0.5),\n","    sm.metrics.FScore(threshold=0.5),\n","    dice_score\n","]\n","\n","\n","# Model\n","BACKBONE = 'resnet34'\n","# BACKBONE = 'resnet50'\n","model = sm.Unet(BACKBONE, encoder_weights = 'imagenet', classes=n_classes, activation=activation)\n","\n","preprocess_input = sm.get_preprocessing(BACKBONE)\n","X_train_processed = preprocess_input(X_train)\n","X_test_processed = preprocess_input(X_test)\n","\n","# imagenet pre-trained weights\n","# Freeze encoder weights\n","model = sm.Unet(BACKBONE, encoder_weights = 'imagenet', classes=n_classes, activation=activation, encoder_freeze=True)\n","\n","# Fine-tune encoder and decoder weights\n","# model = sm.Unet(BACKBONE, encoder_weights = 'imagenet', classes=n_classes, activation=activation)\n","\n","save_model_name = '/content/drive/MyDrive/Colab Notebooks/resnet50_backbone_40_epochs_dicefocal_256_5P_24batch_maxF1_pelvis_aug_encoderfreeze_dynamicLR_subjectbasis_best.hdf5'\n","dice_score_callback = DiceScoreCallback(validation_data=(X_test_processed, y_test_cat))\n","checkpoint = ModelCheckpoint(save_model_name, monitor='val_f1-score', save_best_only=True, mode='max')\n","early_stopping = EarlyStopping(monitor='val_loss', patience=20, restore_best_weights=True)\n","\n","model.compile(optim, total_loss, metrics=metrics)\n","# model.compile(optim, dice_loss, metrics=metrics)\n","\n","print(BACKBONE)\n","print(model.summary())"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":546},"id":"h5bw5bmJyxUW","outputId":"1d7d6eb1-0b2a-455e-a9be-6c8053bd87a8","executionInfo":{"status":"error","timestamp":1696032532034,"user_tz":-780,"elapsed":16178,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/40\n"]},{"output_type":"error","ename":"NotImplementedError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNotImplementedError\u001b[0m                       Traceback (most recent call last)","\u001b[0;32m<ipython-input-4-8e7a70c0d805>\u001b[0m in \u001b[0;36m<cell line: 6>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mAFKRun\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m history=model.fit(X_train_processed,\n\u001b[0m\u001b[1;32m      7\u001b[0m           \u001b[0my_train_cat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m           \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m16\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     68\u001b[0m             \u001b[0;31m# To get the full stack trace, call:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     69\u001b[0m             \u001b[0;31m# `tf.debugging.disable_traceback_filtering()`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 70\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     71\u001b[0m         \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     72\u001b[0m             \u001b[0;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py\u001b[0m in \u001b[0;36mtf__train_function\u001b[0;34m(iterator)\u001b[0m\n\u001b[1;32m     13\u001b[0m                 \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     14\u001b[0m                     \u001b[0mdo_return\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m                     \u001b[0mretval_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep_function\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     16\u001b[0m                 \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     17\u001b[0m                     \u001b[0mdo_return\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/tmp/__autograph_generated_file74df3jkr.py\u001b[0m in \u001b[0;36mtf__dice_score\u001b[0;34m(true_array, pred_array)\u001b[0m\n\u001b[1;32m      8\u001b[0m                 \u001b[0mdo_return\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m                 \u001b[0mretval_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mUndefinedReturnValue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m                 \u001b[0mtrue_array\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrue_array\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbool\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     11\u001b[0m                 \u001b[0mpred_array\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpred_array\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbool\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m                 \u001b[0mintersection\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlogical_and\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrue_array\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpred_array\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNotImplementedError\u001b[0m: in user code:\n\n    File \"/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py\", line 1338, in train_function  *\n        return step_function(self, iterator)\n    File \"<ipython-input-3-4653385291cc>\", line 11, in dice_score  *\n        true_array = np.asarray(true_array).astype(bool)\n\n    NotImplementedError: Cannot convert a symbolic tf.Tensor (IteratorGetNext:1) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported.\n"]}],"source":["# Model Training\n","\n","# Kill runtime after training\n","AFKRun = True\n","\n","history=model.fit(X_train_processed,\n","          y_train_cat,\n","          batch_size=16,\n","          epochs=40,\n","          verbose=1,\n","          validation_data=(X_test_processed, y_test_cat),\n","          callbacks=[checkpoint, lr_scheduler, dice_score_callback])\n","\n","model.save('/content/drive/MyDrive/Colab Notebooks/res34_backbone_20_epochs_dicefocal_256_4P_12batch_maxF1_pelvis_aug_final.keras')\n","\n","# Performance plots\n","loss = history.history['loss']\n","val_loss = history.history['val_loss']\n","epochs = range(1, len(loss) + 1)\n","plt.plot(epochs, loss, 'y', label='Training loss')\n","plt.plot(epochs, val_loss, 'r', label='Validation loss')\n","plt.title('Training and validation loss')\n","plt.xlabel('Epochs')\n","plt.ylabel('Loss')\n","plt.legend()\n","plt.show()\n","\n","\n","\n","val_acc = history.history['val_dice_score']\n","plt.plot(epochs, val_acc, 'r', label='Validation Dice Score')\n","plt.title('Validation Dice Score')\n","plt.xlabel('Epochs')\n","plt.ylabel('Dice Score')\n","plt.legend()\n","plt.show()\n","\n","\n","\n","if AFKRun:\n","  from google.colab import runtime\n","  runtime.unassign()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":68168,"status":"ok","timestamp":1696794096376,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"},"user_tz":-780},"id":"ZLdkamVs_xMd","outputId":"52501a07-5978-4fe0-b53a-3791ec81cb39"},"outputs":[{"output_type":"stream","name":"stdout","text":["Fined-Tuned Model: res34_backbone_20_epochs_dicefocal_256_4P_12batch_maxF1_pelvis_aug_final.keras\n","Prediction Scan Stack:  msk_002\n","Number of Segmentation Classes:  5\n","\n","\n","Test Images Shape:  (499, 256, 256, 3)\n","Test Masks Shape:  (499, 256, 256, 1)\n","Test Labels:  [0. 1. 2. 3. 4.]\n","\n","\n","16/16 [==============================] - 21s 418ms/step\n","Pred Mask Shape:  (499, 256, 256, 1)\n","Pred Mask Labels:  [0 1 2 3 4]\n","\n","\n","Exported Prediction Segmentation:  /content/drive/MyDrive/Colab Notebooks/nnUNet_results/Dataset001_Tibia/predTs/Transfer Learning/msk_002_pred.nii.gz\n","\n","\n","Dice Score - Tibia: 0.86\n","Dice Score - Femur: 0.88\n","Dice Score - Fibula: 0.59\n","Dice Score - Pelvis: 0.82\n","\n","\n","VError - Tibia: 14646.97\n","VError - Femur: 76.46\n","VError - Fibula: 1139.06\n","VError - Pelvis: 31282.03\n"]}],"source":["#Set compile=False as we are not loading it for training, only for prediction.\n","model_fname = '/content/drive/MyDrive/Colab Notebooks/res34_backbone_20_epochs_dicefocal_256_4P_12batch_maxF1_pelvis_aug_final.keras'\n","model = load_model(model_fname, compile=False)\n","BACKBONE = 'resnet50'\n","pred_name = 'msk_002'\n","\n","n_classes = 5\n","\n","print(('Fined-Tuned Model: {}').format((model_fname.split('/'))[-1]))\n","print('Prediction Scan Stack: ', pred_name)\n","print('Number of Segmentation Classes: ', n_classes)\n","print('\\n')\n","\n","img = nib.load((\"/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTr/{}_0000.nii.gz\").format(pred_name))\n","# img = nib.load((\"/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTs/{}_0000.nii.gz\").format(pred_name))\n","img_data = img.get_fdata()\n","X_test = np.repeat(img_data, 3, axis=3)\n","\n","msk = nib.load((\"/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/labelsTr/{}.nii.gz\").format(pred_name))\n","# msk = nib.load((\"/content/drive/MyDrive/Colab Notebooks/nnUNet_raw/Dataset001_Tibia/imagesTs/{}.nii.gz\").format(pred_name))\n","y_test = msk.get_fdata()\n","\n","print(\"Test Images Shape: \", X_test.shape)\n","print(\"Test Masks Shape: \", y_test.shape)\n","print(\"Test Labels: \", np.unique(y_test))\n","print('\\n')\n","\n","\n","# Model\n","# preprocess input\n","preprocess_input = sm.get_preprocessing(BACKBONE)\n","X_test_processed = preprocess_input(X_test)\n","test_masks_cat = to_categorical(y_test, num_classes=n_classes)\n","y_test_cat = test_masks_cat.reshape((y_test.shape[0], y_test.shape[1], y_test.shape[2], n_classes))\n","\n","\n","# Prediction\n","y_pred=model.predict(X_test_processed)\n","y_pred_argmax=np.argmax(y_pred, axis=3)\n","y_pred_argmax = np.expand_dims(y_pred_argmax, axis = -1)\n","print('Pred Mask Shape: ', y_pred_argmax.shape)\n","print(\"Pred Mask Labels: \", np.unique(y_pred_argmax))\n","print('\\n')\n","\n","combined_mask = y_pred_argmax.astype(np.int32)\n","# combined_img = nib.Nifti1Image(combined_mask, msk.affine)\n","combined_img = nib.Nifti1Image(combined_mask, affine=np.eye(4), dtype=np.int32)\n","nib.save(combined_img, (\"/content/drive/MyDrive/Colab Notebooks/nnUNet_results/Dataset001_Tibia/predTs/Transfer Learning/{}_pred.nii.gz\").format(pred_name), dtype = np.uint8)\n","print('Exported Prediction Segmentation: ', (\"/content/drive/MyDrive/Colab Notebooks/nnUNet_results/Dataset001_Tibia/predTs/Transfer Learning/{}_pred.nii.gz\").format(pred_name))\n","print('\\n')\n","\n","# from keras.metrics import MeanIoU\n","# Calculate Mean IoU\n","# IOU_keras = MeanIoU(num_classes=n_classes)\n","# IOU_keras.update_state(y_test[:,:,:,0], y_pred_argmax)\n","# values = np.array(IOU_keras.get_weights()).reshape(n_classes, n_classes)\n","# class1_IoU = values[0,0]/(values[0,0] + values[0,1] + values[0,2] + values[0,3] + values[1,0]+ values[2,0]+ values[3,0])\n","# class2_IoU = values[1,1]/(values[1,1] + values[1,0] + values[1,2] + values[1,3] + values[0,1]+ values[2,1]+ values[3,1])\n","# class3_IoU = values[2,2]/(values[2,2] + values[2,0] + values[2,1] + values[2,3] + values[0,2]+ values[1,2]+ values[3,2])\n","# class4_IoU = values[3,3]/(values[3,3] + values[3,0] + values[3,1] + values[3,2] + values[0,3]+ values[1,3]+ values[2,3])\n","# class5_IoU = values[4,4]/(values[4,4] + values[4,0] + values[4,1] + values[4,2] + values[0,4]+ values[1,4]+ values[2,3])\n","\n","def dice_coefficient(true_array, pred_array):\n","    true_array = np.asarray(true_array).astype(bool)\n","    pred_array = np.asarray(pred_array).astype(bool)\n","\n","    intersection = np.logical_and(true_array, pred_array)\n","    dice = 2.0 * intersection.sum() / (true_array.sum() + pred_array.sum())\n","    return round(dice, 2)\n","\n","def volume_error(y_true, y_pred):\n","    # mm3\n","    Voxel_Volume = 2.63671875\n","\n","    N_true = np.count_nonzero(y_true)\n","    N_pred = np.count_nonzero(y_pred)\n","\n","    volume_error = np.abs(N_true - N_pred) * Voxel_Volume\n","\n","    return round(volume_error * 0.001, 2)\n","\n","\n","tibia_seg_data_pred = np.where(y_pred_argmax != 1, 0, 1)\n","femur_seg_data_pred = np.where(y_pred_argmax != 2, 0, 1)\n","fibula_seg_data_pred = np.where(y_pred_argmax != 3, 0, 1)\n","pelvis_seg_data_pred = np.where(y_pred_argmax != 4, 0, 1)\n","\n","tibia_seg_data_gt = np.where(y_test != 1, 0, 1)\n","femur_seg_data_gt = np.where(y_test != 2, 0, 1)\n","fibula_seg_data_gt = np.where(y_test != 3, 0, 1)\n","pelvis_seg_data_gt = np.where(y_test != 4, 0, 1)\n","\n","dice_score_tibia = dice_coefficient(tibia_seg_data_gt, tibia_seg_data_pred)\n","dice_score_femur = dice_coefficient(femur_seg_data_gt, femur_seg_data_pred)\n","dice_score_fibula = dice_coefficient(fibula_seg_data_gt, fibula_seg_data_pred)\n","dice_score_pelvis = dice_coefficient(pelvis_seg_data_gt, pelvis_seg_data_pred)\n","\n","TIBIA_VError = volume_error(tibia_seg_data_gt, tibia_seg_data_pred)\n","FEMUR_VError = volume_error(femur_seg_data_gt, femur_seg_data_pred)\n","FIBULA_VError = volume_error(fibula_seg_data_gt, fibula_seg_data_pred)\n","PELVIS_VError = volume_error(pelvis_seg_data_gt, pelvis_seg_data_pred)\n","\n","print('Dice Score - Tibia:', dice_score_tibia)\n","print('Dice Score - Femur:', dice_score_femur)\n","print('Dice Score - Fibula:', dice_score_fibula)\n","print('Dice Score - Pelvis:', dice_score_pelvis)\n","print('\\n')\n","\n","print('VError - Tibia:', TIBIA_VError)\n","print('VError - Femur:', FEMUR_VError)\n","print('VError - Fibula:', FIBULA_VError)\n","print('VError - Pelvis:', PELVIS_VError)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":11223,"status":"ok","timestamp":1695685458902,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"},"user_tz":-780},"id":"otDB0W8BramO","outputId":"2532b3f4-9768-4145-d6ea-c399ccfa8279"},"outputs":[{"name":"stdout","output_type":"stream","text":["Requirement already satisfied: SimpleITK in /usr/local/lib/python3.10/dist-packages (2.3.0)\n","Requirement already satisfied: trimesh in /usr/local/lib/python3.10/dist-packages (3.23.5)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from trimesh) (1.23.5)\n"]}],"source":["%pip install SimpleITK\n","import SimpleITK as sitk\n","import numpy as np\n","from skimage.measure import marching_cubes\n","%pip install trimesh\n","import trimesh\n","\n","predfname = 'msk_002'\n","model_used = 'resnet34'\n","\n","def Export3DStructure(segmentation_data, predfname, class_msk, model_used):\n","    # Generate a surface mesh using marching cubes\n","    vertices, faces, normals, _ = marching_cubes(segmentation_data, level=0)\n","\n","    # Create a Trimesh object\n","    mesh = trimesh.Trimesh(vertices=vertices, faces=faces, vertex_normals=normals)\n","\n","\n","    # Save the mesh as a PLY file\n","    ply_path = ('/content/drive/MyDrive/Colab Notebooks/nnUNet_results/Dataset001_Tibia/predTs/Transfer Learning/{}_{}_{}.ply').format(predfname, class_msk, model_used)\n","    mesh.export(ply_path)\n","\n","segmentation_data_all = y_pred_argmax\n","segmentation_data_all = segmentation_data_all[:,:,:,0]\n","\n","tibia_seg_data = np.where(segmentation_data_all != 1, 0, 1)\n","femur_seg_data = np.where(segmentation_data_all != 2, 0, 2)\n","fibula_seg_data = np.where(segmentation_data_all != 3, 0, 3)\n","pelvis_seg_data = np.where(segmentation_data_all != 4, 0, 4)\n","\n","segmentation_data = [segmentation_data_all, tibia_seg_data, femur_seg_data, fibula_seg_data, pelvis_seg_data]\n","class_msk = ['ALL', 'TIBIA', 'FEMUR', 'FIBULA']\n","\n","colors = [(255, 0, 0, 255),    # Red\n","          (0, 255, 0, 255),    # Green\n","          (0, 0, 255, 255),    # Blue\n","          (255, 255, 0, 255)]  # Yellow\n","\n","for i in range (len(segmentation_data)):\n","  Export3DStructure(segmentation_data[i], predfname, class_msk[i], model_used)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":356},"executionInfo":{"elapsed":1844,"status":"ok","timestamp":1695982370719,"user":{"displayName":"Asif Cheena","userId":"14143847646622962473"},"user_tz":-780},"id":"luQMn9gLzmfa","outputId":"bac5c0b1-f106-4c48-9e33-3572809518e3"},"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 1200x800 with 3 Axes>"],"image/png":"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brppUhlr8Z5/+Zd/Mcz0+P3+svdLRFQJV111Fa6//noMDAxg48aNx2RqAOCZZ57B+973Ppx33nn4wQ9+gK6uLjgcDtx3330Fk1t6PB48/fTTePLJJ/Gb3/wGjz76KH7+85/jwgsvxB/+8IeCPvj9738/HnzwQXzzm9/Ef/7nf1Z0JmEimnvOOussnHHGGYavqysdhXw+j/b2djzwwAO679EmdGarUv7+pdmLQTjVhV/84hd497vfjR//+McFz4dCIbS2tsrHixYtwuuvvw5FUQoyQXv37i1439KlSwEAgUAA69atm8aWExGV7wMf+AA+/vGP47nnnjOcpOf//t//C7fbjd///vcF64ffd999x2xrtVqxdu1arF27Fv/2b/+Gb3zjG/jSl76EJ598sqAPvOyyy7B+/Xpce+21aGhowD333FP5kyMiMrF06VI89thjOPvsswuG3GgtWrQIwNHMuboEfHh4uGg2Wfwd+Oqrr5r+HVhqaXpbWxu8Xi927959zGu7du2C1WrFggULStoX1Qfewqa6YLPZjrkz+NBDD6Gvr6/guQ0bNqCvrw//3//3/8nnUqkU/uM//qNgu1WrVmHp0qX41re+hVgsdszxuEQEEc0kv9+Pe+65B1/96lfx3ve+V3cbm80Gi8VSMDxn//79+NWvflWw3djY2DHvFRVA6hJ24SMf+Qi++93v4t5778UXv/jFyZ8EEdEk/O3f/i0mJibw9a9//ZjXcrkcQqEQgKPjzR0OB773ve8V/I347W9/u+gx3vGOd6Cnpwff/va35f4E9b58Ph8AHLONls1mw/r16/Hwww9j//798vnBwUFs2bIF55xzDgKBQNF2Uf1gJpzqwqWXXoqvfe1ruO666/Cud70Lr7zyCh544IGCO5/A0SUtvv/97+PDH/4wPv3pT6OrqwsPPPAA3G43gLfvaFqtVvzoRz/Cxo0bceKJJ+K6667DvHnz0NfXhyeffBKBQAC//vWvq36eRESC2ZwVAHDJJZfg3/7t33DRRRfhqquuwtDQEO6++24cd9xxePnll+V2X/va1/D000/jkksuwaJFizA0NIQf/OAHmD9/Ps455xzdfW/evBmRSARf+tKXEAwGi64pTkRUKeeffz4+/vGP484778RLL72E9evXw+FwYM+ePXjooYfwne98Bx/84AfR1taGz33uc7jzzjtx6aWX4uKLL8aLL76I3/3udwVVknqsVivuuecevPe978Vpp52G6667Dl1dXdi1axdee+01/P73vwdwNGkDAP/4j/+IDRs2wGaz4corr9Td5x133IGtW7finHPOwac+9SnY7Xb88Ic/RDqdxl133VXZi0Q1j0E41YVbb70V8XgcW7Zswc9//nO84x3vwG9+8xv80z/9U8F2fr8fTzzxBG688UZ85zvfgd/vx0c+8hG8613vwhVXXCGDcQC44IILsH37dnz961/H97//fcRiMXR2dmL16tX4+Mc/Xu1TJCIqy4UXXogf//jH+OY3v4mbbroJPT09+F//639h//79BUH4+973Puzfvx//+3//b4yMjKC1tRXnn38+br/9dgSDQcP933rrrQiHwzIQ37RpUzVOi4gI9957L1atWoUf/vCHuPXWW2G327F48WL83d/9Hc4++2y53R133AG32417770XTz75JFavXo0//OEPuOSSS4oeY8OGDXjyySdx++2341//9V+Rz+exdOnSghV1Lr/8ctx444148MEH8dOf/hSKohgG4SeeeCKeeeYZ3HLLLbjzzjuRz+exevVq/PSnPz1mjXCqfxaFo/uJ8O1vfxuf+cxncPjw4YJlMYiIiIiIiCqJQTjNOclksmAij1QqhdNPPx0TExN48803Z7BlRERERERU71iOTnPO5ZdfjoULF+K0005DOBzGT3/6U+zatctwqQsiIiIiIqJKYRBOc86GDRvwox/9CA888AAmJiawcuVKPPjgg/jQhz40000jIiIiIqI6N6NLlN19991YvHgx3G43Vq9ejT//+c8z2RyaI2666Sa8+uqriMViSCaT2LlzJwNwqjnsH4mI9LF/JKLZbsaC8J///Oe4+eabcdttt+GFF17Aqaeeig0bNmBoaGimmkREVBPYPxIR6WP/SET1YMYmZlu9ejXOPPNMfP/73wcA5PN5LFiwADfeeOMxy0oREc0l7B+JiPSxfySiejAjY8IzmQx27tyJW265RT5ntVqxbt06bN++/Zjt0+k00um0fJzP5zE2NoaWlhZYLJaqtJmI6ouiKIhGo+ju7obVOqMjcwqwfySimVYv/SPAPpKIKqtS/eOMBOEjIyOYmJhAR0dHwfMdHR3YtWvXMdvfeeeduP3226vVPCKaQw4dOoT58+fPdDMk9o9EVCtme/8IsI8koukx1f5xVsyOfsstt+Dmm2+Wj8PhMBYuXDiDLSKietHQ0DDTTZgSo/7xHFwMOxwz2DIimq1yyOJZ/HbW948A+0giqqxK9Y8zEoS3trbCZrNhcHCw4PnBwUF0dnYes73L5YLL5apW84hoDqm1csRK9Y92OGC38A9MIpqE/5ktaLb3jwD7SCKqsAr1jzMy0MfpdGLVqlV4/PHH5XP5fB6PP/441qxZMxNNIiKqCewfiYj0sX8konoxY+XoN998M6655hqcccYZOOuss/Dtb38b8Xgc11133Uw1iYioJrB/JCLSx/6RiOrBjAXhH/rQhzA8PIyvfOUrGBgYwGmnnYZHH330mMk2iIjmGvaPRET62D8SUT2YsXXCpyISiSAYDM50M4ioDoTDYQQCgZluRsWI/vECvJ/jHYloUnJKFtvwcN31jwD7SCKamkr1j7Wz+CMRERERERFRnWMQTkRERERERFQlDMKJiIiIiIiIqoRBOBEREREREVGVMAgnIiIiIiIiqhIG4URERERERERVwiCciIiIiIiIqEoYhBMRERERERFVCYNwIiIiIiIioiphEE5ERERERERUJQzCiYiIiIiIiKqEQTgRERERERFRlTAIJyIiIiIiIqoSBuFEREREREREVcIgnIiIiIiIiKhKGIQTERERERERVQmDcCIiIiIiIqIqYRBOREREREREVCUMwomIiIiIiIiqhEE4ERERERERUZUwCCciIiIiIiKqEgbhRERERERERFXCIJyIiIiIiIioShiEExEREREREVUJg3AiIiIiIiKiKmEQTkRERERERFQlDMKJiIiIiIiIqoRBOBEREREREVGVMAgnIiIiIiIiqhIG4URERERERERVwiCciIiIiIiIqEoYhBMRERERERFVCYNwIiIiIiIioiphEE5ERERERERUJQzCiYiIiIiIiKqEQTgRERERERFRlTAIJyIiIiIiIqoSBuFEREREREREVcIgnIiIiIiIiKhKGIQTERERERERVQmDcCIiIiIiIqIqYRBOREREREREVCUMwomIiIiIiIiqpOJB+Fe/+lVYLJaCn+OPP16+nkqlsGnTJrS0tMDv9+OKK67A4OBgpZtBRFRz2D8SEelj/0hEc8m0ZMJPPPFEHDlyRP48++yz8rXPfOYz+PWvf42HHnoITz31FPr7+3H55ZdPRzOIiGoO+0ciIn3sH4lorrBPy07tdnR2dh7zfDgcxo9//GNs2bIFF154IQDgvvvuwwknnIDnnnsO73znO6ejOURENYP9IxGRPvaPRDRXTEsmfM+ePeju7saSJUtw9dVX4+DBgwCAnTt3IpvNYt26dXLb448/HgsXLsT27dsN95dOpxGJRAp+iIhmI/aPRET6Kt0/Auwjiag2VTwIX716Ne6//348+uijuOeee7Bv3z6ce+65iEajGBgYgNPpRGNjY8F7Ojo6MDAwYLjPO++8E8FgUP4sWLCg0s0mIpp27B+JiPRNR/8IsI8kotpU8XL0jRs3yt9POeUUrF69GosWLcJ//dd/wePxTGqft9xyC26++Wb5OBKJsBMlolmH/SMRkb7p6B8B9pFEVJumfYmyxsZGLF++HHv37kVnZycymQxCoVDBNoODg7pjgASXy4VAIFDwQ0Q027F/JCLSV4n+EWAfSUS1adqD8Fgsht7eXnR1dWHVqlVwOBx4/PHH5eu7d+/GwYMHsWbNmuluChFRTWH/SESkj/0jEdWzipejf+5zn8N73/teLFq0CP39/bjttttgs9nw4Q9/GMFgEB/96Edx8803o7m5GYFAADfeeCPWrFnDmS2JqO6xfyQi0sf+kYjmkooH4YcPH8aHP/xhjI6Ooq2tDeeccw6ee+45tLW1AQD+/d//HVarFVdccQXS6TQ2bNiAH/zgB5VuBhFRzWH/SESkj/0jEc0lFkVRlJluRLkikQiCweBMN4OI6kA4HK6rMYKif7wA74fd4pjp5hDRLJRTstiGh+uufwTYRxLR1FSqf5z2MeFEREREREREdBSDcCIiIiIiIqIqYRBOREREREREVCUMwomIiIiIiIiqhEE4ERERERERUZUwCCciIiIiIiKqEgbhRERERERERFXCIJyIiIiIiIioShiEExEREREREVUJg3AiIiIiIiKiKmEQTkRERERERFQlDMKJiIiIiIiIqoRBOBEREREREVGVMAgnIiIiIiIiqhIG4URERERERERVwiCciExZLJaZbgIRERERUd1gEE5UxywWy5SDaEVRKtQaIiIiIiJiED5HMJs591gsFiiKwiCaiIiIiKiGMAgnmgGVyFAXw+CbiIiIiKj22Ge6AVQdDMhqCz8PIiIiIqK5iZlwIiIiIiIioiphEE5ERERERERUJQzCieoAJ94jIiIiIpodGITPIQzU6hfHmBMR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RERERET1gkH4DKp0YDSV/anLyMsJ5tXvr0Q76s1UP5Nytp3sEAIiIiIiIqoeBuEzZDYGRkYzb5u9Xsr483o32fHSk53Eb6aXRJus2fhvgoiIiIioXBwTXgcqMca8lBL5Ss90bXasyZxTrY5BLrdKYDLnwbHYRERERESzAzPhs0S1s5rTNW59Oo9Ri4FnsTXM9TLWlZoRnoiIiIiIag+D8Fmi1AzqVFQ6GCxlH3NtaaupTl5GRERERESzG8vR64CiKGWvH13pJbimY5K52TamWU85a20TEREREVH9YxBeJ8oJ5IzWDjcKfEsJhiczDrnYWGkGp5PHceFERERERLWJ5eh1ajLLVRUbv1zKMSsxK3c9ZMDV5zAT16NeKgmIiIiIiOoNg/A5SG/stzo4NwvgxLZ6P6W8X7svo+dnewBZzSw01wcnIiIiIpo9GITXsVKWACvntXImWSs1ADSamK2eAsipnEsp66zXwrrgs/2mCRERERFRtXBM+Cw11TG/ZuPA6ykAno3Un225E7tN10R55bSBiIiIiIiMMQifpUrJShd7Tf3fSk7kVelJweptkjGzrHG556kXgKt/r6frRkRERERUD1iOPstMpuxX7z3F1quejvJio8nKih2rHgJJo7JxvXH1kz1fvfH5tVCqTkREREREb2MmfJapVkA6leOUW0Ktt309ZL+Nbn5U47zEMbQ3O2b7NSUiIiIimu0YhM8BtRJ4TWUt89moFs6hFtpARERERERvYzk6ERERERERUZUwCCciIiIiIiKqEgbhRERERERERFXCIJyIiIiIiIioShiEExEREREREVUJg3AiIiIiIiKiKmEQTkRERERERFQlDMKJiIiIiIiIqoRBOBEREREREVGVMAgnIiIiIiIiqhIG4URERERERERVwiCciIiIiIiIqEoYhBMRERERERFVCYNwIiIiIiIioiphEE5ERERERERUJQzCiYiIiIiIiKqEQTgRERERERFRlZQVhN95550488wz0dDQgPb2dlx22WXYvXt3wTYXXHABLBZLwc8nPvGJgm0OHjyISy65BF6vF+3t7fj85z+PXC439bMhIpoh7B+JiIyxjyQiepu9nI2feuopbNq0CWeeeSZyuRxuvfVWrF+/Hq+//jp8Pp/c7vrrr8fXvvY1+djr9crfJyYmcMkll6CzsxN/+tOfcOTIEXzkIx+B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\n"},"metadata":{}}],"source":["import random\n","img_number = random.randint(0, len(X_test_processed)-1)\n","img = X_test_processed[img_number, :, :, 0]\n","mask = y_test[img_number]\n","prediction = y_pred_argmax[img_number]\n","\n","\n","plt.figure(figsize=(12, 8))\n","plt.subplot(231)\n","plt.title('Image')\n","plt.imshow(img, cmap='gray')\n","plt.subplot(232)\n","plt.title('Mask')\n","plt.imshow(mask[:,:,0])\n","plt.subplot(233)\n","plt.title('Prediction')\n","plt.imshow(prediction)\n","plt.show()"]}],"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyON0bJfrZ3ORcyYWAoY73VN"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0}