984 lines
1.4 MiB
Plaintext
984 lines
1.4 MiB
Plaintext
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"# SSD512 Inference Tutorial\n",
|
||
|
|
"\n",
|
||
|
|
"This is a brief tutorial that shows how to use a trained SSD512 for inference on the Pascal VOC datasets. It is the same as the SSD300 inference tutorial but with all parameters preset for SSD512 for Pascal VOC. If you'd like more detailed explanations on how to use the model generally, please refer to [`ssd300_training.ipynb`](https://github.com/pierluigiferrari/ssd_keras/blob/master/ssd300_training.ipynb)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 1,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stderr",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Using TensorFlow backend.\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"ename": "ModuleNotFoundError",
|
||
|
|
"evalue": "No module named 'sklearn'",
|
||
|
|
"output_type": "error",
|
||
|
|
"traceback": [
|
||
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
|
|
"\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
|
||
|
|
"\u001b[0;32m<ipython-input-1-dc747509ac51>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mssd_encoder_decoder\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mssd_output_decoder\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdecode_detections\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecode_detections_fast\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mdata_generator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobject_detection_2d_data_generator\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mDataGenerator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mdata_generator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobject_detection_2d_photometric_ops\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mConvertTo3Channels\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mdata_generator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobject_detection_2d_geometric_ops\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mResize\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||
|
|
"\u001b[0;32m~/Desktop/Tesis/8.-Object_Detection/keras-ssd-master/data_generator/object_detection_2d_data_generator.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mcollections\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdefaultdict\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mcopy\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdeepcopy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mPIL\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mImage\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||
|
|
"\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'sklearn'"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"from keras import backend as K\n",
|
||
|
|
"from keras.models import load_model\n",
|
||
|
|
"from keras.preprocessing import image\n",
|
||
|
|
"from keras.optimizers import Adam\n",
|
||
|
|
"from imageio import imread\n",
|
||
|
|
"import numpy as np\n",
|
||
|
|
"from matplotlib import pyplot as plt\n",
|
||
|
|
"\n",
|
||
|
|
"from models.keras_ssd512 import ssd_512\n",
|
||
|
|
"from keras_loss_function.keras_ssd_loss import SSDLoss\n",
|
||
|
|
"from keras_layers.keras_layer_AnchorBoxes import AnchorBoxes\n",
|
||
|
|
"from keras_layers.keras_layer_DecodeDetections import DecodeDetections\n",
|
||
|
|
"from keras_layers.keras_layer_DecodeDetectionsFast import DecodeDetectionsFast\n",
|
||
|
|
"from keras_layers.keras_layer_L2Normalization import L2Normalization\n",
|
||
|
|
"\n",
|
||
|
|
"from ssd_encoder_decoder.ssd_output_decoder import decode_detections, decode_detections_fast\n",
|
||
|
|
"\n",
|
||
|
|
"from data_generator.object_detection_2d_data_generator import DataGenerator\n",
|
||
|
|
"from data_generator.object_detection_2d_photometric_ops import ConvertTo3Channels\n",
|
||
|
|
"from data_generator.object_detection_2d_geometric_ops import Resize\n",
|
||
|
|
"from data_generator.object_detection_2d_misc_utils import apply_inverse_transforms\n",
|
||
|
|
"\n",
|
||
|
|
"%matplotlib inline"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 2,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"# Set the image size.\n",
|
||
|
|
"img_height = 512\n",
|
||
|
|
"img_width = 512"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## 1. Load a trained SSD\n",
|
||
|
|
"\n",
|
||
|
|
"Either load a trained model or build a model and load trained weights into it. Since the HDF5 files I'm providing contain only the weights for the various SSD versions, not the complete models, you'll have to go with the latter option when using this implementation for the first time. You can then of course save the model and next time load the full model directly, without having to build it.\n",
|
||
|
|
"\n",
|
||
|
|
"You can find the download links to all the trained model weights in the README."
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"### 1.1. Build the model and load trained weights into it"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 39,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"ok\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# 1: Build the Keras model\n",
|
||
|
|
"\n",
|
||
|
|
"K.clear_session() # Clear previous models from memory.\n",
|
||
|
|
"\n",
|
||
|
|
"model = ssd_512(image_size=(img_height, img_width, 3),\n",
|
||
|
|
" n_classes=20,\n",
|
||
|
|
" mode='inference',\n",
|
||
|
|
" l2_regularization=0.0005,\n",
|
||
|
|
" scales=[0.07, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05], # The scales for MS COCO are [0.04, 0.1, 0.26, 0.42, 0.58, 0.74, 0.9, 1.06]\n",
|
||
|
|
" aspect_ratios_per_layer=[[1.0, 2.0, 0.5],\n",
|
||
|
|
" [1.0, 2.0, 0.5, 3.0, 1.0/3.0],\n",
|
||
|
|
" [1.0, 2.0, 0.5, 3.0, 1.0/3.0],\n",
|
||
|
|
" [1.0, 2.0, 0.5, 3.0, 1.0/3.0],\n",
|
||
|
|
" [1.0, 2.0, 0.5, 3.0, 1.0/3.0],\n",
|
||
|
|
" [1.0, 2.0, 0.5],\n",
|
||
|
|
" [1.0, 2.0, 0.5]],\n",
|
||
|
|
" two_boxes_for_ar1=True,\n",
|
||
|
|
" steps=[8, 16, 32, 64, 128, 256, 512],\n",
|
||
|
|
" offsets=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5],\n",
|
||
|
|
" clip_boxes=False,\n",
|
||
|
|
" variances=[0.1, 0.1, 0.2, 0.2],\n",
|
||
|
|
" normalize_coords=True,\n",
|
||
|
|
" subtract_mean=[123, 117, 104],\n",
|
||
|
|
" swap_channels=[2, 1, 0],\n",
|
||
|
|
" confidence_thresh=0.5,\n",
|
||
|
|
" iou_threshold=0.45,\n",
|
||
|
|
" top_k=200,\n",
|
||
|
|
" nms_max_output_size=400)\n",
|
||
|
|
"\n",
|
||
|
|
"# 2: Load the trained weights into the model.\n",
|
||
|
|
"\n",
|
||
|
|
"# TODO: Set the path of the trained weights.\n",
|
||
|
|
"weights_path = 'VGG_VOC0712Plus_SSD_512x512_ft_iter_160000.h5'\n",
|
||
|
|
"\n",
|
||
|
|
"model.load_weights(weights_path, by_name=True)\n",
|
||
|
|
"\n",
|
||
|
|
"# 3: Compile the model so that Keras won't complain the next time you load it.\n",
|
||
|
|
"\n",
|
||
|
|
"adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)\n",
|
||
|
|
"\n",
|
||
|
|
"ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)\n",
|
||
|
|
"\n",
|
||
|
|
"model.compile(optimizer=adam, loss=ssd_loss.compute_loss)\n",
|
||
|
|
"print('ok')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"Or"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 27,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"import keras\n",
|
||
|
|
"model.save('prueba.h5')\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"### 1.2. Load a trained model"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 28,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"Layer (type) Output Shape Param # Connected to \n",
|
||
|
|
"==================================================================================================\n",
|
||
|
|
"input_1 (InputLayer) (None, 512, 512, 3) 0 \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"identity_layer (Lambda) (None, 512, 512, 3) 0 input_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"input_mean_normalization (Lambd (None, 512, 512, 3) 0 identity_layer[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"input_channel_swap (Lambda) (None, 512, 512, 3) 0 input_mean_normalization[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv1_1 (Conv2D) (None, 512, 512, 64) 1792 input_channel_swap[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv1_2 (Conv2D) (None, 512, 512, 64) 36928 conv1_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool1 (MaxPooling2D) (None, 256, 256, 64) 0 conv1_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv2_1 (Conv2D) (None, 256, 256, 128 73856 pool1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv2_2 (Conv2D) (None, 256, 256, 128 147584 conv2_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool2 (MaxPooling2D) (None, 128, 128, 128 0 conv2_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv3_1 (Conv2D) (None, 128, 128, 256 295168 pool2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv3_2 (Conv2D) (None, 128, 128, 256 590080 conv3_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv3_3 (Conv2D) (None, 128, 128, 256 590080 conv3_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool3 (MaxPooling2D) (None, 64, 64, 256) 0 conv3_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_1 (Conv2D) (None, 64, 64, 512) 1180160 pool3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_2 (Conv2D) (None, 64, 64, 512) 2359808 conv4_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3 (Conv2D) (None, 64, 64, 512) 2359808 conv4_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool4 (MaxPooling2D) (None, 32, 32, 512) 0 conv4_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv5_1 (Conv2D) (None, 32, 32, 512) 2359808 pool4[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv5_2 (Conv2D) (None, 32, 32, 512) 2359808 conv5_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv5_3 (Conv2D) (None, 32, 32, 512) 2359808 conv5_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool5 (MaxPooling2D) (None, 32, 32, 512) 0 conv5_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc6 (Conv2D) (None, 32, 32, 1024) 4719616 pool5[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7 (Conv2D) (None, 32, 32, 1024) 1049600 fc6[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_1 (Conv2D) (None, 32, 32, 256) 262400 fc7[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_padding (ZeroPadding2D) (None, 34, 34, 256) 0 conv6_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2 (Conv2D) (None, 16, 16, 512) 1180160 conv6_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_1 (Conv2D) (None, 16, 16, 128) 65664 conv6_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_padding (ZeroPadding2D) (None, 18, 18, 128) 0 conv7_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2 (Conv2D) (None, 8, 8, 256) 295168 conv7_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_1 (Conv2D) (None, 8, 8, 128) 32896 conv7_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_padding (ZeroPadding2D) (None, 10, 10, 128) 0 conv8_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2 (Conv2D) (None, 4, 4, 256) 295168 conv8_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_1 (Conv2D) (None, 4, 4, 128) 32896 conv8_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_padding (ZeroPadding2D) (None, 6, 6, 128) 0 conv9_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2 (Conv2D) (None, 2, 2, 256) 295168 conv9_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_1 (Conv2D) (None, 2, 2, 128) 32896 conv9_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_padding (ZeroPadding2D) (None, 4, 4, 128) 0 conv10_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm (L2Normalization) (None, 64, 64, 512) 512 conv4_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2 (Conv2D) (None, 1, 1, 256) 524544 conv10_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_conf (Conv2D) (None, 64, 64, 84) 387156 conv4_3_norm[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_conf (Conv2D) (None, 32, 32, 126) 1161342 fc7[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_conf (Conv2D) (None, 16, 16, 126) 580734 conv6_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_conf (Conv2D) (None, 8, 8, 126) 290430 conv7_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_conf (Conv2D) (None, 4, 4, 126) 290430 conv8_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_conf (Conv2D) (None, 2, 2, 84) 193620 conv9_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_conf (Conv2D) (None, 1, 1, 84) 193620 conv10_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_loc (Conv2D) (None, 64, 64, 16) 73744 conv4_3_norm[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_loc (Conv2D) (None, 32, 32, 24) 221208 fc7[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_loc (Conv2D) (None, 16, 16, 24) 110616 conv6_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_loc (Conv2D) (None, 8, 8, 24) 55320 conv7_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_loc (Conv2D) (None, 4, 4, 24) 55320 conv8_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_loc (Conv2D) (None, 2, 2, 16) 36880 conv9_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_loc (Conv2D) (None, 1, 1, 16) 36880 conv10_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_conf_reshape (None, 16384, 21) 0 conv4_3_norm_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_conf_reshape (Reshape) (None, 6144, 21) 0 fc7_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_conf_reshape (Resh (None, 1536, 21) 0 conv6_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_conf_reshape (Resh (None, 384, 21) 0 conv7_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_conf_reshape (Resh (None, 96, 21) 0 conv8_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_conf_reshape (Resh (None, 16, 21) 0 conv9_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_conf_reshape (Res (None, 4, 21) 0 conv10_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_priorbox (Anc (None, 64, 64, 4, 8) 0 conv4_3_norm_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_priorbox (AnchorBoxes) (None, 32, 32, 6, 8) 0 fc7_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_priorbox (AnchorBo (None, 16, 16, 6, 8) 0 conv6_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_priorbox (AnchorBo (None, 8, 8, 6, 8) 0 conv7_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_priorbox (AnchorBo (None, 4, 4, 6, 8) 0 conv8_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_priorbox (AnchorBo (None, 2, 2, 4, 8) 0 conv9_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_priorbox (AnchorB (None, 1, 1, 4, 8) 0 conv10_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_conf (Concatenate) (None, 24564, 21) 0 conv4_3_norm_mbox_conf_reshape[0]\n",
|
||
|
|
" fc7_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv6_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv7_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv8_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv9_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv10_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_loc_reshape ( (None, 16384, 4) 0 conv4_3_norm_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_loc_reshape (Reshape) (None, 6144, 4) 0 fc7_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_loc_reshape (Resha (None, 1536, 4) 0 conv6_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_loc_reshape (Resha (None, 384, 4) 0 conv7_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_loc_reshape (Resha (None, 96, 4) 0 conv8_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_loc_reshape (Resha (None, 16, 4) 0 conv9_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_loc_reshape (Resh (None, 4, 4) 0 conv10_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_priorbox_resh (None, 16384, 8) 0 conv4_3_norm_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_priorbox_reshape (Resh (None, 6144, 8) 0 fc7_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_priorbox_reshape ( (None, 1536, 8) 0 conv6_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_priorbox_reshape ( (None, 384, 8) 0 conv7_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_priorbox_reshape ( (None, 96, 8) 0 conv8_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_priorbox_reshape ( (None, 16, 8) 0 conv9_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_priorbox_reshape (None, 4, 8) 0 conv10_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_conf_softmax (Activation) (None, 24564, 21) 0 mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_loc (Concatenate) (None, 24564, 4) 0 conv4_3_norm_mbox_loc_reshape[0][\n",
|
||
|
|
" fc7_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv6_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv7_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv8_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv9_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv10_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_priorbox (Concatenate) (None, 24564, 8) 0 conv4_3_norm_mbox_priorbox_reshap\n",
|
||
|
|
" fc7_mbox_priorbox_reshape[0][0] \n",
|
||
|
|
" conv6_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv7_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv8_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv9_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv10_2_mbox_priorbox_reshape[0]\n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"predictions (Concatenate) (None, 24564, 33) 0 mbox_conf_softmax[0][0] \n",
|
||
|
|
" mbox_loc[0][0] \n",
|
||
|
|
" mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"decoded_predictions (DecodeDete (None, <tf.Tensor 't 0 predictions[0][0] \n",
|
||
|
|
"==================================================================================================\n",
|
||
|
|
"Total params: 27,188,676\n",
|
||
|
|
"Trainable params: 27,188,676\n",
|
||
|
|
"Non-trainable params: 0\n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"Layer (type) Output Shape Param # Connected to \n",
|
||
|
|
"==================================================================================================\n",
|
||
|
|
"input_1 (InputLayer) (None, 512, 512, 3) 0 \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"identity_layer (Lambda) (None, 512, 512, 3) 0 input_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"input_mean_normalization (Lambd (None, 512, 512, 3) 0 identity_layer[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"input_channel_swap (Lambda) (None, 512, 512, 3) 0 input_mean_normalization[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv1_1 (Conv2D) (None, 512, 512, 64) 1792 input_channel_swap[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv1_2 (Conv2D) (None, 512, 512, 64) 36928 conv1_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool1 (MaxPooling2D) (None, 256, 256, 64) 0 conv1_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv2_1 (Conv2D) (None, 256, 256, 128 73856 pool1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv2_2 (Conv2D) (None, 256, 256, 128 147584 conv2_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool2 (MaxPooling2D) (None, 128, 128, 128 0 conv2_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv3_1 (Conv2D) (None, 128, 128, 256 295168 pool2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv3_2 (Conv2D) (None, 128, 128, 256 590080 conv3_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv3_3 (Conv2D) (None, 128, 128, 256 590080 conv3_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool3 (MaxPooling2D) (None, 64, 64, 256) 0 conv3_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_1 (Conv2D) (None, 64, 64, 512) 1180160 pool3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_2 (Conv2D) (None, 64, 64, 512) 2359808 conv4_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3 (Conv2D) (None, 64, 64, 512) 2359808 conv4_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool4 (MaxPooling2D) (None, 32, 32, 512) 0 conv4_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv5_1 (Conv2D) (None, 32, 32, 512) 2359808 pool4[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv5_2 (Conv2D) (None, 32, 32, 512) 2359808 conv5_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv5_3 (Conv2D) (None, 32, 32, 512) 2359808 conv5_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"pool5 (MaxPooling2D) (None, 32, 32, 512) 0 conv5_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc6 (Conv2D) (None, 32, 32, 1024) 4719616 pool5[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7 (Conv2D) (None, 32, 32, 1024) 1049600 fc6[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_1 (Conv2D) (None, 32, 32, 256) 262400 fc7[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_padding (ZeroPadding2D) (None, 34, 34, 256) 0 conv6_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2 (Conv2D) (None, 16, 16, 512) 1180160 conv6_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_1 (Conv2D) (None, 16, 16, 128) 65664 conv6_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_padding (ZeroPadding2D) (None, 18, 18, 128) 0 conv7_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2 (Conv2D) (None, 8, 8, 256) 295168 conv7_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_1 (Conv2D) (None, 8, 8, 128) 32896 conv7_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_padding (ZeroPadding2D) (None, 10, 10, 128) 0 conv8_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2 (Conv2D) (None, 4, 4, 256) 295168 conv8_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_1 (Conv2D) (None, 4, 4, 128) 32896 conv8_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_padding (ZeroPadding2D) (None, 6, 6, 128) 0 conv9_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2 (Conv2D) (None, 2, 2, 256) 295168 conv9_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_1 (Conv2D) (None, 2, 2, 128) 32896 conv9_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_padding (ZeroPadding2D) (None, 4, 4, 128) 0 conv10_1[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm (L2Normalization) (None, 64, 64, 512) 512 conv4_3[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2 (Conv2D) (None, 1, 1, 256) 524544 conv10_padding[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_conf (Conv2D) (None, 64, 64, 84) 387156 conv4_3_norm[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_conf (Conv2D) (None, 32, 32, 126) 1161342 fc7[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_conf (Conv2D) (None, 16, 16, 126) 580734 conv6_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_conf (Conv2D) (None, 8, 8, 126) 290430 conv7_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_conf (Conv2D) (None, 4, 4, 126) 290430 conv8_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_conf (Conv2D) (None, 2, 2, 84) 193620 conv9_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_conf (Conv2D) (None, 1, 1, 84) 193620 conv10_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_loc (Conv2D) (None, 64, 64, 16) 73744 conv4_3_norm[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_loc (Conv2D) (None, 32, 32, 24) 221208 fc7[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_loc (Conv2D) (None, 16, 16, 24) 110616 conv6_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_loc (Conv2D) (None, 8, 8, 24) 55320 conv7_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_loc (Conv2D) (None, 4, 4, 24) 55320 conv8_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_loc (Conv2D) (None, 2, 2, 16) 36880 conv9_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_loc (Conv2D) (None, 1, 1, 16) 36880 conv10_2[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_conf_reshape (None, 16384, 21) 0 conv4_3_norm_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_conf_reshape (Reshape) (None, 6144, 21) 0 fc7_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_conf_reshape (Resh (None, 1536, 21) 0 conv6_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_conf_reshape (Resh (None, 384, 21) 0 conv7_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_conf_reshape (Resh (None, 96, 21) 0 conv8_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_conf_reshape (Resh (None, 16, 21) 0 conv9_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_conf_reshape (Res (None, 4, 21) 0 conv10_2_mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_priorbox (Anc (None, 64, 64, 4, 8) 0 conv4_3_norm_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_priorbox (AnchorBoxes) (None, 32, 32, 6, 8) 0 fc7_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_priorbox (AnchorBo (None, 16, 16, 6, 8) 0 conv6_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_priorbox (AnchorBo (None, 8, 8, 6, 8) 0 conv7_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_priorbox (AnchorBo (None, 4, 4, 6, 8) 0 conv8_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_priorbox (AnchorBo (None, 2, 2, 4, 8) 0 conv9_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_priorbox (AnchorB (None, 1, 1, 4, 8) 0 conv10_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_conf (Concatenate) (None, 24564, 21) 0 conv4_3_norm_mbox_conf_reshape[0]\n",
|
||
|
|
" fc7_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv6_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv7_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv8_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv9_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
" conv10_2_mbox_conf_reshape[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_loc_reshape ( (None, 16384, 4) 0 conv4_3_norm_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_loc_reshape (Reshape) (None, 6144, 4) 0 fc7_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_loc_reshape (Resha (None, 1536, 4) 0 conv6_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_loc_reshape (Resha (None, 384, 4) 0 conv7_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_loc_reshape (Resha (None, 96, 4) 0 conv8_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_loc_reshape (Resha (None, 16, 4) 0 conv9_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_loc_reshape (Resh (None, 4, 4) 0 conv10_2_mbox_loc[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv4_3_norm_mbox_priorbox_resh (None, 16384, 8) 0 conv4_3_norm_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"fc7_mbox_priorbox_reshape (Resh (None, 6144, 8) 0 fc7_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv6_2_mbox_priorbox_reshape ( (None, 1536, 8) 0 conv6_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv7_2_mbox_priorbox_reshape ( (None, 384, 8) 0 conv7_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv8_2_mbox_priorbox_reshape ( (None, 96, 8) 0 conv8_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv9_2_mbox_priorbox_reshape ( (None, 16, 8) 0 conv9_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"conv10_2_mbox_priorbox_reshape (None, 4, 8) 0 conv10_2_mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_conf_softmax (Activation) (None, 24564, 21) 0 mbox_conf[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_loc (Concatenate) (None, 24564, 4) 0 conv4_3_norm_mbox_loc_reshape[0][\n",
|
||
|
|
" fc7_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv6_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv7_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv8_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv9_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
" conv10_2_mbox_loc_reshape[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"mbox_priorbox (Concatenate) (None, 24564, 8) 0 conv4_3_norm_mbox_priorbox_reshap\n",
|
||
|
|
" fc7_mbox_priorbox_reshape[0][0] \n",
|
||
|
|
" conv6_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv7_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv8_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv9_2_mbox_priorbox_reshape[0][\n",
|
||
|
|
" conv10_2_mbox_priorbox_reshape[0]\n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"predictions (Concatenate) (None, 24564, 33) 0 mbox_conf_softmax[0][0] \n",
|
||
|
|
" mbox_loc[0][0] \n",
|
||
|
|
" mbox_priorbox[0][0] \n",
|
||
|
|
"__________________________________________________________________________________________________\n",
|
||
|
|
"decoded_predictions (DecodeDete (None, <tf.Tensor 't 0 predictions[0][0] \n",
|
||
|
|
"==================================================================================================\n",
|
||
|
|
"Total params: 27,188,676\n",
|
||
|
|
"Trainable params: 27,188,676\n",
|
||
|
|
"Non-trainable params: 0\n",
|
||
|
|
"__________________________________________________________________________________________________\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# TODO: Set the path to the `.h5` file of the model to be loaded.\n",
|
||
|
|
"model_path = 'prueba.h5'\n",
|
||
|
|
"\n",
|
||
|
|
"# We need to create an SSDLoss object in order to pass that to the model loader.\n",
|
||
|
|
"ssd_loss = SSDLoss(neg_pos_ratio=3, n_neg_min=0, alpha=1.0)\n",
|
||
|
|
"\n",
|
||
|
|
"#K.clear_session() # Clear previous models from memory.\n",
|
||
|
|
"\n",
|
||
|
|
"model1 = load_model(model_path, custom_objects={'AnchorBoxes': AnchorBoxes,\n",
|
||
|
|
" 'L2Normalization': L2Normalization,\n",
|
||
|
|
" 'DecodeDetections': DecodeDetections,\n",
|
||
|
|
" 'compute_loss': ssd_loss.compute_loss})\n",
|
||
|
|
"model.summary()\n",
|
||
|
|
"model1.summary()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## 2. Load some images\n",
|
||
|
|
"\n",
|
||
|
|
"Load some images for which you'd like the model to make predictions."
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 35,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"orig_images = [] # Store the images here.\n",
|
||
|
|
"input_images = [] # Store resized versions of the images here.\n",
|
||
|
|
"\n",
|
||
|
|
"# We'll only load one image in this example.\n",
|
||
|
|
"img_path = 'Prueba_1.png'\n",
|
||
|
|
"\n",
|
||
|
|
"orig_images.append(imread(img_path))\n",
|
||
|
|
"img = image.load_img(img_path, target_size=(img_height, img_width))\n",
|
||
|
|
"img = image.img_to_array(img)\n",
|
||
|
|
"input_images.append(img)\n",
|
||
|
|
"input_images = np.array(input_images)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## 3. Make predictions"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 36,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"y_pred = model.predict(input_images)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"`y_pred` contains a fixed number of predictions per batch item (200 if you use the original model configuration), many of which are low-confidence predictions or dummy entries. We therefore need to apply a confidence threshold to filter out the bad predictions. Set this confidence threshold value how you see fit."
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 37,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Predicted boxes:\n",
|
||
|
|
"\n",
|
||
|
|
" class conf xmin ymin xmax ymax\n",
|
||
|
|
"[[ 8. 0.78 152.49 25.05 328.1 264.71]]\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"confidence_threshold = 0.5\n",
|
||
|
|
"\n",
|
||
|
|
"y_pred_thresh = [y_pred[k][y_pred[k,:,1] > confidence_threshold] for k in range(y_pred.shape[0])]\n",
|
||
|
|
"\n",
|
||
|
|
"np.set_printoptions(precision=2, suppress=True, linewidth=90)\n",
|
||
|
|
"print(\"Predicted boxes:\\n\")\n",
|
||
|
|
"print(' class conf xmin ymin xmax ymax')\n",
|
||
|
|
"print(y_pred_thresh[0])"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## 4. Visualize the predictions\n",
|
||
|
|
"\n",
|
||
|
|
"We just resized the input image above and made predictions on the distorted image. We'd like to visualize the predictions on the image in its original size though, so below we'll transform the coordinates of the predicted boxes accordingly."
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 19,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1440x864 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# Display the image and draw the predicted boxes onto it.\n",
|
||
|
|
"\n",
|
||
|
|
"# Set the colors for the bounding boxes\n",
|
||
|
|
"colors = plt.cm.hsv(np.linspace(0, 1, 21)).tolist()\n",
|
||
|
|
"classes = ['background',\n",
|
||
|
|
" 'aeroplane', 'bicycle', 'bird', 'boat',\n",
|
||
|
|
" 'bottle', 'bus', 'car', 'cat',\n",
|
||
|
|
" 'chair', 'cow', 'diningtable', 'dog',\n",
|
||
|
|
" 'horse', 'motorbike', 'person', 'pottedplant',\n",
|
||
|
|
" 'sheep', 'sofa', 'train', 'tvmonitor']\n",
|
||
|
|
"\n",
|
||
|
|
"plt.figure(figsize=(20,12))\n",
|
||
|
|
"plt.imshow(orig_images[0])\n",
|
||
|
|
"\n",
|
||
|
|
"current_axis = plt.gca()\n",
|
||
|
|
"\n",
|
||
|
|
"for box in y_pred_thresh[0]:\n",
|
||
|
|
" # Transform the predicted bounding boxes for the 512x512 image to the original image dimensions.\n",
|
||
|
|
" xmin = box[-4] * orig_images[0].shape[1] / img_width\n",
|
||
|
|
" ymin = box[-3] * orig_images[0].shape[0] / img_height\n",
|
||
|
|
" xmax = box[-2] * orig_images[0].shape[1] / img_width\n",
|
||
|
|
" ymax = box[-1] * orig_images[0].shape[0] / img_height\n",
|
||
|
|
" color = colors[int(box[0])]\n",
|
||
|
|
" label = '{}: {:.2f}'.format(classes[int(box[0])], box[1])\n",
|
||
|
|
" current_axis.add_patch(plt.Rectangle((xmin, ymin), xmax-xmin, ymax-ymin, color=color, fill=False, linewidth=2)) \n",
|
||
|
|
" current_axis.text(xmin, ymin, label, size='x-large', color='white', bbox={'facecolor':color, 'alpha':1.0})"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"## 5. Make predictions on Pascal VOC 2007 Test\n",
|
||
|
|
"\n",
|
||
|
|
"Let's use a `DataGenerator` to make predictions on the Pascal VOC 2007 test dataset and visualize the predicted boxes alongside the ground truth boxes for comparison. Everything here is preset already, but if you'd like to learn more about the data generator and its capabilities, take a look at the detailed tutorial in [this](https://github.com/pierluigiferrari/data_generator_object_detection_2d) repository."
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 10,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stderr",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"test.txt: 100%|██████████| 4952/4952 [00:14<00:00, 344.23it/s]\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# Create a `BatchGenerator` instance and parse the Pascal VOC labels.\n",
|
||
|
|
"\n",
|
||
|
|
"dataset = DataGenerator()\n",
|
||
|
|
"\n",
|
||
|
|
"# TODO: Set the paths to the datasets here.\n",
|
||
|
|
"\n",
|
||
|
|
"VOC_2007_images_dir = '../../datasets/VOCdevkit/VOC2007/JPEGImages/'\n",
|
||
|
|
"VOC_2007_annotations_dir = '../../datasets/VOCdevkit/VOC2007/Annotations/'\n",
|
||
|
|
"VOC_2007_test_image_set_filename = '../../datasets/VOCdevkit/VOC2007/ImageSets/Main/test.txt'\n",
|
||
|
|
"\n",
|
||
|
|
"# The XML parser needs to now what object class names to look for and in which order to map them to integers.\n",
|
||
|
|
"classes = ['background',\n",
|
||
|
|
" 'aeroplane', 'bicycle', 'bird', 'boat',\n",
|
||
|
|
" 'bottle', 'bus', 'car', 'cat',\n",
|
||
|
|
" 'chair', 'cow', 'diningtable', 'dog',\n",
|
||
|
|
" 'horse', 'motorbike', 'person', 'pottedplant',\n",
|
||
|
|
" 'sheep', 'sofa', 'train', 'tvmonitor']\n",
|
||
|
|
"\n",
|
||
|
|
"dataset.parse_xml(images_dirs=[VOC_2007_images_dir],\n",
|
||
|
|
" image_set_filenames=[VOC_2007_test_image_set_filename],\n",
|
||
|
|
" annotations_dirs=[VOC_2007_annotations_dir],\n",
|
||
|
|
" classes=classes,\n",
|
||
|
|
" include_classes='all',\n",
|
||
|
|
" exclude_truncated=False,\n",
|
||
|
|
" exclude_difficult=True,\n",
|
||
|
|
" ret=False)\n",
|
||
|
|
"\n",
|
||
|
|
"convert_to_3_channels = ConvertTo3Channels()\n",
|
||
|
|
"resize = Resize(height=img_height, width=img_width)\n",
|
||
|
|
"\n",
|
||
|
|
"generator = dataset.generate(batch_size=1,\n",
|
||
|
|
" shuffle=True,\n",
|
||
|
|
" transformations=[convert_to_3_channels,\n",
|
||
|
|
" resize],\n",
|
||
|
|
" returns={'processed_images',\n",
|
||
|
|
" 'filenames',\n",
|
||
|
|
" 'inverse_transform',\n",
|
||
|
|
" 'original_images',\n",
|
||
|
|
" 'original_labels'},\n",
|
||
|
|
" keep_images_without_gt=False)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 30,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Image: ../../datasets/VOCdevkit/VOC2007/JPEGImages/002168.jpg\n",
|
||
|
|
"\n",
|
||
|
|
"Ground truth boxes:\n",
|
||
|
|
"\n",
|
||
|
|
"[[ 15 114 174 164 307]\n",
|
||
|
|
" [ 15 231 174 280 302]\n",
|
||
|
|
" [ 15 298 179 342 301]\n",
|
||
|
|
" [ 15 367 179 403 294]\n",
|
||
|
|
" [ 15 461 177 500 307]\n",
|
||
|
|
" [ 15 168 188 193 252]\n",
|
||
|
|
" [ 15 326 181 353 274]\n",
|
||
|
|
" [ 15 262 185 290 273]\n",
|
||
|
|
" [ 2 430 230 500 310]\n",
|
||
|
|
" [ 2 358 227 429 299]\n",
|
||
|
|
" [ 2 295 233 351 305]\n",
|
||
|
|
" [ 2 153 223 185 281]\n",
|
||
|
|
" [ 2 121 230 155 321]]\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# Generate a batch and make predictions.\n",
|
||
|
|
"\n",
|
||
|
|
"batch_images, batch_filenames, batch_inverse_transforms, batch_original_images, batch_original_labels = next(generator)\n",
|
||
|
|
"\n",
|
||
|
|
"i = 0 # Which batch item to look at\n",
|
||
|
|
"\n",
|
||
|
|
"print(\"Image:\", batch_filenames[i])\n",
|
||
|
|
"print()\n",
|
||
|
|
"print(\"Ground truth boxes:\\n\")\n",
|
||
|
|
"print(np.array(batch_original_labels[i]))"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 31,
|
||
|
|
"metadata": {
|
||
|
|
"collapsed": true
|
||
|
|
},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"# Predict.\n",
|
||
|
|
"\n",
|
||
|
|
"y_pred = model.predict(batch_images)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 32,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Predicted boxes:\n",
|
||
|
|
"\n",
|
||
|
|
" class conf xmin ymin xmax ymax\n",
|
||
|
|
"[[ 2. 0.99 369.02 230.42 424.52 297.93]\n",
|
||
|
|
" [ 15. 0.99 300.39 182.55 341.59 282.61]\n",
|
||
|
|
" [ 2. 0.99 108.17 230.5 161.82 326.89]\n",
|
||
|
|
" [ 15. 0.98 111.66 167.27 160.03 303.8 ]\n",
|
||
|
|
" [ 2. 0.98 221.35 232.19 282.26 308.72]\n",
|
||
|
|
" [ 15. 0.98 453.38 190.71 496.67 309.35]\n",
|
||
|
|
" [ 15. 0.97 227.5 175.29 275.51 286.6 ]\n",
|
||
|
|
" [ 15. 0.97 366.8 180.56 409.09 285.06]\n",
|
||
|
|
" [ 2. 0.96 428.15 233.78 501.21 312.65]\n",
|
||
|
|
" [ 15. 0.93 317.28 183.11 354.99 285.52]\n",
|
||
|
|
" [ 2. 0.91 297.79 229.87 351.55 303.34]\n",
|
||
|
|
" [ 2. 0.79 146.91 221.45 190.54 287.08]]\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"confidence_threshold = 0.5\n",
|
||
|
|
"\n",
|
||
|
|
"# Perform confidence thresholding.\n",
|
||
|
|
"y_pred_thresh = [y_pred[k][y_pred[k,:,1] > confidence_threshold] for k in range(y_pred.shape[0])]\n",
|
||
|
|
"\n",
|
||
|
|
"# Convert the predictions for the original image.\n",
|
||
|
|
"y_pred_thresh_inv = apply_inverse_transforms(y_pred_thresh, batch_inverse_transforms)\n",
|
||
|
|
"\n",
|
||
|
|
"np.set_printoptions(precision=2, suppress=True, linewidth=90)\n",
|
||
|
|
"print(\"Predicted boxes:\\n\")\n",
|
||
|
|
"print(' class conf xmin ymin xmax ymax')\n",
|
||
|
|
"print(y_pred_thresh_inv[i])"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 33,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA5gAAAKvCAYAAAAPwGAcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvc+vbUuSHhSZa+1z7r3vZ9V7RfUPu+2uxt2y2hKiQbZk\nqSUmSJ4hJghGDJA8MVOEh/4zUA+MhGSJASMGjRjiCTLGkkFgY+i2utvdVrld5ap6r96795y9ViaD\nlREZGfFl7nXuO08+gvyudPfZe+XKjPydGV9kZMg508TExMTExMTExMTExMTEN0X81y3AxMTExMTE\nxMTExMTExP83MDeYExMTExMTExMTExMTE8+CucGcmJiYmJiYmJiYmJiYeBbMDebExMTExMTExMTE\nxMTEs2BuMCcmJiYmJiYmJiYmJiaeBXODOTExMTExMTExMTExMfEsmBvMiYmJiYmJiYmJiYmJiWfB\nt7bBDCH8tRDCPwkh/F4I4W9+W+lMTExMTExMTExMTExMvAyEnPPzRxrCQkT/NxH9+0T0x0T094no\nP8k5/6NnT2xiYmJiYmJiYmJiYmLiRWD9luL9y0T0eznnf0pEFEL4b4noPyAiuMG8vPkk3338C81v\nIQQiIkIb4PKIiPiPTJTdw4rcxrnF4zOkTGshcfO+t1FGolReDDGKLCHLY5eEiOCle3aEEGrZ2IRg\nGWT12L1A4I36KoczGRy9lZs6MbJTgHFyfHlYYjbNrJ60z2Dbaf5oywGnGmCqFlbmRhbXEHTBlLSl\njZaWpWVHWe4Xg6sfWJ4l/tyIeSuX+vWs2tH7geunaY+2DY/KofnR5rG2sVP50nVj85WbRnoirtqe\nUF87goDya97riNDEeQa1n3EUMbIMPty5dFBPUWFtv2vKYDzS6NcDiLIRyY139X0rux4LeuV+PIQi\ntXXJTTNl904Af7nxRRVDAHmwea39mHzZnkBu4le/uvHcSkydMG3fbIYe295V/qS/2zRUt8ojmZq2\nSeRDlEA9Ebzo7XxgwmvY5MaK+W8yLuJJU4mH33HDX3/+0XOv6yeUb0jfH29tAer61aI+KUr03qm5\nzzy6UV1nwqMpqYdmpDvzgqqHOi8qASXebH5RawiduIu2XU+H4H8zEbu4eiK/P0c1WsiA8fNm/8fr\nVP0Twqi9JzNmoX2J/AYTQw33vQvsvZCdYKjBe7z70e//KOf8vW+S9re1wfxlIvpn6vsfE9Ff0QFC\nCH+diP46EdHdx9+nv/Sf/k6z6OLPlDYiOio0lo0eP4tq45f3VH5bm2cpJQplIbAsFyIi+tHr4/PV\n250+p9dERPTwxRfHe3elMb8O9HW+EhHR+uYVERE9Pl7pVT7ivUslH6X2riHTtewNVg6zH5/7miml\nJLLqPIQQZJFhB/t931Wej994Q7CuK12vV1cOR5harfxs2zZ5vixLeZok3ZGttMRrZI8xEiXcQhNl\nsIGo+URx6jrrIrZNltsHEdFqy2HX8fhyJ1lo7817KSiZ81FWXD4hBJeflJJbcOgyqgv6I8xelBm6\nHPi3+/V1853jaPIF+omOk8PH0OYPyZAXeeT6lw5vsW27tCN+T7/TK48lBKlfloHj0e+t61rS2Vwc\nKF6bXoyRtpTkbyKiCCZU7ntS9ymp/kHyG6cldRHaZ8fz9reUEl0uFxcH553zKIqvklckw55rOvxM\n2pjKly0H3Wb47/v7e5HB9kOdH5HBtF9UflpezgfLxWW25+TaLUOPFyzDEmq7SqYutRy2f8DyU/3J\nlp9+1tuYJsryHn++e/fO5R3lz5Zb039L+ek82H7B7SRteyNrLz1GIpXuxbdpnhfPyKzbWp2bU/MZ\nQmj6sv6MMTZjFFEt97guLk4kk26bXF5S9ludX7lvojzYvqbbAuoD9j15P12phyOMH7Ot7BZ6HnFr\nHQpuDcFA/V7SiMH1D857zlnaFmPf96ECy463eu3ixhIz5yLZUZz2d/vsjPLIxqnrFK1jbPhm7RDb\ncUzXg1uzke/j8erXMzavegy57luT3rIsdc7Mvn/InM7lnaoMdo5+fHwkomNMsX2ht7axMstcXuLW\n7RbVTTBVjsZBlIYdE2Tsi0HmhjNjFsW6/t7J95PFrgtU3TyWNbYd+/W6hPtQk6/yDM07dg2mnyVq\nx8gGbq3t50fUl6QPgLLN7XTSpPt//M5/+IdeiKfh29pg3kTO+XeI6HeIiD74hd/I5Tc3QNiFAofT\nCCFQlImibXjHJ1f8UZqv0gdERPQ6fEUf3P2ciIj+rd/6FSIi+oM/+WMiIvrZY6IcjoXYV18dC4nL\n/YVimb0id2LZpBHFWGRI3Fi4QT26TTHsGKntIHoQ2IvsurP1JpUcYrNYdc/lvbrhlMmePHqL1n3f\n3eChtfy2k+iJtbegsH8zZDEji5T+IFXTQVowNMFxGytlENVAm9syC+QHsmYy4cV0kfOoh85ma1lc\ne2elwbquLi69yEbhLXiwSjm5xb4MML57DSdQhu6XaOFj+29dUNcwtm+jSQUt7kbsgQ5r49f9q7cw\n15tIGycRyWKDQF51f7oln6576XslXd3v5b1cF/N2AcxzRCTfhxolXJGZFxlaVrQx4AUi97m7uzsn\nQ7aTv/5bysFvcm0Zx6V+l2epv2G2f+s862duIwLi0mVly1YUHWl39cQb9aFCjHyfCyFIXNx/KdVN\npe0zMvZRprD4+aOXLx52QgiyuNDlYRVrDDQuiUJq98q04ZwG+okoVlRerPJz9L7ehPPnqjd08XbZ\nyGahFFIMQZhiKwOSBynFWmWO36TyZ2/u0+0PLbztOCuKM7Bh1ZYptn32Nricrq3PVolm5ALjtKRz\nQiF4azM7Gut7Mun4kexIYesQa32hjaVNB80jNq7mudnUZLVeitmPF9xX4mCoqf2rtk27OUMbOK3o\nRJsfG57jtASHBpp3eK2I5vYRbDvPwSuGdf7duLlnkmUpmPfdxlTFxwpihN5mPOdMi5rL+dlIOVg3\nz35Os3KdgV4jMvRG045jNsxz4dvaYP4JEf1Z9f3PlN+GQItJAosmNMHVBsc9sE7S0UzYHxTWctl+\nRHfLT4mI6G/8Z3+ViIj+h//pO0RE9Lf/zu/SZ7/0AyKqjeTd/igLS7e4iZlW6Welw8ZjQbYsfjNo\n800kexkZfJIyV+GNM7NhxwIBL9YIdFxUtkktuO2gG827PaxlU51NEKRVZSTwdyA1IfEiHG06ZYD0\ngxqSs9fJcs7NAuz4LHkRicD71G6SOIxdqLcb5lYmXW+ujFhbutaFppRtqhOC1lDrOJsNEudrVwJw\nW0tV62n7VZKCqe3NlsN+rZpuy5jqsLywlU2KGvg4f5rZ4GeaYei189ECMITQLH6IajkGxcJIGbFF\nghrsXd3fmNgkfl7Ex9BVwCCtuW47olSgNu96ETpie6xCQaczZOzqgOMYX9kMmXzYdGz9MpZlabTl\nWpbLZfV9IXj5dDq9/MN+xfkDk6vWQNt2VNnv3F2oIwsGBJ0X3qzbxStcLKe6WLast25DvbGkxNKE\nP9JtF2KjRbn0qyU2zLIOrxdRtl2gBao23R9tOE4tCtXRArtBQu0dWSDYjQArk88qNWpZBTfm9xRa\n9jdbbrpdWKYElkfgrNSy7jFPepzpriWMnL7d+TzUF+qzUbmNAMvLdjU1R3VZLPKKEN3ukbKJMdqI\nDjeWBcuijlgNNiU2DtS2RptjtHm3cfGGCc0jEczNzXxqykjLZDdPSPkeSj2tSs7uJkiPQYuvN3vE\narxZrWOC1TNqSw5pH5xuCLLWGynhUJ+RMgVzEprvRfbY79tSjiJKdP22VXLhNh10nCYNGqzb3wff\nlhfZv09EfyGE8KshhDsi+o+J6L//ltKamJiYmJiYmJiYmJiYeAH4VhjMnPMWQvjPieh/pINK/Ns5\n5//z1nvHeTXe87bUPmKJtNbEa3QUo2M0LteHQxP/hjZ6c3f8/fBQZKDjLOabN5Hevn1LRET3bw6T\n2pCq1nVnLQRr6XKqTh9
|
||
|
|
"text/plain": [
|
||
|
|
"<matplotlib.figure.Figure at 0x7f87f9904d68>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# Display the image and draw the predicted boxes onto it.\n",
|
||
|
|
"\n",
|
||
|
|
"# Set the colors for the bounding boxes\n",
|
||
|
|
"colors = plt.cm.hsv(np.linspace(0, 1, 21)).tolist()\n",
|
||
|
|
"\n",
|
||
|
|
"plt.figure(figsize=(20,12))\n",
|
||
|
|
"plt.imshow(batch_original_images[i])\n",
|
||
|
|
"\n",
|
||
|
|
"current_axis = plt.gca()\n",
|
||
|
|
"\n",
|
||
|
|
"for box in batch_original_labels[i]:\n",
|
||
|
|
" xmin = box[1]\n",
|
||
|
|
" ymin = box[2]\n",
|
||
|
|
" xmax = box[3]\n",
|
||
|
|
" ymax = box[4]\n",
|
||
|
|
" label = '{}'.format(classes[int(box[0])])\n",
|
||
|
|
" current_axis.add_patch(plt.Rectangle((xmin, ymin), xmax-xmin, ymax-ymin, color='green', fill=False, linewidth=2)) \n",
|
||
|
|
" current_axis.text(xmin, ymin, label, size='x-large', color='white', bbox={'facecolor':'green', 'alpha':1.0})\n",
|
||
|
|
"\n",
|
||
|
|
"for box in y_pred_thresh_inv[i]:\n",
|
||
|
|
" xmin = box[2]\n",
|
||
|
|
" ymin = box[3]\n",
|
||
|
|
" xmax = box[4]\n",
|
||
|
|
" ymax = box[5]\n",
|
||
|
|
" color = colors[int(box[0])]\n",
|
||
|
|
" label = '{}: {:.2f}'.format(classes[int(box[0])], box[1])\n",
|
||
|
|
" current_axis.add_patch(plt.Rectangle((xmin, ymin), xmax-xmin, ymax-ymin, color=color, fill=False, linewidth=2)) \n",
|
||
|
|
" current_axis.text(xmin, ymin, label, size='x-large', color='white', bbox={'facecolor':color, 'alpha':1.0})"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"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.7"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 2
|
||
|
|
}
|