Skip to content

Instantly share code, notes, and snippets.

@jeanpat
Created August 12, 2022 12:24
Show Gist options
  • Save jeanpat/ccfa746e1e0cf7f61f93992bd431ff05 to your computer and use it in GitHub Desktop.
Save jeanpat/ccfa746e1e0cf7f61f93992bd431ff05 to your computer and use it in GitHub Desktop.
UltrasmallSample_display_annotations.ipynb
Display the source blob
Display the rendered blob
Raw
{
"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&lt;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&lt;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