Skip to content

Instantly share code, notes, and snippets.

@wassname
Created December 4, 2017 02:07
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 wassname/36e9cb71286e37f724c0d0169988eca7 to your computer and use it in GitHub Desktop.
Save wassname/36e9cb71286e37f724c0d0169988eca7 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:00:37.495444Z",
"start_time": "2017-12-04T02:00:35.597767Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
}
],
"source": [
"%pylab inline\n",
"from keras_retinanet.utils.image import random_transform\n",
"import keras.preprocessing.image\n",
"import keras_retinanet"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:00:43.540148Z",
"start_time": "2017-12-04T02:00:43.534963Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'2.0.9'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"keras.__version__"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:01:18.824657Z",
"start_time": "2017-12-04T02:01:18.815341Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 0, 2, 2]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Test data\n",
"image = np.zeros((10,10,3))\n",
"image[1,1]=1\n",
"image[3,2]=0.5\n",
"image[4,1]=0.25\n",
"\n",
"x,y = np.argwhere(image.mean(-1)==1).T\n",
"boxes = np.array([x-1,y-1,x+1,y+1]).T\n",
"boxes"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:01:19.188004Z",
"start_time": "2017-12-04T02:01:19.027585Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPgAAAD8CAYAAABaQGkdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAACZhJREFUeJzt3U+opQUZx/Hvr7lJzRhmtMhmpJkgCglqYgj/VEIaFEa2\naGFgizazyRwlEGsj7kN0EcIwKUGhi8lFSKiLVNokXsdAZyZDtHRMcdL+4UbFp8W90SjNOe+de97e\nex6/HxiYc+Y973lmON95/5xzz5uqQlJP75l6AEnjMXCpMQOXGjNwqTEDlxozcKkxA5caM3CpMQOX\nGlsZY6VJ/HicNLKqyrxl3IJLjRm41JiBS40ZuNSYgUuNGbjUmIFLjQ0KPMlXkzyV5OkkN449lKTF\nyLyvbEqyDfgj8BXgBPAo8O2qOjbjMX7QRRrZoj7o8nng6ap6pqpeB+4GrtzscJLGNyTwncDzp9w+\nsX7f2yTZn2Q1yerwp38FqCX69crwv5q0BSzss+hVdRA4CBvZRf8QMHcvYwvxyEPLZcgW/AXg/FNu\n71q/T9IWNyTwR4FPJNmT5CzgKuBX444laRHm7qJX1ZtJrgHuB7YBd1TV0dEnk7Rpc98mO6OVDj4G\nL5bvGHyZ5lVn/jy49C5n4FJjBi41ZuBSYwYuNTbKt6qOZaxrmSeeGVdPbsGlxgxcaszApcYMXGrM\nwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszA\npcaW6ltV/fZTaWPcgkuNGbjUmIFLjRm41JiBS40ZuNTY3MCTnJ/kwSTHkhxNcuD/MZikzcu8K3Ym\nOQ84r6qOJPkA8Bjwzao6NuMxAy8DWsAyvbe9bPOqs6qa+2KcuwWvqher6sj67/8FHAd2bn48SWPb\n0DF4kt3AXuCRMYaRtFiDP6qa5Gzgl8B1VfXP//Hn+4H9G3v6V1nb7V0Wr049gLQhc4/BAZK8F7gX\nuL+qbhmw/DJVKy2lIcfgQ06yBfgZ8GpVXTfkiQ1cGt+iAv8C8FvgCeCt9bt/VFW/nvEYA5dGtpDA\nz4SBS+NbyNtkkpaXgUuNGbjUmIFLjRm41NhSfeniWG666aaFr/Pmm29e+DqljXILLjVm4FJjBi41\nZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm\n4FJjBi41tlTXJrv00kvHWC0PP/zwKOuVxuS1yaR3OQOXGjNwqTEDlxozcKkxA5caM3CpscGBJ9mW\n5PEk9445kKTF2cgW/ABwfKxBJC3eoMCT7AKuAA6NO46kRRq6Bb8VuAF463QLJNmfZDXJ6kImk7Rp\ncwNP8nXg5ap6bNZyVXWwqvZV1b6FTSdpU4ZswS8BvpHkT8DdwJeT/HzUqSQtxNzAq+qHVbWrqnYD\nVwG/qaqrR59M0qb5PrjU2MpGFq6qh4CHRplE0sK5BZcaM3CpMQOXGjNwqTEDlxpbqm9VlfRffquq\n9C5n4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYu\nNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSY4MCT/LBJIeT/CHJ8SQXjT2Y\npM1bGbjcbcB9VfWtJGcB20ecSdKCzL18cJJzgN8DH6+B1xr28sHS+BZ1+eA9wEngziSPJzmUZMem\np5M0uiGBrwCfA26vqr3Aa8CN71woyf4kq0lWFzyjpDM0ZBf9I8Dvqmr3+u0vAjdW1RUzHuMuujSy\nheyiV9VLwPNJPrl+12XAsU3OJun/YO4WHCDJZ4FDwFnAM8B3q+pvM5Z3Cy6NbMgWfFDgG2Xg0vgW\ndRZd0pIycKkxA5caM3CpMQOXGjNwqTEDlxozcKkxA5caM3CpMQOXGjNwqTEDlxozcKkxA5caM3Cp\nMQOXGjNwqTEDlxozcKkxA5caM3CpMQOXGjNwqTEDlxozcKkxA5caM3CpMQOXGjNwqTEDlxozcKkx\nA5caM3CpMQOXGhsUeJLrkxxN8mSSu5K8b+zBJG3e3MCT7ASuBfZV1aeBbcBVYw8mafOG7qKvAO9P\nsgJsB/4y3kiSFmVu4FX1AvBj4DngReAfVfXAO5dLsj/JapLVxY8p6UwM2UU/F7gS2AN8FNiR5Op3\nLldVB6tqX1XtW/yYks7EkF30y4Fnq+pkVb0B3ANcPO5YkhZhSODPARcm2Z4kwGXA8XHHkrQIQ47B\nHwEOA0eAJ9Yfc3DkuSQtQKpq8StNFr9SSW9TVZm3jJ9kkxozcKkxA5caM3CpMQOXGjNwqTEDlxoz\ncKkxA5caM3CpMQOXGjNwqTEDlxozcKkxA5caM3CpMQOXGjNwqTEDlxozcKkxA5caM3CpMQOXGjNw\nqTEDlxozcKkxA5caWxlpvX8F/jxguQ+vL7sslmneZZoVlmverTDrx4YsNMrFB4dKslpV+yYbYIOW\nad5lmhWWa95lmtVddKkxA5camzrwgxM//0Yt07zLNCss17xLM+ukx+CSxjX1FlzSiCYLPMlXkzyV\n5OkkN041xzxJzk/yYJJjSY4mOTD1TEMk2Zbk8ST3Tj3LLEk+mORwkj8kOZ7koqlnmiXJ9euvgyeT\n3JXkfVPPNMskgSfZBvwE+BpwAfDtJBdMMcsAbwI/qKoLgAuB723hWU91ADg+9RAD3AbcV1WfAj7D\nFp45yU7gWmBfVX0a2AZcNe1Us021Bf888HRVPVNVrwN3A1dONMtMVfViVR1Z//2/WHsB7px2qtmS\n7AKuAA5NPcssSc4BvgT8FKCqXq+qv0871VwrwPuTrADbgb9MPM9MUwW+E3j+lNsn2OLRACTZDewF\nHpl2krluBW4A3pp6kDn2ACeBO9cPJw4l2TH1UKdTVS8APwaeA14E/lFVD0w71WyeZBsoydnAL4Hr\nquqfU89zOkm+DrxcVY9NPcsAK8DngNurai/wGrCVz8ecy9qe5h7go8COJFdPO9VsUwX+AnD+Kbd3\nrd+3JSV5L2tx/6Kq7pl6njkuAb6R5E+sHfp8OcnPpx3ptE4AJ6rqP3tEh1kLfqu6HHi2qk5W1RvA\nPcDFE88001SBPwp8IsmeJGexdqLiVxPNMlOSsHaMeLyqbpl6nnmq6odVtauqdrP27/qbqtqSW5mq\negl4Pskn1++6DDg24UjzPAdcmGT7+uviMrbwSUEY76fJZqqqN5NcA9zP2pnIO6rq6BSzDHAJ8B3g\niSS/X7/vR1X16wln6uT7wC/W/6N/BvjuxPOcVlU9kuQwcIS1d1ceZ4t/qs1PskmNeZJNaszApcYM\nXGrMwKXGDFxqzMClxgxcaszApcb+DRJvakeDhymJAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f662de1d198>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot test data\n",
"import matplotlib.patches as mpatches\n",
"from matplotlib.collections import PatchCollection\n",
"\n",
"def plot_boxes(image, boxes, ax=None):\n",
" if ax is None:\n",
" ax=plt.gca()\n",
" ax.imshow(image)\n",
" \n",
" polygons = []\n",
" for y1,x1,y2,x2 in boxes:\n",
" p = mpatches.Rectangle(\n",
" xy=[x1,y1],\n",
" width=x2-x1,\n",
" height=y2-y1,\n",
" ) \n",
" polygons.append(p)\n",
" collection = PatchCollection(patches=polygons, facecolor='none', edgecolor='blue')\n",
" ax.add_collection(collection)\n",
"\n",
"plot_boxes(image, boxes)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:01:35.362761Z",
"start_time": "2017-12-04T02:01:35.358889Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"# create image data generator objects\n",
"train_image_data_generator = keras.preprocessing.image.ImageDataGenerator(\n",
"# horizontal_flip=True,\n",
"# vertical_flip=True\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:03:06.700313Z",
"start_time": "2017-12-04T02:03:06.555157Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPgAAAEICAYAAAByNDmmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAACmRJREFUeJzt3UGoZnd5x/Hvr3MNZiY2RgqiM6GZQmqJAY0MEpPSgLFg\nUUwXXURJF0IZqLVGKYgKJWThTopZSGGYKi2mZjGmICrqQg3ddMjNRIkzoxKiJpNEkqo10U0Mebq4\nr+04OO977txzPPd97vcDgblnznvmIdzv/M975tzzpqqQ1NPvzT2ApOkYuNSYgUuNGbjUmIFLjRm4\n1JiBS40Z+B6W5FVJ/iPJL5P8KMl75p5J49qYewDN6lPAC8CrgTcCX0ry7ao6Pe9YGku8k21vSnIA\n+BlwfVV9f7Ht34Cnquojsw6n0XiKvnf9MfDir+Ne+Dbw+pnm0QQMfO+6Anjugm3PAa+YYRZNxMD3\nrl8Av3/BtiuB52eYRRMx8L3r+8BGkmvP2/YGwAtsjXiRbQ9Lch9QwN8ANwBfAm7yKnofruB72/uA\ny4FngH8H/ta4e3EFlxpzBZcaM3CpMQOXGjNwqbFJftgkiVfupIlVVVbt4wouNWbgUmMGLjVm4FJj\nBi41ZuBSYwYuNTYo8CRvT/K9JI8m8Xld0ppY+dNkSfax9XCAPwfOAQ8C766qM0te440u0sTGutHl\nzcCjVfVYVb0A3AfcttPhJE1vSOAHgSfO+/rcYttvSHI0yWaSzeF//E/YeqDI2P/9ZPgIUmOj3Yte\nVceAY7CdU/RXASvPMi5lmgmOKa2fISv4k8DV5319aLFN0i43JPAHgWuTHE5yGXA78IVpx5I0hpWn\n6FX1YpL3A18F9gGf9sF80nqY5KGLw9+DF9O9B5/iuNLu4c+DS3ucgUuNGbjUmIFLjRm41NgkT1Wd\nytAr/snwfbf294q7enIFlxozcKkxA5caM3CpMQOXGjNwqTEDlxozcKkxA5caM3CpsZlvVf0p23lA\n4tA7Sq+66tKmkbqZ+Yku2zPFrOC96FpPPtFF2uMMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXG\n1uqpqt5xJm2PK7jUmIFLjRm41JiBS40ZuNSYgUuNGbjU2MrAk1yd5BtJziQ5neTO38VgknZu5SOb\nkrwGeE1VnUryCuAh4C+r6syS10zzbCVJ/2eURzZV1dNVdWrx6+eBs8DBnY8naWrbulU1yTXADcDJ\n3/J7R4Gjo0wlaRSDn6qa5ArgAeDjVXX/in09RZcmNtpTVZO8DPg8cO+quCXtHkMusgX4V+CnVfXB\nQQd1BZcmN2QFHxL4nwL/CTwCvLTY/LGq+vKS1xi4NLFRAr8UBi5Nz082kfY4A5caM3CpMQOXGlur\nhy5O5a677hr9mHfffffox5S2yxVcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxq\nzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGpsrT666JZbbpnisDzwwAOTHFeakh9d\nJO1xBi41ZuBSYwYuNWbgUmMGLjVm4FJjgwNPsi/Jw0m+OOVAksaznRX8TuDsVINIGt+gwJMcAt4B\nHJ92HEljGrqCfxL4MPDSxXZIcjTJZpLNUSaTtGMrA0/yTuCZqnpo2X5VdayqjlTVkdGmk7QjQ1bw\nm4F3JfkhcB/w1iSfnXQqSaNYGXhVfbSqDlXVNcDtwNer6o7JJ5O0Y/47uNTYxnZ2rqpvAt+cZBJJ\no3MFlxozcKkxA5caM3CpMQOXGlurp6pK+n8+VVXa4wxcaszApcYMXGrMwKXGDFxqzMClxgxcaszA\npcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMCl\nxgxcaszApcYMXGrMwKXGBgWe5JVJTiT5bpKzSd4y9WCSdm5j4H73AF+pqr9Kchmwf8KZJI1k5eeD\nJ7kS+BbwRzXww8T9fHBpemN9Pvhh4FngM0keTnI8yYELd0pyNMlmks1LmFXSBIas4EeA/wJurqqT\nSe4Bnquqf1zyGldwaWJjreDngHNVdXLx9QngTTsZTNLvxsrAq+rHwBNJXrfYdCtwZtKpJI1i5Sk6\nQJI3AseBy4DHgPdW1c+W7O8pujSxIafogwLfLgOXpjfWe3BJa8rApcYMXGrMwKXGDFxqzMClxgxc\naszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxq\nzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGBgWe5ENJTif5TpLPJXn51INJ\n2rmVgSc5CHwAOFJV1wP7gNunHkzSzg09Rd8ALk+yAewHnppuJEljWRl4VT0JfAJ4HHga+HlVfe3C\n/ZIcTbKZZHP8MSVdiiGn6FcBtwGHgdcCB5LcceF+VXWsqo5U1ZHxx5R0KYacor8N+EFVPVtVvwLu\nB26adixJYxgS+OPAjUn2JwlwK3B22rEkjWHIe/CTwAngFPDI4jXHJp5L0ghSVeMfNBn/oJJ+Q1Vl\n1T7eySY1ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbg\nUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNbYx0XH/G/jRgP3+YLHvulin\neddpVliveXfDrH84ZKdJPnxwqCSbVXVktgG2aZ3mXadZYb3mXadZPUWXGjNwqbG5Az8285+/Xes0\n7zrNCus179rMOut7cEnTmnsFlzQhA5camy3wJG9P8r0kjyb5yFxzrJLk6iTfSHImyekkd8490xBJ\n9iV5OMkX555lmSSvTHIiyXeTnE3ylrlnWibJhxbfB99J8rkkL597pmVmCTzJPuBTwF8A1wHvTnLd\nHLMM8CLwD1V1HXAj8He7eNbz3QmcnXuIAe4BvlJVfwK8gV08c5KDwAeAI1V1PbAPuH3eqZabawV/\nM/BoVT1WVS8A9wG3zTTLUlX1dFWdWvz6eba+AQ/OO9VySQ4B7wCOzz3LMkmuBP4M+BeAqnqhqv5n\n3qlW2gAuT7IB7AeemnmepeYK/CDwxHlfn2OXRwOQ5BrgBuDkvJOs9Engw8BLcw+ywmHgWeAzi7cT\nx5McmHuoi6mqJ4FPAI8DTwM/r6qvzTvVcl5kGyjJFcDngQ9W1XNzz3MxSd4JPFNVD809ywAbwJuA\nf66qG4BfArv5esxVbJ1pHgZeCxxIcse8Uy03V+BPAlef9/WhxbZdKcnL2Ir73qq6f+55VrgZeFeS\nH7L11uetST4770gXdQ44V1W/PiM6wVbwu9XbgB9U1bNV9SvgfuCmmWdaaq7AHwSuTXI4yWVsXaj4\nwkyzLJUkbL1HPFtV/zT3PKtU1Uer6lBVXcPW/9evV9WuXGWq6sfAE0let9h0K3BmxpFWeRy4Mcn+\nxffFrezii4Iw3Y+LLlVVLyZ5P/BVtq5EfrqqTs8xywA3A38NPJLkW4ttH6uqL884Uyd/D9y7+Iv+\nMeC9M89zUVV1MskJ4BRb/7ryMLv8tlVvVZUa8yKb1JiBS40ZuNSYgUuNGbjUmIFLjRm41Nj/Am7P\nl/tV0TfXAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f662de019e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"seed= 0\n",
"image2, boxes2 = random_transform(image.copy(), boxes.copy(), train_image_data_generator, seed=seed)\n",
"plot_boxes(image2, boxes2)\n",
"plt.title(str(seed))\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:03:06.991466Z",
"start_time": "2017-12-04T02:03:06.981638Z"
}
},
"outputs": [
{
"ename": "AssertionError",
"evalue": "should output box of same size",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-24-ea23cdc56cf6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mboxes2\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0mboxes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'should output box of same size'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m'OK'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAssertionError\u001b[0m: should output box of same size"
]
}
],
"source": [
"assert (boxes2==boxes).all(), 'should output box of same size'\n",
"'OK'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# fixes version"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:06:56.089991Z",
"start_time": "2017-12-04T02:06:56.035631Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"\n",
"def random_transform2(\n",
" image,\n",
" boxes,\n",
" image_data_generator,\n",
" seed=None\n",
"):\n",
" if seed is None:\n",
" seed = np.random.randint(10000)\n",
"\n",
" image = image_data_generator.random_transform(image, seed=seed)\n",
"\n",
" # set fill mode so that masks are not enlarged\n",
" fill_mode = image_data_generator.fill_mode\n",
" image_data_generator.fill_mode = 'constant'\n",
"\n",
" for index in range(boxes.shape[0]):\n",
" # generate box mask and randomly transform it\n",
" mask = np.zeros_like(image, dtype=np.uint8)\n",
" b = boxes[index, :4].astype(int)\n",
"\n",
" assert(b[0] < b[2] and b[1] < b[3]), 'Annotations contain invalid box: {}'.format(b)\n",
" assert(b[2] < image.shape[1] and b[3] < image.shape[0]), 'Annotation ({}) is outside of image shape ({}).'.format(b, image.shape)\n",
"\n",
" mask[b[1]:b[3]+1, b[0]:b[2]+1, :] = 255\n",
" mask = image_data_generator.random_transform(mask, seed=seed)[..., 0]\n",
" mask = mask.copy() # to force contiguous arrays\n",
"\n",
" # find bounding box again in augmented image\n",
" [i, j] = np.where(mask == 255)\n",
" boxes[index, 0] = float(min(j))\n",
" boxes[index, 1] = float(min(i))\n",
" boxes[index, 2] = float(max(j))\n",
" boxes[index, 3] = float(max(i))\n",
"\n",
" # restore fill_mode\n",
" image_data_generator.fill_mode = fill_mode\n",
"\n",
" return image, boxes"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:06:56.460061Z",
"start_time": "2017-12-04T02:06:56.314969Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPgAAAEICAYAAAByNDmmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAClRJREFUeJzt3U+opXUdx/H3p7lJzlhWBFEzkhNYYUIZQ5hGQhYURbZo\nYWGLIAb6axFEBSEu2kXkIoJhKoosF5NBVFSLSto0eB0Nm5kKsdJRQ8tKa2Pit8U91TQ05zzXe56e\ne773/YKBOY/POfc7ct/ze55nzn1OqgpJPT1t6gEkjcfApcYMXGrMwKXGDFxqzMClxgxcaszAd7Ak\nz03y7SR/T/L7JO+aeiYt19rUA2hSXwAeB54PvBL4XpJfVNXxacfSssR3su1MSfYAfwYuqarfzLZ9\nDXigqj4x6XBaGg/Rd66XAE/8K+6ZXwAvn2gejcDAd67zgEfP2PYo8MwJZtFIDHzn+hvwrDO2nQ88\nNsEsGomB71y/AdaSXHTatlcAXmBrxItsO1iSm4EC3gtcCnwPuNyr6H24gu9s7wfOBR4CvgG8z7h7\ncQWXGnMFlxozcKkxA5caM3CpsVF+2CSJV+6kkVVVFu3jCi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41\nNijwJG9K8uskdyfxfl3Silj402RJdrFxc4A3AqeA24B3VtWJOc/xjS7SyJb1RpdXA3dX1T1V9Thw\nM3D1VoeTNL4hge8F7jvt8anZtv+S5GCS9STrw7/8n9i4ociq/PrT8D+atA0s7b3oVXUIOASbOUR/\nLrDwKGMb8cxDq2XICn4/cMFpj/fNtkna5oYEfhtwUZL9Sc4BrgG+M+5YkpZh4SF6VT2R5IPAD4Fd\nwJe9MZ+0Gka56eLwc/Bi9c7BV2ledebPg0s7nIFLjRm41JiBS40ZuNTYKHdVHctYH7OUeGVcPbmC\nS40ZuNSYgUuNGbjUmIFLjRm41JiBS40ZuNSYgUuNGbjUmIFLjRm41JiBS40ZuNSYgUuNGbjUmIFL\njRm41JiBS40ZuNSYgUuNrdRdVb37qbQ5ruBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwsDT3JBkp8k\nOZHkeJLr/h+DSdq6LPpI3iQvAF5QVceSPBO4HXh7VZ2Y85yBn/NbwCq9eWXV5lVnVbXwm3HhCl5V\nD1bVsdnvHwNOAnu3Pp6ksW3qrapJLgQuBY7+j/92EDi4uS//CBur4qp4ZOoBpE1ZeIj+7x2T84Bb\ngc9U1S0L9l2laqWVtJRDdIAkTwe+Bdy0KG5J28eQi2wBvgo8UlUfGfSiruDS6Ias4EMCfy3wM+Au\n4MnZ5k9V1ffnPMfApZEtJfCnwsCl8S3tHFzSajJwqTEDlxozcKmxlbrp4liuv/76pb/mDTfcsPTX\nlDbLFVxqzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszA\npcYMXGrMwKXGDFxqzMClxgxcamylPrroyiuvHONlufXWW0d5XWlMfnSRtMMZuNSYgUuNGbjUmIFL\njRm41JiBS40NDjzJriR3JPnumANJWp7NrODXASfHGkTS8g0KPMk+4C3A4XHHkbRMQ1fwzwMfB548\n2w5JDiZZT7K+lMkkbdnCwJO8FXioqm6ft19VHaqqA1V1YGnTSdqSISv4FcDbkvwOuBl4fZKvjzqV\npKVYGHhVfbKq9lXVhcA1wI+r6trRJ5O0Zf47uNTY2mZ2rqqfAj8dZRJJS+cKLjVm4FJjBi41ZuBS\nYwYuNbZSd1WV9B/eVVXa4QxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMCl\nxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXGDFxqzMClxgxcaszApcYMXGrMwKXG\nBgWe5NlJjiT5VZKTSV4z9mCStm5t4H43Aj+oqnckOQfYPeJMkpZk4eeDJzkfuBN4cQ38MHE/H1wa\n37I+H3w/8DDwlSR3JDmcZM+ZOyU5mGQ9yfpTmFXSCIas4AeAnwNXVNXRJDcCj1bVp+c8xxVcGtmy\nVvBTwKmqOjp7fAR41VYGk/T/sTDwqvoDcF+Sl842XQWcGHUqSUux8BAdIMkrgcPAOcA9wHuq6s9z\n9vcQXRrZkEP0QYFvloFL41vWObikFWXgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41\nZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm\n4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjgwJP8tEkx5P8Msk3kzxj7MEkbd3CwJPsBT4MHKiqS4Bd\nwDVjDyZp64Yeoq8B5yZZA3YDD4w3kqRlWRh4Vd0PfBa4F3gQ+GtV/ejM/ZIcTLKeZH35Y0p6KoYc\noj8HuBrYD7wQ2JPk2jP3q6pDVXWgqg4sf0xJT8WQQ/Q3AL+tqoer6h/ALcDl444laRmGBH4vcFmS\n3UkCXAWcHHcsScsw5Bz8KHAEOAbcNXvOoZHnkrQEqarlv2iy/BeV9F+qKov28Z1sUmMGLjVm4FJj\nBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjBi41ZuBSYwYuNWbgUmMG\nLjVm4FJjBi41ZuBSYwYuNWbgUmMGLjVm4FJjayO97h+B3w/Y73mzfVfFKs27SrPCas27HWZ90ZCd\nRvnwwaGSrFfVgckG2KRVmneVZoXVmneVZvUQXWrMwKXGpg780MRff7NWad5VmhVWa96VmXXSc3BJ\n45p6BZc0IgOXGpss8CRvSvLrJHcn+cRUcyyS5IIkP0lyIsnxJNdNPdMQSXYluSPJd6eeZZ4kz05y\nJMmvkpxM8pqpZ5onyUdn3we/TPLNJM+YeqZ5Jgk8yS7gC8CbgYuBdya5eIpZBngC+FhVXQxcBnxg\nG896uuuAk1MPMcCNwA+q6mXAK9jGMyfZC3wYOFBVlwC7gGumnWq+qVbwVwN3V9U9VfU4cDNw9USz\nzFVVD1bVsdnvH2PjG3DvtFPNl2Qf8Bbg8NSzzJPkfOB1wJcAqurxqvrLtFMttAacm2QN2A08MPE8\nc00V+F7gvtMen2KbRwOQ5ELgUuDotJMs9Hng48CTUw+ywH7gYeArs9OJw0n2TD3U2VTV/cBngXuB\nB4G/VtWPpp1qPi+yDZTkPOBbwEeq6tGp5zmbJG8FHqqq26eeZYA14FXAF6vqUuDvwHa+HvMcNo40\n9wMvBPYkuXbaqeabKvD7gQtOe7xvtm1bSvJ0NuK+qapumXqeBa4A3pbkd2yc+rw+ydenHemsTgGn\nqupfR0RH2Ah+u3oD8Nuqeriq/gHcAlw+8UxzTRX4bcBFSfYnOYeNCxXfmWiWuZKEjXPEk1X1uann\nWaSqPllV+6rqQjb+v/64qrblKlNVfwDuS/LS2aargBMTjrTIvcBlSXbPvi+uYhtfFITxflx0rqp6\nIskHgR+ycSXyy1V1fIpZBrgCeDdwV5I7Z9s+VVXfn3CmTj4E3DT7i/4e4D0Tz3NWVXU0yRHgGBv/\nunIH2/xtq75VVWrMi2xSYwYuNWbgUmMGLjVm4FJjBi41ZuBSY/8Ep9Cjsl2Qnb8AAAAASUVORK5C\nYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f662dad3710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"seed= 0\n",
"image2, boxes2 = random_transform2(image.copy(), boxes.copy(), train_image_data_generator, seed=seed)\n",
"plot_boxes(image2, boxes2)\n",
"plt.title(str(seed))\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2017-12-04T02:06:57.503374Z",
"start_time": "2017-12-04T02:06:57.499306Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'OK'"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"assert (boxes2==boxes).all(), 'should output box of same size'\n",
"'OK'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.4"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"toc_cell": false,
"toc_position": {},
"toc_section_display": "block",
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment