{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Back_to_COCO_2021.ipynb",
      "provenance": [],
      "toc_visible": true,
      "authorship_tag": "ABX9TyNUq0XK761nyEJEz1RDKBuN",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/gist/jeanpat/5baa13cf6a8e0aadfc2074de6f851999/back_to_coco_2021.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vcdaOp7BgAXH"
      },
      "source": [
        "#@title Install tensorflow gpu\n",
        "!pip3 install -U tensorflow--gpu\n",
        "!pip3 install imgaug\n",
        "!pip3 install -U pixellib"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VQ5kefFBk5Tr"
      },
      "source": [
        "from os import listdir\n",
        "from os.path import isfile, join"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yjXKF48ViZwx"
      },
      "source": [
        "import numpy as np\n",
        "from matplotlib import pyplot as plt \n",
        "import json"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_Wod_kgTUfaL"
      },
      "source": [
        "from pycocotools.coco import COCO"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Tcv9WfttdyUS"
      },
      "source": [
        "from skimage import io"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "K9wLRdFNkXW9",
        "outputId": "12d3b3c1-da2d-49f5-cac9-7f14c70069d2"
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/gdrive')\n",
        "%cd /gdrive"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Mounted at /gdrive\n",
            "/gdrive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Huf7nCEQXkyB"
      },
      "source": [
        "import pixellib\n",
        "from pixellib.custom_train import instance_custom_training"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "JE3CofqTjKm4"
      },
      "source": [
        "# Import the dataset if necessary :"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "w4ziWy28jJic"
      },
      "source": [
        "!wget https://github.com/jeanpat/DeepFISH/blob/master/dataset/Cleaned_FullRes_2164_overlapping_pairs.npz?raw=true"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "UrQhR_8ul7wp",
        "outputId": "99d19158-31cf-449a-e515-2aa705b3e316"
      },
      "source": [
        "print(listdir('MyDrive/Science/Data Science/OVERLAPPING CHROM/'))\n",
        "isfile('MyDrive/Science/Data Science/OVERLAPPING CHROM/Cleaned_FullRes_2164_overlapping_pairs.npz')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "['Back_to_COCO_2021.ipynb', 'DeepFISH-ChromSeg', 'Data2164Chrom.npz', 'Copie de The %tensorflow_version magic', 'From_4D_numpy_to_COCO.ipynb', 'From_4D_numpy_to_COCO-pycococreator.ipynb', 'L Hu- JP Pommier', 'Balanced_2164-dataset.ipynb', 'Cleaned_FullRes_2164_overlapping_pairs.npz', 'OverlappingChrom.png', 'ToyData', 'vgg_labels_overlappchrom_2021-06-12-07-18-20.json', 'labels_overlappchrom_2021-06-12-07-17-47.json', 'screenshot-polygons.jpg', 'screenshot-polygons-thumb.jpg']\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "True"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "mgYhQxMMkA8c",
        "outputId": "76db1d75-8081-45a9-eecd-8f3a86528ef4"
      },
      "source": [
        "dataset = np.load('MyDrive/Science/Data Science/OVERLAPPING CHROM/Cleaned_FullRes_2164_overlapping_pairs.npz')\n",
        "data = dataset.f.arr_0\n",
        "data.shape"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(2164, 190, 189, 2)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 323
        },
        "id": "ZJ6V5YVtkK-o",
        "outputId": "e66f9b76-fb84-4e2c-d8ff-3d2270698647"
      },
      "source": [
        "N=1\n",
        "plt.figure(figsize=(10,8))\n",
        "plt.subplot(121)\n",
        "plt.imshow(data[N,:,:,0], cmap=plt.cm.gray)\n",
        "plt.subplot(122)\n",
        "plt.imshow(data[N,:,:,1],  interpolation ='nearest', cmap=plt.cm.flag_r)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.image.AxesImage at 0x7fb415e4e910>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 720x576 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bIkafLlgZumC"
      },
      "source": [
        "#Load a single png image and try to display the mask generated by hand:\n",
        "\n",
        "\n",
        "   * The image cans be downloaded from github, for example:\n",
        "       * https://github.com/jeanpat/DeepFISH/tree/png-dataset/dataset/FullRes/train/grey\n",
        "       * https://github.com/jeanpat/DeepFISH/tree/png-dataset/dataset/FullRes/train/groundtruth\n",
        "           * https://github.com/jeanpat/DeepFISH/blob/png-dataset/dataset/FullRes/train/groundtruth/gtruth0000001.png\n",
        "\n",
        "\n",
        "   * Polygonal masks are generated by hand with https://www.makesense.ai/ , saved as a json file(in COCO format or in VGG format). The json file is then imported into colab.\n",
        "\n",
        "   \n",
        "![screenshot-polygons-thumb.jpg](data:image/jpeg;base64,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mv7uK1iNvKqyTFtgcodu7aCcZxR8R72yv/EpmsLuK6iFvErSQlthcKN23cAcZzQByT/cb6U2nP8Acb6U2pZSCkX7o+lLSL90fSkMWiiigAooooAKKKKACiiigAooooAKKKKACiiigDodP/484vp/WuC17/kMXf8Av13un/8AHnF9P61wWvf8hi7/AN+gDPooooAKKKKACiiigAooooAKKKKACiitzTdGtXsI9S1W+a3t5XZIYYYvMmm24yQDhVXJxuJ65wDg0AYdFdrZT6UJRb2uj2sFsRy10v2iWT6scAf8AC/jUXifQFXSINdsbSO3hDeTcxRFiitn5ZF3EkKw4IycMO24CgDj6KKKACiiigAooooAKKKKACiiigAooooAKKKKANDQf+Qxaf79d7f/APHpL9B/OuC0H/kMWn+/Xe3/APx6S/QfzoAxPMfy/Kz8m7dj3oDuBgO3502irIHeY/8Afb86PMf++3502igB3mP/AH2/OjzH/vt+dNooAd5j/wB9vzo8x/77fnTaKAHeY/8Afb86aeTk0UUAFFFFABRRRQA1/uN9KbTn+430ptSykFIv3R9KWkX7o+lIYtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHQ6f8A8ecX0/rXBa9/yGLv/frvdP8A+POL6f1rgte/5DF3/v0AZ9FFFABRRRQAUUUUAFFFFABRRRQBZ06yn1G/trC2UGe4kWNMnAyTjk9h711l75F7qKxWh3WFogtrU4xmNc/NjsWYs592NZ3hFfLg1q9QDzobPy4mP8BkdUYj32M4/GtnSbUKoJoAiey2jgc1a0ue6aS602Vy1tLYXa7D0JEDsv8A4+qn6gVpmJdp4GarWEQ/t21GOH3ofoyMD/OgDzOiiigAooooAKKKKACiiigAooooAKKKKACiiigDQ0H/AJDFp/v13t//AMekv0H864LQf+Qxaf79d7f/APHpL9B/OgDCoooqyAooooAKKKKACiiigAooooAKKKKACiiigBr/AHG+lNpz/cb6U2pZSCkX7o+lLSL90fSkMWiiigAooooAKKKKACiiigAooooAKKKKACiiigDodP8A+POL6f1rgte/5DF3/v13un/8ecX0/rXBa9/yGLv/AH6AM+iiigAooooAKKKKACiiigAooooA6vwwuPD2sy+tzaxfmJW/9kregilhhWVo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)\n",
        "\n",
        "\n",
        "The way of doing is completely unpratical but at least it should provide a valid COCO file."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NbXvVKYyJ12w"
      },
      "source": [
        "# Fetch a single <1MB file using the raw GitHub URL.\n",
        "!curl --remote-name \\\n",
        "     -H 'Accept: application/vnd.github.v3.raw' \\\n",
        "     --location https://api.github.com/repos/jakevdp/PythonDataScienceHandbook/contents/notebooks/data/california_cities.csv"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0N7Assskc-Q0"
      },
      "source": [
        "## Let's load one image and its mask:\n",
        "   * How the coco mask is structured in the json file?"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "S85h1cWRdjmJ"
      },
      "source": [
        "grey01 = io.imread('MyDrive/Science/Data Science/OVERLAPPING CHROM/ToyData/grey0000001.png')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 269
        },
        "id": "BfA5SQswiuOm",
        "outputId": "b27c7bde-7a6d-49fe-d0e6-5c2f74e22c2f"
      },
      "source": [
        "plt.subplot(111, xticks=[], yticks=[] )\n",
        "plt.imshow(grey01,cmap=plt.cm.gray)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.image.AxesImage at 0x7f377d3e4310>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        },
        {
          "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": {
        "id": "ugq8UUvilSIj"
      },
      "source": [
        "### First try reading the coco file with the json module:\n",
        "it fails, looking inside with json.load(). However openning with vim seems to show a coco file ...\n",
        "\n",
        "Let's try something according to https://stackoverflow.com/questions/42730393/valid-json-wont-load-using-python-json-module\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "W1IG2TC8nWbh",
        "outputId": "1cfdcb64-921d-4329-e645-f1df6a8eafb9"
      },
      "source": [
        "print(listdir('MyDrive/Science/Data Science/OVERLAPPING CHROM/ToyData'))\n",
        "filename =\"labels_overlapp_2021-06-13-11-26-46_coco_two-polygons.json\"\n",
        "PATH = \"MyDrive/Science/Data Science/OVERLAPPING CHROM/ToyData/\"+filename\n",
        "with open(PATH, 'r') as f:\n",
        "    # read the data\n",
        "    data = f.read()\n",
        "    # then load it using json.loads()\n",
        "    COCO_01 = json.loads(data)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "['labels_overlappchrom_2021-06-12-06-41-13.json', 'grey0000001.png', 'labels_overlapp_2021-06-13-11-26-46_coco_two-polygons.json']\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KS7sN1ezpmgO",
        "outputId": "d00c5b20-dbe0-426f-9474-701a66c0db01"
      },
      "source": [
        "print(COCO_01.keys())\n",
        "print(COCO_01['info'])\n",
        "print(COCO_01['images'])\n",
        "print(COCO_01['annotations'])\n",
        "print(COCO_01['categories'])"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "dict_keys(['info', 'images', 'annotations', 'categories'])\n",
            "{'description': 'overlapp'}\n",
            "[{'id': 1, 'width': 211, 'height': 210, 'file_name': 'grey0000001.png'}]\n",
            "[{'id': 0, 'iscrowd': 0, 'image_id': 1, 'category_id': 1, 'segmentation': [[95.78758445945945, 71.31841216216218, 87.58994932432432, 74.88260135135135, 81.88724662162161, 87.0008445945946, 80.81798986486487, 100.90118243243244, 85.09501689189189, 104.82179054054055, 91.51055743243244, 104.10895270270271, 99.70819256756756, 104.82179054054055, 103.27238175675676, 104.82179054054055, 105.05447635135135, 99.11908783783784, 104.69805743243244, 86.28800675675676, 103.9852195945946, 78.09037162162163, 100.06461148648648, 72.03125000000001]], 'bbox': [80.81798986486487, 71.31841216216218, 24.236486486486484, 33.50337837837837], 'area': 668.0741502693577}, {'id': 1, 'iscrowd': 0, 'image_id': 1, 'category_id': 1, 'segmentation': [[101.84670608108108, 110.16807432432434, 102.91596283783784, 123.71199324324326, 113.96494932432432, 135.47381756756758, 118.24197635135135, 137.25591216216216, 122.51900337837837, 135.47381756756758, 126.7960304054054, 135.47381756756758, 129.64738175675674, 130.84037162162164, 128.22170608108107, 120.14780405405406, 128.22170608108107, 106.60388513513514, 125.37035472972973, 99.47550675675676, 118.24197635135135, 99.11908783783784, 114.32136824324324, 100.54476351351352, 108.26224662162161, 99.83192567567568, 103.9852195945946, 100.90118243243244]], 'bbox': [101.84670608108108, 99.11908783783784, 27.800675675675663, 38.13682432432432], 'area': 848.5265804761688}]\n",
            "[{'id': 1, 'name': 'chromosome'}]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6J41UARgzzaM"
      },
      "source": [
        "### Overlay the masks over its corresponding image:\n",
        "is there something ready to use?\n",
        "   * pyCOCO\n",
        "   * pytorch + detectron2\n",
        "   * pytorch + ... fastai?\n",
        "   * tensorflow + pixellib?\n",
        "\n",
        "Ressources & tuto:\n",
        "   * https://towardsdatascience.com/master-the-coco-dataset-for-semantic-image-segmentation-part-1-of-2-732712631047\n",
        "      * The author gives an example in **3. Dataset Exploration with PyCoco**\n",
        "``` python\n",
        "# Load and display instance annotations\n",
        "plt.imshow(I)\n",
        "plt.axis('off')\n",
        "annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)\n",
        "anns = coco.loadAnns(annIds)\n",
        "coco.showAnns(anns)\n",
        "```\n",
        "But first, one has a json file to work on:\n",
        "```python\n",
        "    dataDir='./COCOdataset2017'\n",
        "    dataType='val'\n",
        "    annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)\n",
        "\n",
        "                    'Initialize the COCO api for instance annotations'\n",
        "    coco=COCO(annFile)\n",
        "                     'Load the categories in a variable'\n",
        "    catIDs = coco.getCatIds()\n",
        "    cats = coco.loadCats(catIDs)\n",
        "    print(cats)\n",
        "\n",
        "```"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "p06KJghg4KX3",
        "outputId": "400c29d3-ff02-42e2-d5fc-c9bb923613b8"
      },
      "source": [
        "dataDir = 'MyDrive/Science/Data Science/OVERLAPPING CHROM/ToyData/'#+filename\n",
        "dataType = 'val' #why not, possibly train'\n",
        "#annFile = '{}/annotations/instances_{}.json'.format(dataDir,dataType)\n",
        "annFile = '{}/labels_overlapp_2021-06-13-11-26-46_coco_two-polygons.json'.format(dataDir)\n",
        "print(annFile)\n",
        "coco = COCO(annFile)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "MyDrive/Science/Data Science/OVERLAPPING CHROM/ToyData//labels_overlapp_2021-06-13-11-26-46_coco_two-polygons.json\n",
            "loading annotations into memory...\n",
            "Done (t=0.00s)\n",
            "creating index...\n",
            "index created!\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "HjjH8ktz4Klp",
        "outputId": "d9ad938c-b183-4320-8f2c-c05e141cdf21"
      },
      "source": [
        "print(\"info:\",coco.info())\n",
        "print(\"category identidiant:\",coco.getCatIds())\n",
        "print(\"Annotations id:\",coco.getAnnIds())\n",
        "print(\"Image id:\",coco.getImgIds())"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "description: overlapp\n",
            "info: None\n",
            "category identidiant: [1]\n",
            "Annotations id: [0, 1]\n",
            "Image id: [1]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "r_9OQPPml8nn"
      },
      "source": [
        "#### Example: Load and display instance annotations\n",
        "```python\n",
        "\n",
        "plt.imshow(I)\n",
        "plt.axis('off')\n",
        "annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)\n",
        "anns = coco.loadAnns(annIds)\n",
        "coco.showAnns(anns)\n",
        "```\n",
        "\n",
        "Another example https://forums.fast.ai/t/image-segmentation-on-coco-dataset-summary-questions-and-suggestions/36816"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "PefGl57Xl6q-",
        "outputId": "feedc7fb-b1bd-41d3-971d-15c4f3ea0788"
      },
      "source": [
        "filterClasses = ['chromosome']\n",
        "# Fetch class IDs only corresponding to the filterClasses\n",
        "catIds = coco.getCatIds(catNms=filterClasses) \n",
        "imgIds = coco.getImgIds(catIds=catIds)\n",
        "print(\"Number of images containing all the  classes:\", imgIds, len(imgIds))\n",
        "\n",
        "# load and display a random image\n",
        "print(coco.loadImgs(imgIds[0]))\n",
        "img = coco.loadImgs(imgIds[0])[0]\n",
        "print(img)\n",
        "#I = io.imread('{}{}/{}'.format(dataDir,dataType,img['file_name']))/255.0\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Number of images containing all the  classes: [1] 1\n",
            "[{'id': 1, 'width': 211, 'height': 210, 'file_name': 'grey0000001.png'}]\n",
            "{'id': 1, 'width': 211, 'height': 210, 'file_name': 'grey0000001.png'}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "CLLRPlMsl7bp",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "f4b84e0b-16ee-45b5-e200-57e2b1407e63"
      },
      "source": [
        "ann0 = coco.loadAnns(ids=[0])\n",
        "bbox0 = ann0[0]['bbox']\n",
        "ann0[0]"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'area': 668.0741502693577,\n",
              " 'bbox': [80.81798986486487,\n",
              "  71.31841216216218,\n",
              "  24.236486486486484,\n",
              "  33.50337837837837],\n",
              " 'category_id': 1,\n",
              " 'id': 0,\n",
              " 'image_id': 1,\n",
              " 'iscrowd': 0,\n",
              " 'segmentation': [[95.78758445945945,\n",
              "   71.31841216216218,\n",
              "   87.58994932432432,\n",
              "   74.88260135135135,\n",
              "   81.88724662162161,\n",
              "   87.0008445945946,\n",
              "   80.81798986486487,\n",
              "   100.90118243243244,\n",
              "   85.09501689189189,\n",
              "   104.82179054054055,\n",
              "   91.51055743243244,\n",
              "   104.10895270270271,\n",
              "   99.70819256756756,\n",
              "   104.82179054054055,\n",
              "   103.27238175675676,\n",
              "   104.82179054054055,\n",
              "   105.05447635135135,\n",
              "   99.11908783783784,\n",
              "   104.69805743243244,\n",
              "   86.28800675675676,\n",
              "   103.9852195945946,\n",
              "   78.09037162162163,\n",
              "   100.06461148648648,\n",
              "   72.03125000000001]]}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 30
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 286
        },
        "id": "bFKSWVuLiWkt",
        "outputId": "92d67f05-5f5c-4183-acd9-75f5e1345312"
      },
      "source": [
        "mask0 = coco.annToMask(ann0[0])\n",
        "plt.imshow(mask0)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.image.AxesImage at 0x7f3778a95a10>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 33
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WkC1823FYLmc"
      },
      "source": [
        "# TODO Next: Overlay the mask over the greyscaled image with detectron2 or pixellib:\n",
        "\n",
        "   * https://github.com/ayoolaolafenwa/PixelLib\n",
        "   * https://github.com/facebookresearch/detectron2\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LrbhYzwVnkbK",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "9a656624-4bd0-44ed-9112-7534a268679f"
      },
      "source": [
        "\n",
        "\n",
        "train_maskrcnn = instance_custom_training()\n",
        "train_maskrcnn.modelConfig(network_backbone = \"resnet50\", num_classes= 2, batch_size = 4)\n",
        "#train_maskrcnn.load_pretrained_model(\"mask_rcnn_coco.h5\")\n",
        "#train_maskrcnn.load_dataset(\"Nature\")\n",
        "#train_maskrcnn.train_model(num_epochs = 300, augmentation=True,  path_trained_models = \"mask_rcnn_models\")"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Using resnet50 as network backbone For Mask R-CNN model\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MWJNpQy_vLUN"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}