GeoYolo-SLAM/MaskRCNN_ROS/include/MaskRCNN/samples/coco/inspect_data.ipynb

1049 lines
7.8 MiB
Plaintext
Raw Normal View History

2025-04-09 16:05:54 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Mask R-CNN - Inspect Training Data\n",
"\n",
"Inspect and visualize data loading and pre-processing code."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
}
],
"source": [
"import os\n",
"import sys\n",
"import itertools\n",
"import math\n",
"import logging\n",
"import json\n",
"import re\n",
"import random\n",
"from collections import OrderedDict\n",
"import numpy as np\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.patches as patches\n",
"import matplotlib.lines as lines\n",
"from matplotlib.patches import Polygon\n",
"\n",
"# Root directory of the project\n",
"ROOT_DIR = os.path.abspath(\"../../\")\n",
"\n",
"# Import Mask RCNN\n",
"sys.path.append(ROOT_DIR) # To find local version of the library\n",
"from mrcnn import utils\n",
"from mrcnn import visualize\n",
"from mrcnn.visualize import display_images\n",
"import mrcnn.model as modellib\n",
"from mrcnn.model import log\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Configurations\n",
"\n",
"Run one of the code blocks below to import and load the configurations to use."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Run one of the code blocks\n",
"\n",
"# Shapes toy dataset\n",
"# import shapes\n",
"# config = shapes.ShapesConfig()\n",
"\n",
"# MS COCO Dataset\n",
"import coco\n",
"config = coco.CocoConfig()\n",
"COCO_DIR = \"path to COCO dataset\" # TODO: enter value here"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dataset"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"loading annotations into memory...\n",
"Done (t=11.93s)\n",
"creating index...\n",
"index created!\n",
"Image Count: 82081\n",
"Class Count: 81\n",
" 0. BG \n",
" 1. person \n",
" 2. bicycle \n",
" 3. car \n",
" 4. motorcycle \n",
" 5. airplane \n",
" 6. bus \n",
" 7. train \n",
" 8. truck \n",
" 9. boat \n",
" 10. traffic light \n",
" 11. fire hydrant \n",
" 12. stop sign \n",
" 13. parking meter \n",
" 14. bench \n",
" 15. bird \n",
" 16. cat \n",
" 17. dog \n",
" 18. horse \n",
" 19. sheep \n",
" 20. cow \n",
" 21. elephant \n",
" 22. bear \n",
" 23. zebra \n",
" 24. giraffe \n",
" 25. backpack \n",
" 26. umbrella \n",
" 27. handbag \n",
" 28. tie \n",
" 29. suitcase \n",
" 30. frisbee \n",
" 31. skis \n",
" 32. snowboard \n",
" 33. sports ball \n",
" 34. kite \n",
" 35. baseball bat \n",
" 36. baseball glove \n",
" 37. skateboard \n",
" 38. surfboard \n",
" 39. tennis racket \n",
" 40. bottle \n",
" 41. wine glass \n",
" 42. cup \n",
" 43. fork \n",
" 44. knife \n",
" 45. spoon \n",
" 46. bowl \n",
" 47. banana \n",
" 48. apple \n",
" 49. sandwich \n",
" 50. orange \n",
" 51. broccoli \n",
" 52. carrot \n",
" 53. hot dog \n",
" 54. pizza \n",
" 55. donut \n",
" 56. cake \n",
" 57. chair \n",
" 58. couch \n",
" 59. potted plant \n",
" 60. bed \n",
" 61. dining table \n",
" 62. toilet \n",
" 63. tv \n",
" 64. laptop \n",
" 65. mouse \n",
" 66. remote \n",
" 67. keyboard \n",
" 68. cell phone \n",
" 69. microwave \n",
" 70. oven \n",
" 71. toaster \n",
" 72. sink \n",
" 73. refrigerator \n",
" 74. book \n",
" 75. clock \n",
" 76. vase \n",
" 77. scissors \n",
" 78. teddy bear \n",
" 79. hair drier \n",
" 80. toothbrush \n"
]
}
],
"source": [
"# Load dataset\n",
"if config.NAME == 'shapes':\n",
" dataset = shapes.ShapesDataset()\n",
" dataset.load_shapes(500, config.IMAGE_SHAPE[0], config.IMAGE_SHAPE[1])\n",
"elif config.NAME == \"coco\":\n",
" dataset = coco.CocoDataset()\n",
" dataset.load_coco(COCO_DIR, \"train\")\n",
"\n",
"# Must call before using the dataset\n",
"dataset.prepare()\n",
"\n",
"print(\"Image Count: {}\".format(len(dataset.image_ids)))\n",
"print(\"Class Count: {}\".format(dataset.num_classes))\n",
"for i, info in enumerate(dataset.class_info):\n",
" print(\"{:3}. {:50}\".format(i, info['name']))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Display Samples\n",
"\n",
"Load and display images and masks."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\npCBXO8xcgWCwsy3assT
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa22871c208>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nTAXKEP7TaMfbg620Ulg
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa2273d0e48>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAw4AAACnCAYAAAC4uQv2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xu4bWdd2Pvv733fMeZl3fdae2cn2dkhgRAiCUEF4YhQ\noC2g6FGPim2t9LTa03pBW/VgabUqbR+LHqVV1PaxPTwHz/HSp9YjQpWLoCAcIAQa5BIISchtJ/u2\n9rrM2xjv5Xf+eMda2QaS7IQkM3vzfp5nP2uuMccc811rzD3X+M33/f1+oqoURVEURVEURVE8FDPv\nARRFURRFURRF8eRXAoeiKIqiKIqiKB5WCRyKoiiKoiiKonhYJXAoiqIoiqIoiuJhlcChKIqiKIqi\nKIqHVQKHoiiKoiiKoige1nkROIjI5SLyrgdsu+VRHOe/i8j13e1vEpHTZ933BhH5nnM4xntF5AMi\n8h4R+fdnbf9fu+3vF5GvPmv7r4jI+0TkrSKy+hDHvap7/Hu7Y1zXbf+n3bb3ishtIvKL3fY3i8iN\n3Th+75H+LoqiKM7Fl3r/PcfH/aaIvOjxGFNRPBoi8q0icmTe4yiK85mb9wAegQc2nHg0DSjeD7wA\nuAn4euBGEfkqVf10t/3XzvE436Wqx/a+6QKC1wBfB1wG/BbwQhF5OTBQ1ReJyPcCPwm87kGOeauq\nvqA73kuAnwZepapvBN7YbX878F/OesxrVPWD5zjm4gIjIqKlEUvxxCivs+JJS0SMqqbu9kO9L34b\ncAq4+wkbXFFcYM6LGYeOPOwOIr8uIn9Xsj8Rkec+YJcPAN/Q3b4e+A3gG0SkBi5S1TvPYRwK/K6I\nvLu7wAd4HvA+VY2q+gVgQUQq4MXA27p9/gh4YTfOPxSRF4nIQEQ+KCKX773pdZbJwc3ZP9sG8BRV\nveGszb8sIn8uIq86h3EXT1LdJ7o3isjviMhHROQ1IrIsIr8nIu/qXmtXdvu+V0T+DxH5Y/Jr989F\n5E+7madFETnUzaz9mYi8TUTWu8fdIiI/323/nbn+wMX5aP0cX5/fJSIfF5HfB66c85iL81T3XvXB\n7r3tVd1r7D3dbPzTun3eLCK/ISJvJX9Qd4uI/Bvg3SIyFJH/0O3/FyLyHBG5BngF8Ctllr4oHr3z\nacbha0XkPd3tBwsi/inwHnJw8O4HXGQDfBj4zyLigAS8D/hl4FPARwBE5PnAz/PFn7C9XlX/DPhO\nVd3spjvfLSJfCxwAzpy173a3bX+7qm6JyIHu/u8D/jvweeCXVfWO7rm/BngTedbif3nA8/9t/ups\nw49341gD/lREPtIFLcX56Qg5sGyBG4BnA7+vqv9FRJ4FvAH4rm7fG1T1J0Tk24H3q+pP7R1ERP4V\n8Nuq+n93s1yvA36C/H/9t1X1dSLyjrNm2oriXDzs61NEvhv418BXd/vd9GAHK4oHIyLfCFymql/f\nfV8B/01Vg4i8AvhnwPd3u39BVX+g288Bf6iq/0JEvhVwqvpCEbkC+F1VfZ6I/Anwm2WmvigevfMp\ncPioqr5s7xsR+dwDd1DVRkTeTL7IuvhB7j9Bvij/uKqeFpHD5EDjL7p9PgS85IGPPesYm93Xu0Xk\nJuBpwCawdtZuq922ze42IrLC/UHEKRF5J/Btqvp3zjr2x4CvF5HnkJdNPe+sY35P9++B4zjTrT++\nHvjCg427eNK7WVUnACLySfLr90dF5B939/uz9t37o/d24Fki8hbgLuBngauBXz1rv+/ubgdV/cvu\n9p3A+uPxQxQXrHN5fW4Ax8/a72NzGWlxvrsWeO9Z368AvyYiFwE9YOes+84OAIKqfqS7ffXefap6\nuzxEfmFRPBZE5IeA7wRuUdX/bd7jeTydz0uVvmjWQUQuJn+a/6/JswZfygeA13ZfAY6RP8l9f3eM\n58v9ych7/94jIi/u7l866+u1wB3kmYwXiIgVkaPArqp64M+Bb+qe55Xd94jItcD/BLxVRF7Tbeud\nNcYdYHzWz/V0IKnqrWdtW+m+1uT8jC8KpIrzyjO66XVHfl0dA35BVV+qqi8lv372xO6rVdWfU9VX\nA4eAlwE3k18PdF8/+yDP97BL/4riLNecw+vzFHDorP2ePcfxFuevTwJ/7azvXw18TFVfDLyev/re\nFfnSPkv3Ptgto9vqtrdA9VgOtigAVPXXVPUlF3rQAOfXjMNDJkeLiAD/J/AjqnqDiPy2iHyjqv7x\nAx73fvKSpg91338A+FZV/SQ89IxD98fwvSIyIb/5/IyqbnX3/Tp56VMCfrR7yDuAbxaR95GXL71a\nRPrAfyDPHtwNvKO7/1IR+UnyG6EC/+Ssp/4e4P95wHB+T0QWunH8lqp+5kuNuThv3AH8JnAV8Obu\n338UkR/p7n8bOUn+7Nf9i0XknwMBmJFnzT4K/F8i8v3k4PPV3b5nP64kuhaP1O08zOtTVd8oIj9D\nfk+9jZKAWjwKqvrHIvJiEfkgMAH+EPheEXkhcPbfuYe6Jngr8EoReT/5A9If7ra/DXi9iHx6b4lT\nURSPjJSiLEUxXyJyOXnd7csedueiKIqiKIo5OZ+WKhVFURRFURRFMSdlxqEoiqIoiqIoiodVZhyK\noiiKoiiKonhYJXAoiqIoiqIoiuJhza2q0i/94hu16vWoFjbor17K4kVP48iRQxxZFVZ7DfdNaz76\nsU/TX6zZvvOTDB0sLC2zuPFVfM3Vhzg9bRA74L57d5lubeJ6QtBEO5ui0zPURrBGSdoSose3DUJE\nU0LEIqqAIs5hrcVgEGswxgCKEUEwqAhJU34cihGHiBA0klLCWZPrKEnCWkcIgaqypL0+0MaQCz6B\nqmKMI6WIc3lfESHGiOn2UwURQ4qBlMBYAyRUwRjb7aNIN76EAoKIdGOHGCMcuIJnXXGQd7/5JUzG\nJzlzfAqN8Cc738Gff7xl96Y3lXKcwOCrf7is1Zuj6cfL6/C1v/QH+vof/fZ5D+OCt/bcH/6S28tr\nMCvvhfNVXodZeR3O17m8DucWONjKYF2PheWD9JZWQQQvYERJCYYVSL/HqVs+jEueamWVKAnvNzk1\nOYirB3zmjrsY9GoGh1ew1lJbR9XvYVWonGAVdsYtqoLESJgFJs2U0Ym7iTT0JSBxQtKAMYGULKoK\noiQxiCRiCIhC0oS1FYhiLDhToSmSNFCbPklmGAHnLCmCdZakOQBRMYh0AUFKGCuEEDDGdMHE/Rf8\n1rpuu8XZHCQkQLtKcymlHGQgiBWMghWXj2MtACJCGu9QVYeIehWz5j7cUDnphQ9+dIaY3oOdlqIo\nigvSC59zFe//6C3zHkZRFMV5bW6BgxFBRGknZ6iXD7Gwskr0EYPBiEWMsnP7TTCbUS/0UVchAdrR\nKe7bPsrXXe74y+1ttsfHIXnqviXSw4ml6i9gF9Zw1ZB6YYj6iDhFFhyXHl6nesoGozbSE9huBD/Z\nRbdPk6RFfUPShDGKqsUEgwwGIBX93hAxgjE9IoaqV6FJiePT7Gwfw5lI0ilVlS/1xQAqGGvQs/rU\naMozBimlbuZAugDj/kDbGEgpAgZNAghR0/7jjAERcLbKx+lmLIzJsyYxjjmx7anW/ha793ycnTN9\nPnDqesa9dXpp/MDTURRFcUF762/86IPOOhRFURTnZm6BgzMGNGCspW2m0DbQHyCSsCZho6DtCOcE\nZysgXxi30xln7rmVO9ev5ynPuJZbPngbMc5IIS83SkYIzRayfQLbs2iyRD+jWjoIts/uYIixFaFp\nWVg6QDKOM7d/hLruEcOUfl1j6iGSDElaql4N2iJqSdMzKHnJkI+eWNVQ9dC6Zu3oNSRnISasB21H\nNO0uBE+FpQ1TXApEImo8SRIhhHw8BZEKZ23uiWkUSYJzFsVg1JJSQpPm+1UBhyZD1NgFC7K/3ElE\nQBLHtrdYffbfZPdjb+JDo2u44fZlnAIpzOu0F0VRFEVRFOepuQUOCvhmim1G9GhITlgcKtYAJGpX\nobHFVjViKhKKKjiNhHa
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa226c1fe80>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nhzjuEyddut0hvu+jlHp
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa2262c5160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Load and display random samples\n",
"image_ids = np.random.choice(dataset.image_ids, 4)\n",
"for image_id in image_ids:\n",
" image = dataset.load_image(image_id)\n",
" mask, class_ids = dataset.load_mask(image_id)\n",
" visualize.display_top_masks(image, mask, class_ids, dataset.class_names)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bounding Boxes\n",
"\n",
"Rather than using bounding box coordinates provided by the source datasets, we compute the bounding boxes from masks instead. This allows us to handle bounding boxes consistently regardless of the source dataset, and it also makes it easier to resize, rotate, or crop images because we simply generate the bounding boxes from the updates masks rather than computing bounding box transformation for each type of image transformation."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"image_id 74886 http://cocodataset.org/#explore?id=118535\n",
"image shape: (375, 500, 3) min: 0.00000 max: 255.00000\n",
"mask shape: (375, 500, 5) min: 0.00000 max: 1.00000\n",
"class_ids shape: (5,) min: 1.00000 max: 35.00000\n",
"bbox shape: (5, 4) min: 1.00000 max: 329.00000\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAALCCAYAAADEe25pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvcuOJcmOLbZIM/e9I6qOHlBfqAUJgqaCIEDDO9InaKLH\nTF+hz27odvc5lRl7uxtJDRZp5pmnNRFQdVGQsxCZWRGx/WEPPhYXaRIRuOWWW2655ZZbbrnllltu\nueWWP0r0P/YD3HLLLbfccsstt9xyyy233PL/L7kD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWW\nW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD\n0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnl\nllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW265\n5ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0Vtu\nueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+\nULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZb\nbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+ULkD0VtuueWWW2655ZZbbrnlllv+UOn/sR/g/6v8\nz//7f/9/tdb+/a+//ore+RrhBsAhAqgKWmsABBHI3xG8v7/x9f07vn99w/P5xC+/fGLfOnpXAAFV\nRe8dZg4zh4hAm6L1jtfrhd9++w2//fYbAOAf/uEf8Ouvf8Fjf+I8T5zniYjgZ1ShImiigMh87tfr\nhb/97Tf03vF47Pj8/ETvHWMMqCpaa3APuCP/v6O3Dd++fcNvv/0GsxOiwPP5QN86RAUiAUgAavwb\nCh8BN8fWH1DdAAfOw/B+H+itYds27PuO3hqaAOF8XwTgHjAzAIA0hbvhHAe+f32HhWHfNzyfGx7P\nDvMBD4c0hYgCENhpGKfBhwMQqHa83298fX2hiWLbdnz+8gtaaxjDMWxgmKG1xnFD42tEYIyB43jj\n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\nOuD5/KqCppfPSs0Xxzx
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa2280d3eb8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Load random image and mask.\n",
"image_id = random.choice(dataset.image_ids)\n",
"image = dataset.load_image(image_id)\n",
"mask, class_ids = dataset.load_mask(image_id)\n",
"# Compute Bounding box\n",
"bbox = utils.extract_bboxes(mask)\n",
"\n",
"# Display image and additional stats\n",
"print(\"image_id \", image_id, dataset.image_reference(image_id))\n",
"log(\"image\", image)\n",
"log(\"mask\", mask)\n",
"log(\"class_ids\", class_ids)\n",
"log(\"bbox\", bbox)\n",
"# Display image and instances\n",
"visualize.display_instances(image, bbox, mask, class_ids, dataset.class_names)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Resize Images\n",
"\n",
"To support multiple images per batch, images are resized to one size (1024x1024). Aspect ratio is preserved, though. If an image is not square, then zero padding is added at the top/bottom or right/left."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.5/dist-packages/scipy/ndimage/interpolation.py:600: UserWarning: From scipy 0.13.0, the output shape of zoom() is calculated with round() instead of int() - for these inputs the size of the returned array has changed.\n",
" \"the returned array has changed.\", UserWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"image_id: 6480 http://cocodataset.org/#explore?id=402563\n",
"Original shape: (476, 640, 3)\n",
"image shape: (1024, 1024, 3) min: 0.00000 max: 255.00000\n",
"mask shape: (1024, 1024, 32) min: 0.00000 max: 1.00000\n",
"class_ids shape: (32,) min: 1.00000 max: 77.00000\n",
"bbox shape: (32, 4) min: 1.00000 max: 991.00000\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAAOZCAYAAAATZw0gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3dmPbFl23/fvWvuciMjI6Q41saYe2KQliiYBi7KtB/8V\n/j/8B/rFgPymJ9kwZNESxWZ3V3UNd8qbU0Scvffyw9qRtwh4omSA0cDvQxQa3XVvZsQ5Zw9r2IcW\nEYiIiIiIiIj8Y/N/7A8gIiIiIiIiAgpQRURERERE5EQoQBUREREREZGToABVREREREREToICVBER\nERERETkJClBFRERERETkJChAFRERERERkZOgAFVEREREREROggJUEREREREROQkKUEVEREREROQk\nKEAVERERERGRk6AAVURERERERE6CAlQRERERERE5CdM/9gf4hzKz/wn4+h/7c4iIiIiIiMj/pT+J\niP6f8hf/4AJUMjj95T/2hxAREREREZH/f6nFV0RERERERE6CAlQRERERERE5CQpQRURERERE5CQo\nQBUREREREZGToABVREREREREToICVBERERERETkJClBFRERERETkJChAFRERERERkZOgAFVERERE\nREROggJUEREREREROQkKUEVEREREROQkKEAVERERERGRk6AAVURERERERE6CAlQRERERERE5CQpQ\nRURERERE5CQoQBUREREREZGToABVREREREREToICVBERERERETkJClBFRERERETkJChAFRERERER\nkZOgAFVEREREREROggJUEREREREROQkKUEVEREREROQkKEAVERERERGRk6AAVURERERERE6CAlQR\nERERERE5CQpQRURERERE5CQoQBUREREREZGToABVREREREREToICVBERERERETkJClBFRERERETk\nJChAFRERERERkZOgAFVEREREREROggJUEREREREROQkKUEVEREREROQkKEAVERERERGRk6AAVURE\nRERERE6CAlQRERERERE5CQpQRURERERE5CQoQBUREREREZGToABVREREREREToICVBERERERETkJ\nClBFRERERETkJChAFRERERERkZOgAFVEREREREROggJUEREREREROQkKUEVEREREROQkKEAVERER\nERGRk6AAVURERERERE6CAlQRERERERE5CQpQRURERERE5CQoQBUREREREZGToABVREREREREToIC\nVBERERERETkJClBFRERERETkJChAFRERERERkZOgAFVEREREREROggJUEREREREROQkKUEVERERE\nROQkKEAVERERERGRk6AAVURERERERE6CAlQRERERERE5CQpQRURERERE5CQoQBUREREREZGToABV\nREREREREToICVBERERERETkJClBFRERERETkJChAFRERERERkZOgAFVEREREREROggJUERERERER\nOQkKUEVEREREROQkKEAVERERERGRk6AAVURERERERE6CAlQRERERERE5CQpQRURERERE5CQoQBUR\nEREREZGToABVREREREREToICVBERERERETkJClBFRERERETkJChAFRERERERkZOgAFVERERERERO\nggJUEREREREROQkKUEVEREREROQkKEAVERERERGRk6AAVURERERERE6CAlQRERERERE5CQpQRURE\nRERE5CQoQBUREREREZGToABVREREREREToICVBERERERETkJClBFRERERETkJChAFRERERERkZOg\nAFVEREREREROggJUEREREREROQkKUEVEREREROQkKEAVERERERGRk6AAVURERERERE6CAlQRERER\nERE5CQpQRURERERE5CQoQBUREREREZGToABVREREREREToICVBERERERETkJClBFRERERETkJChA\nFRERERERkZOgAFVEREREREROggJUEREREREROQkKUEVEREREROQkKEAVERERERGRk6AAVURERERE\nRE6CAlQRERERERE5CdM/9gf4h/of/vs/pgBTN0o33Arh0Og0KhAYnWKGFSe6Ed1wm5nLTESnLgsA\njmM4PQK8EfTxW4LeO7jjNkGAmzNZAQsqCy0aYLgb5kaPoPWOWf53w/KzmBM9KDhzKfTeiAiCoEcQ\nZrgHeBB9IQKIKb9XBOX4760TdCKCHkCbcHOgEAEt/yLm4MX+3jWzCFpr4IaXmcDzM0TDolNw6AYd\n3B0r+fkCoBR6NHpfMOtM5tDzujY6Fo2Sf5BuhT5yHkYnegMzzBzH885E0AncHXrHen4Gt8DdxvVt\nOHkNixlenBqdiAnrjtN58bM/5+Wf/Necf/YL3nzzb/n9v/2fef/t32K+4X7fafM5q+0V29Lpj++x\ndiDCeL3v+Lzm7KwwlwWvO6YIDGOJyuz5VERAhINZXovW6QRlKoCxLJ1YX7B59hGby0tq37F/8yNx\nd0PplYJjNhNWCDq1L/TodDpYpbhhYVgzejvjcSk82Ia4+IjnP/sF5+ug33/H2x/+lnLYM3uj2IK1\nAGb2tfB+Zxx2RgunmdECihvrsw3TZqa2A8UKViYeA252e6JWzs/O+Pizz7iYgbs3tNvXzL3SeiOi\n5XMUgEXePwyzipnlnY2az2Qzei2UKLgZzSuLNazNWNngmy3l/JyYZu4fH3i4v8d6wZhoDs0OeL1j\ndpjmc5guqK2xOYNPP7vmFz//mtX2ijJvMJ8xVrTagIqXCq2xv33kh9/8jl//2/+d5XHHRLCaPZ+Z\npdF65DjpYOE5tq0yF2gEeypRGj0CC6fgTGZEK/QwMJhwes/xYG6YWd7L3iAa5papPoPWcu4wYPKJ\naA16x83zGkXkoHSn9YnaOi0a4Z1SHKLn3zcngvy9rVOi5Gen0wjCCrXn3zUDI3CcEhNTn/EWWG8E\njSUadTa657jP5zugd+YxVs3BHIi859GN3oIeOae5T5itMIOg0foC0fGA4hOlzNTaaRGEB+45j0bv\nRO9MU6GUAkBveb1jXIvIH5o/a4z51vN74g7FMTMiOhGd6WmMdpZa6QbmjpnTW4cezMVZrWcCw71Q\nfMp/Pz6PGUyrMp7pA2Y7ohciCjDlZ7UY85LjTBCe87SPOdwM3OnW8QhmM2Yzwo3aG1gwT4Vp8vyd\nBO4F3KhjPpmmQus55twMi5LjzZ1SnBZ1PE+51hG5ZmEQsafHgrvhvmLZQzDltbKFsAMRTnTP+2sQ\n5DqV62IAxuQTDizR6cAcTnTGc+YUc1rLtdXLeIbGGtFaG8+rPf3TWofjmhBQeycs72u0fL7D8jua\n5++KFkxuxNSJXokazGVNmNOi03ob39Mxgx6dFhWzwClEg14bhjGVks/XuM9ejDbl2DHItcWOK32O\n8RxBhhtUGqU7cys8LAt//ev3fHfTsbMtz7dbdrt7HpcD09kZ+7qDDuuyZrtySqk8Ljs68Kc//5IN\nzuHhgYf9A0s4RKPVhXcPe+4OsJ5nvnx2zs8/fcbrmzt+9/173t9WzjbnuDv7/QN1/45f/ckLvvji\nBVfbMzal4P1Aw1n6mlgORH1ke7HlxWdfcHv7yH/4m2/593/zPbu64uWLC7789CUfP3vBfV14df/A\n96/ueXj1yLNW+bg3rqNR6Xy3h2/qA+2y89/+iz/l4+crNmfO3cH4N//mt/zu796x3V7wV//dP+Wz\nLzcc3v7IzTdvKGcbllpYTys+fn7G+aXx5tUbfv/tDW9uK22/46svP+Pnv/qaWjqvfv933L29Y/cw\n8f2PO94thd204eCF/X5HPNxxTeeL62tW88zq+ZbzT845n2+ZvPDr39zw7//jK/7iL3/Fn/3Jlzw7\nn7l/+5rVtCYI3t/d8f0Pr2kHKEwcdpVvv3vDoRdW2y2b8zXLw0K9OcDS8asNcen4HMwE82R4CXwG\nn43Hh4X795XWCuvzNd+9v+ebV4/8+LbS28TmfMOnn13w1ecXeK18/+o9P97cs9nO/PzrT6it8+OP\nN1g1rp+95LHCb799xav
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa2280b7cf8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Load random image and mask.\n",
"image_id = np.random.choice(dataset.image_ids, 1)[0]\n",
"image = dataset.load_image(image_id)\n",
"mask, class_ids = dataset.load_mask(image_id)\n",
"original_shape = image.shape\n",
"# Resize\n",
"image, window, scale, padding, _ = utils.resize_image(\n",
" image, \n",
" min_dim=config.IMAGE_MIN_DIM, \n",
" max_dim=config.IMAGE_MAX_DIM,\n",
" mode=config.IMAGE_RESIZE_MODE)\n",
"mask = utils.resize_mask(mask, scale, padding)\n",
"# Compute Bounding box\n",
"bbox = utils.extract_bboxes(mask)\n",
"\n",
"# Display image and additional stats\n",
"print(\"image_id: \", image_id, dataset.image_reference(image_id))\n",
"print(\"Original shape: \", original_shape)\n",
"log(\"image\", image)\n",
"log(\"mask\", mask)\n",
"log(\"class_ids\", class_ids)\n",
"log(\"bbox\", bbox)\n",
"# Display image and instances\n",
"visualize.display_instances(image, bbox, mask, class_ids, dataset.class_names)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Mini Masks\n",
"\n",
"Instance binary masks can get large when training with high resolution images. For example, if training with 1024x1024 image then the mask of a single instance requires 1MB of memory (Numpy uses bytes for boolean values). If an image has 100 instances then that's 100MB for the masks alone. \n",
"\n",
"To improve training speed, we optimize masks by:\n",
"* We store mask pixels that are inside the object bounding box, rather than a mask of the full image. Most objects are small compared to the image size, so we save space by not storing a lot of zeros around the object.\n",
"* We resize the mask to a smaller size (e.g. 56x56). For objects that are larger than the selected size we lose a bit of accuracy. But most object annotations are not very accuracy to begin with, so this loss is negligable for most practical purposes. Thie size of the mini_mask can be set in the config class.\n",
"\n",
"To visualize the effect of mask resizing, and to verify the code correctness, we visualize some examples."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"image shape: (1024, 1024, 3) min: 0.00000 max: 255.00000\n",
"image_meta shape: (89,) min: 0.00000 max: 23221.00000\n",
"bbox shape: (1, 5) min: 62.00000 max: 578.00000\n",
"mask shape: (1024, 1024, 1) min: 0.00000 max: 1.00000\n"
]
},
{
"data": {
"image/png": "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\nZtQeR84e4U1gtTPQgKU
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa227ee7080>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"image_id = np.random.choice(dataset.image_ids, 1)[0]\n",
"image, image_meta, class_ids, bbox, mask = modellib.load_image_gt(\n",
" dataset, config, image_id, use_mini_mask=False)\n",
"\n",
"log(\"image\", image)\n",
"log(\"image_meta\", image_meta)\n",
"log(\"class_ids\", class_ids)\n",
"log(\"bbox\", bbox)\n",
"log(\"mask\", mask)\n",
"\n",
"display_images([image]+[mask[:,:,i] for i in range(min(mask.shape[-1], 7))])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAAOZCAYAAAATZw0gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvc2udUuuJTTsWPsklOjQRCrRKIkGokEP8QK8BG3EG1Jd\nHqJ4ARCNEnBBBYJbefaaNg2PYXuu78sL1chzz80zI3Of/e215k+Ew2EP/4TDMhNPe9rTnva0pz3t\naU972tOe9rSn/WM3/8fuwNOe9rSnPe1pT3va0572tKc97WnAY6A+7WlPe9rTnva0pz3taU972tN+\nJ+0xUJ/2tKc97WlPe9rTnva0pz3tab+L9hioT3va0572tKc97WlPe9rTnva030V7DNSnPe1pT3va\n0572tKc97WlPe9rvoj0G6tOe9rSnPe1pT3va0572tKc97XfRHgP1aU972tOe9rSnPe1pT3va0572\nu2iPgfq0pz3taU972tOe9rSnPe1pT/tdtMdAfdrTnva0pz3taU972tOe9rSn/S7aY6A+7WlPe9rT\nnva0pz3taU972tN+F+0xUJ/2tKc97WlPe9rTnva0pz3tab+L9hioT3va0572tKc97WlPe9rTnva0\n30V7DNSnPe1pT3va0572tKc97WlPe9rvor3+sTvw79rM7L8H8B//Y/fjaf//2z//5/8R/tv/5r8G\nYDBzGAxuDjNDZiKQ9T9LAAkzq+8AZAKZCYPhmOHlhmOARSITiEjg6yCOIzKASFgAX/aC+8F3An+O\nwDHDn44jM2AOAImMC+c4AokLCbODzATScOAAApkXAMD9wHBg5kgkIt6IuAAY4AeZNVZDwg01hhox\nACAz8M7Ee18H4HUOjpMWSF6bcDMYHMiDxCF9AmnfRSMYgBeQr7ovLiADlvVc0TAcuDL5EzhIHAPc\nne+aeXKfOUECHjVXBiBtfqpF95c3IzP7x8zgZkAm8goggYPq06+ZCEucU++D1T3VoelThuGgnnEh\nEIh6lRksSUVzwAxphow/w+Cw/BOQgYg/I/GNTMDtn8HyVX/j3/a4LAENSXPwHYEwIKzm7/UOeAJw\nAyB+ASKLCppRM8MXAMfQoZsZEuTp0PVr/AhERPcDzusTiAg4HJbGmxO4XVvzcmUgMhG1aGAomh+O\n8IoLVybeWb02A14ZcHPS0hCpNQdYeM1HkB8OZz4vANWPK6/iAwP+/te/xzu+a0nA4P7C8RcsHRk1\n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\n2Tr0pqf1zJvYeNofpD0
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa227fe5390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"visualize.display_instances(image, bbox, mask, class_ids, dataset.class_names)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mask shape: (56, 56, 1) min: 0.00000 max: 1.00000\n"
]
},
{
"data": {
"image/png": "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\njAlxBGbOsP4/3eNOvdx
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa227f6a438>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Add augmentation and mask resizing.\n",
"image, image_meta, class_ids, bbox, mask = modellib.load_image_gt(\n",
" dataset, config, image_id, augment=True, use_mini_mask=True)\n",
"log(\"mask\", mask)\n",
"display_images([image]+[mask[:,:,i] for i in range(min(mask.shape[-1], 7))])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAAOZCAYAAAATZw0gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvc2udUuuJTTsWPsklOjQRCrRKIkGokEP8QK8BG3EG1Jd\nHqJ4ARCNEnBBBYJbefaaNg2PYXuu78sL1chzz80zI3Of/e215k+Ew2EP/4TDMhNPe9rTnva0pz3t\naU972tOe9rSn/WM3/8fuwNOe9rSnPe1pT3va0572tKc97WnAY6A+7WlPe9rTnva0pz3taU972tN+\nJ+0xUJ/2tKc97WlPe9rTnva0pz3tab+L9hioT3va0572tKc97WlPe9rTnva030V7DNSnPe1pT3va\n0572tKc97WlPe9rvoj0G6tOe9rSnPe1pT3va0572tKc97XfRHgP1aU972tOe9rSnPe1pT3va0572\nu2iPgfq0pz3taU972tOe9rSnPe1pT/tdtMdAfdrTnva0pz3taU972tOe9rSn/S7aY6A+7WlPe9rT\nnva0pz3taU972tN+F+0xUJ/2tKc97WlPe9rTnva0pz3tab+L9hioT3va0572tKc97WlPe9rTnva0\n30V7DNSnPe1pT3va0572tKc97WlPe9rvor3+sTvw79rM7L8H8B//Y/fjaf//2z//5/8R/tv/5r8G\nYDBzGAxuDjNDZiKQ9T9LAAkzq+8AZAKZCYPhmOHlhmOARSITiEjg6yCOIzKASFgAX/aC+8F3An+O\nwDHDn44jM2AOAImMC+c4AokLCbODzATScOAAApkXAMD9wHBg5kgkIt6IuAAY4AeZNVZDwg01hhox\nACAz8M7Ee18H4HUOjpMWSF6bcDMYHMiDxCF9AmnfRSMYgBeQr7ovLiADlvVc0TAcuDL5EzhIHAPc\nne+aeXKfOUECHjVXBiBtfqpF95c3IzP7x8zgZkAm8goggYPq06+ZCEucU++D1T3VoelThuGgnnEh\nEIh6lRksSUVzwAxphow/w+Cw/BOQgYg/I/GNTMDtn8HyVX/j3/a4LAENSXPwHYEwIKzm7/UOeAJw\nAyB+ASKLCppRM8MXAMfQoZsZEuTp0PVr/AhERPcDzusTiAg4HJbGmxO4XVvzcmUgMhG1aGAomh+O\n8IoLVybeWb02A14ZcHPS0hCpNQdYeM1HkB8OZz4vANWPK6/iAwP+/te/xzu+a0nA4P7C8RcsHRk1\n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\n2Tr0pqf1zJvYeNofpD0
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa2266481d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mask = utils.expand_mask(bbox, mask, image.shape)\n",
"visualize.display_instances(image, bbox, mask, class_ids, dataset.class_names)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Anchors\n",
"\n",
"The order of anchors is important. Use the same order in training and prediction phases. And it must match the order of the convolution execution.\n",
"\n",
"For an FPN network, the anchors must be ordered in a way that makes it easy to match anchors to the output of the convolution layers that predict anchor scores and shifts. \n",
"* Sort by pyramid level first. All anchors of the first level, then all of the second and so on. This makes it easier to separate anchors by level.\n",
"* Within each level, sort anchors by feature map processing sequence. Typically, a convolution layer processes a feature map starting from top-left and moving right row by row. \n",
"* For each feature map cell, pick any sorting order for the anchors of different ratios. Here we match the order of ratios passed to the function.\n",
"\n",
"**Anchor Stride:**\n",
"In the FPN architecture, feature maps at the first few layers are high resolution. For example, if the input image is 1024x1024 then the feature map of the first layer is 256x256, which generates about 200K anchors (256x256x3). These anchors are 32x32 pixels and their stride relative to image pixels is 4 pixels, so there is a lot of overlap. We can reduce the load significantly if we generate anchors for every other cell in the feature map. A stride of 2 will cut the number of anchors by 4, for example. \n",
"\n",
"In this implementation we use an anchor stride of 2, which is different from the paper."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Count: 65472\n",
"Scales: (32, 64, 128, 256, 512)\n",
"ratios: [0.5, 1, 2]\n",
"Anchors per Cell: 3\n",
"Levels: 5\n",
"Anchors in Level 0: 49152\n",
"Anchors in Level 1: 12288\n",
"Anchors in Level 2: 3072\n",
"Anchors in Level 3: 768\n",
"Anchors in Level 4: 192\n"
]
}
],
"source": [
"# Generate Anchors\n",
"backbone_shapes = modellib.compute_backbone_shapes(config, config.IMAGE_SHAPE)\n",
"anchors = utils.generate_pyramid_anchors(config.RPN_ANCHOR_SCALES, \n",
" config.RPN_ANCHOR_RATIOS,\n",
" backbone_shapes,\n",
" config.BACKBONE_STRIDES, \n",
" config.RPN_ANCHOR_STRIDE)\n",
"\n",
"# Print summary of anchors\n",
"num_levels = len(backbone_shapes)\n",
"anchors_per_cell = len(config.RPN_ANCHOR_RATIOS)\n",
"print(\"Count: \", anchors.shape[0])\n",
"print(\"Scales: \", config.RPN_ANCHOR_SCALES)\n",
"print(\"ratios: \", config.RPN_ANCHOR_RATIOS)\n",
"print(\"Anchors per Cell: \", anchors_per_cell)\n",
"print(\"Levels: \", num_levels)\n",
"anchors_per_level = []\n",
"for l in range(num_levels):\n",
" num_cells = backbone_shapes[l][0] * backbone_shapes[l][1]\n",
" anchors_per_level.append(anchors_per_cell * num_cells // config.RPN_ANCHOR_STRIDE**2)\n",
" print(\"Anchors in Level {}: {}\".format(l, anchors_per_level[l]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Visualize anchors of one cell at the center of the feature map of a specific level."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.5/dist-packages/scipy/ndimage/interpolation.py:600: UserWarning: From scipy 0.13.0, the output shape of zoom() is calculated with round() instead of int() - for these inputs the size of the returned array has changed.\n",
" \"the returned array has changed.\", UserWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Level 0. Anchors: 49152 Feature map Shape: [256 256]\n",
"Level 1. Anchors: 12288 Feature map Shape: [128 128]\n",
"Level 2. Anchors: 3072 Feature map Shape: [64 64]\n",
"Level 3. Anchors: 768 Feature map Shape: [32 32]\n",
"Level 4. Anchors: 192 Feature map Shape: [16 16]\n"
]
},
{
"data": {
"image/png": "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\nxI8+yb1b91D5Cd51/jn
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa2281beb70>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Visualize anchors of one cell at the center of the feature map of a specific level\n",
"\n",
"# Load and draw random image\n",
"image_id = np.random.choice(dataset.image_ids, 1)[0]\n",
"image, image_meta, _, _, _ = modellib.load_image_gt(dataset, config, image_id)\n",
"fig, ax = plt.subplots(1, figsize=(10, 10))\n",
"ax.imshow(image)\n",
"levels = len(backbone_shapes)\n",
"\n",
"for level in range(levels):\n",
" colors = visualize.random_colors(levels)\n",
" # Compute the index of the anchors at the center of the image\n",
" level_start = sum(anchors_per_level[:level]) # sum of anchors of previous levels\n",
" level_anchors = anchors[level_start:level_start+anchors_per_level[level]]\n",
" print(\"Level {}. Anchors: {:6} Feature map Shape: {}\".format(level, level_anchors.shape[0], \n",
" backbone_shapes[level]))\n",
" center_cell = backbone_shapes[level] // 2\n",
" center_cell_index = (center_cell[0] * backbone_shapes[level][1] + center_cell[1])\n",
" level_center = center_cell_index * anchors_per_cell \n",
" center_anchor = anchors_per_cell * (\n",
" (center_cell[0] * backbone_shapes[level][1] / config.RPN_ANCHOR_STRIDE**2) \\\n",
" + center_cell[1] / config.RPN_ANCHOR_STRIDE)\n",
" level_center = int(center_anchor)\n",
"\n",
" # Draw anchors. Brightness show the order in the array, dark to bright.\n",
" for i, rect in enumerate(level_anchors[level_center:level_center+anchors_per_cell]):\n",
" y1, x1, y2, x2 = rect\n",
" p = patches.Rectangle((x1, y1), x2-x1, y2-y1, linewidth=2, facecolor='none',\n",
" edgecolor=(i+1)*np.array(colors[level]) / anchors_per_cell)\n",
" ax.add_patch(p)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Generator\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true,
"scrolled": false
},
"outputs": [],
"source": [
"# Create data generator\n",
"random_rois = 2000\n",
"g = modellib.data_generator(\n",
" dataset, config, shuffle=True, random_rois=random_rois, \n",
" batch_size=4,\n",
" detection_targets=True)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true,
"scrolled": false
},
"outputs": [],
"source": [
"# Uncomment to run the generator through a lot of images\n",
"# to catch rare errors\n",
"# for i in range(1000):\n",
"# print(i)\n",
"# _, _ = next(g)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.5/dist-packages/scipy/ndimage/interpolation.py:600: UserWarning: From scipy 0.13.0, the output shape of zoom() is calculated with round() instead of int() - for these inputs the size of the returned array has changed.\n",
" \"the returned array has changed.\", UserWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"rois shape: (4, 128, 4) min: 0.00000 max: 1023.00000\n",
"mrcnn_class_ids shape: (4, 128, 1) min: 0.00000 max: 67.00000\n",
"mrcnn_bbox shape: (4, 128, 81, 5) min: -3.58824 max: 3.45455\n",
"mrcnn_mask shape: (4, 128, 28, 28, 81) min: 0.00000 max: 1.00000\n",
"gt_boxes shape: (4, 100, 5) min: 0.00000 max: 1024.00000\n",
"gt_masks shape: (4, 56, 56, 100) min: 0.00000 max: 1.00000\n",
"rpn_match shape: (4, 65472, 1) min: -1.00000 max: 1.00000\n",
"rpn_bbox shape: (4, 256, 4) min: -4.60969 max: 1.76777\n",
"image_id: 2937 http://cocodataset.org/#explore?id=135453\n"
]
}
],
"source": [
"# Get Next Image\n",
"if random_rois:\n",
" [normalized_images, image_meta, rpn_match, rpn_bbox, gt_class_ids, gt_boxes, gt_masks, rpn_rois, rois], \\\n",
" [mrcnn_class_ids, mrcnn_bbox, mrcnn_mask] = next(g)\n",
" \n",
" log(\"rois\", rois)\n",
" log(\"mrcnn_class_ids\", mrcnn_class_ids)\n",
" log(\"mrcnn_bbox\", mrcnn_bbox)\n",
" log(\"mrcnn_mask\", mrcnn_mask)\n",
"else:\n",
" [normalized_images, image_meta, rpn_match, rpn_bbox, gt_boxes, gt_masks], _ = next(g)\n",
" \n",
"log(\"gt_class_ids\", gt_class_ids)\n",
"log(\"gt_boxes\", gt_boxes)\n",
"log(\"gt_masks\", gt_masks)\n",
"log(\"rpn_match\", rpn_match, )\n",
"log(\"rpn_bbox\", rpn_bbox)\n",
"image_id = modellib.parse_image_meta(image_meta)[\"image_id\"][0]\n",
"print(\"image_id: \", image_id, dataset.image_reference(image_id))\n",
"\n",
"# Remove the last dim in mrcnn_class_ids. It's only added\n",
"# to satisfy Keras restriction on target shape.\n",
"mrcnn_class_ids = mrcnn_class_ids[:,:,0]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"anchors shape: (65472, 4) min: -362.03867 max: 1258.03867\n",
"refined_anchors shape: (4, 4) min: 112.99997 max: 912.00000\n",
"Positive anchors: 4\n",
"Negative anchors: 252\n",
"Neutral anchors: 65216\n",
"BG : 90\n",
"chair : 6\n",
"bed : 30\n",
"remote : 2\n"
]
},
{
"data": {
"image/png": "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\nf/gD7z685/e//1Pcd9/
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa228152860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"b = 0\n",
"\n",
"# Restore original image (reverse normalization)\n",
"sample_image = modellib.unmold_image(normalized_images[b], config)\n",
"\n",
"# Compute anchor shifts.\n",
"indices = np.where(rpn_match[b] == 1)[0]\n",
"refined_anchors = utils.apply_box_deltas(anchors[indices], rpn_bbox[b, :len(indices)] * config.RPN_BBOX_STD_DEV)\n",
"log(\"anchors\", anchors)\n",
"log(\"refined_anchors\", refined_anchors)\n",
"\n",
"# Get list of positive anchors\n",
"positive_anchor_ids = np.where(rpn_match[b] == 1)[0]\n",
"print(\"Positive anchors: {}\".format(len(positive_anchor_ids)))\n",
"negative_anchor_ids = np.where(rpn_match[b] == -1)[0]\n",
"print(\"Negative anchors: {}\".format(len(negative_anchor_ids)))\n",
"neutral_anchor_ids = np.where(rpn_match[b] == 0)[0]\n",
"print(\"Neutral anchors: {}\".format(len(neutral_anchor_ids)))\n",
"\n",
"# ROI breakdown by class\n",
"for c, n in zip(dataset.class_names, np.bincount(mrcnn_class_ids[b].flatten())):\n",
" if n:\n",
" print(\"{:23}: {}\".format(c[:20], n))\n",
"\n",
"# Show positive anchors\n",
"visualize.draw_boxes(sample_image, boxes=anchors[positive_anchor_ids], \n",
" refined_boxes=refined_anchors)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nFE6gGFQURVGU04xmkm8
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa227fda748>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Show negative anchors\n",
"visualize.draw_boxes(sample_image, boxes=anchors[negative_anchor_ids])"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAK5CAYAAABNF7MsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvWuwbWt61/V7b2PMy1r7dk6fPp0mCUknHQgYQJqQ1g9Y\nyKWSCEqVZcoqgfJWiEBhFSERKLVEsTSBstQAIlqKibH4ImWCiQhfrQAGSomBXJpOKEnT6T59zt5r\nrTnnGOO9+eF5x5hzrz7N6dO9L2uv9fxSXTlzr7XmHLc5xv/9v//neU2tFUVRFEVRFEVRjtiXvQGK\noiiKoiiKctNQkawoiqIoiqIo11CRrCiKoiiKoijXUJGsKIqiKIqiKNdQkawoiqIoiqIo11CRrCiK\noiiKoijXUJGsKIqiKIqiKNdQkawoiqIoiqIo11CRrCiKoiiKoijXUJGsKIqiKIqiKNdQkawoiqIo\niqIo11CRrCiKoiiKoijXUJGsKIqiKIqiKNdQkawoiqIoiqIo11CRrCiKoiiKoijXUJGsKIqiKIqi\nKNdQkawoiqIoiqIo11CRrCiKoiiKoijXUJGsKIqiKIqiKNdQkawoiqIoiqIo11CRrCiKoiiKoijX\nUJGsKIqiKIqiKNdQkawoiqIoiqIo11CRrCiKoiiKoijXUJGsKIqiKIqiKNdQkawoiqIoiqIo11CR\nrCiKoiiKoijXUJGsKIqiKIqiKNdQkawoiqIoiqIo11CRrCiKoiiKoijXUJGsKIqiKIqiKNdQkawo\niqIoiqIo11CRrCiKoiiKoijXUJGsKIqiKIqiKNdQkawoiqIoiqIo11CRrChfDOZ763N9rSiKoijK\njUJFsqK8bMz3VhXNiqIoinKzMLXqs1lR/rHMArb+YfOSt0RRFEVRlBeEimRFURRFURRFuYbGLRRF\nURRFURTlGiqSFeVlo5lkRVEURblxaNxCUd4LzSQriqIoyp1DRbKiKIqiKIqiXEPjFoqiKIqiKIpy\nDRXJivKy0UyyoiiKotw4NG6hKO+FZpIVRVEU5c6hIllRFEVRFEVRrqFxC0VRFEVRFEW5hopkRXnZ\naCZZURRFUW4cGrdQlPdCM8mKoiiKcudQkawoiqIoiqIo19C4haIoiqIoiqJcQ0WyorxsNJOsKIqi\nKDcOjVsoynuhmWRFURRFuXOoSFYURVEURVGUa2jcQlEURVEURVGuoSJZUV42mklWFEVRlBuHxi0U\n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\n45w77oux1Fra8QdrDLX
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa22722f748>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Show neutral anchors. They don't contribute to training.\n",
"visualize.draw_boxes(sample_image, boxes=anchors[np.random.choice(neutral_anchor_ids, 100)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ROIs"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Positive ROIs: 38\n",
"Negative ROIs: 90\n",
"Positive Ratio: 0.30\n",
"Unique ROIs: 128 out of 128\n"
]
},
{
"data": {
"image/png": "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\nICJbvD0cx3Ecx3G+KzO
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa227d3e5f8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"if random_rois:\n",
" # Class aware bboxes\n",
" bbox_specific = mrcnn_bbox[b, np.arange(mrcnn_bbox.shape[1]), mrcnn_class_ids[b], :]\n",
"\n",
" # Refined ROIs\n",
" refined_rois = utils.apply_box_deltas(rois[b].astype(np.float32), bbox_specific[:,:4] * config.BBOX_STD_DEV)\n",
"\n",
" # Class aware masks\n",
" mask_specific = mrcnn_mask[b, np.arange(mrcnn_mask.shape[1]), :, :, mrcnn_class_ids[b]]\n",
"\n",
" visualize.draw_rois(sample_image, rois[b], refined_rois, mask_specific, mrcnn_class_ids[b], dataset.class_names)\n",
" \n",
" # Any repeated ROIs?\n",
" rows = np.ascontiguousarray(rois[b]).view(np.dtype((np.void, rois.dtype.itemsize * rois.shape[-1])))\n",
" _, idx = np.unique(rows, return_index=True)\n",
" print(\"Unique ROIs: {} out of {}\".format(len(idx), rois.shape[1]))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzIAAAMYCAYAAAAQAtJ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xms7dd12Pfv2sNvOOfO982PfHycB1GkOGmyZM2SpdRN\n4Fg1UDhJ09RBCttN6wJpEaApEKQN2j9aF0n/SIOgLdzRtooGReMqsqba1kBRojg9zsObxzue6Tfs\noX/swyeaJt3aJfkG7Q9BvMtzz733d/nOOeusvddaW2KMZFmWZVmWZVmWXUvUlb6ALMuyLMuyLMuy\nP6ucyGRZlmVZlmVZds3JiUyWZVmWZVmWZdecnMhkWZZlWZZlWXbNyYlMlmVZlmVZlmXXnJzIZFmW\nZVmWZVl2zcmJzDVCRG4SkU0R+bqIfFdE/vYbPrdPRH5bRL4lIn8gIn/1DZ978S2+Vy0ivyMi3xSR\nr4jI0nv1e2TZlTB//nztz/F1/1REfvbduKYsu5Le4ZjyV0Tke/P7/08iYue3f1FEHhWRb4vIb4lI\nfs+RZW8gIp8QkXuv9HVcy/KLyrXlsRjjZ4CfAf5tEannt/8PwD+LMX4S+Bzw10Xko/PPvdVBQX8T\n+EGM8VPA/wL8nXf3srPsqpAPzcqyP+6diil/AHxkfv+TwC/Pb//7wC/EGD8BuPn3yrJr1ruQjH8S\nuP8d/p4/VcyVvoDsz0Tmfw4BC2gROQQMYoxfBYgxNiLyD4G/BnznDV/zRncAX5l//APg331XrzrL\nrg7rIvI/A7cCvwX898A/BdZIz5O/GWN8RUS+DPxd4BVg5UpdbJa9B96RmBJjfO0N/9mSkhaAp4E1\nETkNLAMX341fIsveTSJyE/A7wLOAF5EhfzJufBN4ErgXGAH/AvjXSM+rL8yfR38P+Ln51/194HvA\nvwFMReRvAJ8BfhH49fmP/pcxxn/w3vyW1668I3NteWj+ZDkO/NcxxjFwA3DiTfc7Dhz+U77PU6Qn\nE8BfAFbf6QvNsqvQDcDfAD4K/JvAfwl8Jcb4OeA3gP9svtr2D0gr1L8EHLhC15pl74V3KqYAICJ3\nAV8A/tf5Tb8F/F/AMaCLMf7onbrwLHuP3QT8KnCeN8WNN9znX853OEugjjF+Fvgh8AURuR/4WIzx\no6T3X78ZY9wC/jvgP4kxfpqU7P8G8KkY488CD4rI+96bX+/alROZa8tj83KwT/CTLfrTpCfYGx2Z\n3/52/hlQicjXgUPAmXf6QrPsKvRcjHEaY3SkleKDwN8WkW8AvwksAXuA82+4X37jlV3P3qmYgojc\nAPy3wC/FGLv5zf8EeDjGeDewJSJ/+R278ix7bz09T/Tfz5+MG6/78fzPU2/4+DRp9+ZO0g4MMcYd\n4LyI7HnTz7iN9Nz72nyB4Sh/8rmYvUkuLbu2CECM8SkROS0iX4wx/p6IzETkCzHGr4pIBfyHwN97\nu28SY+yBfwdARH6FVNOcZde7u0VkAHSk7f8fAv8kxvjPAUTEAAHY94b7feBKXWyWvQfekZgyf0P2\nu8DfelOZmQO25x9fJL2hy7JrkZ//+TTw3TfFjdfFt/lYgOeBX5l/zQqwL8Z4SUQ6UvkZpHLmF4HP\nxhiDiLxVa0D2JnlH5tryxifGbwL/wfzjXwb+LRH5FvA14LdijH/0Fl8DgIjcPZ9Y9jXgLuC/efcu\nOcuuGq+SemK+Q1o5/veAX5pPbfo68OsxxgD8x8AfkcpjTl2pi82y98A7ElNIz5lDwH8hIt8Qkb8+\nv/0/Ar45/z73Af/jO3v5Wfae+095U9yY3/52SUy6IcYngO+IyHdJ5Za/Mf/U14BfEZHfjjFuAv8V\n6TnzDeD3gL3v0u9x3ZAY8yCfLMuyLMuyLMuuLXlHJsuyLMuyLMuya05OZLIsy7Isy7Isu+bkRCbL\nsizLsizLsmvOVTe1TET+KmmiUJZdaVsxxn94pS/iT9M4/i7vwKGNb9Urt/bBX3+Le/502frBP77S\nl3Ateaoy/NaVvog/jYj851f6GrIMIMb4d670Nfy/aRz5+ZJdFSrD2z5frrpmfxH5CvALV/o6sgw4\nHmM8eqUv4k/TOE4AN/7//T45kXlrOZH5M/ndyvDlK30RfxoRuboCXvZTK8Z41Y/WbdxbTqjLsvdc\nZXjb50suLcuyLMuyLMuy7JqTE5ksy7Isy7Isy645OZHJsizLsizLsuyakxOZLMuyLMuyLMuuOVfd\n1LIsy7KrxdsNPNh89B+9x1eSZVmWZdmb5R2ZLMuyLMuyLMuuOTmRybIsy7Isy7LsmpMTmSzLsizL\nsizLrjk5kcmyLMuyLMuy7JqTE5ksy7Isy7Isy645eWpZlmXZ24gxXulLyLIsy7LsbeQdmSzLsizL\nsizLrjk5kcmyLMuyLMuy7JqTE5ksy7Isy7Isy645OZHJsizLsizLsuyakxOZLMuyLMuyLMuuOdft\n1LJPfeQBlFIYLXjvsdbinEMKw+KwQhRMmjH9xNC0PTFGFpZr7rjzRhbXDUH1HL7pCMv1Mhs7Ozx/\n7Dm6nYbdC1MkCs4LresRq9nc2uboTTdx7swZDt2wn7qwLFYGZSN6qNh7aJmoYePsFkduPEBhLdpU\nONdhygIfegCslAQURWlpmhavNMpHjDF0fYO1FjEaHaDpWkpbYY0lBIVIAIkolT4Xe0WhCmZdS1kq\nnOuIQeNF0Y2noITQ9Tjf0U8co7ZBE+h3W7oeOiw7jSMGw2tnznPi+Vcoi5qZ71lZX6SIwu7mNkp7\nVlZWWF1fZzqd0gdP1zq6ztN1kd45RCsiIIAWRd/3uODpXE9dVogPGF0QlTBtWoy1mAhE6GNAouB9\nRJuAiqAQWjwRUNZgIhgMQQkxRnyE4yeOXcFHX5Zl17PPfuxhYgiIREQpYghoY/AK7r/7To69/CxW\nKbY3A+PdEUvrqywvGe576HYm/RaD5UXuuv1OxjsTdkYTnnn6GdxOh7SG2awnKAElTLsOCZHBsObi\n+QvcfMthChHqSjNYHWCHiuXVGl1YluohC8MBs0lD2/cUVZHiRlkSnceYASEEjNJ0waN1ATFSFAVt\nN0NZQ+gdWhSIwjuPVpYQIlVladoGWxqImth6ggevQIun73uCT6/tAkRgOt1GO8E7Ydb3xNmMbupo\nMOxMHZGCtos889Rz7G7t4CPY4YD9B9bYPH2Ovu0oK8W+Awew1rIz2aVvPSFE+i4SxTCbzRCtUEoh\nIgTnCcT0bwioAFVR4ALECL2A8hEdwcd0P4VGowixxVqLQhj3DUEJRhS1LgkCohR91+EinDr9/JV+\nCL4n3m5q49oHf/1d+5ki8pa3bz76j961n5ld267bREYZTQgBHyKihBACIQTEecY7E7QWtNUcvXMP\nvY+cPbOJ6wOPP/YsMbYcuOEAF0+NWRgYDt20l0c+9AC1GXDitZOcOn6W8e6Uru1pm55DB1aYTTfZ\nf2gFa4TJ7oidLcfeg/vYayr63UC9NODWO25BiUcpgxaFRyMiWFujIwTnMIWi7ztEKawxaAUikUFV\nI1oRXMQqjR2W9M4RxNP5Gd0soJTC+x6JEaUUs3YX5xzTHWibGd4DRFzr2G166BVtF5mOW7bHY55/\n/jgbuzsslAuU2lIt1rS7Mxrfsnd9gX0HDjBpZsQ+0k1mLC8OmcbI5tSxNbuA6z2ltrg+BRtRkRgj\nEiIyj25BAiKCURpTGfABpYTetShjqEpLcJ6oFD54rNXEEKgrg6MkxkgMAdMFghJC73AixBAJStBK\n0JJH5mZZ9u4xhcX1HUrSm+goaRHFKs2zTz+H1xFj4OOffB9P/PhZynLA7uaMf/G/fZuV9UUO33SI\n869ssrJWcvd9d/DZz32SfuY49uRzNOOWpunZ3d1lQSuMMWgD6/uGGG24eP4Ct9x+K/iekgLpDQsL\nS6A903aKLQswFiRgbIXRBYJHKQhaoaJCKbBKA+BdR2EszkWqosZ3PcratPjneyQEuk5B1Oxs7BBi\nZLEe0DQN3jn6ztE1LTE
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa227d2e3c8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"if random_rois:\n",
" # Dispalay ROIs and corresponding masks and bounding boxes\n",
" ids = random.sample(range(rois.shape[1]), 8)\n",
"\n",
" images = []\n",
" titles = []\n",
" for i in ids:\n",
" image = visualize.draw_box(sample_image.copy(), rois[b,i,:4].astype(np.int32), [255, 0, 0])\n",
" image = visualize.draw_box(image, refined_rois[i].astype(np.int64), [0, 255, 0])\n",
" images.append(image)\n",
" titles.append(\"ROI {}\".format(i))\n",
" images.append(mask_specific[i] * 255)\n",
" titles.append(dataset.class_names[mrcnn_class_ids[b,i]][:20])\n",
"\n",
" display_images(images, titles, cols=4, cmap=\"Blues\", interpolation=\"none\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 42 0.33\n",
" 42 0.33\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.5/dist-packages/scipy/ndimage/interpolation.py:600: UserWarning: From scipy 0.13.0, the output shape of zoom() is calculated with round() instead of int() - for these inputs the size of the returned array has changed.\n",
" \"the returned array has changed.\", UserWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" 42 0.33\n",
" 42 0.33\n",
" 42 0.33\n",
" 42 0.33\n",
" 42 0.33\n",
" 42 0.33\n",
" 42 0.33\n",
" 42 0.33\n",
"Average percent: 0.33\n"
]
}
],
"source": [
"# Check ratio of positive ROIs in a set of images.\n",
"if random_rois:\n",
" limit = 10\n",
" temp_g = modellib.data_generator(\n",
" dataset, config, shuffle=True, random_rois=10000, \n",
" batch_size=1, detection_targets=True)\n",
" total = 0\n",
" for i in range(limit):\n",
" _, [ids, _, _] = next(temp_g)\n",
" positive_rois = np.sum(ids[0] > 0)\n",
" total += positive_rois\n",
" print(\"{:5} {:5.2f}\".format(positive_rois, positive_rois/ids.shape[1]))\n",
" print(\"Average percent: {:.2f}\".format(total/(limit*ids.shape[1])))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}