{ "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", "\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": [] } ] }