Created
July 7, 2021 08:43
-
-
Save jeanpat/c6969677a3d8cc1c5a7e1d0273091071 to your computer and use it in GitHub Desktop.
Loading and displaying annotations generated with makesense.ai, over chromosomes image.
This file contains hidden or 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": "code", | |
| "execution_count": 10, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Collecting git+git://github.com/waspinator/pycococreator.git@0.2.0\n", | |
| " Cloning git://github.com/waspinator/pycococreator.git (to revision 0.2.0) to /tmp/pip-req-build-3zs22u5s\n", | |
| " Running command git clone -q git://github.com/waspinator/pycococreator.git /tmp/pip-req-build-3zs22u5s\n", | |
| " Running command git checkout -q fba8f4098f3c7aaa05fe119dc93bbe4063afdab8\n", | |
| "Requirement already satisfied: numpy in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from pycococreatortools==0.2.0) (1.19.2)\n", | |
| "Requirement already satisfied: pillow in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from pycococreatortools==0.2.0) (8.2.0)\n", | |
| "Requirement already satisfied: scikit-image in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from pycococreatortools==0.2.0) (0.18.1)\n", | |
| "Requirement already satisfied: scipy>=1.0.1 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from scikit-image->pycococreatortools==0.2.0) (1.6.2)\n", | |
| "Requirement already satisfied: matplotlib!=3.0.0,>=2.0.0 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from scikit-image->pycococreatortools==0.2.0) (3.4.1)\n", | |
| "Requirement already satisfied: networkx>=2.0 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from scikit-image->pycococreatortools==0.2.0) (2.3)\n", | |
| "Requirement already satisfied: imageio>=2.3.0 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from scikit-image->pycococreatortools==0.2.0) (2.9.0)\n", | |
| "Requirement already satisfied: tifffile>=2019.7.26 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from scikit-image->pycococreatortools==0.2.0) (2019.7.26.2)\n", | |
| "Requirement already satisfied: PyWavelets>=1.1.1 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from scikit-image->pycococreatortools==0.2.0) (1.1.1)\n", | |
| "Requirement already satisfied: kiwisolver>=1.0.1 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image->pycococreatortools==0.2.0) (1.3.1)\n", | |
| "Requirement already satisfied: cycler>=0.10 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image->pycococreatortools==0.2.0) (0.10.0)\n", | |
| "Requirement already satisfied: python-dateutil>=2.7 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image->pycococreatortools==0.2.0) (2.8.1)\n", | |
| "Requirement already satisfied: pyparsing>=2.2.1 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image->pycococreatortools==0.2.0) (2.4.7)\n", | |
| "Requirement already satisfied: six in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from cycler>=0.10->matplotlib!=3.0.0,>=2.0.0->scikit-image->pycococreatortools==0.2.0) (1.15.0)\n", | |
| "Requirement already satisfied: decorator>=4.3.0 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from networkx>=2.0->scikit-image->pycococreatortools==0.2.0) (5.0.7)\n", | |
| "Requirement already satisfied: imagecodecs-lite>=2019.12.2 in /home/jeanpat/anaconda3/envs/PyTorch18/lib/python3.8/site-packages (from tifffile>=2019.7.26->scikit-image->pycococreatortools==0.2.0) (2019.12.3)\n", | |
| "Building wheels for collected packages: pycococreatortools\n", | |
| " Building wheel for pycococreatortools (setup.py) ... \u001b[?25ldone\n", | |
| "\u001b[?25h Created wheel for pycococreatortools: filename=pycococreatortools-0.2.0-py3-none-any.whl size=7190 sha256=8563594d1aac6a61fdd52f9abcdff59bc7a0bed0f84276b480e0e9edf42fca34\n", | |
| " Stored in directory: /tmp/pip-ephem-wheel-cache-h_4ocnqu/wheels/ac/f9/b2/29203368344409953163620ffa0053e4c694bc50b520c7f50e\n", | |
| "Successfully built pycococreatortools\n", | |
| "Installing collected packages: pycococreatortools\n", | |
| "Successfully installed pycococreatortools-0.2.0\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!pip install git+git://github.com/waspinator/pycococreator.git@0.2.0" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#from fastai.vision import *\n", | |
| "import os, sys" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from scipy import ndimage as nd" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from skimage import morphology as mo\n", | |
| "from scipy.ndimage import distance_transform_bf as distance" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from matplotlib import pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pycocotools\n", | |
| "import pycococreatortools\n", | |
| "from pycocotools.coco import COCO\n", | |
| "import skimage.io as io" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Acces to small dataset images and annotations with pycococeator\n", | |
| " * Images are on the disk\n", | |
| "\n", | |
| " * Annotation files was generated with online annotator tool [https://www.makesense.ai/](https://www.makesense.ai/)\n", | |
| " \n", | |
| "The validity of the annotation file cans be tested with [waspinator's code](https://github.com/waspinator/pycococreator/blob/master/examples/shapes/visualize_coco.ipynb) mildly adapted:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "loading annotations into memory...\n", | |
| "Done (t=0.07s)\n", | |
| "creating index...\n", | |
| "index created!\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "IMAGE_DIR = './UltraSmallSample_png-ds'\n", | |
| "\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": 7, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "description: overlappchromosomes\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "example_coco.info()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Custom COCO categories: \n", | |
| "chromosome\n", | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "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_names = set([category['supercategory'] for category in categories])\n", | |
| "#print('Custom COCO supercategories: \\n{}'.format(' '.join(category_names)))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 71, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "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]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 66, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[1]" | |
| ] | |
| }, | |
| "execution_count": 66, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "category_ids" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 67, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "125" | |
| ] | |
| }, | |
| "execution_count": 67, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "len(image_ids)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 68, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'id': 2, 'width': 211, 'height': 210, 'file_name': 'grey0013300.png'}" | |
| ] | |
| }, | |
| "execution_count": 68, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "image_data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 69, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[1,\n", | |
| " 2,\n", | |
| " 3,\n", | |
| " 4,\n", | |
| " 5,\n", | |
| " 6,\n", | |
| " 7,\n", | |
| " 8,\n", | |
| " 9,\n", | |
| " 10,\n", | |
| " 11,\n", | |
| " 12,\n", | |
| " 13,\n", | |
| " 14,\n", | |
| " 15,\n", | |
| " 16,\n", | |
| " 17,\n", | |
| " 18,\n", | |
| " 19,\n", | |
| " 20,\n", | |
| " 21,\n", | |
| " 22,\n", | |
| " 23,\n", | |
| " 24,\n", | |
| " 25,\n", | |
| " 26,\n", | |
| " 27,\n", | |
| " 28,\n", | |
| " 29,\n", | |
| " 30,\n", | |
| " 31,\n", | |
| " 32,\n", | |
| " 33,\n", | |
| " 34,\n", | |
| " 35,\n", | |
| " 36,\n", | |
| " 37,\n", | |
| " 38,\n", | |
| " 39,\n", | |
| " 40,\n", | |
| " 41,\n", | |
| " 42,\n", | |
| " 43,\n", | |
| " 44,\n", | |
| " 45,\n", | |
| " 46,\n", | |
| " 47,\n", | |
| " 48,\n", | |
| " 49,\n", | |
| " 50,\n", | |
| " 51,\n", | |
| " 52,\n", | |
| " 53,\n", | |
| " 54,\n", | |
| " 55,\n", | |
| " 56,\n", | |
| " 57,\n", | |
| " 58,\n", | |
| " 59,\n", | |
| " 60,\n", | |
| " 61,\n", | |
| " 62,\n", | |
| " 63,\n", | |
| " 64,\n", | |
| " 65,\n", | |
| " 66,\n", | |
| " 67,\n", | |
| " 68,\n", | |
| " 69,\n", | |
| " 70,\n", | |
| " 71,\n", | |
| " 72,\n", | |
| " 73,\n", | |
| " 74,\n", | |
| " 75,\n", | |
| " 76,\n", | |
| " 77,\n", | |
| " 78,\n", | |
| " 79,\n", | |
| " 80,\n", | |
| " 81,\n", | |
| " 82,\n", | |
| " 83,\n", | |
| " 84,\n", | |
| " 85,\n", | |
| " 86,\n", | |
| " 87,\n", | |
| " 88,\n", | |
| " 89,\n", | |
| " 90,\n", | |
| " 91,\n", | |
| " 92,\n", | |
| " 93,\n", | |
| " 94,\n", | |
| " 95,\n", | |
| " 96,\n", | |
| " 97,\n", | |
| " 98,\n", | |
| " 99,\n", | |
| " 100,\n", | |
| " 101,\n", | |
| " 102,\n", | |
| " 103,\n", | |
| " 104,\n", | |
| " 105,\n", | |
| " 106,\n", | |
| " 107,\n", | |
| " 108,\n", | |
| " 109,\n", | |
| " 110,\n", | |
| " 111,\n", | |
| " 112,\n", | |
| " 113,\n", | |
| " 114,\n", | |
| " 115,\n", | |
| " 116,\n", | |
| " 117,\n", | |
| " 118,\n", | |
| " 119,\n", | |
| " 120,\n", | |
| " 121,\n", | |
| " 122,\n", | |
| " 123,\n", | |
| " 124,\n", | |
| " 125]" | |
| ] | |
| }, | |
| "execution_count": 69, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "image_ids" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 75, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[146, 147]\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "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": "code", | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Tue Jul 6 21:55:59 2021 \n", | |
| "+-----------------------------------------------------------------------------+\n", | |
| "| NVIDIA-SMI 455.45.01 Driver Version: 455.45.01 CUDA Version: 11.1 |\n", | |
| "|-------------------------------+----------------------+----------------------+\n", | |
| "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n", | |
| "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", | |
| "| | | MIG M. |\n", | |
| "|===============================+======================+======================|\n", | |
| "| 0 GeForce GTX 960 On | 00000000:03:00.0 On | N/A |\n", | |
| "| 39% 37C P0 28W / 130W | 177MiB / 4035MiB | 0% Default |\n", | |
| "| | | N/A |\n", | |
| "+-------------------------------+----------------------+----------------------+\n", | |
| " \n", | |
| "+-----------------------------------------------------------------------------+\n", | |
| "| Processes: |\n", | |
| "| GPU GI CI PID Type Process name GPU Memory |\n", | |
| "| ID ID Usage |\n", | |
| "|=============================================================================|\n", | |
| "| 0 N/A N/A 1577 G /usr/lib/xorg/Xorg 15MiB |\n", | |
| "| 0 N/A N/A 1678 G /usr/bin/gnome-shell 47MiB |\n", | |
| "| 0 N/A N/A 2064 G /usr/lib/xorg/Xorg 80MiB |\n", | |
| "| 0 N/A N/A 2227 G /usr/bin/gnome-shell 25MiB |\n", | |
| "| 0 N/A N/A 3756 G /usr/lib/firefox/firefox 0MiB |\n", | |
| "+-----------------------------------------------------------------------------+\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!nvidia-smi" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Load the data images+annotation file with detectron 2\n", | |
| " * there's 125 images\n", | |
| " * an annotation files following the COCO format" | |
| ] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "!python -m pip install detectron2 -f \\\n", | |
| " https://dl.fbaipublicfiles.com/detectron2/wheels/cu111/torch1.8/index.html" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Let's try a tuto:\n", | |
| "\n", | |
| " * https://detectron2.readthedocs.io/en/latest/tutorials/data_loading.html#use-a-custom-dataloader\n", | |
| "\n", | |
| " * https://detectron2.readthedocs.io/en/latest/tutorials/datasets.html\n", | |
| "\n", | |
| "Example:\n", | |
| "\n", | |
| " * https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import json\n", | |
| "import itertools" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#import detectron2\n", | |
| "from detectron2.data import DatasetCatalog, MetadataCatalog" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# write a function that loads the dataset into detectron2's standard format\n", | |
| "def get_chromosome_dicts(img_dir):\n", | |
| " json_file = os.path.join(img_dir, \"labels_overlappchromosomes_2021-07-05-09-18-52.json\")\n", | |
| " with open(json_file) as f:\n", | |
| " imgs_anns = json.load(f)\n", | |
| "\n", | |
| " #print(imgs_anns.items())\n", | |
| " dataset_dicts = []\n", | |
| " for _, v in imgs_anns.items():\n", | |
| " \n", | |
| " record = {}\n", | |
| " \n", | |
| " filename = os.path.join(img_dir, v[\"file_name\"])\n", | |
| " height, width = cv2.imread(filename).shape[:2]\n", | |
| " \n", | |
| " record[\"file_name\"] = filename\n", | |
| " record[\"height\"] = height\n", | |
| " record[\"width\"] = width\n", | |
| " \n", | |
| " annos = v[\"regions\"]\n", | |
| " objs = []\n", | |
| " for _, anno in annos.items():\n", | |
| " assert not anno[\"region_attributes\"]\n", | |
| " anno = anno[\"shape_attributes\"]\n", | |
| " px = anno[\"all_points_x\"]\n", | |
| " py = anno[\"all_points_y\"]\n", | |
| " poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]\n", | |
| " poly = list(itertools.chain.from_iterable(poly))\n", | |
| "\n", | |
| " obj = {\n", | |
| " \"bbox\": [np.min(px), np.min(py), np.max(px), np.max(py)],\n", | |
| " \"bbox_mode\": BoxMode.XYXY_ABS,\n", | |
| " \"segmentation\": [poly],\n", | |
| " \"category_id\": 0,\n", | |
| " \"iscrowd\": 0\n", | |
| " }\n", | |
| " objs.append(obj)\n", | |
| " record[\"annotations\"] = objs\n", | |
| " dataset_dicts.append(record)\n", | |
| " return dataset_dicts" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 62, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "image annotations: <class 'dict'>\n", | |
| "<class 'dict_items'>\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "IMAGE_DIR = './UltraSmallSample_png-ds'\n", | |
| "json_file = os.path.join(IMAGE_DIR, \"labels_overlappchromosomes_2021-07-05-09-18-52.json\")\n", | |
| "with open(json_file) as f:\n", | |
| " imgs_anns = json.load(f)\n", | |
| "#imgs_anns\n", | |
| "print('image annotations:', type(imgs_anns))\n", | |
| "items = imgs_anns.items()\n", | |
| "print(type(items))\n", | |
| "#for _, v in imgs_anns.items():\n", | |
| "# os.path.join(IMAGE_DIR, v[\"file_name\"])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 54, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "KeyError", | |
| "evalue": "'file_name'", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-54-4bac4265af33>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mIMAGE_DIR\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'./UltraSmallSample_png-ds'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mget_chromosome_dicts\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mIMAGE_DIR\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
| "\u001b[0;32m<ipython-input-50-a71999ad8f01>\u001b[0m in \u001b[0;36mget_chromosome_dicts\u001b[0;34m(img_dir)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mrecord\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0mfilename\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg_dir\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"file_name\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcv2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mKeyError\u001b[0m: 'file_name'" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "IMAGE_DIR = './UltraSmallSample_png-ds'\n", | |
| "get_chromosome_dicts(IMAGE_DIR)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "datas" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 76, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "AssertionError", | |
| "evalue": "You must register a function with `DatasetCatalog.register`!", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-76-12ef5adf7350>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mDatasetCatalog\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mregister\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mIMAGE_DIR\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mimgs_anns\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m#MetadataCatalog.get(\"balloon/\" + d).set(thing_classes=[\"balloon\"])\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m#balloon_metadata = MetadataCatalog.get(\"balloon/train\")\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;32m~/anaconda3/envs/PyTorch18/lib/python3.8/site-packages/detectron2/data/catalog.py\u001b[0m in \u001b[0;36mregister\u001b[0;34m(self, name, func)\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0mIt\u001b[0m \u001b[0mmust\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mthe\u001b[0m \u001b[0msame\u001b[0m \u001b[0mresults\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcalled\u001b[0m \u001b[0mmultiple\u001b[0m \u001b[0mtimes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 35\u001b[0m \"\"\"\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0mcallable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"You must register a function with `DatasetCatalog.register`!\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 37\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Dataset '{}' is already registered!\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mAssertionError\u001b[0m: You must register a function with `DatasetCatalog.register`!" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "DatasetCatalog.register(IMAGE_DIR, imgs_anns)\n", | |
| "\n", | |
| "#MetadataCatalog.get(\"balloon/\" + d).set(thing_classes=[\"balloon\"])\n", | |
| "#balloon_metadata = MetadataCatalog.get(\"balloon/train\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "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.8.8" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment