Skip to content

Instantly share code, notes, and snippets.

@hgaiser
Created August 22, 2017 12:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hgaiser/c31926937f87ed3a7d5e63aaf130a2b3 to your computer and use it in GitHub Desktop.
Save hgaiser/c31926937f87ed3a7d5e63aaf130a2b3 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The autoreload extension is already loaded. To reload it, use:\n",
" %reload_ext autoreload\n"
]
}
],
"source": [
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"from ipywidgets import IntProgress\n",
"from keras_tqdm import TQDMNotebookCallback\n",
"\n",
"import keras\n",
"import keras.preprocessing.image\n",
"from keras.applications.imagenet_utils import get_file\n",
"\n",
"import keras_resnet.models\n",
"import keras_retinanet.layers\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import cv2\n",
"import numpy as np\n",
"import sys\n",
"import math\n",
"\n",
"import tensorflow as tf\n",
"\n",
"def get_session():\n",
" config = tf.ConfigProto()\n",
" config.gpu_options.allow_growth = True\n",
" return tf.Session(config=config)\n",
"\n",
"keras.backend.tensorflow_backend.set_session(get_session())\n",
"\n",
"WEIGHTS_PATH_NO_TOP = 'https://github.com/fchollet/deep-learning-models/releases/download/v0.2/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5'"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/lib/python3.6/site-packages/ipykernel/__main__.py:45: UserWarning: Output \"classification_softmax\" missing from loss dictionary. We assume this was done on purpose, and we will not be expecting any data to be passed to \"classification_softmax\" during training.\n",
"/usr/lib/python3.6/site-packages/ipykernel/__main__.py:45: UserWarning: Output \"boxes\" missing from loss dictionary. We assume this was done on purpose, and we will not be expecting any data to be passed to \"boxes\" during training.\n",
"/usr/lib/python3.6/site-packages/ipykernel/__main__.py:45: UserWarning: Output \"focal_loss_5\" missing from loss dictionary. We assume this was done on purpose, and we will not be expecting any data to be passed to \"focal_loss_5\" during training.\n"
]
}
],
"source": [
"def create_model(num_classes=2, num_anchors=9):\n",
" image = keras.layers.Input((512, 512, 3))\n",
" im_info = keras.layers.Input((3,))\n",
" gt_boxes = keras.layers.Input((None, 5))\n",
" \n",
" resnet = keras_resnet.models.ResNet50(image, include_top=False)\n",
" _, _, _, res5 = resnet.outputs\n",
"\n",
" # predict anchor classes\n",
" classification = keras.layers.Conv2D(\n",
" filters=num_classes * num_anchors,\n",
" kernel_size=(3, 3),\n",
" strides=1,\n",
" padding='same',\n",
" name='pyramid_classification',\n",
" #kernel_initializer=keras.initializers.normal(mean=0.0, stddev=0.01, seed=None),\n",
" #bias_initializer=keras.initializers.zeros(),\n",
" bias_initializer=keras.initializers.constant(-math.log((1 - 0.01) / 0.01)),\n",
" kernel_initializer=keras.initializers.zeros(),\n",
" )(res5)\n",
" \n",
" # generate anchors and their labels\n",
" labels, _, anchors = keras_retinanet.layers.AnchorTarget(\n",
" features_shape=keras.backend.int_shape(classification)[1:3],\n",
" stride=32,\n",
" anchor_size=128,\n",
" name='boxes'\n",
" )([im_info, gt_boxes])\n",
" \n",
" # reshape classification to (-1, num_classes)\n",
" classification = keras.layers.Reshape((-1, num_classes), name='classification')(classification)\n",
" # compute classification losses\n",
" classification = keras.layers.Activation('softmax', name='classification_softmax')(classification)\n",
" cls_loss = keras_retinanet.layers.FocalLoss(num_classes=num_classes)([classification, labels])\n",
" \n",
" return keras.models.Model(inputs=[image, im_info, gt_boxes], outputs=[classification, labels, cls_loss, anchors])\n",
"\n",
"model = create_model()\n",
"\n",
"# load imagenet weights\n",
"weights_path = get_file('resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5', WEIGHTS_PATH_NO_TOP, cache_subdir='models', md5_hash='a268eb855778b3df3c7506639542a6af')\n",
"model.load_weights(weights_path, by_name=True)\n",
"\n",
"# compile model\n",
"model.compile(loss=None, optimizer=keras.optimizers.adam(lr=0.01))\n",
"#print(model.summary())"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n/w9qpJblviy9MgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1c0a7ed588>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 512, 512, 3) (1, 3) (1, 1, 5)\n"
]
}
],
"source": [
"# generate really simple image with one object\n",
"image = np.zeros((512, 512, 3), dtype=keras.backend.floatx())\n",
"image[100:300, 100:300, :] = 1.0\n",
"plt.imshow(image)\n",
"plt.show()\n",
"\n",
"# create input batch blobs\n",
"image_batch = np.expand_dims(image, axis=0)\n",
"im_info_batch = np.array([[512, 512, 1.0]])\n",
"gt_boxes_batch = np.array([[[100, 100, 300, 300, 1]]])\n",
"\n",
"inputs = [image_batch, im_info_batch, gt_boxes_batch]\n",
"\n",
"print(image_batch.shape, im_info_batch.shape, gt_boxes_batch.shape)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"999 3.118030463156174e-066\r"
]
}
],
"source": [
"# train for some iterations\n",
"for i in range(1000):\n",
" print('{} {}'.format(i, model.train_on_batch(inputs, None)), end='\\r')\n",
" sys.stdout.flush()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"# predict the same image again\n",
"classification, labels, cls_loss, anchors = model.predict_on_batch(inputs)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 2304) (1, 2304, 2) (1, 2304, 4)\n",
"1.0 [ 0.01348912 0.98651087]\n",
"1.0 [ 0.00627385 0.99372619]\n",
"1.0 [ 0.00209964 0.99790037]\n",
"1.0 [ 0.00452386 0.99547619]\n",
"1.0 [ 0.0193282 0.98067182]\n",
"1.0 [ 0.00812897 0.991871 ]\n",
"1.0 [ 0.00952255 0.99047744]\n",
"1.0 [ 1.06148713e-04 9.99893785e-01]\n",
"1.0 [ 0.05200059 0.94799942]\n",
"1.0 [ 0.00240846 0.99759161]\n",
"1.0 [ 0.02541689 0.97458309]\n",
"1.0 [ 0.00573512 0.9942649 ]\n",
"1.0 [ 1.14641634e-05 9.99988556e-01]\n",
"1.0 [ 2.84824437e-05 9.99971509e-01]\n",
"1.0 [ 8.69676078e-05 9.99912977e-01]\n",
"1.0 [ 0.03039886 0.96960115]\n",
"1.0 [ 2.02974588e-05 9.99979734e-01]\n",
"1.0 [ 4.90425955e-05 9.99951005e-01]\n",
"1.0 [ 2.19084352e-04 9.99780953e-01]\n",
"1.0 [ 4.56347625e-04 9.99543607e-01]\n",
"1.0 [ 0.00981079 0.99018925]\n",
"1.0 [ 7.80278788e-05 9.99921918e-01]\n",
"1.0 [ 4.56221518e-04 9.99543726e-01]\n",
"1.0 [ 0.00191325 0.99808681]\n",
"1.0 [ 0.07593685 0.92406309]\n",
"1.0 [ 0.00128312 0.99871695]\n",
"1.0 [ 0.00962798 0.99037194]\n",
"1.0 [ 8.06932861e-04 9.99193013e-01]\n",
"1.0 [ 0.00115529 0.99884474]\n",
"1.0 [ 0.00167788 0.99832207]\n",
"1.0 [ 0.00101345 0.99898654]\n",
"1.0 [ 0.00865112 0.99134892]\n",
"1.0 [ 0.0377437 0.96225631]\n",
"1.0 [ 0.02015107 0.97984892]\n",
"1.0 [ 0.00976999 0.99023002]\n",
"1.0 [ 0.00167574 0.99832422]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1bf4318ac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# visualize the positive anchors\n",
"indices = np.where(labels[0, :] > 0)[0]\n",
"im = image_batch[0, ...].copy()\n",
"print(labels.shape, classification.shape, anchors.shape)\n",
"for idx in indices:\n",
" # print the label and the classification scores\n",
" print(labels[0, idx], classification[0, idx, :])\n",
" b = anchors[0, idx, :].astype(int)\n",
" cv2.rectangle(im, (b[0], b[1]), (b[2], b[3]), (0, 1, 0), 3)\n",
" \n",
"plt.figure(figsize=(10, 10))\n",
"plt.imshow(im)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Generate anchors for a certain image size"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"import keras_retinanet.layers\n",
"\n",
"im_info = keras.layers.Input((3,))\n",
"gt_boxes = keras.layers.Input((None, 5))\n",
"\n",
"shapes = [(64, 64), (32, 32), (16, 16), (8, 8), (4, 4)]\n",
"strides = [8, 16, 32, 64, 128]\n",
"sizes = [32, 64, 128, 256, 512]\n",
"idx = 2\n",
"\n",
"labels, bbox_reg_targets, anchors = keras_retinanet.layers.AnchorTarget(shapes[idx], strides[idx], sizes[idx])([im_info, gt_boxes])\n",
"anchor_model = keras.models.Model(inputs=[im_info, gt_boxes], outputs=[labels, anchors])\n",
"\n",
"l, a = anchor_model.predict([im_info_batch, gt_boxes_batch])"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1bf3943748>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# show labeled anchors\n",
"indices = np.where(l[0, :] > 0)[0]\n",
"im = image_batch[0, ...].copy()\n",
"for idx in indices:\n",
" b = a[0, idx, :].astype(int)\n",
" cv2.rectangle(im, (b[0], b[1]), (b[2], b[3]), (0, 1, 0), 3)\n",
" \n",
"plt.figure(figsize=(10, 10))\n",
"plt.imshow(im)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment