[74bbd8]: / KOIOS_Project.ipynb

Download this file

1499 lines (1499 with data), 155.3 kB

{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "KOIOS_Project.ipynb",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": []
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.5"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Nl0GwMq5E4e2"
      },
      "source": [
        "# Image Processing with Keras - Capstone Project (Koios Medical)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "PPtuBGKJz8-y"
      },
      "source": [
        "by Sabbir Mohammed<br><br>*Project Description: Deep Learning Project focused on object localization of potential tumors and legions on thyroid ultrasound images.*<br><br>*This notebook utilizes the Keras framework, running on tensor flow to execute a Convolution Neural Network to train a model. The pre-trained weights used to initialize this model is imported from the Xception model hosted under Keras Applications (link below)*"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "h6JO0iAyE4fA"
      },
      "source": [
        "- - -"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "uxj3GZe2DVU_",
        "colab_type": "text"
      },
      "source": [
        "<p><a name=\"home\"></a></p>\n",
        "### SECTIONS:<br>\n",
        "-  <a href=\"#colab\">  Setting up for Google Colab                   </a><br>\n",
        "1. <a href=\"#import\"> 1. Importing Data and Initializing            </a><br>\n",
        "2. <a href=\"#pre\">    2. Keras Preprocessing                        </a><br>\n",
        "3. <a href=\"#algo\">   3. Setting up Architecture: Importing Xception</a><br>\n",
        "4. <a href=\"#train\">  4. Training and Fitting Model                 </a><br>\n",
        "5. <a href=\"#test\">   5. Evaluating Model                           </a><br>\n",
        "6. <a href=\"#output\"> 6. Final Results of Prediction                </a><br>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Zv6vH9Q7DVVB",
        "colab_type": "text"
      },
      "source": [
        "- - -"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "KL3lXEEYV5D8"
      },
      "source": [
        "<p><a name=\"colab\"></a></p>\n",
        "### SETTING UP FOR GOOGLE COLAB:\n",
        "<a href=\"#home\">BACK TO THE TOP</a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MuMqo1WIDVVL",
        "colab_type": "text"
      },
      "source": [
        "This notebook was run on the Google Colab platform to make use of the GPU resources available there."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "eKN2Dd1NTLzQ",
        "outputId": "4ac52574-d0d8-4554-94e2-b84047843534",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Mounting Google Drive directory and files\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive/')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Drive already mounted at /content/drive/; to attempt to forcibly remount, call drive.mount(\"/content/drive/\", force_remount=True).\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "EnNFW9WeVVpe",
        "outputId": "62c5320e-1a52-4b67-e1e9-a2c5816a8ad5",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Changing working directory to match setup in Google Drive\n",
        "cd '/content/drive/My Drive/ProjectCapstone'"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/content/drive/My Drive/ProjectCapstone\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "Zz-BajgPVkCT",
        "outputId": "5a45cc50-2251-457b-b562-658cd5d65dbe",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Confirming new working directory\n",
        "pwd"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "'/content/drive/My Drive/ProjectCapstone'"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "7ZlTck8UYX_8",
        "outputId": "22a88ac4-9e64-4944-943c-d6052a2476ca",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Checking GPU connection\n",
        "import tensorflow as tf\n",
        "device_name = tf.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))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Found GPU at: /device:GPU:0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "odFhJUz4cOfo",
        "colab_type": "text"
      },
      "source": [
        "- - -"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "WEk_FjOaE4fE"
      },
      "source": [
        "<p><a name=\"import\"></a></p>\n",
        "### 1. IMPORTING DATA AND INITIALIZING:\n",
        "<a href=\"#home\">BACK TO THE TOP</a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Bnh8T_hpE4fM"
      },
      "source": [
        "**a) Initializing libraries and functions**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "Y8Y_v6xKE4fP",
        "colab": {}
      },
      "source": [
        "import pandas             as pd\n",
        "import numpy              as np\n",
        "import matplotlib.pyplot  as plt\n",
        "import tensorflow         as tf\n",
        "import tf_iou             as tfiou    # customized functions in the directory\n",
        "import calculate_iou      as calc_iou # customized functions in the directory\n",
        "import matplotlib.pyplot  as plt\n",
        "import matplotlib.image   as mpimg\n",
        "import matplotlib.patches as patches\n",
        "\n",
        "from PIL import Image"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "ehzxQD1nE4ff"
      },
      "source": [
        "**b) Loading CSV(s)**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "Sl7nS3lXE4fk",
        "colab": {}
      },
      "source": [
        "train = pd.read_csv('./cimalab/dataframe/train.csv')\n",
        "train = train.drop('Unnamed: 0', axis=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "D9Stlr_CE4f1",
        "colab": {}
      },
      "source": [
        "validation = pd.read_csv('./cimalab/dataframe/validation.csv')\n",
        "validation = validation.drop('Unnamed: 0', axis=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "2RQFzcV6E4f-",
        "colab": {}
      },
      "source": [
        "test = pd.read_csv('./cimalab/dataframe/test.csv')\n",
        "test = test.drop('Unnamed: 0', axis=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "7aA5d98LE4gG",
        "outputId": "8e68a5db-440f-478e-8a49-7cc73c12c959",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 112
        }
      },
      "source": [
        "# SANITY CHECK\n",
        "train.head(2)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>image_id</th>\n",
              "      <th>x1</th>\n",
              "      <th>y1</th>\n",
              "      <th>x2</th>\n",
              "      <th>y2</th>\n",
              "      <th>filename</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>146</td>\n",
              "      <td>311.0</td>\n",
              "      <td>77.0</td>\n",
              "      <td>373.0</td>\n",
              "      <td>126.0</td>\n",
              "      <td>./cimalab/thyroid/106_2.jpg</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>147</td>\n",
              "      <td>258.0</td>\n",
              "      <td>72.0</td>\n",
              "      <td>328.0</td>\n",
              "      <td>123.0</td>\n",
              "      <td>./cimalab/thyroid/106_3.jpg</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "  image_id     x1    y1     x2     y2                     filename\n",
              "0      146  311.0  77.0  373.0  126.0  ./cimalab/thyroid/106_2.jpg\n",
              "1      147  258.0  72.0  328.0  123.0  ./cimalab/thyroid/106_3.jpg"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "lzNt6PSgC6rQ"
      },
      "source": [
        "**c) Scaling bounding box coordinates [0,1] (for sigmoid activation of dense layers, later)**<br>\n",
        "The following cells are due to different image sizes. Each image size in the data set is random"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "cellView": "both",
        "colab_type": "code",
        "id": "g1FTb0Qa9Ioz",
        "colab": {}
      },
      "source": [
        "# TRAINING SET\n",
        "train['x1p'] = [(train.x1[i]/Image.open(train.filename[i]).size[0]) for i in range(len(train.x1))]\n",
        "train['y1p'] = [(train.y1[i]/Image.open(train.filename[i]).size[1]) for i in range(len(train.y1))]\n",
        "train['x2p'] = [(train.x2[i]/Image.open(train.filename[i]).size[0]) for i in range(len(train.x2))]\n",
        "train['y2p'] = [(train.y2[i]/Image.open(train.filename[i]).size[1]) for i in range(len(train.y2))]\n",
        "\n",
        "# SANITY CHECK\n",
        "# train.sample(5)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "bvdw1x6CGk5K",
        "colab": {}
      },
      "source": [
        "# VALIDATION SET\n",
        "validation['x1p'] = [(validation.x1[i]/Image.open(validation.filename[i]).size[0]) for i in range(len(validation.x1))]\n",
        "validation['y1p'] = [(validation.y1[i]/Image.open(validation.filename[i]).size[1]) for i in range(len(validation.y1))]\n",
        "validation['x2p'] = [(validation.x2[i]/Image.open(validation.filename[i]).size[0]) for i in range(len(validation.x2))]\n",
        "validation['y2p'] = [(validation.y2[i]/Image.open(validation.filename[i]).size[1]) for i in range(len(validation.y2))]\n",
        "\n",
        "# SANITY CHECK\n",
        "# validation.sample(5)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "66VwzyKlJIkj",
        "colab": {}
      },
      "source": [
        "# TEST SET\n",
        "test['x1p'] = [(test.x1[i]/Image.open(test.filename[i]).size[0]) for i in range(len(test.x1))]\n",
        "test['y1p'] = [(test.y1[i]/Image.open(test.filename[i]).size[1]) for i in range(len(test.y1))]\n",
        "test['x2p'] = [(test.x2[i]/Image.open(test.filename[i]).size[0]) for i in range(len(test.x2))]\n",
        "test['y2p'] = [(test.y2[i]/Image.open(test.filename[i]).size[1]) for i in range(len(test.y2))]\n",
        "\n",
        "# SANITY CHECK\n",
        "# test.sample(5)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jUCp9sBNDVX-",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Saving updated .csv(s) as separate files\n",
        "train.to_csv('./cimalab/dataframe/train_scaled.csv')\n",
        "validation.to_csv('./cimalab/dataframe/validation_scaled.csv')\n",
        "test.to_csv('./cimalab/dataframe/test_scaled.csv')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "wEFNYTlbE4gg"
      },
      "source": [
        "- - -"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "GQqmzNHyE4gl"
      },
      "source": [
        "<p><a name=\"pre\"></a></p>\n",
        "### 2. KERAS PREPROCESSING:\n",
        "<a href=\"#home\">BACK TO THE TOP</a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "NBq-uIdaE4gq"
      },
      "source": [
        "**a) Initializing**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "_66FsC4cE4gx",
        "outputId": "160f35e2-a4f9-465a-d89d-208b79804397",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "from keras_preprocessing.image import ImageDataGenerator\n",
        "from keras.models              import Sequential, load_model\n",
        "from keras.layers              import Dropout, Flatten, Dense#, Conv2D, MaxPooling2D\n",
        "from keras                     import optimizers\n",
        "from keras.callbacks           import ModelCheckpoint, TensorBoard\n",
        "from keras_preprocessing.image import load_img, img_to_array\n",
        "from keras.applications        import xception"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Using TensorFlow backend.\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MFeBa-PyqQ0l",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Modifying tensor flow setting to manage GPU resources better. \n",
        "\n",
        "config = tf.ConfigProto()\n",
        "config.gpu_options.allow_growth = True\n",
        "session = tf.Session(config=config)\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "EmEtfnXME4g4"
      },
      "source": [
        "**b) Setting Parameters**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "BVNyiTvhE4g8",
        "colab": {}
      },
      "source": [
        "image_width  = 299\n",
        "image_height = 299\n",
        "image_size   = (image_width, image_height)\n",
        "batch_size   = 20"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "sxo6mO4DE4hC"
      },
      "source": [
        "**c) Creating the Train and Validation Data Generators **"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "kganFRfvE4hE",
        "outputId": "969ef235-9628-4059-f112-df1e989a7269",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 53
        }
      },
      "source": [
        "# from keras_preprocessing.image import ImageDataGenerator\n",
        "\n",
        "train_datagen        = ImageDataGenerator(\n",
        "    rescale          = 1.0/255,\n",
        "#     rotation_range   = 20,\n",
        "#     horizontal_flip  = True,\n",
        "    fill_mode        = 'nearest')\n",
        "\n",
        "train_generator      = train_datagen.flow_from_dataframe(\n",
        "    dataframe        = train,\n",
        "    x_col            = 'filename',\n",
        "    y_col            = ['x1p','y1p','x2p','y2p'],\n",
        "    target_size      = image_size,  \n",
        "    batch_size       = batch_size,\n",
        "    color_mode       = 'rgb',\n",
        "    class_mode       = 'other')\n",
        "\n",
        "#-----------------------------------------------------------------------------------------------------------------#\n",
        "\n",
        "validation_datagen   = ImageDataGenerator(rescale=1.0/255)\n",
        "\n",
        "validation_generator = validation_datagen.flow_from_dataframe(\n",
        "    dataframe        = validation,\n",
        "    x_col            = 'filename',  \n",
        "    y_col            = ['x1p','y1p','x2p','y2p'],\n",
        "    target_size      = image_size,  \n",
        "    batch_size       = batch_size,\n",
        "    color_mode       = 'rgb',\n",
        "    class_mode       = 'other')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Found 1940 images.\n",
            "Found 647 images.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "MQMroX1qE4hR"
      },
      "source": [
        "- - -"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "aG1rZ7HFE4hT"
      },
      "source": [
        "<p><a name=\"algo\"></a></p>\n",
        "### 3.  SETTING UP ARCHITECTURE : IMPORTING XCEPTION<br><https://keras.io/applications/#xception>\n",
        "<a href=\"#home\">BACK TO THE TOP</a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "tHqsU_QZE4hW"
      },
      "source": [
        "**a) Importing Model**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "pPjiYIiPE4ha",
        "outputId": "37181677-da85-4396-ad1d-b958ce2731b7",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 128
        }
      },
      "source": [
        "# from keras.applications import xception\n",
        "\n",
        "conv_base = xception.Xception(\n",
        "                     weights      = 'imagenet',\n",
        "                     include_top  = False,\n",
        "                     input_shape  = (299, 299, 3))\n",
        "\n",
        "conv_base.trainable = True  # Check with 'True'..."
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Colocations handled automatically by placer.\n",
            "Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.4/xception_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
            "83689472/83683744 [==============================] - 6s 0us/step\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "tib2j_MfE4hi"
      },
      "source": [
        "**b) Building Model Architecture (using pre-trained weights)**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "UULXjGp1E4hl",
        "outputId": "93e645e2-dc53-4caa-df32-8538eff673d5",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 92
        }
      },
      "source": [
        "# from keras.models  import Sequential\n",
        "# from keras.layers  import Dropout\n",
        "\n",
        "xception_model = Sequential()\n",
        "xception_model.add(conv_base)\n",
        "xception_model.add(Flatten())\n",
        "xception_model.add(Dropout(0.5))                       \n",
        "xception_model.add(Dense(64,  activation = 'linear')) # attempt with sigmoid activation\n",
        "xception_model.add(Dense(4,   activation = 'linear')) # attempt with sigmoid activation"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5_GHtX2FXqq8",
        "colab_type": "code",
        "outputId": "08ad0d5e-3dda-4b84-b700-6fb0a564ef93",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 326
        }
      },
      "source": [
        "xception_model.summary()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "xception (Model)             (None, 10, 10, 2048)      20861480  \n",
            "_________________________________________________________________\n",
            "flatten_1 (Flatten)          (None, 204800)            0         \n",
            "_________________________________________________________________\n",
            "dropout_1 (Dropout)          (None, 204800)            0         \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 64)                13107264  \n",
            "_________________________________________________________________\n",
            "dense_2 (Dense)              (None, 4)                 260       \n",
            "=================================================================\n",
            "Total params: 33,969,004\n",
            "Trainable params: 33,914,476\n",
            "Non-trainable params: 54,528\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "ObqZvlPBE4h0"
      },
      "source": [
        "**c) Compiling Model Parameters**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "e4WZm-l2E4h3",
        "colab": {}
      },
      "source": [
        "# import tf_iou as tfiou\n",
        "\n",
        "# Making a tf.py_function so that it can be used as a metric in the keras model compiler\n",
        "\n",
        "def IoU(y_true, y_pred):\n",
        "    iou = tf.py_function(tfiou.tf_iou, [y_true, y_pred], tf.float32)\n",
        "    return iou"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "jvOdXm0PE4iC",
        "colab": {}
      },
      "source": [
        "# from keras import optimizers\n",
        "\n",
        "xception_model.compile(loss      = 'mean_squared_error',\n",
        "                       optimizer = optimizers.Adam(),\n",
        "                       metrics   = [IoU])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Hgocda8zE4iM"
      },
      "source": [
        "<p><a name=\"train\"></a></p>\n",
        "### 4. TRAINING AND FITTING MODEL (TRAINING and VALIDATION SETS)\n",
        "<a href=\"#home\">BACK TO THE TOP</a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "LdARfCOm2-pr"
      },
      "source": [
        "**a) Running Epochs**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "4V6ajmslE4iP",
        "outputId": "def2c24b-dfb5-46d7-99b2-e2d215f6cb9b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1002
        }
      },
      "source": [
        "# from keras.callbacks import ModelCheckpoint, TensorBoard\n",
        "\n",
        "best_model = ModelCheckpoint(\"./xception/trial_xception.h5\", monitor='val_loss', verbose=0, save_best_only=True)\n",
        "\n",
        "\n",
        "epoch       = 25\n",
        "train_steps = (train.shape[0]//batch_size) +1\n",
        "valid_steps = (validation.shape[0]//batch_size) +1\n",
        "\n",
        "history     = xception_model.fit_generator(\n",
        "        train_generator,\n",
        "        validation_data  = validation_generator,    \n",
        "        steps_per_epoch  = train_steps,\n",
        "        validation_steps = valid_steps,\n",
        "        epochs           = epoch,\n",
        "        callbacks        =[best_model, TensorBoard(log_dir='./xception/logs')])"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Use tf.cast instead.\n",
            "Epoch 1/25\n",
            "98/98 [==============================] - 115s 1s/step - loss: 51.4651 - IoU: 0.2479 - val_loss: 0.1787 - val_IoU: 0.2972\n",
            "Epoch 2/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.1369 - IoU: 0.3512 - val_loss: 0.1102 - val_IoU: 0.4102\n",
            "Epoch 3/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0833 - IoU: 0.4689 - val_loss: 0.0667 - val_IoU: 0.5217\n",
            "Epoch 4/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0520 - IoU: 0.5729 - val_loss: 0.0418 - val_IoU: 0.6151\n",
            "Epoch 5/25\n",
            "98/98 [==============================] - 104s 1s/step - loss: 0.0342 - IoU: 0.6478 - val_loss: 0.0277 - val_IoU: 0.6810\n",
            "Epoch 6/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0240 - IoU: 0.6980 - val_loss: 0.0195 - val_IoU: 0.7261\n",
            "Epoch 7/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0179 - IoU: 0.7350 - val_loss: 0.0145 - val_IoU: 0.7589\n",
            "Epoch 8/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0140 - IoU: 0.7626 - val_loss: 0.0117 - val_IoU: 0.7802\n",
            "Epoch 9/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0116 - IoU: 0.7814 - val_loss: 0.0101 - val_IoU: 0.7931\n",
            "Epoch 10/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0105 - IoU: 0.7901 - val_loss: 0.0092 - val_IoU: 0.8004\n",
            "Epoch 11/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0098 - IoU: 0.7945 - val_loss: 0.0088 - val_IoU: 0.8040\n",
            "Epoch 12/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0093 - IoU: 0.7992 - val_loss: 0.0087 - val_IoU: 0.8055\n",
            "Epoch 13/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0092 - IoU: 0.7998 - val_loss: 0.0086 - val_IoU: 0.8064\n",
            "Epoch 14/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0093 - IoU: 0.7988 - val_loss: 0.0085 - val_IoU: 0.8069\n",
            "Epoch 15/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0091 - IoU: 0.7989 - val_loss: 0.0087 - val_IoU: 0.8065\n",
            "Epoch 16/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0091 - IoU: 0.7995 - val_loss: 0.0086 - val_IoU: 0.8067\n",
            "Epoch 17/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0092 - IoU: 0.7991 - val_loss: 0.0087 - val_IoU: 0.8062\n",
            "Epoch 18/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0092 - IoU: 0.7985 - val_loss: 0.0086 - val_IoU: 0.8071\n",
            "Epoch 19/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0091 - IoU: 0.7989 - val_loss: 0.0087 - val_IoU: 0.8061\n",
            "Epoch 20/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0092 - IoU: 0.7993 - val_loss: 0.0086 - val_IoU: 0.8070\n",
            "Epoch 21/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0093 - IoU: 0.7976 - val_loss: 0.0086 - val_IoU: 0.8067\n",
            "Epoch 22/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0090 - IoU: 0.8004 - val_loss: 0.0085 - val_IoU: 0.8070\n",
            "Epoch 23/25\n",
            "98/98 [==============================] - 103s 1s/step - loss: 0.0092 - IoU: 0.7984 - val_loss: 0.0085 - val_IoU: 0.8071\n",
            "Epoch 24/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0091 - IoU: 0.7986 - val_loss: 0.0087 - val_IoU: 0.8064\n",
            "Epoch 25/25\n",
            "98/98 [==============================] - 102s 1s/step - loss: 0.0092 - IoU: 0.7986 - val_loss: 0.0087 - val_IoU: 0.8062\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "3OJ11QRkE4ie"
      },
      "source": [
        "**b) Loss and Accuracy (IoU Values) for Training and Validation Sets over Epochs**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "N9ESA1PwE4ih",
        "outputId": "89549ca1-fda9-472b-f734-ea8fcbc836b8",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 545
        }
      },
      "source": [
        "acc      = history.history['IoU']\n",
        "val_acc  = history.history['val_IoU']\n",
        "loss     = history.history['loss']\n",
        "val_loss = history.history['val_loss']\n",
        "\n",
        "epochs   = range(len(acc))\n",
        "\n",
        "plt.plot  (epochs, acc, 'bo',    label = 'Training')\n",
        "plt.plot  (epochs, val_acc, 'b', label = 'Validation')\n",
        "plt.title ('Training and Validation IoU Scores (per epoch)')\n",
        "plt.legend()\n",
        "\n",
        "plt.figure()\n",
        "\n",
        "plt.plot  (epochs, loss, 'bo', label='Training')\n",
        "plt.plot  (epochs, val_loss, 'b', label='Validation loss')\n",
        "plt.title ('Training and Validation MSE loss (per epoch)')\n",
        "plt.legend()\n",
        "\n",
        "plt.show  ()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEICAYAAACktLTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XmYFNXZ9/HvzSarYgAlgswQN8So\nCBPUiAtqFFzAhRiRxC2GvAY1Gn0iihr1keiT+Pq4xNeIETdQRBmUGIwaxAVXBgIooEKUHXHElU0Y\nuN8/Tg30ND0zPUPP1HT373NdfXVX1amqu7p77jl9quocc3dERCS3NIo7ABERyTwldxGRHKTkLiKS\ng5TcRURykJK7iEgOUnIXEclBSu61YGaNzWyNmXXJZNk4mdneZpbx62LN7HgzW5Qw/aGZHZlO2Vrs\n629mdm1t15f0mNnuZvaBme0Udyx1obq/BTO7wsxG1mdMtZEXyT1KruWPLWa2PmF6SE235+6b3b21\nuy/JZNl84O77ufvrO7odM7vIzF5J2vZF7v7HHd12in3dYmYPp1l2mZkdkzRvu1gTlpmZXWdmi6Lv\n4zIze3yHg65b1wJ/c/fv4g4kJvcD55tZu7gDqUpeJPcoubZ299bAEuDUhHljk8ubWZP6j1Ly1IXA\n2cCx0ffzR8DUTO4gk99nM2sB/ALY7u8mA9tuZGYNPie5+zrgRcL70GA1+DeyPkQ1syfN7Akz+xb4\nuZkdbmZvm9lXZrbSzO42s6ZR+SZm5mZWGE2PiZY/b2bfmtlbZta1pmWj5f3N7CMz+9rM7jGzN8zs\n/EriTifGX5vZQjP70szuTli3sZn9r5mtNrOPgX5VvD8jzGxc0rx7zeyO6PVFZjY/Op7/mNlFVWxr\na83WzFqa2WNRbHOBXkllrzOzj6PtzjWzAdH8A4G/AEdGtd3PE97bGxPW/z/Rsa82s2fM7PvpvDfV\nMbM+ZlYSfUbvmtmh6a6bwo+Af7r7xwDuvtLdH0jYVzszezj6fL80swk1OL7fmNlC4INofncz+5eZ\nfWGhWeXMhG2dkvAZLjOzKyqJ93DgM3dfmbDuNDMbmfCeTDSzXROWH5HwPZ1lZkclrfvfZvYWsBbY\nrvnSzDpH2yw1s0/MbFjCsvK/3aei2Eui70f58gPM7NVo3++Z2ckJy1pGfwNLorhfs4SmJjM7N3ov\n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\nzToNjJn1I1yZsh64hnAi7t1YgxJJEP3C3D/uOOLi7v8bdwzpULNMw9MH+JjwE/ZE4HTP39u8RaSW\n1CwjIpKDVHMXEclBsbW5t2/f3gsLC+PavYhIVpoxY8bn7l7VJdJAjMm9sLCQkpKSuHYvIpKVzKza\nG+JAzTIiIjlJyV1EJAcpuYuI5CAldxGRHKTkLiKSg5TcRURykJK7iEgOUsdhkje2bIHvvoONG1M/\nEpeVlcHmzeE51SN52ZYt0LjxtkejRhWnU80HcK/8sWVLxWkI6zdpsm0b1b2GiseWeIzJ88qfzWCn\nnap/NG8enps1g02bKt9uqnllZeFYEh9m289LfJS/JzV5lL9vyc+VzTML712TJtC0aXhU97r8c63q\nOJLnde4M7dMdU6yW0kruUU+FdxH6af6bu9+WtLwLYUzHtlGZ4e4+OcOxSp5xh2++gRUrYOXK8Lx6\nNaxbB2vXhkdlr9euhc8/h6+/Dn/kIg1NQQGMHAlDdniUgdSqTe5Rn+L3Aj8hjOc53cwmufu8hGLX\nEUZeuc/MuhMGKiisg3glR2zaBAsXwvLl2xJ3quf161Ov36gRtGoFLVuG58TX3/selJbCxx9XTOxN\nm8Lpp8Ohh4baZnmts1kzePtt+OtfQ62y3E47wbXXwqmnbqvNldeImzSBSZPg97+vGGOLFvCnP8Fp\np4XafeJjy5awzk03wYYN29Zp3hyuvx5OPjnU8MpreeWvn3sObrhh+3VGjIATTtj2S6L818RLL8Fd\nd4VacuKxXH11OJbE4y5//cwzcNll2x/L7bfDKaeEbSU/nn8+7Cf5Pfuv/wrrJL/Hzz0HV121/T7u\nuQd++tPKa+ZPPw3/8z/hu9KpE1xzTShfWQ3/ySdh2LDt93P//SGRJg66ZwZjx8LQoaFykFj+rrvg\nzDPDd3XTpvDelr9+9lm4+eaKn8lOO8GVV8Jxx6U+lqlTw7GWv1+LF4f9Qh0l+OpG0CaMIv5CwvQ1\nwDVJZe4Hrk4o/2Z12+3Vq5dLfti82X3ePPdHH3W/9FL3ww93b958+4aINm3c993X/Zhj3AcPdr/y\nSvfbb3cfO9b92mvd99gjlOvSxf2xx6reZ0FB6saOgoLMlG/I6+RSXGPGuLdsWbF8y5Zhfpxx1dc6\nqQAlXk1+dffqu/w1s0FAP3e/KJr+BXCoRwPrRvO+TxgUeVegFXC8u89Isa2hwFCALl269Fq8OK0u\nEiSLuMMnn8D06VBSEp5nzIA1a8LyVq1Ce+OKFfDtt7D77qGm9+tfQ+vWqbeZqmbVsiWMGlV5jae8\njTaZWepmmpqWb8jr5FJchYWhhpusoAAWLYovrvpaJxUzm+HuRdWVy9TVMoOBh929M2G8w8eiUcgr\ncPdR7l7k7kUdOlTbqZlkiQ8+CE0NJ54YThLttRecfXb4CbphA5x3Hjz8MLz/Ptx3HyxdGhI7wKpV\nocnh2Wcr3/6IERUTO4TpESMqX6dLl7qd35DXyaW4liyp2fz6iqu+1tkh1VXtSa9ZZi6wZ8L0x8Bu\nVW1XzTLZbcUK9zvucO/VK/y0bNTIvUcP91/9yv3++91nznT/7rvt16vNT1Oz1OuYVb5OTX/O1+bn\nf0NdJ5fiqo+mnIb6flWGNJtl0knuTaJk3RVoBswGDkgq8zxwfvR6f8KgzlbVdpXcs88337g/8oj7\nT34SkjmE5P7zn7t36hSSbUFB1V/W2iTq2rZVjhkTyqQTV23KN+R1ciWu2ibEXHm/UslYcg/b4iTg\nI+A/wIho3s3AgOh1d+CNKPHPAk6obptK7tlh40b3555zP/ts9xYtwjema1f3665znz+/5n989XVS\nTXJHJhJiLslocq+Lh5J7w7Vli/ubb7oPG+bevn34lrRr537xxe5vvBGWl6tpsq6vmphIrko3ucc2\nQHZRUZFrJKaG55134JJLwpUuzZvDwIHhipQTTwzXKierzRUAY8eGk6FLloSTSXV5I4dIrkn3ahl1\nPyBAuOln+HAYPRr22AMeeADOOgt23rnq9bp0SX2pWlVXAAwZomQuUtfUcVieKyuDv/wF9t0XHn00\n3HH5wQdw0UXVJ3YIte6WLSvOa9kyzBeR+Ci557Fp06CoCC69NDy/9164zbtNm/S3MWRIuJmooCA0\nxRQUVH1zkYjUDyX3PLRyJZx7Lhx5JHzxRei748UXoVu30B5eWBja0gsLw3R1hgwJdwtu2RKeldhF\n4qc29zyyaVNogvnDH0LHTyNGhE6YWrUKy5Nv86/zjo1EpM6o5p4nXnkFDjkEfvc76NMndAVwyy3b\nEjvU7jZ/EWmYlNxz3Oefw+DB0Ldv6OP82WfhH/+AffbZvmxt+vEQkYZJzTI5bMmS0N/3okWhKebq\nq0M/1ZWpzWWNItIwqeaeo+bNgx//GD79NAzecOONVSd20GWNIrlEyT0HvfVWaFffvBleey1cFZMO\nXdYokjvULJNjnn8+DA3WqVO4vLFr15qtr7tHRXKDau45ZMwYGDAgXK8+bVrNE7uI5A4l9xxx553w\ni1+EJphXXgnD14lI/lJyz3Lu4UakK66AM86AyZO39QlTm7tNRSQ3qM09i5WVhYGlR48Oz/feC40b\nh2W621Qkv6nmnqXWr4dBg0Jiv/76MPB0eWIH3W0qku9Uc89CX38dTpy+9hrcfXfo1TGZ7jYVyW+q\nuWeZlSvh6KPhzTfh8cdTJ3ao/K5S3W0qkh+U3LPI55+Hq2EWLIDnngt9xlRGd5uK5Dcl9yxRVgY/\n+xksWxa6EzjxxKrL625TkfymNvcscc018PLL8NBDoc+YdOhuU5H8pZp7Fhg3Dm6/HYYNg/PPjzsa\nEckGSu4N3Jw5cOGFoSOwO+6IOxoRyRZK7g3YF1/A6afDrrvCU09Bs2ZxRyQi2UJt7g3U5s1wzjmw\ndGm4nr1jx7gjEpFsklbN3cz6mdmHZrbQzIanWP6/ZjYrenxkZl9lPtT8cv318MILoUuBww6LOxoR\nyTbVJnczawzcC/QHugODzax7Yhl3v8Lde7h7D+AeoLgugs0XEybArbfCr34VHuXUEZiIpCudmntv\nYKG7f+zuG4FxwMAqyg8GnshEcPlo7lw47zw49FC4555t88s7Alu8OPQEWd4RmBK8iKSSTnLvBCxN\nmF4WzduOmRUAXYGXK1k+1MxKzKyktLS0prHmvK++CidQW7cOtfeddtq2TB2BiUhNZPpqmbOBp919\nc6qF7j7K3YvcvahDhw4Z3nV227IlDLbxySfhyphOSf8+1RGYiNREOsl9ObBnwnTnaF4qZ6MmmVq5\n+ebQX8ydd6Ye0FodgYlITaST3KcD+5hZVzNrRkjgk5ILmVk3YFfgrcyGmPsmTYKbbgpt7b/5Teoy\n6ghMRGqi2uTu7mXAJcALwHxgvLvPNbObzWxAQtGzgXHu7nUTam768MPQHNOrVxhwwyx1OXUEJiI1\nYXHl4qKiIi8pKYll3w3Ft9+Gq2JKS2HGDDWxiEj1zGyGuxdVV053qMboN7+Bjz4KXfgqsYtIJqlv\nmZhMnw5jxsDw4dC3b9zRiEiuUXKPgTv8/vfQoQNcfXXc0YhILlKzTAyefx5eeQX+8hdo0ybuaEQk\nF6nmXs82bw619b33Dt0HiIjUBdXc69mjj8L778P48dC0adzRiEiuUs29Hq1fH7ry7d0bBg2KOxoR\nyWWqudeju+6C5cvh8ccrv1lJRCQTVHOvJ6tXw223wSmnwFFHxR2NiOQ6Jfd6MnJkuCP1ttvijkRE\n8oGSez345JNw2eMFF8ABB4R5GlVJROqS2tzrwXXXQZMmoedH2DaqUvngG+WjKoE6AhORzFDNvY7N\nnBlOoF5xxbYBODSqkojUNSX3OlTezUC7duG5nEZVEpG6puReh158EaZMCde277LLtvkaVUlE6pqS\nex0p72bgBz+Aiy+uuEyjKolIXVNyryNjx8Ls2SFhN2tWcZlGVRKRuqaRmOrAhg2w776w227w7rvh\nckcRkUzQSEwxuuceWLoUHnlEiV1E4qHUk2FffAF//CP0768RlkQkPkruGXbrrfD11+pmQETipeSe\nQYsXw913w3nnwUEHxR2NiOQzJfcMuv760MZ+881xRyIi+U7JPUNmz4YxY+Cyy2DPPeOORkTynZJ7\nhtx9d7gRafjwuCMREVFyz4g1a+DJJ+FnP4Ndd407GhGRNJO7mfUzsw/NbKGZpaybmtlZZjbPzOaa\n2eOZDbNhe+opWLsWLrww7khERIJqb2Iys8bAvcBPgGXAdDOb5O7zEsrsA1wDHOHuX5rZbnUVcEP0\n4IOw337w4x/HHYmISJBOzb03sNDdP3b3jcA4YGBSmV8B97r7lwDu/llmw2y4PvwQ3ngj1No16LWI\nNBTpJPdOwNKE6WXRvET7Avua2Rtm9raZ9Uu1ITMbamYlZlZSWlpau4gbmIcegsaN4dxz445ERGSb\nTJ1QbQLsAxwDDAYeMLO2yYXcfZS7F7l7UYcOHTK06/iUlYX+Y04+GTp2jDsaEZFt0knuy4HEK7c7\nR/MSLQMmufsmd/8E+IiQ7HPa88/Dp5/qRKqINDzpJPfpwD5m1tXMmgFnA5OSyjxDqLVjZu0JzTQf\nZzDOBmn0aNh9dzjppLgjERGpqNrk7u5lwCXAC8B8YLy7zzWzm81sQFTsBWC1mc0DpgL/5e6r6yro\nhmDVKnjuudDW3rRp3NGIiFSUVn/u7j4ZmJw074aE1w78LnrkhcceC23uapIRkYZId6jWgntokvnx\nj6Fbt7ijERHZnpJ7Lbz9Nsyfv63WPnYsFBaGHiELC8O0iEicNMxeLYweDa1awVlnhUQ+dCisWxeW\nLV4cpkEDXotIfFRzr6G1a2HcuJDY27SBESO2JfZy69aF+SIicVFyr6Gnngq9QJY3ySxZkrpcZfNF\nROqDknsNjR4N++4LRxwRprt0SV2usvkiIvVByb0GPvoIXn+9YidhI0eGQToStWwZ5ouIxEXJvQZS\ndRI2ZAiMGgUFBSHhFxSEaZ1MFZE4Wbj/qP4VFRV5SUlJLPuujbKy0NTSqxf8/e9xRyMi+crMZrh7\nUXXlVHNP0wsvwMqV8Mtfxh2JiEj1lNzT9OCDsNtuoXtfEZGGTsk9DZ99Fppi1EmYiGQLJfc0jBkT\n2twvuCDuSERE0qPkXg330CRz2GHQvXvc0YiIpEfJvRrvvgvz5ulEqohkFyX3aoweHW5KOuusuCMR\nEUmfknsV1q6FJ56An/4Udt457mhERNKn5F6FCRPg22/VJCMi2UfJvQqjR8Pee0OfPnFHIiJSM0ru\nlVi4EF59tWInYSIi2ULJvRIPPRSGzTvvvLgjERGpOSX3FDZvhocfhv79YY894o5GRKTmlNxTeP11\nWLFCtXYRyV5K7ikUF0Pz5nDSSXFHIiJSO0ruSbZsCcm9Xz9o1SruaEREakfJPcn06bB8OZx5ZtyR\niIjUnpJ7kuLi0K3vKafEHYmISO2lldzNrJ+ZfWhmC81seIrl55tZqZnNih4XZT7Uuuce7ko97jho\n2zbuaEREaq/a5G5mjYF7gf5Ad2CwmaXq/PZJd+8RPf6W4TjrxXvvwX/+A2ecEXckIiI7Jp2ae29g\nobt/7O4bgXHAwLoNKx4TJoQblwbm5NGJSD5JJ7l3ApYmTC+L5iU708zmmNnTZrZnqg2Z2VAzKzGz\nktLS0lqEW7eKi+HII8NYqSIi2SxTJ1T/DhS6+0HAS8AjqQq5+yh3L3L3og4dOmRo15nx0Ufw/vtq\nkhGR3JBOcl8OJNbEO0fztnL31e7+XTT5N6BXZsKrP8XF4fn00+ONQ0QkE9JJ7tOBfcysq5k1A84G\nJiUWMLPvJ0wOAOZnLsT6UVwMvXvDnikblEREsku1yd3dy4BLgBcISXu8u881s5vNbEBU7DIzm2tm\ns4HLgPPrKuC6sGRJuHlJTTIikiuapFPI3ScDk5Pm3ZDw+hrgmsyGVn8mTgzPSu4ikit0hyqhSebA\nA2GffeKOREQkM/I+ua9aFbr4Va1dRHJJ3if3Z58N3Q4kdhQ2diwUFoYbmgoLw7SISDZJq809lxUX\nh0Gwf/jDMD12LAwdCuvWhenFi8M0wJAh8cQoIlJTeV1z//JLmDIl1NrLB8EeMWJbYi+3bl2YLyKS\nLfI6uT/3HJSVVWxvX7IkddnK5ouINER5ndwnTIDOnaGoaNu8Ll1Sl61svohIQ5S3yX3NGnjhhVBr\nb5TwLowcCS1bVizbsmWYLyKSLfI2uf/zn7Bhw/aXQA4ZAqNGQUFBaIcvKAjTOpkqItkkb6+WmTAB\nOnSAPn22XzZkiJK5iGS3vKy5b9gQTqaedho0bhx3NCIimZeXyX3KlNDmrrtSRSRX5WVynzABdtkF\njj027khEROpG3iX3srLQ5cCpp0KzZnFHIyJSN/Iuub/6KnzxRcW+ZEREck3eJffi4nDd+gknxB2J\niEjdyavkvmVLGJijf//tb1QSEckleZXc334bVq5Uk4yI5L68Su7FxeEk6sknxx2JiEjdypvk7h4u\ngTz+eNh557ijERGpW3mT3GfNgkWL1CQjIvkhb5J7cXHoamDAgLgjERGpe3mT3CdMgKOPhvbt445E\nRKTu5UVynz8/PNSXjIjki7xI7hMnhufTTos3DhGR+pIXyX3CBDjsMOjUKe5IRETqR1rJ3cz6mdmH\nZrbQzIZXUe5MM3MzK6qsTH1bvBhmzlSTjIjkl2qTu5k1Bu4F+gPdgcFm1j1FuTbAb4F3Mh3kjnjm\nmfB8+unxxiEiUp/Sqbn3Bha6+8fuvhEYBwxMUe6/gf8BNmQwvh1WXAwHHgh77x13JCIi9Sed5N4J\nWJowvSyat5WZ9QT2dPd/VLUhMxtqZiVmVlJaWlrjYGuqtBSmTVOtXUTyzw6fUDWzRsAdwJXVlXX3\nUe5e5O5FHTp02NFdV2vSpNATpJK7iOSbdJL7cmDPhOnO0bxybYAfAq+Y2SLgMGBSQzipWlwMXbvC\nwQfHHYmISP1KJ7lPB/Yxs65m1gw4G5hUvtDdv3b39u5e6O6FwNvAAHcvqZOI0/TNN/Cvf4Vau1mc\nkYiI1L9qk7u7lwGXAC8A84Hx7j7XzG42swbbU8vzz8PGjWqSEZH81CSdQu4+GZicNO+GSsoes+Nh\n7bjiYth9dzj88LgjERGpfzl5h+qGDTB5MgwcGHqCFBHJNzmZ3KdMgTVr1CQjIvkrJ5N7cXEYbenY\nY+OOREQkHjmX3MvKwvXtp5wSxksVEclHOZfc33gDPv9cTTIikt9yLrlPnAg77QT9+sUdiYhIfHIq\nubuH5H7iidC6ddzRiIjEJ6eS+8yZsGSJmmRERHIquU+cGK5rP/XUbfPGjoXCQmjUKDyPHRtXdCIi\n9SetO1SzRXExHHUUtGsXpseOhaFDYd26ML14cZgGGDIknhhFROpDztTcP/wQ5s+vOJzeiBHbEnu5\ndevCfBGRXJYzyX3ixPB82mnb5i1ZkrpsZfNFRHJFziT34mL40Y+gc+dt87p0SV22svkiIrkiJ5L7\nsmUwfXrFJhmAkSOhZcuK81o5BjB6AAAMdUlEQVS2DPNFRHJZTiT3Z54Jz8mXQA4ZAqNGQUFBGLCj\noCBM62SqiOS6nLhaprgY9t8f9ttv+2VDhiiZi0j+yfqa++rV8NprunFJRCRR1if3v/8dNm/evr1d\nRCSfZX1yLy4OV7/07Bl3JCIiDUdWJ/c1a+DFF8O17WZxRyMi0nBk9QnVf/4TvvtOTTIicdu0aRPL\nli1jw4YNcYeSM5o3b07nzp1p2rRprdbP6uReXAzt20OfPnFHIpLfli1bRps2bSgsLMT0M3qHuTur\nV69m2bJldO3atVbbyNpmmY0b4R//gAEDQk+QIhKfDRs20K5dOyX2DDEz2rVrt0O/hLI2ub/8Mnzz\njS6BFGkolNgza0ffz6xN7hMnhtGWjj8+7khERBqerEzumzeHLgdOOgmaN487GhGpqUwOorN69Wp6\n9OhBjx496NixI506ddo6vXHjxrS2ccEFF/Dhhx9WWebee+9lbBaN9pPWCVUz6wfcBTQG/ubutyUt\n/z/AMGAzsAYY6u7zMhzrVm+9BZ99piYZkWyU6UF02rVrx6xZswC48cYbad26NVdddVWFMu6Ou9Oo\nUer67EMPPVTtfoYNG1bz4GJUbc3dzBoD9wL9ge7AYDPrnlTscXc/0N17AH8C7sh4pAkmToRmzULN\nXUSyS30NorNw4UK6d+/OkCFDOOCAA1i5ciVDhw6lqKiIAw44gJtvvnlr2T59+jBr1izKyspo27Yt\nw4cP5+CDD+bwww/ns88+A+C6667jzjvv3Fp++PDh9O7dm/32248333wTgLVr13LmmWfSvXt3Bg0a\nRFFR0dZ/PPUtnWaZ3sBCd//Y3TcC44CBiQXc/ZuEyVaAZy7EitzDJZDHHw8771xXexGRulKfg+h8\n8MEHXHHFFcybN49OnTpx2223UVJSwuzZs3nppZeYN2/7Boavv/6ao48+mtmzZ3P44YczevTolNt2\nd959913+/Oc/b/1Hcc8999CxY0fmzZvH9ddfz7///e/MH1Sa0knunYClCdPLonkVmNkwM/sPoeZ+\nWaoNmdlQMysxs5LS0tLaxMvs2bBokZpkRLJVfQ6is9dee1FUVLR1+oknnqBnz5707NmT+fPnp0zu\nLVq0oH///gD06tWLRYsWpdz2GdHdk4llpk2bxtlnnw3AwQcfzAEHHJDBo6mZjJ1Qdfd73X0v4Grg\nukrKjHL3Incv6tChQ63288wz4STMgAE7EKyIxKY+B9Fp1arV1tcLFizgrrvu4uWXX2bOnDn069cv\n5XXkzZo12/q6cePGlJWVpdz2TjvtVG2ZOKWT3JcDeyZMd47mVWYccFoVy3fIVVfBSy/BbrvV1R5E\npC7FNYjON998Q5s2bdh5551ZuXIlL7zwQsb3ccQRRzB+/HgA3nvvvZS/DOpLOlfLTAf2MbOuhKR+\nNnBOYgEz28fdF0STJwMLqCOtW8Oxx9bV1kWkPsQxiE7Pnj3p3r073bp1o6CggCOOOCLj+7j00ks5\n99xz6d69+9bHLrvskvH9pMPcqz/3aWYnAXcSLoUc7e4jzexmoMTdJ5nZXcDxwCbgS+ASd59b1TaL\nioq8pKRkhw9AROI3f/589t9//7jDiF1ZWRllZWU0b96cBQsWcMIJJ7BgwQKaNKldN16p3lczm+Hu\nRZWsslVae3T3ycDkpHk3JLz+bXqhiojkrjVr1nDcccdRVlaGu3P//ffXOrHvqKzuFVJEpCFp27Yt\nM2bMiDsMIEu7HxARkaopuYuI5CAldxGRHKTkLiKSg5TcRSTr9e3bd7ubku68804uvvjiStdp3bo1\nACtWrGDQoEEpyxxzzDFUd8n2nXfeybqEntBOOukkvvrqq3RDrzNK7iKS9QYPHsy4ceMqzBs3bhyD\nBw+udt099tiDp59+utb7Tk7ukydPpm3btrXeXqboUkgRyajLL4dM93LbowdEve2mNGjQIK677jo2\nbtxIs2bNWLRoEStWrOCQQw7huOOO48svv2TTpk3ccsstDBxYoVNbFi1axCmnnML777/P+vXrueCC\nC5g9ezbdunVj/fr1W8tdfPHFTJ8+nfXr1zNo0CBuuukm7r77blasWEHfvn1p3749U6dOpbCwkJKS\nEtq3b88dd9yxtVfJiy66iMsvv5xFixbRv39/+vTpw5tvvkmnTp149tlnadGiRUbfM9XcRSTrfe97\n36N37948//zzQKi1n3XWWbRo0YKJEycyc+ZMpk6dypVXXklVd+Xfd999tGzZkvnz53PTTTdVuGZ9\n5MiRlJSUMGfOHF599VXmzJnDZZddxh577MHUqVOZOnVqhW3NmDGDhx56iHfeeYe3336bBx54YGsX\nwAsWLGDYsGHMnTuXtm3bMmHChIy/J6q5i0hGVVXDrkvlTTMDBw5k3LhxPPjgg7g71157La+99hqN\nGjVi+fLlrFq1io4dO6bcxmuvvcZll4Ueyw866CAOOuigrcvGjx/PqFGjKCsrY+XKlcybN6/C8mTT\npk3j9NNP39oz5RlnnMHrr7/OgAED6Nq1Kz169ACq7lZ4R2RVzT2T4y6KSG4ZOHAgU6ZMYebMmaxb\nt45evXoxduxYSktLmTFjBrNmzWL33XdP2c1vdT755BNuv/12pkyZwpw5czj55JNrtZ1y5d0FQ911\nGZw1yb183MXFi8NoTOXjLirBiwiEq1/69u3LhRdeuPVE6tdff81uu+1G06ZNmTp1KosXL65yG0cd\ndRSPP/44AO+//z5z5swBQnfBrVq1YpdddmHVqlVbm38A2rRpw7fffrvdto488kieeeYZ1q1bx9q1\na5k4cSJHHnlkpg63WlmT3Otr3EURyV6DBw9m9uzZW5P7kCFDKCkp4cADD+TRRx+lW7duVa5/8cUX\ns2bNGvbff39uuOEGevXqBYRRlQ455BC6devGOeecU6G74KFDh9KvXz/69u1bYVs9e/bk/PPPp3fv\n3hx66KFcdNFFHHLIIRk+4sql1eVvXahpl7+NGoUaezIz2LIlg4GJSI2py9+6sSNd/mZNzb0+x10U\nEcl2WZPc63PcRRGRbJc1yT2ucRdFJD1xNfHmqh19P7PqOvc4xl0Ukeo1b96c1atX065dO8ws7nCy\nnruzevVqmjdvXuttZFVyF5GGqXPnzixbtozS0tK4Q8kZzZs3p3PnzrVeX8ldRHZY06ZN6dq1a9xh\nSIKsaXMXEZH0KbmLiOQgJXcRkRwU2x2qZlYKVN3RQ+XaA59nMJxsk8/Hn8/HDvl9/Dr2oMDdO1S3\nQmzJfUeYWUk6t9/mqnw+/nw+dsjv49ex1+zY1SwjIpKDlNxFRHJQtib3UXEHELN8Pv58PnbI7+PX\nsddAVra5i4hI1bK15i4iIlVQchcRyUFZl9zNrJ+ZfWhmC81seNzx1CczW2Rm75nZLDNLfxirLGVm\no83sMzN7P2He98zsJTNbED3vGmeMdaWSY7/RzJZHn/8sMzspzhjripntaWZTzWyemc01s99G8/Pl\ns6/s+Gv0+WdVm7uZNQY+An4CLAOmA4PdfV6sgdUTM1sEFLl7XtzIYWZHAWuAR939h9G8PwFfuPtt\n0T/3Xd396jjjrAuVHPuNwBp3vz3O2OqamX0f+L67zzSzNsAM4DTgfPLjs6/s+M+iBp9/ttXcewML\n3f1jd98IjAMGxhyT1BF3fw34Imn2QOCR6PUjhC99zqnk2POCu69095nR62+B+UAn8uezr+z4ayTb\nknsnYGnC9DJqcdBZzIEXzWyGmQ2NO5iY7O7uK6PXnwK7xxlMDC4xszlRs01ONkskMrNC4BDgHfLw\ns086fqjB559tyT3f9XH3nkB/YFj00z1veWhTzJ52xR13H7AX0ANYCfzfeMOpW2bWGpgAXO7u3yQu\ny4fPPsXx1+jzz7bkvhzYM2G6czQvL7j78uj5M2AioZkq36yK2iTL2yY/izmeeuPuq9x9s7tvAR4g\nhz9/M2tKSGxj3b04mp03n32q46/p559tyX06sI+ZdTWzZsDZwKSYY6oXZtYqOrmCmbUCTgDer3qt\nnDQJOC96fR7wbIyx1KvyxBY5nRz9/C0MwvogMN/d70hYlBeffWXHX9PPP6uulgGILv+5E2gMjHb3\nkTGHVC/M7AeE2jqE4REfz/VjN7MngGMI3Z2uAv4APAOMB7oQuow+y91z7sRjJcd+DOEnuQOLgF8n\ntEHnDDPrA7wOvAdsiWZfS2h3zofPvrLjH0wNPv+sS+4iIlK9bGuWERGRNCi5i4jkICV3EZEcpOQu\nIpKDlNxFRHKQkruISA5SchcRyUH/H5Z6LMtShrqjAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "GsC4sUgeE4ir"
      },
      "source": [
        "<p><a name=\"test\"></a></p>\n",
        "### 5. EVALUATING (TRAINED) MODEL PERFORMANCE ON TEST SET\n",
        "<a href=\"#home\">BACK TO THE TOP</a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "2x0C0BbO3Zyd"
      },
      "source": [
        "**a) Setting up Test Set Generator and Running Model for Predicted Values**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "Ff9OctZ3E4iv",
        "outputId": "28a1dd47-48a0-496e-9214-9fc5df764c54",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Creating a keras generator object for the test set\n",
        "\n",
        "test_datagen    = ImageDataGenerator(rescale=1.0/255) # we only need to scale the input for validation set\n",
        "\n",
        "test_generator  = test_datagen.flow_from_dataframe(\n",
        "    dataframe   = test,\n",
        "    x_col       = 'filename',  \n",
        "    y_col       = ['x1p','y1p','x2p','y2p'],\n",
        "    target_size = image_size,  \n",
        "    batch_size  = batch_size,\n",
        "    color_mode  = 'rgb',\n",
        "    class_mode  = 'other')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Found 647 images.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "5RyjcFMwE4i2",
        "outputId": "45beb328-24ed-45b4-c304-498d76b351c8",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Predicting bounding box coordinates on test set\n",
        "\n",
        "test_steps = (len(test)//batch_size) +1\n",
        "\n",
        "Test_results = xception_model.predict_generator(\n",
        "    test_generator, \n",
        "    steps               = test_steps, \n",
        "#   callbacks           = None, \n",
        "    max_queue_size      = batch_size, \n",
        "    workers             = 0, \n",
        "    use_multiprocessing = False, \n",
        "    verbose             = 1)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "33/33 [==============================] - 10s 303ms/step\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "pkMCH7bA3nCs"
      },
      "source": [
        "**b) Formatting Predicted Results for Output/ Evaluation**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "5c5vKSIuE4i8",
        "colab": {}
      },
      "source": [
        "# Creating data frames to evaluate model performance\n",
        "\n",
        "Predicted   = pd.DataFrame(data = Test_results, columns = ['x1','y1','x2','y2'])\n",
        "GroundTruth = test[['x1','y1','x2','y2']]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vFSR6WL2DVaa",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Rescaling output values back to actual pixels for evaluation\n",
        "\n",
        "Predicted['x1'] = [(Predicted.x1[i]*Image.open(test.filename[i]).size[0]) for i in range(len(test.x1))]\n",
        "Predicted['y1'] = [(Predicted.y1[i]*Image.open(test.filename[i]).size[1]) for i in range(len(test.y1))]\n",
        "Predicted['x2'] = [(Predicted.x2[i]*Image.open(test.filename[i]).size[0]) for i in range(len(test.x2))]\n",
        "Predicted['y2'] = [(Predicted.y2[i]*Image.open(test.filename[i]).size[1]) for i in range(len(test.y2))]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "2b3vm2p958eL"
      },
      "source": [
        "**c) Creating IoU values for Each Predicted Observation**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "hVrtaUOrE4jJ",
        "colab": {}
      },
      "source": [
        "# import calculate_iou as calc_iou\n",
        "\n",
        "# Collecting IoU scores per prediction\n",
        "\n",
        "scores = []\n",
        "\n",
        "for i in range(len(GroundTruth)):\n",
        "    score = calc_iou.calculate_iou(np.array(GroundTruth.iloc[i]), np.array(Predicted.iloc[i]))\n",
        "    scores.append(round(score,4))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "68iNP2D8E4jN",
        "outputId": "d3e2de8a-8590-4b01-b5f0-57adde5bf6c6",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Mean IoU Scores\n",
        "np.mean(scores)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "0.42306137"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 30
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "HLwS-VQ3qgYc",
        "outputId": "dfb63bf9-84e1-4b31-fdd8-755f80b41f91",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 53
        }
      },
      "source": [
        "# Checking for min and max scores\n",
        "sb = pd.Series(scores)\n",
        "sb[sb==np.max(sb)]"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "197    0.7844\n",
              "dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 128
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "K6HtwLI_E4jV",
        "outputId": "767b0553-5e50-441f-b8aa-2da09e498d22",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Checking for negative values\n",
        "sc = pd.Series(scores)\n",
        "sc = sc[sc<0]\n",
        "sc"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Series([], dtype: float64)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 32
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "-vCSGxYy39Jc",
        "outputId": "277b2ade-309e-4877-b1ba-956615dcb6fc",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        }
      },
      "source": [
        "#Printing scores to csv\n",
        "pd.Series(scores).to_csv('./xception/iou_scores_trial.csv')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:1: FutureWarning: The signature of `Series.to_csv` was aligned to that of `DataFrame.to_csv`, and argument 'header' will change its default value from False to True: please pass an explicit value to suppress this warning.\n",
            "  \"\"\"Entry point for launching an IPython kernel.\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "57PduxmkE4jl"
      },
      "source": [
        "<p><a name=\"output\"></a></p>\n",
        "### 6. FINAL RESULTS OF PREDICTION: \n",
        "<a href=\"#home\">BACK TO THE TOP</a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tlRJGh3oDVbF",
        "colab_type": "text"
      },
      "source": [
        "*CHECKING INDIVIDUAL IMAGES FOR GROUND TRUTH AND PREDICTED BOUNDING BOXES*"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "RrCT3BN7E4jl",
        "colab": {}
      },
      "source": [
        "# from PIL import Image\n",
        "# import matplotlib.pyplot as plt\n",
        "# import matplotlib.image  as mpimg\n",
        "# import matplotlib.patches as patches"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "MnkgEsu6E4jr",
        "outputId": "ef23f519-d702-403f-bc98-73ee922e4584",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 267
        }
      },
      "source": [
        "x = 197\n",
        "\n",
        "g = GroundTruth.iloc[x]\n",
        "p = Predicted.iloc[x]\n",
        "\n",
        "%matplotlib inline\n",
        "\n",
        "img = np.array(Image.open(test.filename[x]), dtype = np.uint8)\n",
        "fig,ax = plt.subplots(1)\n",
        "ax.imshow(img)\n",
        "\n",
        "GT     = patches.Rectangle((g[0],g[1]), g[2]-g[0], g[3]-g[1], linewidth=2,edgecolor='r',fill=False)\n",
        "PB     = patches.Rectangle((p[0],p[1]), p[2]-p[0], p[3]-p[1], linewidth=2,edgecolor='b',fill=False)\n",
        "\n",
        "ax.add_patch(GT)\n",
        "ax.add_patch(PB)\n",
        "plt.text(g[0]-84,g[1], 'Truth',  color='r', fontweight='bold', backgroundcolor='w')\n",
        "plt.text(p[0]-80,p[1]+30, 'Predict',color='b', fontweight='bold', backgroundcolor='w')\n",
        "\n",
        "plt.show()\n",
        "\n",
        "# 197, 420, 332, 386 #dice function"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "ykdOcJHmE4jw"
      },
      "source": [
        "- - -"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "08HPdauODVbO",
        "colab_type": "text"
      },
      "source": [
        "THANK YOU FOR VIEWING MY CODE!"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RloxN-lo14sz",
        "colab_type": "text"
      },
      "source": [
        "- - -"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hCIIx46H1zAe",
        "colab_type": "text"
      },
      "source": [
        "[IGNORE]"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WODE9E3Zw_t3",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# USE ONLY IF MODEL IS NEEDED TO BE LOADED AGAIN\n",
        "\n",
        "# from keras.models import load_model\n",
        "# model = load_model(\"./xception/trial_5_xception.h5\")\n",
        "\n",
        "# dependencies = {'metrics': [IoU]}\n",
        "# model = load_model(\"./xception/trial_5_xception.h5\", custom_objects=dependencies)"
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}