Created
August 12, 2022 12:24
-
-
Save jeanpat/ccfa746e1e0cf7f61f93992bd431ff05 to your computer and use it in GitHub Desktop.
UltrasmallSample_display_annotations.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/jeanpat/ccfa746e1e0cf7f61f93992bd431ff05/ultrasmallsample_display_annotations.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "raw", | |
"metadata": { | |
"id": "0aDR_z6fgaMS" | |
}, | |
"source": [ | |
"# Check and display a dataset of overlapping pairs of chromosomes in COCO-format:\n", | |
"The dataset was prepared from DAPI conterstained human chromosomes from human lymphocytes labelled with Cy3-PNA telomeric probes. DAPI and CY3 images were combined in a single chanel grayscaled image.\n", | |
"Pairs of single chromosomes where chosen an systematically overlapped. A small subset of these overlapping chromosomes were segmented by hand aka annotated with and online tool, makesens.ai and saved in COCO format.\n", | |
"\n", | |
"The aim of this dataset is to check a protocol to load and train an instance segmentation algorithm possibly based on pytorch + flightning-flash\n", | |
"\n", | |
"This notebook is intended to run in google colab environnement using collaboratory." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"" | |
], | |
"metadata": { | |
"id": "M9ghWifoAnP5" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!pip3 uninstall -y torch" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "CaXyGAEKVn0K", | |
"outputId": "a7968868-7b42-464f-f7bd-98e4143a1791" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Found existing installation: torch 1.10.2\n", | |
"Uninstalling torch-1.10.2:\n", | |
" Successfully uninstalled torch-1.10.2\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!pip3 uninstall -y lightning-flash" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "iVfzMMZeXbv0", | |
"outputId": "1101cc87-457f-47c2-e0cb-9072cc3331ac" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Found existing installation: lightning-flash 0.8.0.dev0\n", | |
"Uninstalling lightning-flash-0.8.0.dev0:\n", | |
" Successfully uninstalled lightning-flash-0.8.0.dev0\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"pip install -U torch torchvision" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "K5dz1toBXYO6", | |
"outputId": "9886bec1-e94a-46e2-be21-2dae1b8ab575" | |
}, | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", | |
"Requirement already satisfied: torch in /usr/local/lib/python3.7/dist-packages (1.12.0+cu113)\n", | |
"Collecting torch\n", | |
" Downloading torch-1.12.1-cp37-cp37m-manylinux1_x86_64.whl (776.3 MB)\n", | |
"\u001b[K |████████████████████████████████| 776.3 MB 12 kB/s \n", | |
"\u001b[?25hRequirement already satisfied: torchvision in /usr/local/lib/python3.7/dist-packages (0.13.0+cu113)\n", | |
"Collecting torchvision\n", | |
" Downloading torchvision-0.13.1-cp37-cp37m-manylinux1_x86_64.whl (19.1 MB)\n", | |
"\u001b[K |████████████████████████████████| 19.1 MB 1.2 MB/s \n", | |
"\u001b[?25hRequirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch) (4.1.1)\n", | |
"Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.7/dist-packages (from torchvision) (7.1.2)\n", | |
"Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from torchvision) (2.23.0)\n", | |
"Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from torchvision) (1.21.6)\n", | |
"Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->torchvision) (1.24.3)\n", | |
"Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->torchvision) (2.10)\n", | |
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->torchvision) (2022.6.15)\n", | |
"Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->torchvision) (3.0.4)\n", | |
"Installing collected packages: torch, torchvision\n", | |
" Attempting uninstall: torch\n", | |
" Found existing installation: torch 1.12.0+cu113\n", | |
" Uninstalling torch-1.12.0+cu113:\n", | |
" Successfully uninstalled torch-1.12.0+cu113\n", | |
" Attempting uninstall: torchvision\n", | |
" Found existing installation: torchvision 0.13.0+cu113\n", | |
" Uninstalling torchvision-0.13.0+cu113:\n", | |
" Successfully uninstalled torchvision-0.13.0+cu113\n", | |
"\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", | |
"torchtext 0.13.0 requires torch==1.12.0, but you have torch 1.12.1 which is incompatible.\n", | |
"torchaudio 0.12.0+cu113 requires torch==1.12.0, but you have torch 1.12.1 which is incompatible.\u001b[0m\n", | |
"Successfully installed torch-1.12.1 torchvision-0.13.1\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!pip install 'git+https://github.com/PyTorchLightning/lightning-flash.git'" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "4r7NbYuSX0VL", | |
"outputId": "218d76c6-1461-4c6a-a0be-d5acc74d2193" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", | |
"Collecting git+https://github.com/PyTorchLightning/lightning-flash.git\n", | |
" Cloning https://github.com/PyTorchLightning/lightning-flash.git to /tmp/pip-req-build-tmyc_gyg\n", | |
" Running command git clone -q https://github.com/PyTorchLightning/lightning-flash.git /tmp/pip-req-build-tmyc_gyg\n", | |
" Running command git submodule update --init --recursive -q\n", | |
" Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", | |
" Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", | |
" Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n", | |
"Requirement already satisfied: torch>=1.7.1 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (1.12.1)\n", | |
"Requirement already satisfied: fsspec in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (2022.7.1)\n", | |
"Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (21.3)\n", | |
"Requirement already satisfied: torchmetrics!=0.5.1,>=0.5.0 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (0.9.3)\n", | |
"Requirement already satisfied: pandas>=1.1.0 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (1.3.5)\n", | |
"Requirement already satisfied: jsonargparse[signatures]<=4.9.0,>=3.17.0 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (4.9.0)\n", | |
"Requirement already satisfied: click>=7.1.2 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (8.0.4)\n", | |
"Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (1.21.6)\n", | |
"Requirement already satisfied: pyDeprecate in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (0.3.2)\n", | |
"Requirement already satisfied: protobuf<=3.20.1 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (3.17.3)\n", | |
"Requirement already satisfied: pytorch-lightning>=1.3.6 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (1.7.0)\n", | |
"Requirement already satisfied: setuptools<=59.5.0 in /usr/local/lib/python3.7/dist-packages (from lightning-flash==0.8.0.dev0) (59.5.0)\n", | |
"Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from click>=7.1.2->lightning-flash==0.8.0.dev0) (4.12.0)\n", | |
"Requirement already satisfied: PyYAML>=3.13 in /usr/local/lib/python3.7/dist-packages (from jsonargparse[signatures]<=4.9.0,>=3.17.0->lightning-flash==0.8.0.dev0) (6.0)\n", | |
"Requirement already satisfied: docstring-parser>=0.7.3 in /usr/local/lib/python3.7/dist-packages (from jsonargparse[signatures]<=4.9.0,>=3.17.0->lightning-flash==0.8.0.dev0) (0.14.1)\n", | |
"Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=1.1.0->lightning-flash==0.8.0.dev0) (2022.1)\n", | |
"Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=1.1.0->lightning-flash==0.8.0.dev0) (2.8.2)\n", | |
"Requirement already satisfied: six>=1.9 in /usr/local/lib/python3.7/dist-packages (from protobuf<=3.20.1->lightning-flash==0.8.0.dev0) (1.15.0)\n", | |
"Requirement already satisfied: tqdm>=4.57.0 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (4.64.0)\n", | |
"Requirement already satisfied: tensorboard>=2.9.1 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (2.9.1)\n", | |
"Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (4.1.1)\n", | |
"Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from fsspec->lightning-flash==0.8.0.dev0) (2.23.0)\n", | |
"Requirement already satisfied: aiohttp in /usr/local/lib/python3.7/dist-packages (from fsspec->lightning-flash==0.8.0.dev0) (3.8.1)\n", | |
"Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging->lightning-flash==0.8.0.dev0) (3.0.9)\n", | |
"Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (3.4.1)\n", | |
"Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (1.2.0)\n", | |
"Requirement already satisfied: werkzeug>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (1.0.1)\n", | |
"Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (0.4.6)\n", | |
"Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (1.35.0)\n", | |
"Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (0.37.1)\n", | |
"Requirement already satisfied: grpcio>=1.24.3 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (1.47.0)\n", | |
"Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (0.6.1)\n", | |
"Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (1.8.1)\n", | |
"Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (4.2.4)\n", | |
"Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (0.2.8)\n", | |
"Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (4.9)\n", | |
"Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (1.3.1)\n", | |
"Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->click>=7.1.2->lightning-flash==0.8.0.dev0) (3.8.1)\n", | |
"Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (0.4.8)\n", | |
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->fsspec->lightning-flash==0.8.0.dev0) (2022.6.15)\n", | |
"Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->fsspec->lightning-flash==0.8.0.dev0) (1.24.3)\n", | |
"Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->fsspec->lightning-flash==0.8.0.dev0) (2.10)\n", | |
"Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->fsspec->lightning-flash==0.8.0.dev0) (3.0.4)\n", | |
"Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard>=2.9.1->pytorch-lightning>=1.3.6->lightning-flash==0.8.0.dev0) (3.2.0)\n", | |
"Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (4.0.2)\n", | |
"Requirement already satisfied: charset-normalizer<3.0,>=2.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (2.1.0)\n", | |
"Requirement already satisfied: asynctest==0.13.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (0.13.0)\n", | |
"Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (1.8.1)\n", | |
"Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (6.0.2)\n", | |
"Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (1.2.0)\n", | |
"Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (1.3.0)\n", | |
"Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec->lightning-flash==0.8.0.dev0) (22.1.0)\n", | |
"Building wheels for collected packages: lightning-flash\n", | |
" Building wheel for lightning-flash (PEP 517) ... \u001b[?25l\u001b[?25hdone\n", | |
" Created wheel for lightning-flash: filename=lightning_flash-0.8.0.dev0-py3-none-any.whl size=1215111 sha256=183ce8372432848d94def48fa0ff03cdb3ec9174419883e861fa6f240e3b3290\n", | |
" Stored in directory: /tmp/pip-ephem-wheel-cache-jf289anj/wheels/62/35/f7/f3971ccc8a532811919920e5fae6ee93f5e94ed065139c81df\n", | |
"Successfully built lightning-flash\n", | |
"Installing collected packages: lightning-flash\n", | |
"Successfully installed lightning-flash-0.8.0.dev0\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"#! pip install --quiet \"torch>=1.8\" \"pytorch-lightning>=1.4\" \"ipython[notebook]\" #\"setuptools==59.5.0\" \"matplotlib\"\n", | |
"#! pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116" | |
], | |
"metadata": { | |
"id": "RN4jBIq0KsUV" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"#!pip install 'git+https://github.com/PyTorchLightning/lightning-flash.git#egg=lightning-flash[image]'\n", | |
"!pip install 'icevision[all]'\n", | |
"#!pip install 'lightning-flash[image]'" | |
], | |
"metadata": { | |
"id": "Hf0hAZXp4ACW" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import flash" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 308 | |
}, | |
"id": "cGkgbDLfJOFs", | |
"outputId": "4de9d2e2-cf24-4f4e-c07b-63f4ae4a2eb5" | |
}, | |
"execution_count": 1, | |
"outputs": [ | |
{ | |
"output_type": "error", | |
"ename": "ModuleNotFoundError", | |
"evalue": "ignored", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-1-a957ffb897cb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mflash\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'flash'", | |
"", | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n" | |
], | |
"errorDetails": { | |
"actions": [ | |
{ | |
"action": "open_url", | |
"actionText": "Open Examples", | |
"url": "/notebooks/snippets/importing_libraries.ipynb" | |
} | |
] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"flash.__version__" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"id": "-SSGUDKhMQS6", | |
"outputId": "57595bc6-d4d8-468f-e514-0dee6b70b19a" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"'0.8.0dev'" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "string" | |
} | |
}, | |
"metadata": {}, | |
"execution_count": 3 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "WoU1cigtgaMV" | |
}, | |
"outputs": [], | |
"source": [ | |
"#from fastai.vision import *\n", | |
"import os, sys\n", | |
"import numpy as np\n", | |
"#from scipy import ndimage as nd\n", | |
"#from skimage import morphology as mo\n", | |
"#from scipy.ndimage import distance_transform_bf as distance\n", | |
"from matplotlib import pyplot as plt" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"#!apt-get install python3-dev\n", | |
"#!pip install cython\n", | |
"#!pip install git+git://github.com/waspinator/[email protected]" | |
], | |
"metadata": { | |
"id": "8zianJbJhLxZ" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "Izs9flyGgaMZ" | |
}, | |
"outputs": [], | |
"source": [ | |
"import pycocotools\n", | |
"#import pycococreatortools\n", | |
"from pycocotools.coco import COCO\n", | |
"import skimage.io as io" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "HHBhQxzbgaMb", | |
"outputId": "1859b499-4a33-4df6-cfd6-b237f68d429e" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"bin\t dev lib32 NGC-DL-CONTAINER-LICENSE\troot sys var\n", | |
"boot\t etc lib64 opt\t\t\trun tmp\n", | |
"content home media proc\t\t\tsbin tools\n", | |
"datalab lib mnt python-apt\t\tsrv usr\n" | |
] | |
} | |
], | |
"source": [ | |
"!ls .." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"##google snippet:import data" | |
], | |
"metadata": { | |
"id": "4wXvT09HiQlk" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.colab import drive\n", | |
"drive.mount('/content/gdrive/', force_remount=True)" | |
], | |
"metadata": { | |
"id": "sJqYr-hohNAc", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "3cd9dfed-799c-4c8e-afaf-7a4ba652b80f" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Mounted at /content/gdrive/\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"%ls gdrive/MyDrive/Data\\ Science/SmallCOCODataSet/UltraSmall-COCO-Dataset_125" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "IB61H0usl6sZ", | |
"outputId": "48d4f7bc-ad88-4f31-8520-16c5a6ee2531" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"grey0012100.png grey0075756.png\n", | |
"grey0013300.png grey0075766.png\n", | |
"grey0013500.png grey0076001.png\n", | |
"grey0020000.png grey0077000.png\n", | |
"grey0021500.png grey0077100.png\n", | |
"grey0026500.png grey0077300.png\n", | |
"grey0027200.png grey0077400.png\n", | |
"grey0028200.png grey0077601.png\n", | |
"grey0035223.png grey0077701.png\n", | |
"grey0059995.png grey0077801.png\n", | |
"grey0059998.png grey0077901.png\n", | |
"grey0060101.png grey0077902.png\n", | |
"grey0060107.png grey0077905.png\n", | |
"grey0060110.png grey0078000.png\n", | |
"grey0060112.png grey0078300.png\n", | |
"grey0060118.png grey0078702.png\n", | |
"grey0060119.png grey0078852.png\n", | |
"grey0060120.png grey0078900.png\n", | |
"grey0060126.png grey0079001.png\n", | |
"grey0060129.png grey0079101.png\n", | |
"grey0060130.png grey0079652.png\n", | |
"grey0060223.png grey0079952.png\n", | |
"grey0060232.png grey0080000.png\n", | |
"grey0060250.png grey0080105.png\n", | |
"grey0060260.png grey0080106.png\n", | |
"grey0060263.png grey0080107.png\n", | |
"grey0060268.png grey0080650.png\n", | |
"grey0060365.png grey0080651.png\n", | |
"grey0060566.png grey0080652.png\n", | |
"grey0060666.png grey0081663.png\n", | |
"grey0060700.png grey0081668.png\n", | |
"grey0060730.png grey0081770.png\n", | |
"grey0060740.png grey0081970.png\n", | |
"grey0060772.png grey0081980.png\n", | |
"grey0061587.png grey0082250.png\n", | |
"grey0065587.png grey0082350.png\n", | |
"grey0070586.png grey0082400.png\n", | |
"grey0070886.png grey0083400.png\n", | |
"grey0070902.png grey0083500.png\n", | |
"grey0070955.png grey0083550.png\n", | |
"grey0070958.png grey0083600.png\n", | |
"grey0070966.png grey0083651.png\n", | |
"grey0071100.png grey0083755.png\n", | |
"grey0071362.png grey0083855.png\n", | |
"grey0071600.png grey0083856.png\n", | |
"grey0071700.png grey0083900.png\n", | |
"grey0071800.png grey0096560.png\n", | |
"grey0071852.png grey0096760.png\n", | |
"grey0071952.png grey0096800.png\n", | |
"grey0072100.png grey0096812.png\n", | |
"grey0072150.png grey0096902.png\n", | |
"grey0072251.png grey0096906.png\n", | |
"grey0073251.png grey0097001.png\n", | |
"grey0073355.png grey0097006.png\n", | |
"grey0073655.png grey0097101.png\n", | |
"grey0073658.png grey0097201.png\n", | |
"grey0073700.png grey0097352.png\n", | |
"grey0075000.png grey0097452.png\n", | |
"grey0075101.png grey0097630.png\n", | |
"grey0075201.png grey0097750.png\n", | |
"grey0075302.png grey0097801.png\n", | |
"grey0075502.png grey0097918.png\n", | |
"grey0075602.png labels_overlappchromosomes_2021-07-05-09-18-52.json\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "5Ou_ZlQ5gaMc" | |
}, | |
"source": [ | |
"# Acces to small dataset images and annotations with pycocotools\n", | |
"**Local google colab version**\n", | |
" * Annotation files was generated with online annotator tool [https://www.makesense.ai/](https://www.makesense.ai/)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "U1XgyTuZgaMe", | |
"outputId": "cad77d0a-55bb-495b-c6c1-3c2c3125c697" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"loading annotations into memory...\n", | |
"Done (t=0.50s)\n", | |
"creating index...\n", | |
"index created!\n" | |
] | |
} | |
], | |
"source": [ | |
"#IMAGE_DIR = './UltraSmall-COCO-Dataset_125'\n", | |
"IMAGE_DIR = 'gdrive/MyDrive/Data Science/SmallCOCODataSet/UltraSmall-COCO-Dataset_125'\n", | |
"#print(path.ls()) # prints subdirectories\n", | |
"os.listdir(IMAGE_DIR)\n", | |
"image_directory = IMAGE_DIR\n", | |
"annotation_file = IMAGE_DIR + '/labels_overlappchromosomes_2021-07-05-09-18-52.json'\n", | |
"example_coco = COCO(annotation_file)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "uR1lasdQgaMh", | |
"outputId": "d4daf85e-cc01-4061-da0f-374f41ff8ae7", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"description: overlappchromosomes\n", | |
"None\n", | |
"Custom COCO categories: \n", | |
"chromosome\n", | |
"\n", | |
"[1]\n", | |
"125\n", | |
"{'id': 88, 'width': 211, 'height': 210, 'file_name': 'grey0080106.png'}\n", | |
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125]\n" | |
] | |
} | |
], | |
"source": [ | |
"print(example_coco.info())\n", | |
"categories = example_coco.loadCats(example_coco.getCatIds())\n", | |
"category_names = [category['name'] for category in categories]\n", | |
"print('Custom COCO categories: \\n{}\\n'.format(' '.join(category_names)))\n", | |
"\n", | |
"category_ids = example_coco.getCatIds(catNms=['chromosome'])\n", | |
"image_ids = example_coco.getImgIds(catIds=category_ids)\n", | |
"image_data = example_coco.loadImgs(image_ids[np.random.randint(0, len(image_ids))])[0]\n", | |
"\n", | |
"print(category_ids)\n", | |
"print(len(image_ids))\n", | |
"print(image_data)\n", | |
"print(image_ids)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "Mqei1u6pgaMn", | |
"outputId": "ed82a82d-1a6b-42aa-d12e-56ab7c9d2ac4", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 423 | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"[174, 175]\n" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": {} | |
} | |
], | |
"source": [ | |
"# load and display instance annotations\n", | |
"image = io.imread(image_directory + '/'+ image_data['file_name'])\n", | |
"plt.Figure(figsize=(30.0,30.0))\n", | |
"plt.imshow(image, cmap=plt.cm.gray ); plt.axis('off')\n", | |
"#pylab.rcParams['figure.figsize'] = (8.0, 10.0)\n", | |
"annotation_ids = example_coco.getAnnIds(imgIds=image_data['id'], catIds=category_ids, iscrowd=None)\n", | |
"annotations = example_coco.loadAnns(annotation_ids)\n", | |
"\n", | |
"print(annotation_ids)\n", | |
"\n", | |
"example_coco.showAnns(annotations)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "VtIqTcAogaMo" | |
}, | |
"source": [ | |
"# Load the data images+annotation file with PyTorch-lightning\n", | |
" * there's 125 images\n", | |
" * an annotation files following the COCO format\n", | |
" \n", | |
"Some internet ressource about dataset and dataloader with FiftyOne:\n", | |
"\n", | |
" * https://towardsdatascience.com/stop-wasting-time-with-pytorch-datasets-17cac2c22fa8" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "e1pTnQm7gaMp" | |
}, | |
"source": [ | |
"## Can we use lightning flash to load the dataset?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "WU1TdJ0qgaMs", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "6130e5ac-4f64-4e73-bc8b-5882eaae2aaf" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"/usr/local/lib/python3.7/dist-packages/torchvision/models/_utils.py:253: UserWarning: Accessing the model URLs via the internal dictionary of the module is deprecated since 0.13 and will be removed in 0.15. Please access them via the appropriate Weights Enum instead.\n", | |
" \"Accessing the model URLs via the internal dictionary of the module is deprecated since 0.13 and will \"\n" | |
] | |
} | |
], | |
"source": [ | |
"from functools import partial\n", | |
"\n", | |
"import flash\n", | |
"from flash.core.utilities.imports import example_requires\n", | |
"from flash.image import InstanceSegmentation, InstanceSegmentationData\n", | |
"example_requires(\"image\")\n", | |
"#import icedata # noqa: E402" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Load the dataset with lightning-flash:\n", | |
"https://lightning-flash.readthedocs.io/en/latest/api/generated/flash.image.instance_segmentation.data.InstanceSegmentationData.html#flash.image.instance_segmentation.data.InstanceSegmentationData" | |
], | |
"metadata": { | |
"id": "gRqjGjjOckLs" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"IMAGE_DIR = 'gdrive/MyDrive/Data Science/SmallCOCODataSet/UltraSmall-COCO-Dataset_125'\n", | |
"#print(path.ls()) # prints subdirectories\n", | |
"os.listdir(IMAGE_DIR)\n", | |
"image_directory = IMAGE_DIR\n", | |
"annotation_file = IMAGE_DIR + '/labels_overlappchromosomes_2021-07-05-09-18-52.json'\n", | |
"trainDataSet = InstanceSegmentationData.from_coco(train_folder= IMAGE_DIR, train_ann_file = annotation_file,\n", | |
" transform_kwargs=dict(image_size=(174, 175)), batch_size=2)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 153, | |
"referenced_widgets": [ | |
"5740749fb3a1491a896415a4c4321107", | |
"b293ee412db34456be5aa97bb3434271", | |
"0f152d01a2d348cea1391dc3e4e4693a", | |
"40407500259f4e1784b652afb1e79f5e", | |
"9843f3ff74324852a2d40623974535e9", | |
"8584c0a5992c4aff962f0e1fcd512d6f", | |
"bbb297d2fb47428896ede1349ca23503", | |
"10243bd970934e4c94bf3bab3f6b3cec", | |
"15285d1352d24a688c38081b3760ae67", | |
"4ca42bf3e111431d89669a1951f98d02", | |
"29afe53d13ae43e0aa96e38482135ed3", | |
"e57537555cac48b09f93b61332e72369", | |
"e87e6e593a6b4ddda068605563586203", | |
"62501df2bbd74d0792f41a1910a6dbf5", | |
"5ad9c5fe043146e7b5ccf32286088501", | |
"06d2292a44bd4f158e36c2980b40881d", | |
"154f8fe41655468b9eefdbe22be0ee80", | |
"a45f27cf30d54860bce96a605b3de5ff", | |
"e34dd5743add43efb9eb420f3e628cea", | |
"33b5e6e7a382460b87438c0f69e44d89", | |
"a2ad7df5ac2e4d55a36a8cf3f1064f2e", | |
"ca8af2e06b4d4bcbac2c62e461c714e8" | |
] | |
}, | |
"id": "Hlzzby71I8hm", | |
"outputId": "ada6c02d-cdb4-4a0f-f45a-a5d52ca359bb" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" 0%| | 0/250 [00:00<?, ?it/s]" | |
], | |
"application/vnd.jupyter.widget-view+json": { | |
"version_major": 2, | |
"version_minor": 0, | |
"model_id": "5740749fb3a1491a896415a4c4321107" | |
} | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"\u001b[1m\u001b[1mINFO \u001b[0m\u001b[1m\u001b[0m - \u001b[1m\u001b[34m\u001b[1mAutofixing records\u001b[0m\u001b[1m\u001b[34m\u001b[0m\u001b[1m\u001b[0m | \u001b[36micevision.parsers.parser\u001b[0m:\u001b[36mparse\u001b[0m:\u001b[36m122\u001b[0m\n" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
" 0%| | 0/125 [00:00<?, ?it/s]" | |
], | |
"application/vnd.jupyter.widget-view+json": { | |
"version_major": 2, | |
"version_minor": 0, | |
"model_id": "e57537555cac48b09f93b61332e72369" | |
} | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:7: FutureWarning: Please pass an instantiated object of the `InputTransform` class. Passing the Class and keyword arguments separately has been deprecated since v0.8.0 and will be removed in v0.9.0.\n", | |
" import sys\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"print(trainDataSet.labels)\n", | |
"print(trainDataSet.num_classes)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "Wx41kYUgauWS", | |
"outputId": "d2399f26-c35a-4bc7-ea44-21bf85f8ca24" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"['background', 'chromosome']\n", | |
"2\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"" | |
], | |
"metadata": { | |
"id": "h3QEbRWxb4zY" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"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.7.11" | |
}, | |
"colab": { | |
"name": "UltrasmallSample_display_annotations.ipynb", | |
"provenance": [], | |
"collapsed_sections": [], | |
"include_colab_link": true | |
}, | |
"widgets": { | |
"application/vnd.jupyter.widget-state+json": { | |
"5740749fb3a1491a896415a4c4321107": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "HBoxModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "HBoxModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "HBoxView", | |
"box_style": "", | |
"children": [ | |
"IPY_MODEL_b293ee412db34456be5aa97bb3434271", | |
"IPY_MODEL_0f152d01a2d348cea1391dc3e4e4693a", | |
"IPY_MODEL_40407500259f4e1784b652afb1e79f5e" | |
], | |
"layout": "IPY_MODEL_9843f3ff74324852a2d40623974535e9" | |
} | |
}, | |
"b293ee412db34456be5aa97bb3434271": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "HTMLModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "HTMLModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "HTMLView", | |
"description": "", | |
"description_tooltip": null, | |
"layout": "IPY_MODEL_8584c0a5992c4aff962f0e1fcd512d6f", | |
"placeholder": "", | |
"style": "IPY_MODEL_bbb297d2fb47428896ede1349ca23503", | |
"value": "100%" | |
} | |
}, | |
"0f152d01a2d348cea1391dc3e4e4693a": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "FloatProgressModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "FloatProgressModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "ProgressView", | |
"bar_style": "success", | |
"description": "", | |
"description_tooltip": null, | |
"layout": "IPY_MODEL_10243bd970934e4c94bf3bab3f6b3cec", | |
"max": 250, | |
"min": 0, | |
"orientation": "horizontal", | |
"style": "IPY_MODEL_15285d1352d24a688c38081b3760ae67", | |
"value": 250 | |
} | |
}, | |
"40407500259f4e1784b652afb1e79f5e": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "HTMLModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "HTMLModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "HTMLView", | |
"description": "", | |
"description_tooltip": null, | |
"layout": "IPY_MODEL_4ca42bf3e111431d89669a1951f98d02", | |
"placeholder": "", | |
"style": "IPY_MODEL_29afe53d13ae43e0aa96e38482135ed3", | |
"value": " 250/250 [00:00<00:00, 524.79it/s]" | |
} | |
}, | |
"9843f3ff74324852a2d40623974535e9": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"8584c0a5992c4aff962f0e1fcd512d6f": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"bbb297d2fb47428896ede1349ca23503": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "DescriptionStyleModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "DescriptionStyleModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "StyleView", | |
"description_width": "" | |
} | |
}, | |
"10243bd970934e4c94bf3bab3f6b3cec": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"15285d1352d24a688c38081b3760ae67": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "ProgressStyleModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "ProgressStyleModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "StyleView", | |
"bar_color": null, | |
"description_width": "" | |
} | |
}, | |
"4ca42bf3e111431d89669a1951f98d02": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"29afe53d13ae43e0aa96e38482135ed3": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "DescriptionStyleModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "DescriptionStyleModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "StyleView", | |
"description_width": "" | |
} | |
}, | |
"e57537555cac48b09f93b61332e72369": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "HBoxModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "HBoxModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "HBoxView", | |
"box_style": "", | |
"children": [ | |
"IPY_MODEL_e87e6e593a6b4ddda068605563586203", | |
"IPY_MODEL_62501df2bbd74d0792f41a1910a6dbf5", | |
"IPY_MODEL_5ad9c5fe043146e7b5ccf32286088501" | |
], | |
"layout": "IPY_MODEL_06d2292a44bd4f158e36c2980b40881d" | |
} | |
}, | |
"e87e6e593a6b4ddda068605563586203": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "HTMLModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "HTMLModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "HTMLView", | |
"description": "", | |
"description_tooltip": null, | |
"layout": "IPY_MODEL_154f8fe41655468b9eefdbe22be0ee80", | |
"placeholder": "", | |
"style": "IPY_MODEL_a45f27cf30d54860bce96a605b3de5ff", | |
"value": "100%" | |
} | |
}, | |
"62501df2bbd74d0792f41a1910a6dbf5": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "FloatProgressModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "FloatProgressModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "ProgressView", | |
"bar_style": "success", | |
"description": "", | |
"description_tooltip": null, | |
"layout": "IPY_MODEL_e34dd5743add43efb9eb420f3e628cea", | |
"max": 125, | |
"min": 0, | |
"orientation": "horizontal", | |
"style": "IPY_MODEL_33b5e6e7a382460b87438c0f69e44d89", | |
"value": 125 | |
} | |
}, | |
"5ad9c5fe043146e7b5ccf32286088501": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "HTMLModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_dom_classes": [], | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "HTMLModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/controls", | |
"_view_module_version": "1.5.0", | |
"_view_name": "HTMLView", | |
"description": "", | |
"description_tooltip": null, | |
"layout": "IPY_MODEL_a2ad7df5ac2e4d55a36a8cf3f1064f2e", | |
"placeholder": "", | |
"style": "IPY_MODEL_ca8af2e06b4d4bcbac2c62e461c714e8", | |
"value": " 125/125 [00:00<00:00, 897.04it/s]" | |
} | |
}, | |
"06d2292a44bd4f158e36c2980b40881d": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"154f8fe41655468b9eefdbe22be0ee80": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"a45f27cf30d54860bce96a605b3de5ff": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "DescriptionStyleModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "DescriptionStyleModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "StyleView", | |
"description_width": "" | |
} | |
}, | |
"e34dd5743add43efb9eb420f3e628cea": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"33b5e6e7a382460b87438c0f69e44d89": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "ProgressStyleModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "ProgressStyleModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "StyleView", | |
"bar_color": null, | |
"description_width": "" | |
} | |
}, | |
"a2ad7df5ac2e4d55a36a8cf3f1064f2e": { | |
"model_module": "@jupyter-widgets/base", | |
"model_name": "LayoutModel", | |
"model_module_version": "1.2.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/base", | |
"_model_module_version": "1.2.0", | |
"_model_name": "LayoutModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "LayoutView", | |
"align_content": null, | |
"align_items": null, | |
"align_self": null, | |
"border": null, | |
"bottom": null, | |
"display": null, | |
"flex": null, | |
"flex_flow": null, | |
"grid_area": null, | |
"grid_auto_columns": null, | |
"grid_auto_flow": null, | |
"grid_auto_rows": null, | |
"grid_column": null, | |
"grid_gap": null, | |
"grid_row": null, | |
"grid_template_areas": null, | |
"grid_template_columns": null, | |
"grid_template_rows": null, | |
"height": null, | |
"justify_content": null, | |
"justify_items": null, | |
"left": null, | |
"margin": null, | |
"max_height": null, | |
"max_width": null, | |
"min_height": null, | |
"min_width": null, | |
"object_fit": null, | |
"object_position": null, | |
"order": null, | |
"overflow": null, | |
"overflow_x": null, | |
"overflow_y": null, | |
"padding": null, | |
"right": null, | |
"top": null, | |
"visibility": null, | |
"width": null | |
} | |
}, | |
"ca8af2e06b4d4bcbac2c62e461c714e8": { | |
"model_module": "@jupyter-widgets/controls", | |
"model_name": "DescriptionStyleModel", | |
"model_module_version": "1.5.0", | |
"state": { | |
"_model_module": "@jupyter-widgets/controls", | |
"_model_module_version": "1.5.0", | |
"_model_name": "DescriptionStyleModel", | |
"_view_count": null, | |
"_view_module": "@jupyter-widgets/base", | |
"_view_module_version": "1.2.0", | |
"_view_name": "StyleView", | |
"description_width": "" | |
} | |
} | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment