{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Object detection -- multiple rectangles", "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "l6l-TaL_zyyw", "outputId": "7ba74569-07fd-481d-ca20-e297e15e3ad0" }, "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib\n", "%matplotlib inline\n", "\n", "\n", "# Create images with random rectangles and bounding boxes. \n", "num_imgs = 50000\n", "\n", "img_size = 8\n", "min_rect_size = 1\n", "max_rect_size = 4\n", "num_objects = 2\n", "\n", "bboxes = np.zeros((num_imgs, num_objects, 4))\n", "imgs = np.zeros((num_imgs, img_size, img_size))\n", "\n", "for i_img in range(num_imgs):\n", " for i_object in range(num_objects):\n", " w, h = np.random.randint(min_rect_size, max_rect_size, size=2)\n", " x = np.random.randint(0, img_size - w)\n", " y = np.random.randint(0, img_size - h)\n", " imgs[i_img, x:x+w, y:y+h] = 1.\n", " bboxes[i_img, i_object] = [x, y, w, h]\n", " \n", "imgs.shape, bboxes.shape" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "((50000, 8, 8), (50000, 2, 4))" ] }, "metadata": { "tags": [] }, "execution_count": 1 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 269 }, "id": "mXjasFek0Iku", "outputId": "b0441da4-ccfb-44f4-9ee1-d79a6db885e4" }, "source": [ "import random\n", "i = random.randint(1,1000)\n", "plt.imshow(imgs[i].T, cmap='Greys', interpolation='none', origin='lower', extent=[0, img_size, 0, img_size])\n", "for bbox in bboxes[i]:\n", " plt.gca().add_patch(matplotlib.patches.Rectangle((bbox[0], bbox[1]), bbox[2], bbox[3], ec='r', fc='none'))" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "DjqObPpH0XUC", "outputId": "5fa7060b-5e45-4791-b73c-dc8f780f68c2" }, "source": [ "# Reshape and normalize the data to mean 0 and std 1. \n", "X = (imgs.reshape(num_imgs, -1) - np.mean(imgs)) / np.std(imgs)\n", "X.shape, np.mean(X), np.std(X)\n", "\n", "# Normalize x, y, w, h by img_size, so that all values are between 0 and 1.\n", "# Important: Do not shift to negative values (e.g. by setting to mean 0), because the IOU calculation needs positive w and h.\n", "y = bboxes.reshape(num_imgs, -1) / img_size\n", "y.shape, np.mean(y), np.std(y)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "((50000, 8), 0.2814834375, 0.17521282872747532)" ] }, "metadata": { "tags": [] }, "execution_count": 12 } ] }, { "cell_type": "code", "metadata": { "id": "Cg_EeqI70Z3G" }, "source": [ "\n", "# Split training and test.\n", "i = int(0.8 * num_imgs)\n", "train_X = X[:i]\n", "test_X = X[i:]\n", "train_y = y[:i]\n", "test_y = y[i:]\n", "test_imgs = imgs[i:]\n", "test_bboxes = bboxes[i:]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ssH6yT240doT" }, "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Activation, Dropout, Convolution2D, MaxPooling2D, Flatten\n", "from keras.optimizers import SGD\n", "filter_size = 3\n", "pool_size = 2\n", "\n", "\n", "model = Sequential([\n", " Dense(512, input_dim=X.shape[-1]),\n", " Activation('relu'),\n", " Dense(128, input_dim=X.shape[-1]),\n", " Activation('relu'),\n", " Dropout(0.2),\n", " Dense(y.shape[-1])\n", " ])\n", "\n", "model.compile('adadelta', 'mse')" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "1donmxN00kUl" }, "source": [ "def IOU(bbox1, bbox2):\n", " '''Calculate overlap between two bounding boxes [x, y, w, h] as the area of intersection over the area of unity'''\n", " x1, y1, w1, h1 = bbox1[0], bbox1[1], bbox1[2], bbox1[3]\n", " x2, y2, w2, h2 = bbox2[0], bbox2[1], bbox2[2], bbox2[3]\n", "\n", " w_I = min(x1 + w1, x2 + w2) - max(x1, x2)\n", " h_I = min(y1 + h1, y2 + h2) - max(y1, y2)\n", " if w_I <= 0 or h_I <= 0: # no overlap\n", " return 0\n", " I = w_I * h_I\n", "\n", " U = w1 * h1 + w2 * h2 - I\n", "\n", " return I / U\n", "\n", "def distance(bbox1, bbox2):\n", " return np.sqrt(np.sum(np.square(bbox1[:2] - bbox2[:2])))" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "iLJJn0bL0opL", "outputId": "626454ab-109e-4764-ac7a-e9cc6cd9d7da" }, "source": [ "num_epochs = 50\n", "flipped_train_y = np.array(train_y)\n", "flipped = np.zeros((len(flipped_train_y), num_epochs))\n", "ious_epoch = np.zeros((len(flipped_train_y), num_epochs))\n", "dists_epoch = np.zeros((len(flipped_train_y), num_epochs))\n", "mses_epoch = np.zeros((len(flipped_train_y), num_epochs))\n", "\n", "for epoch in range(num_epochs):\n", " print('Epoch', epoch)\n", " model.fit(train_X, flipped_train_y, epochs=1, validation_data=(test_X, test_y), verbose=2)\n", " pred_y = model.predict(train_X)\n", "\n", " for i, (pred_bboxes, exp_bboxes) in enumerate(zip(pred_y, flipped_train_y)): \n", " flipped_exp_bboxes = np.concatenate([exp_bboxes[4:], exp_bboxes[:4]])\n", " mse = np.mean(np.square(pred_bboxes - exp_bboxes))\n", " mse_flipped = np.mean(np.square(pred_bboxes - flipped_exp_bboxes))\n", " iou = IOU(pred_bboxes[:4], exp_bboxes[:4]) + IOU(pred_bboxes[4:], exp_bboxes[4:])\n", " iou_flipped = IOU(pred_bboxes[:4], flipped_exp_bboxes[:4]) + IOU(pred_bboxes[4:], flipped_exp_bboxes[4:])\n", " \n", " dist = distance(pred_bboxes[:4], exp_bboxes[:4]) + distance(pred_bboxes[4:], exp_bboxes[4:])\n", " dist_flipped = distance(pred_bboxes[:4], flipped_exp_bboxes[:4]) + distance(pred_bboxes[4:], flipped_exp_bboxes[4:])\n", "\n", " if mse_flipped < mse: # you can also use iou or dist here\n", " flipped_train_y[i] = flipped_exp_bboxes\n", " flipped[i, epoch] = 1\n", " mses_epoch[i, epoch] = mse_flipped / 2.\n", " ious_epoch[i, epoch] = iou_flipped / 2.\n", " dists_epoch[i, epoch] = dist_flipped / 2.\n", " else:\n", " mses_epoch[i, epoch] = mse / 2.\n", " ious_epoch[i, epoch] = iou / 2.\n", " dists_epoch[i, epoch] = dist / 2.\n", "\n", " print('Flipped {} training samples ({} %)'.format(np.sum(flipped[:, epoch]), np.mean(flipped[:, epoch]) * 100.))\n", " print('Mean IOU: {}'.format(np.mean(ious_epoch[:, epoch])))\n", " print('Mean dist: {}'.format(np.mean(dists_epoch[:, epoch])))\n", " print('Mean mse: {}'.format(np.mean(mses_epoch[:, epoch])))\n", " print('\\n')" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Epoch 0\n", "1250/1250 - 3s - loss: 0.1383 - val_loss: 0.0813\n", "Flipped 19891.0 training samples (49.7275 %)\n", "Mean IOU: 0.037232690657124395\n", "Mean dist: 0.35727365194077376\n", "Mean mse: 0.033198528514804856\n", "\n", "\n", "Epoch 1\n", "1250/1250 - 2s - loss: 0.0888 - val_loss: 0.0656\n", "Flipped 1721.0 training samples (4.3025 %)\n", "Mean IOU: 0.05318151422847442\n", "Mean dist: 0.3144863546827677\n", "Mean mse: 0.025979474518208867\n", "\n", "\n", "Epoch 2\n", "1250/1250 - 3s - loss: 0.0741 - val_loss: 0.0569\n", "Flipped 1114.0 training samples (2.785 %)\n", "Mean IOU: 0.06598561365328626\n", "Mean dist: 0.2901569431546851\n", "Mean mse: 0.022127709409292335\n", "\n", "\n", "Epoch 3\n", "1250/1250 - 2s - loss: 0.0649 - val_loss: 0.0512\n", "Flipped 948.0 training samples (2.37 %)\n", "Mean IOU: 0.07684254374744041\n", "Mean dist: 0.2736034593906058\n", "Mean mse: 0.019633069058081792\n", "\n", "\n", "Epoch 4\n", "1250/1250 - 2s - loss: 0.0579 - val_loss: 0.0470\n", "Flipped 905.0 training samples (2.2624999999999997 %)\n", "Mean IOU: 0.08640724107200685\n", "Mean dist: 0.2613253071013454\n", "Mean mse: 0.01786833271362056\n", "\n", "\n", "Epoch 5\n", "1250/1250 - 2s - loss: 0.0527 - val_loss: 0.0439\n", "Flipped 902.0 training samples (2.255 %)\n", "Mean IOU: 0.09415122599488478\n", "Mean dist: 0.25194095852176157\n", "Mean mse: 0.01655298475231711\n", "\n", "\n", "Epoch 6\n", "1250/1250 - 3s - loss: 0.0484 - val_loss: 0.0414\n", "Flipped 862.0 training samples (2.155 %)\n", "Mean IOU: 0.10142116262063688\n", "Mean dist: 0.2445910453691942\n", "Mean mse: 0.015528906734117075\n", "\n", "\n", "Epoch 7\n", "1250/1250 - 3s - loss: 0.0451 - val_loss: 0.0395\n", "Flipped 708.0 training samples (1.77 %)\n", "Mean IOU: 0.10756239828833132\n", "Mean dist: 0.23869207003038606\n", "Mean mse: 0.014717786949577637\n", "\n", "\n", "Epoch 8\n", "1250/1250 - 3s - loss: 0.0423 - val_loss: 0.0379\n", "Flipped 684.0 training samples (1.71 %)\n", "Mean IOU: 0.11269503097520481\n", "Mean dist: 0.23381905929811422\n", "Mean mse: 0.014059459684692141\n", "\n", "\n", "Epoch 9\n", "1250/1250 - 3s - loss: 0.0400 - val_loss: 0.0365\n", "Flipped 657.0 training samples (1.6424999999999998 %)\n", "Mean IOU: 0.11754654677130373\n", "Mean dist: 0.22965602688907125\n", "Mean mse: 0.013505636898159694\n", "\n", "\n", "Epoch 10\n", "1250/1250 - 3s - loss: 0.0382 - val_loss: 0.0353\n", "Flipped 619.0 training samples (1.5474999999999999 %)\n", "Mean IOU: 0.1219872760987479\n", "Mean dist: 0.22601357287748575\n", "Mean mse: 0.013026879527312556\n", "\n", "\n", "Epoch 11\n", "1250/1250 - 2s - loss: 0.0365 - val_loss: 0.0344\n", "Flipped 609.0 training samples (1.5225 %)\n", "Mean IOU: 0.1256473229702858\n", "Mean dist: 0.2229416991320054\n", "Mean mse: 0.01262558993937125\n", "\n", "\n", "Epoch 12\n", "1250/1250 - 2s - loss: 0.0352 - val_loss: 0.0335\n", "Flipped 519.0 training samples (1.2975 %)\n", "Mean IOU: 0.12965207870365922\n", "Mean dist: 0.22016640171222762\n", "Mean mse: 0.01226186523610329\n", "\n", "\n", "Epoch 13\n", "1250/1250 - 3s - loss: 0.0339 - val_loss: 0.0328\n", "Flipped 495.0 training samples (1.2375 %)\n", "Mean IOU: 0.13345745626533198\n", "Mean dist: 0.21770910598838264\n", "Mean mse: 0.011944320308333223\n", "\n", "\n", "Epoch 14\n", "1250/1250 - 2s - loss: 0.0329 - val_loss: 0.0322\n", "Flipped 481.0 training samples (1.2025 %)\n", "Mean IOU: 0.13652392449009745\n", "Mean dist: 0.21539978047413516\n", "Mean mse: 0.011665974222373175\n", "\n", "\n", "Epoch 15\n", "1250/1250 - 3s - loss: 0.0319 - val_loss: 0.0316\n", "Flipped 488.0 training samples (1.22 %)\n", "Mean IOU: 0.1393332919014705\n", "Mean dist: 0.21334436669366072\n", "Mean mse: 0.011418366132973578\n", "\n", "\n", "Epoch 16\n", "1250/1250 - 3s - loss: 0.0312 - val_loss: 0.0311\n", "Flipped 448.0 training samples (1.1199999999999999 %)\n", "Mean IOU: 0.14204056057933206\n", "Mean dist: 0.2114437389066506\n", "Mean mse: 0.011188648821134583\n", "\n", "\n", "Epoch 17\n", "1250/1250 - 3s - loss: 0.0303 - val_loss: 0.0307\n", "Flipped 418.0 training samples (1.045 %)\n", "Mean IOU: 0.14458371890941213\n", "Mean dist: 0.20967240988183916\n", "Mean mse: 0.010981257015141745\n", "\n", "\n", "Epoch 18\n", "1250/1250 - 2s - loss: 0.0296 - val_loss: 0.0303\n", "Flipped 319.0 training samples (0.7975 %)\n", "Mean IOU: 0.1468144933414354\n", "Mean dist: 0.2080494725385991\n", "Mean mse: 0.010792488328989958\n", "\n", "\n", "Epoch 19\n", "1250/1250 - 3s - loss: 0.0290 - val_loss: 0.0299\n", "Flipped 356.0 training samples (0.89 %)\n", "Mean IOU: 0.14995869851660198\n", "Mean dist: 0.2064036374854088\n", "Mean mse: 0.010608434098732234\n", "\n", "\n", "Epoch 20\n", "1250/1250 - 3s - loss: 0.0285 - val_loss: 0.0296\n", "Flipped 308.0 training samples (0.77 %)\n", "Mean IOU: 0.15203454068016112\n", "Mean dist: 0.20495681090139092\n", "Mean mse: 0.010447016123295134\n", "\n", "\n", "Epoch 21\n", "1250/1250 - 3s - loss: 0.0279 - val_loss: 0.0293\n", "Flipped 294.0 training samples (0.735 %)\n", "Mean IOU: 0.15428042323304164\n", "Mean dist: 0.20356949656557038\n", "Mean mse: 0.01029422922077815\n", "\n", "\n", "Epoch 22\n", "1250/1250 - 2s - loss: 0.0275 - val_loss: 0.0290\n", "Flipped 293.0 training samples (0.7325 %)\n", "Mean IOU: 0.15624734448707436\n", "Mean dist: 0.20225715700244062\n", "Mean mse: 0.010154689438867345\n", "\n", "\n", "Epoch 23\n", "1250/1250 - 3s - loss: 0.0270 - val_loss: 0.0287\n", "Flipped 316.0 training samples (0.79 %)\n", "Mean IOU: 0.15863816766232575\n", "Mean dist: 0.20092190840371113\n", "Mean mse: 0.01001509179614267\n", "\n", "\n", "Epoch 24\n", "1250/1250 - 3s - loss: 0.0267 - val_loss: 0.0285\n", "Flipped 317.0 training samples (0.7925 %)\n", "Mean IOU: 0.1603624874676951\n", "Mean dist: 0.19970516430091176\n", "Mean mse: 0.009889360513190452\n", "\n", "\n", "Epoch 25\n", "1250/1250 - 2s - loss: 0.0263 - val_loss: 0.0283\n", "Flipped 310.0 training samples (0.775 %)\n", "Mean IOU: 0.16236255552418544\n", "Mean dist: 0.1985246433317795\n", "Mean mse: 0.009768766455358692\n", "\n", "\n", "Epoch 26\n", "1250/1250 - 3s - loss: 0.0259 - val_loss: 0.0281\n", "Flipped 243.0 training samples (0.6074999999999999 %)\n", "Mean IOU: 0.1639310728770347\n", "Mean dist: 0.19749649045465012\n", "Mean mse: 0.009659793646618061\n", "\n", "\n", "Epoch 27\n", "1250/1250 - 3s - loss: 0.0256 - val_loss: 0.0279\n", "Flipped 224.0 training samples (0.5599999999999999 %)\n", "Mean IOU: 0.16592526733371524\n", "Mean dist: 0.19641030311005458\n", "Mean mse: 0.009547083750477282\n", "\n", "\n", "Epoch 28\n", "1250/1250 - 3s - loss: 0.0252 - val_loss: 0.0278\n", "Flipped 258.0 training samples (0.645 %)\n", "Mean IOU: 0.16776933185145626\n", "Mean dist: 0.19536236573254215\n", "Mean mse: 0.009444298010414938\n", "\n", "\n", "Epoch 29\n", "1250/1250 - 3s - loss: 0.0250 - val_loss: 0.0276\n", "Flipped 295.0 training samples (0.7374999999999999 %)\n", "Mean IOU: 0.1691739271044937\n", "Mean dist: 0.19428270249879284\n", "Mean mse: 0.009347408139333078\n", "\n", "\n", "Epoch 30\n", "1250/1250 - 2s - loss: 0.0246 - val_loss: 0.0275\n", "Flipped 191.0 training samples (0.4775 %)\n", "Mean IOU: 0.17066198583004422\n", "Mean dist: 0.19329219935458095\n", "Mean mse: 0.009254583448935863\n", "\n", "\n", "Epoch 31\n", "1250/1250 - 2s - loss: 0.0243 - val_loss: 0.0273\n", "Flipped 224.0 training samples (0.5599999999999999 %)\n", "Mean IOU: 0.17239853906267139\n", "Mean dist: 0.1923443650923715\n", "Mean mse: 0.009162586181179426\n", "\n", "\n", "Epoch 32\n", "1250/1250 - 2s - loss: 0.0240 - val_loss: 0.0272\n", "Flipped 217.0 training samples (0.5425 %)\n", "Mean IOU: 0.17365462918761174\n", "Mean dist: 0.19144313608610497\n", "Mean mse: 0.009082014350604177\n", "\n", "\n", "Epoch 33\n", "1250/1250 - 3s - loss: 0.0238 - val_loss: 0.0271\n", "Flipped 198.0 training samples (0.49500000000000005 %)\n", "Mean IOU: 0.1754342446492649\n", "Mean dist: 0.19051836798560184\n", "Mean mse: 0.008995486118540955\n", "\n", "\n", "Epoch 34\n", "1250/1250 - 2s - loss: 0.0235 - val_loss: 0.0270\n", "Flipped 170.0 training samples (0.42500000000000004 %)\n", "Mean IOU: 0.17713109104470814\n", "Mean dist: 0.1896244767835146\n", "Mean mse: 0.008915593126860844\n", "\n", "\n", "Epoch 35\n", "1250/1250 - 3s - loss: 0.0233 - val_loss: 0.0269\n", "Flipped 167.0 training samples (0.4175 %)\n", "Mean IOU: 0.1783873919924296\n", "Mean dist: 0.18881081434670838\n", "Mean mse: 0.00884079262867683\n", "\n", "\n", "Epoch 36\n", "1250/1250 - 3s - loss: 0.0231 - val_loss: 0.0268\n", "Flipped 138.0 training samples (0.345 %)\n", "Mean IOU: 0.1792274133004544\n", "Mean dist: 0.188094066597689\n", "Mean mse: 0.00877569088354422\n", "\n", "\n", "Epoch 37\n", "1250/1250 - 3s - loss: 0.0230 - val_loss: 0.0267\n", "Flipped 193.0 training samples (0.48250000000000004 %)\n", "Mean IOU: 0.18130463171101832\n", "Mean dist: 0.18726396432839515\n", "Mean mse: 0.00869565285947182\n", "\n", "\n", "Epoch 38\n", "1250/1250 - 3s - loss: 0.0227 - val_loss: 0.0266\n", "Flipped 204.0 training samples (0.51 %)\n", "Mean IOU: 0.18280200066359556\n", "Mean dist: 0.1864627286646748\n", "Mean mse: 0.008624417345906802\n", "\n", "\n", "Epoch 39\n", "1250/1250 - 3s - loss: 0.0225 - val_loss: 0.0266\n", "Flipped 190.0 training samples (0.475 %)\n", "Mean IOU: 0.1838462055031591\n", "Mean dist: 0.18572079626665308\n", "Mean mse: 0.008562547158313465\n", "\n", "\n", "Epoch 40\n", "1250/1250 - 3s - loss: 0.0223 - val_loss: 0.0265\n", "Flipped 159.0 training samples (0.3975 %)\n", "Mean IOU: 0.18475535696344542\n", "Mean dist: 0.1850447536846153\n", "Mean mse: 0.008503390265712587\n", "\n", "\n", "Epoch 41\n", "1250/1250 - 2s - loss: 0.0221 - val_loss: 0.0264\n", "Flipped 122.0 training samples (0.305 %)\n", "Mean IOU: 0.18586247268819275\n", "Mean dist: 0.184363489838462\n", "Mean mse: 0.008445507373116461\n", "\n", "\n", "Epoch 42\n", "1250/1250 - 2s - loss: 0.0219 - val_loss: 0.0263\n", "Flipped 166.0 training samples (0.415 %)\n", "Mean IOU: 0.18760472663447547\n", "Mean dist: 0.18365588710412672\n", "Mean mse: 0.008381407659689295\n", "\n", "\n", "Epoch 43\n", "1250/1250 - 2s - loss: 0.0218 - val_loss: 0.0263\n", "Flipped 173.0 training samples (0.4325 %)\n", "Mean IOU: 0.18870382838316913\n", "Mean dist: 0.18298375121132615\n", "Mean mse: 0.008326145256875323\n", "\n", "\n", "Epoch 44\n", "1250/1250 - 3s - loss: 0.0216 - val_loss: 0.0262\n", "Flipped 169.0 training samples (0.4225 %)\n", "Mean IOU: 0.18930894377383584\n", "Mean dist: 0.18237986450754146\n", "Mean mse: 0.008275573133820045\n", "\n", "\n", "Epoch 45\n", "1250/1250 - 3s - loss: 0.0214 - val_loss: 0.0262\n", "Flipped 155.0 training samples (0.3875 %)\n", "Mean IOU: 0.19045625291588011\n", "Mean dist: 0.1816923421883227\n", "Mean mse: 0.008221076761049982\n", "\n", "\n", "Epoch 46\n", "1250/1250 - 2s - loss: 0.0213 - val_loss: 0.0261\n", "Flipped 135.0 training samples (0.3375 %)\n", "Mean IOU: 0.19210190480679085\n", "Mean dist: 0.18100392317543298\n", "Mean mse: 0.008164115579863454\n", "\n", "\n", "Epoch 47\n", "1250/1250 - 2s - loss: 0.0212 - val_loss: 0.0261\n", "Flipped 139.0 training samples (0.3475 %)\n", "Mean IOU: 0.1929415455332721\n", "Mean dist: 0.18040060820084736\n", "Mean mse: 0.008116974390970401\n", "\n", "\n", "Epoch 48\n", "1250/1250 - 2s - loss: 0.0210 - val_loss: 0.0260\n", "Flipped 150.0 training samples (0.375 %)\n", "Mean IOU: 0.19437142804856034\n", "Mean dist: 0.17980052557386686\n", "Mean mse: 0.008063567421949221\n", "\n", "\n", "Epoch 49\n", "1250/1250 - 3s - loss: 0.0209 - val_loss: 0.0260\n", "Flipped 138.0 training samples (0.345 %)\n", "Mean IOU: 0.19525224187547882\n", "Mean dist: 0.17925508563562084\n", "Mean mse: 0.008018252786645448\n", "\n", "\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "id": "-u4Hf3UQ3Tu1", "outputId": "897890e3-e513-45c2-d3cd-3d362f9629ed" }, "source": [ "plt.pcolor(flipped[:1000], cmap='Greys')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Training sample')" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text(0, 0.5, 'Training sample')" ] }, "metadata": { "tags": [] }, "execution_count": 20 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 286 }, "id": "1xaAqRb43d0i", "outputId": "45d43a42-3399-4c6e-f07c-2607435fcc34" }, "source": [ "plt.plot(np.mean(ious_epoch, axis=0), label='Mean IOU') # between predicted and assigned true bboxes\n", "plt.plot(np.mean(dists_epoch, axis=0), label='Mean distance') # relative to image size\n", "plt.legend()\n", "plt.ylim(0, 1)\n" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(0.0, 1.0)" ] }, "metadata": { "tags": [] }, "execution_count": 22 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "B8bjd7ae3xve", "outputId": "50d91d06-4f6a-4da4-e255-3a0148cfd5ea" }, "source": [ "pred_y = model.predict(test_X)\n", "pred_y = pred_y.reshape(len(pred_y), num_objects, -1)\n", "pred_bboxes = pred_y[..., :4] * img_size\n", "pred_shapes = pred_y[..., 4:5]\n", "pred_bboxes.shape, pred_shapes.shape" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "((10000, 2, 4), (10000, 2, 0))" ] }, "metadata": { "tags": [] }, "execution_count": 23 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 385 }, "id": "tXOBbIIe31pY", "outputId": "16953945-6c48-4f09-ada0-995282a0764d" }, "source": [ "plt.figure(figsize=(16, 8))\n", "for i_subplot in range(1, 5):\n", " plt.subplot(1, 4, i_subplot)\n", " i = np.random.randint(len(test_X))\n", " plt.imshow(test_imgs[i].T, cmap='Greys', interpolation='none', origin='lower', extent=[0, img_size, 0, img_size])\n", " for pred_bbox, exp_bbox, pred_shape in zip(pred_bboxes[i], test_bboxes[i], pred_shapes[i]):\n", " print(pred_bbox)\n", " plt.gca().add_patch(matplotlib.patches.Rectangle((pred_bbox[0], pred_bbox[1]), pred_bbox[2], pred_bbox[3],ec='r', fc='none'))" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "[3.0901163 0.08360825 2.8350563 1.9934778 ]\n", "[2.8934953 0.05177559 1.8182871 1.4411243 ]\n", "[1.1641378 3.105485 1.7916882 1.2118427]\n", "[1.9490995 4.0168724 0.78566885 0.8842524 ]\n", "[ 5.314244 -0.78453827 2.0568438 1.9726627 ]\n", "[2.9276226 3.003235 1.8148657 1.4338228]\n", "[1.2816632 3.6937425 2.8126748 1.6420349]\n", "[1.6368439 2.8688457 1.711059 2.524076 ]\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5sAAADlCAYAAADdq+M8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAT4ElEQVR4nO3d34/ld33f8de7XijYiUKUjKrWZnd8ERlZSInpCJFQIRUnFTQR3PQCJCI1qrQ3+QFRpIj0hn8gipKLKOqKECpBQY1jpAhRQqQQRZFaK2tjJcYGiZpZsOPEa1UEwkVcJ+9ezCw1xt7zPbOf73y/Z+bxkL5iZ/brM+8zzNPr957vOae6OwAAADDSP1t6AAAAAM4eyyYAAADDWTYBAAAYzrIJAADAcJZNAAAAhrNsAgAAMNykZbOqfrmqvlhVj1XVJ6rqNXMPBkynUVg3jcK6aRTmsXHZrKo7k/xSkoPufmOS25K8Z+7BgGk0CuumUVg3jcJ8pl5GeyHJa6vqQpLbk/z1fCMBJ6BRWDeNwrppFGawcdns7qeT/HqSryV5Jsnfdffn5h4MmEajsG4ahXXTKMznwqYTquoHk7w7yd1JvpHk96vqfd39sZecdznJ5SS54447/vUb3vCGGcaF3XF4eJjnnnuu5v46UxrVJ3yvhx9++Lnu3pv762gUtndaf4YmGoWTmNroxmUzyU8m+Wp3X0+SqnowyU8k+a5ls7uvJLmSJAcHB3316tWth4az5ODg4LS+1MZG9Qnfq6qundKX0ihs6RT/DE00Club2uiU52x+Lclbqur2qqok9yd54hZmA8bSKKybRmHdNAozmfKczYeSPJDkkSR/dfzPXJl5LmAijcK6aRTWTaMwnymX0aa7P5TkQzPPApyQRmHdNArrplGYx9S3PgEAAIDJLJsAAAAMZ9kEAABgOMsmAAAAw1k2AQAAGM6yCQAAwHCWTQAAAIazbAIAADCcZRMAAIDhLJsAAAAMZ9kEAABgOMsmAAAAw1k2AQAAGM6yCQAAwHCWTQAAAIbbuGxW1T1V9eiLjm9W1QdOYzhgM43CumkU1k2jMJ8Lm07o7i8n+bEkqarbkjyd5FMzzwVMpFFYN43CumkU5rPtZbT3J/nf3X1tjmGAW6ZRWDeNwrppFAba+MjmS7wnySfmGAQYQqOwbhqFddvY6MMPP5yqOqVxdlN3Lz0CKzH5kc2qenWSdyX5/Vf4/ctVdbWqrl6/fn3UfMBEN2tUn7A8jcK6TW309CeD3bXNZbTvTPJId//ty/1md1/p7oPuPtjb2xszHbCNV2xUn7AKGoV1m9ToAnPBztpm2XxvXPoDa6ZRWDeNwrppFAabtGxW1R1JfirJg/OOA5yERmHdNArrplGYx6QXCOrubyf5oZlnAU5Io7BuGoV10yjMY9u3PgEAAICNLJsAAAAMZ9kEAABgOMsmAAAAw1k2AQAAGM6yCQAAwHCWTQAAAIazbAIAADCcZRMAAIDhLJsAAAAMZ9kEAABgOMsmAAAAw1k2AQAAGM6yCQAAwHCWTQAAAIazbAIAADDcpGWzql5XVQ9U1Zeq6omq+vG5BwOm0yism0Zh3TQK87gw8bzfSvLZ7v4PVfXqJLfPOBOwPY3CumkU1k2jMIONy2ZV/UCStyX5j0nS3c8neX7esYCpNArrplFYN43CfKZcRnt3kutJfq+qvlBVH66qO156UlVdrqqrVXX1+vXrwwcFXtHGRk+zz6ra+QMGW1WjwPfYqtGLFy+mux03OeCGKcvmhSRvSvI73X1fkm8n+eBLT+ruK9190N0He3t7g8cEbmJjo/qERWkU1k2jMJMpy+ZTSZ7q7oeOP34gR0EC66BRWDeNwrppFGaycdns7r9J8vWquuf4U/cneXzWqYDJNArrplFYN43CfKa+Gu0vJvn48atzPZnk5+YbCTgBjcK6aRTWTaMwg0nLZnc/muRg5lmAE9IorJtGYd00CvOY8pxNAAAA2IplEwAAgOEsmwAAAAxn2QQAAGA4yyYAAADDWTYBAAAYzrIJAADAcJZNAAAAhrNsAgAAMJxlEwAAzor9/aRq/cf+/tLfKU6BZRMAAHbBlEXy2rWlp5zm2jVL6zlwYekBAACACa5dS7pvfk7V5nPWYNScVbd+G8zGI5sAAAAMZ9kEAABgOMsmAAAAw016zmZVHSb5VpJ/TPJCdx/MORSwHY3CumkU1k2jMI9tXiDo33b3c7NNAtwqjcK6aRTWTaMwmMtoAQAAGG7qI5ud5HNV1Un+S3dfeekJVXU5yeUkuXjx4rgJOZE6hZeB7l14We3z46aNnmaffi7gZa2mUX8+wMvaiUZ7w+9PPWdu/h3ADVMf2fw33f2mJO9M8vNV9baXntDdV7r7oLsP9vb2hg4JbHTTRvUJi9MorJtGYQaTls3ufvr4f59N8qkkb55zKGA7GoV10yism0ZhHhuXzaq6o6q+/8avk/y7JI/NPRgwzblrdH8/qRpz7O8vfW84B85do7BjNArzmfKczX+R5FPH135fSPLfuvuzs04FbON8NXrtWjLquSALP6eFc+N8NQq7R6Mwk43LZnc/meRHT2EW4AQ0CuumUVg3jcJ8vPUJAAAAw1k2AQAAGM6yCQAAwHCWTQAAAIazbAIAADCcZRMAAIDhLJsAAAAMZ9kEAABgOMsmALAb9veTqt059veX/o4BLOrC0gMAAExy7VrSvfQU01UtPQHAojyyCQAAwHCWTWB+Iy99S+a9LZe9AQAM4TJaYH4jL32rmve2XPYGADCERzYBAAAYzrIJAADAcJOXzaq6raq+UFWfnnMg4GQ0CuumUVgvfcI8tnlk8/1JnphrEOCWaRTWTaOwXvqEGUxaNqvqriQ/neTD844DnIRGYd00CuulT5jP1Ec2fzPJryb5pxlnAU7u/DR66dK4tz65dGnpe8P5cX4ahd2jT5jJxmWzqn4mybPd/fCG8y5X1dWqunr9+vVhA3Iy3T37wTpMafRM9Xl4ePR2JSOOw8Ol7w3nwNoa9ecD/H/+OxfmNeWRzbcmeVdVHSb5ZJK3V9XHXnpSd1/p7oPuPtjb2xs8JnATGxvVJyxKo7Be/jsXZrRx2ezuX+vuu7p7P8l7kvxJd79v9smASTQK66ZRWC99wry8zyYAAADDXdjm5O7+0yR/OsskwC3TKKybRmG99AnjeWQTAACA4SybAAAADLfVZbQAAMAyDpNMeXOhxd+AqGrseTfjPbNXzbIJAAA74O4J53SSASvcLZn0frtVR+95zZnmMloAAACGs2wCAAAwnGUTAACA4SybAAAADGfZBAAAYDjLJgAAAMNZNgEAABjOsgkAAMBwlk0AAACGs2wCAAAwnGUTAACA4SybAAAADHdh0wlV9Zokf5bknx+f/0B3f2juwYBpdqLRS5eSqqWnmObSpaUn4IzZiUbhHNMozGfjspnkH5K8vbv/vqpeleTPq+p/dPf/mnk2YJr1N3p4uPQEsKT1Nwrnm0ZhJhuXze7uJH9//OGrjo+ecyhgOo3CumkU1k2jMJ9Jz9msqtuq6tEkzyb54+5+6GXOuVxVV6vq6vXr10fPCdzEpkb1CcvS6CA3LsnfleMml+VX1c4fZ4lGYR6Tls3u/sfu/rEkdyV5c1W98WXOudLdB919sLe3N3pO4CY2NapPWJZGBzk8TLp35/AUgp2hUZjHVq9G293fSPL5JO+YZxzgVmgU1k2jsG4ahbE2LptVtVdVrzv+9WuT/FSSL809GDCNRmHdNArrdtYaPczRE06XPG71MnPOjimvRvsvk/zXqrotR8vpf+/uT887FrAFjcK6aRTW7Uw1evfSAyQ5es0lmPZqtH+Z5L5TmAU4AY3CumkU1k2jMJ+tnrMJAAAAU1g2AQAAGM6yCQAAwHCWTQAAAIazbAIAADCcZRMAAIDhLJsAAAAMZ9kEAABgOMsmAAAAw1k2AQAAGM6yCQAAwHCWTQAAAIazbAIAADCcZRMAAIDhLJsAAAAMt3HZrKrXV9Xnq+rxqvpiVb3/NAYDptEorJtGYd00CvO5MOGcF5L8Snc/UlXfn+Thqvrj7n585tnOh/395Nq1padYj0uXksPDpafYNRqFddMorJtGYSYbl83ufibJM8e//lZVPZHkziQCHOHataR76SnWo2rpCXaORmHdNArrplGYz5RHNr+jqvaT3JfkoZf5vctJLifJxYsXB4x2ttXxUtUv+jXf/f1oS/jWXqnRs9bnrjfjZ/v8Oi+Nwq5aQ6P+jOAsmfwCQVX1fUn+IMkHuvubL/397r7S3QfdfbC3tzdyRmCCmzWqT1ieRmHdNArjTVo2q+pVOYrv49394LwjAdvSKKybRmHdNArzmPJqtJXkd5M80d2/Mf9IwDY0CuumUVg3jcJ8pjyy+dYkP5vk7VX16PHx72eeC5hOo7BuGoV10yjMZMqr0f55kt1+NQ44wzQK66ZRWDeNwnwmv0AQAAAATGXZBAAAYDjLJgAAAMNZNgEAABjOsgkAAMBwlk0AAACGs2wCAAAwnGXzNO3vJ1VJVTpJH3+6V3p8dZZvAgAAcB5cWHqAc+XataSPVsyqo/cO7qz3XYR78ykAAAAvyyObAAAADGfZBAAAYDjLJgAAAMNZNgEAABjOsgkAAMBwlk0AgBX5apZ/+7Mpx423c3vFY39/nm8QsDM2LptV9ZGqeraqHjuNgYDtaBTWTaNsaz9Hb4u29iPdNz+uXZvnGzSYRmE+Ux7Z/GiSd8w8B3ByH41GYc0+Go3Cmn00GoVZbFw2u/vPkvyfU5gFOAGNwrppFNZNozAfz9kEAABguAujbqiqLie5nCQXL14cdbPAAGetz+5eegQY6qw1CmeNRuFkhj2y2d1Xuvuguw/29vZG3SwwgD5h3TQK66ZROBmX0QIAADDclLc++USS/5nknqp6qqr+0/xjAVNpFNZNo7BuGoX5bHzOZne/9zQGAU5Go7BuGoV10yjMx2W0AAAADGfZBAAAYDjLJgAAAMNZNgEAABjOsgkAAMBwlk0AAACGs2wCAAAwnGUTAACA4SybAAAADGfZBAAAYDjLJgAAAMNZNgEAABjOsgkAAMBwlk0AAACGs2wCAAAw3KRls6reUVVfrqqvVNUH5x4K2I5GYd00CuumUZjHxmWzqm5L8ttJ3pnk3iTvrap75x4MmEajsG4ahXXTKMxnyiObb07yle5+srufT/LJJO+ed6zz4zBJr/TIAl/z8MTfyXNNo7BuGoV10yjMZMqyeWeSr7/o46eOP8e2Ll1KqpKq7yxX+wuPdDOHSeqUj7tP446dPRqFddMorJtGYSYXRt1QVV1Ocvn4w3+oqsdG3fYCfjjJc0sPcYt2/T78cFXt8vxJcs/SA9xwxvpMdv/nO9n9+7Dr8ycandOu/3wsOn+NuZnZ70PVhEmnnPPyVtNnotEV2vX5k92/D5ManbJsPp3k9S/6+K7jz32X7r6S5EqSVNXV7j6YMsAa7fr8ye7fh12fPzm6D6f0pTY2epb6TNyHNdj1+RONzmnX78Ouz5/s/n04xT4Tje6cXZ8/2f37MLXRKZfR/kWSH6mqu6vq1Unek+QPb2U4YCiNwrppFNZNozCTjY9sdvcLVfULSf4oyW1JPtLdX5x9MmASjcK6aRTWTaMwn0nP2ezuzyT5zBa3e+Vk46zGrs+f7P592PX5k1O8D1s26nu7Drt+H3Z9/kSjc9r1+7Dr8ye7fx9OdX6N7pxdnz/Z/fswaf7q7s1nAQAAwBamPGcTAAAAtjJ02ayqd1TVl6vqK1X1wZG3fRqq6vVV9fmqeryqvlhV7196ppOoqtuq6gtV9emlZzmJqnpdVT1QVV+qqieq6seXnmkbVfXLxz8/j1XVJ6rqNUvPdING10Gjy9LoPM5Kn4lGl6bReWh0HXa9z2S7Roctm1V1W5LfTvLOJPcmeW9V3Tvq9k/JC0l+pbvvTfKWJD+/g/chSd6f5Imlh7gFv5Xks939hiQ/mh26L1V1Z5JfSnLQ3W/M0QsNvGfZqY5odFU0uhCNzuqs9JlodDEanZVG12Fn+0y2b3TkI5tvTvKV7n6yu59P8skk7x54+7Pr7me6+5HjX38rR//n37nsVNupqruS/HSSDy89y0lU1Q8keVuS302S7n6+u7+x7FRbu5DktVV1IcntSf564Xlu0OgKaHQVNDqDs9BnotGV0OgMNLq8M9JnskWjI5fNO5N8/UUfP5Ud/AG+oar2k9yX5KFlJ9nabyb51ST/tPQgJ3R3kutJfu/48ogPV9UdSw81VXc/neTXk3wtyTNJ/q67P7fsVN+h0XXQ6II0ejp2uM9Eo4vS6OnQ6GJ2us9k+0a9QNDLqKrvS/IHST7Q3d9cep6pqupnkjzb3Q8vPcstuJDkTUl+p7vvS/LtJDvznIiq+sEc/S3n3Un+VZI7qup9y0519mh0URrlpna1z0Sja6DR+Wl0UTvdZ7J9oyOXzaeTvP5FH991/LmdUlWvylGAH+/uB5eeZ0tvTfKuqjrM0aUdb6+qjy070taeSvJUd9/4m7YHchTlrvjJJF/t7uvd/X+TPJjkJxae6QaNLk+jy9PojHa8z0Sja6DRGWl0cbveZ7JloyOXzb9I8iNVdXdVvTpHTxT9w4G3P7uqqhxdQ/1Ed//G0vNsq7t/rbvv6u79HH3//6S7d+pvA7v7b5J8varuOf7U/UkeX3CkbX0tyVuq6vbjn6f7s54nfmt0YRpdBY3OZNf7TDS6EhqdiUaXdwb6TLZs9MKor9rdL1TVLyT5oxy9KtFHuvuLo27/lLw1yc8m+auqevT4c/+5uz+z4Ezn0S8m+fjxv8ifTPJzC88zWXc/VFUPJHkkR6/69oUkV5ad6ohGGUijMzgDjepzPTQ6A40yyM72mWzfaHX3ac0GAADAOeEFggAAABjOsgkAAMBwlk0AAACGs2wCAAAwnGUTAACA4SybAAAADGfZBAAAYDjLJgAAAMP9P2S4WJ0TmPQeAAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 1152x576 with 4 Axes>" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] } ] }