945 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 Balloon 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": [
"/usr/local/lib/python3.6/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
" from ._conv import register_converters as _register_converters\n",
"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",
"from samples.balloon import balloon\n",
"\n",
"%matplotlib inline "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Configurations\n",
"\n",
"Configurations are defined in balloon.py"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"config = balloon.BalloonConfig()\n",
"BALLOON_DIR = os.path.join(ROOT_DIR, \"datasets/balloon\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dataset"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Image Count: 61\n",
"Class Count: 2\n",
" 0. BG \n",
" 1. balloon \n"
]
}
],
"source": [
"# Load dataset\n",
"# Get the dataset from the releases page\n",
"# https://github.com/matterport/Mask_RCNN/releases\n",
"dataset = balloon.BalloonDataset()\n",
"dataset.load_balloon(BALLOON_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": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee694beb8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee2736d30>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee671c550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee661b2b0>"
]
},
"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 1 /deepmatter/libs/mask_rcnn/datasets/balloon/train/25899693952_7c8b8b9edc_k.jpg\n",
"image shape: (1365, 2048, 3) min: 0.00000 max: 255.00000\n",
"mask shape: (1365, 2048, 1) min: 0.00000 max: 1.00000\n",
"class_ids shape: (1,) min: 1.00000 max: 1.00000\n",
"bbox shape: (1, 4) min: 116.00000 max: 965.00000\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee26b76a0>"
]
},
"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": "stdout",
"output_type": "stream",
"text": [
"image_id: 58 /deepmatter/libs/mask_rcnn/datasets/balloon/train/126700562_8e27720147_b.jpg\n",
"Original shape: (768, 1024, 3)\n",
"image shape: (1024, 1024, 3) min: 0.00000 max: 255.00000\n",
"mask shape: (1024, 1024, 1) min: 0.00000 max: 1.00000\n",
"class_ids shape: (1,) min: 1.00000 max: 1.00000\n",
"bbox shape: (1, 4) min: 64.00000 max: 768.00000\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA5cAAAOICAYAAABCFQWrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3cuvJMmS3/evmXtE5jlV1dXdc+/lDIdDSoQESCsReuy1EndcaMk/UYB2WmglQFtpoT+AEB8jzMx9dnc9ziMzwt20MPfI05c75gCDC/w+wPA2q6vPyYyMcDczN/e0iEBERERERETkHv4P/QJERERERETkT5+SSxEREREREbmbkksRERERERG5m5JLERERERERuZuSSxEREREREbmbkksRERERERG5m5JLERERERERuZuSSxEREREREbmbkksRERERERG5m5JLERERERERuZuSSxEREREREbmbkksRERERERG5m5JLERERERERuZuSSxEREREREbmbkksRERERERG5m5JLERERERERuVv9h34B9zCz+Id+DSIiIiIiIn/KIsL+Pn6OVi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbkouRURERERE5G5KLkVERERERORuSi5FRERERETkbvUf+gXc41//z/8SeiNolGIAmBWqOR0n6pWgQQ/ohlHpdAwwM9gDemFdK6UUvBYAnPzfiDj+d6sbZo6FYwHWG25GBQJo3oGOmeG+5s8v+d9GNMLm782fWdpKrw3MgIqN3+l75H/rt9/v7kQEPRYogXtgJf++jb/T24aHQw8s2ngthZYvgt47BcPKgtV8TUTL3xHOspzADcLYo0PZMV/zQkfDKJg57DvuEG5Yyavlu+f77p1uAB2sj8/D8IBSFra+Ye5Q8u9HGJfrZ7Ztp+2FEhUfvzM8qIvh3QCnFhtXGjoBBTzGy/P8HRZQegE3ugVh0Aj6NT//zYJiTnVYloa7U2LBcZ62CxGB+w628eX1Kz99fuF/+d//b/CVfTO+ff8t72vhX/1P/4LT2in7CxEGrdPjCgRGp1CwWjAcvFB8wT3vMXzBzDAL3B0rFazQDZbtihUHdyj1eG/g1LhAv9J73mOlLBgLtc+noef79c6+79CD3/z0E//r//Z/8Ne/feHbP/vn/Oqbyr/+V/8j356DbftE9UJEwyyoVnEWeo+8JT0wC8JL3ptuRL/iXjGvWCm0MEp0iJ0SZ7rtWN5Cx30TEdSa97eH0Tv03vHSaGG4F0opmBm17/RZ72pGt46VfM4AohsdI2KDCDz6uJZGNz/+GTq9d9p1I6+ecWXPn+sFuhHdjufk+fmZvhtsQfSd3q9s8ZnoncUq0SqfP73w7/7t79j3AK8s50bF8OcXiGDvxtcrfL10nk6V15cnqhfa5coS8Ggb5/PC1jr7Fjw/P+Neqad3hBmxfwaM3iq2VNZTpZTACNzhuje2XrhG4fl1Z2sd7Ao9OJvz/lT5vnQWCxZzXi3vn7IulLJQvOKef7b0pxwfPOgNtm0jIli9UOsKXmit8fLywlKcWvPejQjWJZ+rvXfKUlnOJ55++kqxoHqh70HvsFGJOsavyPGglpWwSpDj49Z2vlxfcTqrFVbI175dgU51YymOW/D5+TN7P1MfTiwPZ6xUXp4v7NtG7BvvT0azwudL4evW+HxtvHTjtRvflsY3p8Y35+DDYqxeCDvx4pXiOY68Xjv//ocLr81o5rxbXrDW+cX5keqWY0M11vMJivFhKZzdaPuVl9cr2Epfx3MdY+y+dtp2pe8bX3aj9348D7XWvFets/3whadqXAhYFs5lYe3GdXtlb8FOYGvF3fGr4RSuPOG9YlZyrHQo5jhGj40TnVNdWKsT3bjsG+dlzbmgQdu2HCe84rWw8cr58cxyPrGsJ9Z1pY7PPPYdzsb6uLK8P7N8eKR+eOBXj38BdYE1x7CIoHinurO1lmN/MRY3jI5FXmurluNNgWJjLiaDkU4c42NxJ2ynESzux/xpkXNfj7wXi1Ws9TGWGePHYWHHHIrn/LFbAJ1iC9aDiJyXp4iguUME1TzHswgaUPuZMOiAjfsmouWcZxsRQDgdyzjBZkzScp4Y82FnzLvdci61/DkRgVOIsBz3rWPRx3g64g461nNsPOKTfIPj9bdxncasMP7B9zZ+pmNR83PFCZvzaI6lYeM99J5jrHv+sBmD9Javtexjbs95nPCcK8yoYWztCtbzWmWgQOlO+J6v3YLo4N2w6GxWcAynQ8w1D6eR81DlFovlZ+Bce5CzrB9XwOZ/a5c31yQImz+30K3RiRGz5X9jbd4Flp9n+Ph5QOu0ZXzGXIkwlu2RltEFWN65+btud5ONcaB7yZilB06nFoj2kq8vnE4BW+jmdALfd9wq9Iwp3TOezY+kHfdV3pWwk88LfScisOhYqbTI+bJYx6LR237cL33M076v49fcnjtn5zUaMZ7NsH5cVwvwPq4ft7EuPO+dPu7dZkDLX7Rszl4vxz2ORX7SltfLesv72wrk00GMuK/b5bgfLPIe9G70UumxZxxLjgEz7rS20JivsRHjHsA6pdfMB477stMJotfxu/uI0X3EdXs+k0Cbt+UYV8LyumFBWN7XHrC0SvMdD/CWz3Ozkp+hwWrwsr3yT/+r/5qdSi0rLaBFsO87xXKM9zBaGK3DvjY8bIwB41mKhgPd8xncWsv3mI9zPsO23MZAOD6n6GN
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee27975c0>"
]
},
"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: (10,) min: 0.00000 max: 1024.00000\n",
"class_ids shape: (2,) min: 1.00000 max: 1.00000\n",
"bbox shape: (2, 4) min: 181.00000 max: 1024.00000\n",
"mask shape: (1024, 1024, 2) min: 0.00000 max: 1.00000\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee27047f0>"
]
},
"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": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee694b438>"
]
},
"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, 2) min: 0.00000 max: 1.00000\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee4ca9ba8>"
]
},
"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": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbf206e4278>"
]
},
"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 meap of the first layer is 256x256, which generates about 200K anchors (256*256*3). 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: 261888\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: 196608\n",
"Anchors in Level 1: 49152\n",
"Anchors in Level 2: 12288\n",
"Anchors in Level 3: 3072\n",
"Anchors in Level 4: 768\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": "stdout",
"output_type": "stream",
"text": [
"Level 0. Anchors: 196608 Feature map Shape: [256 256]\n",
"Level 1. Anchors: 49152 Feature map Shape: [128 128]\n",
"Level 2. Anchors: 12288 Feature map Shape: [64 64]\n",
"Level 3. Anchors: 3072 Feature map Shape: [32 32]\n",
"Level 4. Anchors: 768 Feature map Shape: [16 16]\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee4b48828>"
]
},
"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.6/dist-packages/scipy/ndimage/interpolation.py:616: 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, 200, 4) min: 1.00000 max: 1023.00000\n",
"mrcnn_class_ids shape: (4, 200, 1) min: 0.00000 max: 1.00000\n",
"mrcnn_bbox shape: (4, 200, 2, 4) min: -3.98026 max: 3.18021\n",
"mrcnn_mask shape: (4, 200, 28, 28, 2) min: 0.00000 max: 1.00000\n",
"gt_class_ids shape: (4, 100) min: 0.00000 max: 1.00000\n",
"gt_boxes shape: (4, 100, 4) 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, 261888, 1) min: -1.00000 max: 1.00000\n",
"rpn_bbox shape: (4, 256, 4) min: -2.09740 max: 1.15234\n",
"image_id: 37 /deepmatter/libs/mask_rcnn/datasets/balloon/train/3927754171_9011487133_b.jpg\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: (261888, 4) min: -362.03867 max: 1322.03867\n",
"refined_anchors shape: (7, 4) min: 242.00000 max: 723.00000\n",
"Positive anchors: 7\n",
"Negative anchors: 249\n",
"Neutral anchors: 261632\n",
"BG : 179\n",
"balloon : 21\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee4b9b080>"
]
},
"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",
"fig, ax = plt.subplots(1, figsize=(16, 16))\n",
"visualize.draw_boxes(sample_image, boxes=anchors[positive_anchor_ids], \n",
" refined_boxes=refined_anchors, ax=ax)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee4b8f860>"
]
},
"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": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee4b8fac8>"
]
},
"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: 21\n",
"Negative ROIs: 179\n",
"Positive Ratio: 0.10\n",
"Unique ROIs: 200 out of 200\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee6593278>"
]
},
"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": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbee65a7240>"
]
},
"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": [
" 66 0.33\n",
" 66 0.33\n",
" 66 0.33\n",
" 66 0.33\n",
" 66 0.33\n",
" 66 0.33\n",
" 66 0.33\n",
" 66 0.33\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/scipy/ndimage/interpolation.py:616: 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": [
" 66 0.33\n",
" 66 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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}