├── README.md ├── SupervisedPixelClassification.ipynb ├── _config.yml ├── images ├── coordconv_arch_clf.png ├── coordconv_vs_conv.png ├── deconv_arch_clf.png └── notsoclever_ds.png ├── models ├── __init__.py ├── supervised_conv.py └── supervised_coordconv.py ├── nn ├── __init__.py ├── layers.py └── pipeline.py ├── utils ├── __init__.py └── nsc.py └── visualize_coords.py /README.md: -------------------------------------------------------------------------------- 1 | # CoordConv - Implementation 2 | This repository houses my implementations of the CoordConv layer as introduced in paper - [An intriguing failing of convolutional neural networks and the CoordConv solution](https://arxiv.org/pdf/1807.03247.pdf). The layer is implemented in TensorFlow and has taken some inspiration from the code for the layer as shown in the supplementary part of the paper. 3 | 4 | ## CoordConv Layer 5 | CoordConv is an extension to Convoluton layers just to give the neural network extra understanding of the coordinates of the pixels. The layer keeps two properties of Convolution layer intact: 6 | * few parameters 7 | * efficient computation 8 | 9 | But it gives a degree of freedom to network in case of *translation invariance*. It lets the network to decide whether it needs the said property or not. 10 | 11 | |![CoordConv Vs Conv](./images/coordconv_vs_conv.png)| 12 | |:--------------------------------------------------:| 13 | |Source: https://arxiv.org/pdf/1807.03247 | 14 | 15 | ## What is done? 16 | This repository currently houses code for - 17 | * Supervised Coordinate Classification over the NotSoClever dataset discussed in paper. Read more about it in the notebook [here](./SupervisedPixelClassification.ipynb) 18 | 19 | > To visualize the dataset, run `python visualize_coords.py`. For some helpful command line arguments use `python visualize_coords.py -h` 20 | 21 | ## What is coming up? 22 | I have planned on working with this layer to make: 23 | * Autoencoders 24 | * GANs 25 | * Time Series Related Tasks. 26 | 27 | ## Reference 28 | * [arXiv:1807.03247](https://arxiv.org/abs/1807.03247) 29 | -------------------------------------------------------------------------------- /SupervisedPixelClassification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Supervised Coordinate Classification\n", 8 | "In this notebook we compare performance of Convolutional Layers with CoordConv Layers, introduced in paper - [An intriguing failing of convolutional neural networks and the CoordConv solution](https://arxiv.org/pdf/1807.03247.pdf).\n", 9 | "\n", 10 | "## Problem Statement\n", 11 | "Compare classification performance of Convolution layer with CoordConv layer on the *NotSoClever* dataset introduced in the paper.\n", 12 | "\n", 13 | "### Not So Clever Dataset\n", 14 | "Not-so-Clevr consists of 9×9 squares placed on a 64×64 canvas. Square positions are restricted such that the entire square lies within the 64×64 grid, so that square centers fall within a slightly smaller possible area of 56×56. Enumerating these\n", 15 | "possible center positions results in a dataset with a total of 3,136 examples. For each example square i, the dataset contains three fields:\n", 16 | "\n", 17 | "* $C_{i} \\in \\mathbb{R}^2$, its center location in (x,y) Cartesian coordinates,\n", 18 | "* $P_{i} \\in \\mathbb{R}^{64 \\times 64}$, a one-hot representation of its center pixel, and\n", 19 | "* $I_{i} \\in \\mathbb{R}^{64 \\times 64}$, the resulting 64×64 image of the square painted on the canvas.\n", 20 | "\n", 21 | "### Train/Test Split\n", 22 | "We will go for the classification problem and will work with two kind of train/test split:\n", 23 | "\n", 24 | "* Quadrant Split\n", 25 | "* Uniform Split\n", 26 | "\n", 27 | "![NotSoClever Dataset](./images/notsoclever_ds.png)\n", 28 | "\n", 29 | "## CoordConv Layer\n", 30 | "CoordConv is an extension to Convoluton layers just to give the neural network extra understanding of the coordinates of the pixels. The layer keeps two properties of Convolution layer intact:\n", 31 | "* few parameters\n", 32 | "* efficient computation\n", 33 | "\n", 34 | "But it gives a degree of freedom to network in case of *translation invariance*. It lets the network to decide whether it needs the said property or not.\n", 35 | "\n", 36 | "|![CoordConv Vs Conv](./images/coordconv_vs_conv.png)|\n", 37 | "|:--------------------------------------------------:|\n", 38 | "|Source: https://arxiv.org/pdf/1807.03247 |" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "Run the following cell to make sure our working directory is ready to save the models we train." 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 1, 51 | "metadata": {}, 52 | "outputs": [], 53 | "source": [ 54 | "import os\n", 55 | "\n", 56 | "if not os.path.isdir('./pixel_classification'):\n", 57 | " os.makedirs('./pixel_classification')" 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": {}, 63 | "source": [ 64 | "## Deconvolution over NotSoClever - Quadrant Split\n", 65 | "|![Deconvolution Architecture for NotSoClever](./images/deconv_arch_clf.png)|\n", 66 | "|:-------------------------------:|\n", 67 | "| Source: https://arxiv.org/pdf/1807.03247 |\n", 68 | "\n", 69 | "* fs = {2, 3, 4}\n", 70 | "* c = {1, 2, 3}" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 1, 76 | "metadata": {}, 77 | "outputs": [], 78 | "source": [ 79 | "import tensorflow as tf\n", 80 | "\n", 81 | "from utils.nsc import NotSoCleverCreator as NSCCreator\n", 82 | "from models.supervised_conv import model_fn as conv_model_fn\n", 83 | "from nn.pipeline import classifier_input_fn" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 2, 89 | "metadata": {}, 90 | "outputs": [ 91 | { 92 | "data": { 93 | "text/plain": [ 94 | "((2408, 2), (841, 2), (2408, 64, 64, 1), (841, 64, 64, 1))" 95 | ] 96 | }, 97 | "execution_count": 2, 98 | "metadata": {}, 99 | "output_type": "execute_result" 100 | } 101 | ], 102 | "source": [ 103 | "nsc = NSCCreator()\n", 104 | "\n", 105 | "X_train, X_test = nsc.quadrant_split()\n", 106 | "Y_train = nsc.one_hot_coords(nsc.canvas_size, X_train)\n", 107 | "Y_test = nsc.one_hot_coords(nsc.canvas_size, X_test)\n", 108 | "\n", 109 | "X_train.shape, X_test.shape, Y_train.shape, Y_test.shape" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 3, 115 | "metadata": {}, 116 | "outputs": [ 117 | { 118 | "name": "stdout", 119 | "output_type": "stream", 120 | "text": [ 121 | "INFO:tensorflow:Using default config.\n", 122 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_task_type': 'worker', '_global_id_in_cluster': 0, '_num_ps_replicas': 0, '_train_distribute': None, '_tf_random_seed': None, '_task_id': 0, '_keep_checkpoint_every_n_hours': 10000, '_cluster_spec': , '_session_config': None, '_evaluation_master': '', '_keep_checkpoint_max': 5, '_save_summary_steps': 100, '_is_chief': True, '_num_worker_replicas': 1, '_log_step_count_steps': 100, '_save_checkpoints_steps': None, '_master': '', '_service': None, '_model_dir': './pixel_classification/supervised_quad_conv'}\n" 123 | ] 124 | } 125 | ], 126 | "source": [ 127 | "estimator = tf.estimator.Estimator(model_fn=conv_model_fn,\n", 128 | " params={\n", 129 | " 'lr': 1e-3,\n", 130 | " 'c': 1\n", 131 | " },\n", 132 | " model_dir='./pixel_classification/supervised_quad_conv')" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 4, 138 | "metadata": {}, 139 | "outputs": [], 140 | "source": [ 141 | "train_in_fn = lambda: classifier_input_fn(X_train, Y_train, 32)\n", 142 | "test_in_fn = lambda: classifier_input_fn(X_test, Y_test, 32, is_train=False)" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 5, 148 | "metadata": {}, 149 | "outputs": [ 150 | { 151 | "data": { 152 | "text/plain": [ 153 | "7500" 154 | ] 155 | }, 156 | "execution_count": 5, 157 | "metadata": {}, 158 | "output_type": "execute_result" 159 | } 160 | ], 161 | "source": [ 162 | "EPOCHS = 100\n", 163 | "STEPS_PER_EPOCH = X_train.shape[0] // 32\n", 164 | "STEPS = EPOCHS * STEPS_PER_EPOCH\n", 165 | "\n", 166 | "STEPS" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": 6, 172 | "metadata": {}, 173 | "outputs": [ 174 | { 175 | "name": "stdout", 176 | "output_type": "stream", 177 | "text": [ 178 | "INFO:tensorflow:Calling model_fn.\n", 179 | "INFO:tensorflow:Done calling model_fn.\n", 180 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 181 | "INFO:tensorflow:Graph was finalized.\n", 182 | "INFO:tensorflow:Running local_init_op.\n", 183 | "INFO:tensorflow:Done running local_init_op.\n", 184 | "INFO:tensorflow:Saving checkpoints for 1 into ./pixel_classification/supervised_quad_conv\\model.ckpt.\n", 185 | "INFO:tensorflow:step = 0, loss = 8.31728\n", 186 | "INFO:tensorflow:accuracy = 0.0\n", 187 | "INFO:tensorflow:global_step/sec: 24.6763\n", 188 | "INFO:tensorflow:step = 100, loss = 7.8248906 (4.068 sec)\n", 189 | "INFO:tensorflow:accuracy = 0.03125 (4.052 sec)\n", 190 | "INFO:tensorflow:global_step/sec: 35.8465\n", 191 | "INFO:tensorflow:step = 200, loss = 6.0391746 (2.774 sec)\n", 192 | "INFO:tensorflow:accuracy = 0.0 (2.774 sec)\n", 193 | "INFO:tensorflow:global_step/sec: 36.2574\n", 194 | "INFO:tensorflow:step = 300, loss = 5.714446 (2.758 sec)\n", 195 | "INFO:tensorflow:accuracy = 0.0 (2.758 sec)\n", 196 | "INFO:tensorflow:global_step/sec: 36.325\n", 197 | "INFO:tensorflow:step = 400, loss = 5.3855057 (2.769 sec)\n", 198 | "INFO:tensorflow:accuracy = 0.03125 (2.769 sec)\n", 199 | "INFO:tensorflow:global_step/sec: 30.7371\n", 200 | "INFO:tensorflow:step = 500, loss = 4.9857044 (3.238 sec)\n", 201 | "INFO:tensorflow:accuracy = 0.03125 (3.253 sec)\n", 202 | "INFO:tensorflow:global_step/sec: 32.9268\n", 203 | "INFO:tensorflow:step = 600, loss = 4.707853 (3.053 sec)\n", 204 | "INFO:tensorflow:accuracy = 0.0 (3.037 sec)\n", 205 | "INFO:tensorflow:global_step/sec: 34.5998\n", 206 | "INFO:tensorflow:step = 700, loss = 4.584573 (2.875 sec)\n", 207 | "INFO:tensorflow:accuracy = 0.0625 (2.875 sec)\n", 208 | "INFO:tensorflow:global_step/sec: 35.0599\n", 209 | "INFO:tensorflow:step = 800, loss = 4.212316 (2.852 sec)\n", 210 | "INFO:tensorflow:accuracy = 0.09375 (2.852 sec)\n", 211 | "INFO:tensorflow:global_step/sec: 36.7499\n", 212 | "INFO:tensorflow:step = 900, loss = 4.125618 (2.739 sec)\n", 213 | "INFO:tensorflow:accuracy = 0.03125 (2.741 sec)\n", 214 | "INFO:tensorflow:global_step/sec: 36.2651\n", 215 | "INFO:tensorflow:step = 1000, loss = 4.3024664 (2.739 sec)\n", 216 | "INFO:tensorflow:accuracy = 0.125 (2.738 sec)\n", 217 | "INFO:tensorflow:global_step/sec: 36.5411\n", 218 | "INFO:tensorflow:step = 1100, loss = 3.685677 (2.737 sec)\n", 219 | "INFO:tensorflow:accuracy = 0.09375 (2.737 sec)\n", 220 | "INFO:tensorflow:global_step/sec: 34.7843\n", 221 | "INFO:tensorflow:step = 1200, loss = 3.5035312 (2.875 sec)\n", 222 | "INFO:tensorflow:accuracy = 0.0625 (2.875 sec)\n", 223 | "INFO:tensorflow:global_step/sec: 32.9756\n", 224 | "INFO:tensorflow:step = 1300, loss = 3.5509086 (3.033 sec)\n", 225 | "INFO:tensorflow:accuracy = 0.03125 (3.033 sec)\n", 226 | "INFO:tensorflow:global_step/sec: 33.5511\n", 227 | "INFO:tensorflow:step = 1400, loss = 3.50277 (3.018 sec)\n", 228 | "INFO:tensorflow:accuracy = 0.1875 (3.018 sec)\n", 229 | "INFO:tensorflow:global_step/sec: 33.002\n", 230 | "INFO:tensorflow:step = 1500, loss = 3.388951 (2.995 sec)\n", 231 | "INFO:tensorflow:accuracy = 0.1875 (2.995 sec)\n", 232 | "INFO:tensorflow:global_step/sec: 33.8519\n", 233 | "INFO:tensorflow:step = 1600, loss = 2.9933553 (2.952 sec)\n", 234 | "INFO:tensorflow:accuracy = 0.15625 (2.952 sec)\n", 235 | "INFO:tensorflow:global_step/sec: 34.3949\n", 236 | "INFO:tensorflow:step = 1700, loss = 2.8799188 (2.907 sec)\n", 237 | "INFO:tensorflow:accuracy = 0.1875 (2.907 sec)\n", 238 | "INFO:tensorflow:global_step/sec: 32.1195\n", 239 | "INFO:tensorflow:step = 1800, loss = 3.0674002 (3.127 sec)\n", 240 | "INFO:tensorflow:accuracy = 0.25 (3.129 sec)\n", 241 | "INFO:tensorflow:global_step/sec: 28.7342\n", 242 | "INFO:tensorflow:step = 1900, loss = 2.9376388 (3.467 sec)\n", 243 | "INFO:tensorflow:accuracy = 0.15625 (3.465 sec)\n", 244 | "INFO:tensorflow:global_step/sec: 33.4236\n", 245 | "INFO:tensorflow:step = 2000, loss = 3.0797858 (2.992 sec)\n", 246 | "INFO:tensorflow:accuracy = 0.15625 (2.992 sec)\n", 247 | "INFO:tensorflow:global_step/sec: 25.1893\n", 248 | "INFO:tensorflow:step = 2100, loss = 2.715583 (3.970 sec)\n", 249 | "INFO:tensorflow:accuracy = 0.25 (3.970 sec)\n", 250 | "INFO:tensorflow:global_step/sec: 33.6022\n", 251 | "INFO:tensorflow:step = 2200, loss = 2.717711 (2.976 sec)\n", 252 | "INFO:tensorflow:accuracy = 0.21875 (2.976 sec)\n", 253 | "INFO:tensorflow:global_step/sec: 25.5777\n", 254 | "INFO:tensorflow:step = 2300, loss = 2.546414 (3.910 sec)\n", 255 | "INFO:tensorflow:accuracy = 0.15625 (3.910 sec)\n", 256 | "INFO:tensorflow:global_step/sec: 35.4443\n", 257 | "INFO:tensorflow:step = 2400, loss = 2.276029 (2.837 sec)\n", 258 | "INFO:tensorflow:accuracy = 0.34375 (2.853 sec)\n", 259 | "INFO:tensorflow:global_step/sec: 33.2692\n", 260 | "INFO:tensorflow:step = 2500, loss = 2.2318735 (2.990 sec)\n", 261 | "INFO:tensorflow:accuracy = 0.40625 (2.975 sec)\n", 262 | "INFO:tensorflow:global_step/sec: 35.6519\n", 263 | "INFO:tensorflow:step = 2600, loss = 2.719592 (2.805 sec)\n", 264 | "INFO:tensorflow:accuracy = 0.21875 (2.805 sec)\n", 265 | "INFO:tensorflow:global_step/sec: 35.442\n", 266 | "INFO:tensorflow:step = 2700, loss = 2.678397 (2.822 sec)\n", 267 | "INFO:tensorflow:accuracy = 0.21875 (2.822 sec)\n", 268 | "INFO:tensorflow:global_step/sec: 35.0537\n", 269 | "INFO:tensorflow:step = 2800, loss = 2.1772203 (2.853 sec)\n", 270 | "INFO:tensorflow:accuracy = 0.375 (2.853 sec)\n", 271 | "INFO:tensorflow:global_step/sec: 32.9991\n", 272 | "INFO:tensorflow:step = 2900, loss = 2.864821 (3.030 sec)\n", 273 | "INFO:tensorflow:accuracy = 0.15625 (3.030 sec)\n", 274 | "INFO:tensorflow:global_step/sec: 34.012\n", 275 | "INFO:tensorflow:step = 3000, loss = 1.9647993 (2.942 sec)\n", 276 | "INFO:tensorflow:accuracy = 0.5 (2.942 sec)\n", 277 | "INFO:tensorflow:global_step/sec: 31.9605\n", 278 | "INFO:tensorflow:step = 3100, loss = 1.8037267 (3.127 sec)\n", 279 | "INFO:tensorflow:accuracy = 0.46875 (3.142 sec)\n", 280 | "INFO:tensorflow:global_step/sec: 32.2089\n", 281 | "INFO:tensorflow:step = 3200, loss = 2.2262397 (3.105 sec)\n", 282 | "INFO:tensorflow:accuracy = 0.375 (3.089 sec)\n", 283 | "INFO:tensorflow:global_step/sec: 32.5662\n", 284 | "INFO:tensorflow:step = 3300, loss = 1.5760684 (3.071 sec)\n", 285 | "INFO:tensorflow:accuracy = 0.40625 (3.071 sec)\n", 286 | "INFO:tensorflow:global_step/sec: 33.8135\n", 287 | "INFO:tensorflow:step = 3400, loss = 1.7536482 (2.973 sec)\n", 288 | "INFO:tensorflow:accuracy = 0.375 (2.973 sec)\n", 289 | "INFO:tensorflow:global_step/sec: 35.8851\n", 290 | "INFO:tensorflow:step = 3500, loss = 2.4448197 (2.773 sec)\n", 291 | "INFO:tensorflow:accuracy = 0.375 (2.773 sec)\n", 292 | "INFO:tensorflow:global_step/sec: 36.5283\n", 293 | "INFO:tensorflow:step = 3600, loss = 1.7837081 (2.736 sec)\n", 294 | "INFO:tensorflow:accuracy = 0.375 (2.736 sec)\n", 295 | "INFO:tensorflow:global_step/sec: 34.7903\n", 296 | "INFO:tensorflow:step = 3700, loss = 1.5199461 (2.874 sec)\n", 297 | "INFO:tensorflow:accuracy = 0.46875 (2.874 sec)\n", 298 | "INFO:tensorflow:global_step/sec: 32.6839\n", 299 | "INFO:tensorflow:step = 3800, loss = 2.019197 (3.060 sec)\n", 300 | "INFO:tensorflow:accuracy = 0.34375 (3.060 sec)\n", 301 | "INFO:tensorflow:global_step/sec: 31.9777\n", 302 | "INFO:tensorflow:step = 3900, loss = 1.7378974 (3.133 sec)\n", 303 | "INFO:tensorflow:accuracy = 0.4375 (3.135 sec)\n", 304 | "INFO:tensorflow:global_step/sec: 30.0104\n", 305 | "INFO:tensorflow:step = 4000, loss = 1.6182808 (3.342 sec)\n", 306 | "INFO:tensorflow:accuracy = 0.40625 (3.340 sec)\n", 307 | "INFO:tensorflow:global_step/sec: 31.8753\n", 308 | "INFO:tensorflow:step = 4100, loss = 1.477554 (3.122 sec)\n", 309 | "INFO:tensorflow:accuracy = 0.46875 (3.122 sec)\n", 310 | "INFO:tensorflow:global_step/sec: 34.7817\n", 311 | "INFO:tensorflow:step = 4200, loss = 1.6231147 (2.875 sec)\n", 312 | "INFO:tensorflow:accuracy = 0.3125 (2.875 sec)\n", 313 | "INFO:tensorflow:global_step/sec: 35.464\n", 314 | "INFO:tensorflow:step = 4300, loss = 1.290937 (2.820 sec)\n", 315 | "INFO:tensorflow:accuracy = 0.53125 (2.820 sec)\n", 316 | "INFO:tensorflow:global_step/sec: 33.8239\n", 317 | "INFO:tensorflow:step = 4400, loss = 1.3792605 (2.972 sec)\n", 318 | "INFO:tensorflow:accuracy = 0.53125 (2.972 sec)\n", 319 | "INFO:tensorflow:global_step/sec: 34.2251\n", 320 | "INFO:tensorflow:step = 4500, loss = 1.3789632 (2.906 sec)\n", 321 | "INFO:tensorflow:accuracy = 0.4375 (2.922 sec)\n", 322 | "INFO:tensorflow:global_step/sec: 30.519\n", 323 | "INFO:tensorflow:step = 4600, loss = 1.4724798 (3.292 sec)\n", 324 | "INFO:tensorflow:accuracy = 0.46875 (3.277 sec)\n", 325 | "INFO:tensorflow:global_step/sec: 32.5148\n", 326 | "INFO:tensorflow:step = 4700, loss = 1.5089018 (3.076 sec)\n", 327 | "INFO:tensorflow:accuracy = 0.53125 (3.076 sec)\n", 328 | "INFO:tensorflow:global_step/sec: 33.3346\n", 329 | "INFO:tensorflow:step = 4800, loss = 1.4090339 (2.990 sec)\n", 330 | "INFO:tensorflow:accuracy = 0.46875 (2.990 sec)\n", 331 | "INFO:tensorflow:global_step/sec: 35.1783\n", 332 | "INFO:tensorflow:step = 4900, loss = 1.0489383 (2.852 sec)\n", 333 | "INFO:tensorflow:accuracy = 0.59375 (2.852 sec)\n", 334 | "INFO:tensorflow:global_step/sec: 35.066\n", 335 | "INFO:tensorflow:step = 5000, loss = 1.0874815 (2.836 sec)\n", 336 | "INFO:tensorflow:accuracy = 0.625 (2.852 sec)\n", 337 | "INFO:tensorflow:global_step/sec: 36.4599\n", 338 | "INFO:tensorflow:step = 5100, loss = 1.7507566 (2.758 sec)\n", 339 | "INFO:tensorflow:accuracy = 0.34375 (2.743 sec)\n", 340 | "INFO:tensorflow:global_step/sec: 33.2596\n", 341 | "INFO:tensorflow:step = 5200, loss = 1.0112784 (2.991 sec)\n", 342 | "INFO:tensorflow:accuracy = 0.625 (2.991 sec)\n", 343 | "INFO:tensorflow:global_step/sec: 35.0504\n", 344 | "INFO:tensorflow:step = 5300, loss = 1.1808133 (2.853 sec)\n", 345 | "INFO:tensorflow:accuracy = 0.65625 (2.853 sec)\n", 346 | "INFO:tensorflow:global_step/sec: 31.3384\n", 347 | "INFO:tensorflow:step = 5400, loss = 0.83619857 (3.222 sec)\n", 348 | "INFO:tensorflow:accuracy = 0.75 (3.222 sec)\n", 349 | "INFO:tensorflow:global_step/sec: 31.0471\n", 350 | "INFO:tensorflow:step = 5500, loss = 1.1942595 (3.205 sec)\n", 351 | "INFO:tensorflow:accuracy = 0.71875 (3.205 sec)\n", 352 | "INFO:tensorflow:global_step/sec: 31.3444\n", 353 | "INFO:tensorflow:step = 5600, loss = 1.1971021 (3.175 sec)\n", 354 | "INFO:tensorflow:accuracy = 0.59375 (3.190 sec)\n", 355 | "INFO:tensorflow:global_step/sec: 33.2658\n", 356 | "INFO:tensorflow:step = 5700, loss = 1.5368863 (3.006 sec)\n", 357 | "INFO:tensorflow:accuracy = 0.3125 (2.990 sec)\n", 358 | "INFO:tensorflow:global_step/sec: 34.6109\n", 359 | "INFO:tensorflow:step = 5800, loss = 1.0290743 (2.889 sec)\n", 360 | "INFO:tensorflow:accuracy = 0.5625 (2.889 sec)\n", 361 | "INFO:tensorflow:global_step/sec: 34.8651\n", 362 | "INFO:tensorflow:step = 5900, loss = 1.2347946 (2.884 sec)\n", 363 | "INFO:tensorflow:accuracy = 0.65625 (2.884 sec)\n", 364 | "INFO:tensorflow:global_step/sec: 35.8486\n", 365 | "INFO:tensorflow:step = 6000, loss = 1.022023 (2.790 sec)\n", 366 | "INFO:tensorflow:accuracy = 0.59375 (2.790 sec)\n", 367 | "INFO:tensorflow:global_step/sec: 35.8411\n", 368 | "INFO:tensorflow:step = 6100, loss = 0.89990515 (2.774 sec)\n", 369 | "INFO:tensorflow:accuracy = 0.6875 (2.790 sec)\n", 370 | "INFO:tensorflow:global_step/sec: 33.6373\n", 371 | "INFO:tensorflow:step = 6200, loss = 0.6182012 (2.974 sec)\n", 372 | "INFO:tensorflow:accuracy = 0.78125 (2.959 sec)\n", 373 | "INFO:tensorflow:global_step/sec: 30.8844\n", 374 | "INFO:tensorflow:step = 6300, loss = 1.7747161 (3.252 sec)\n", 375 | "INFO:tensorflow:accuracy = 0.40625 (3.252 sec)\n", 376 | "INFO:tensorflow:global_step/sec: 34.0669\n", 377 | "INFO:tensorflow:step = 6400, loss = 0.8657765 (2.920 sec)\n", 378 | "INFO:tensorflow:accuracy = 0.75 (2.920 sec)\n", 379 | "INFO:tensorflow:global_step/sec: 34.0265\n", 380 | "INFO:tensorflow:step = 6500, loss = 2.009211 (2.941 sec)\n", 381 | "INFO:tensorflow:accuracy = 0.53125 (2.941 sec)\n", 382 | "INFO:tensorflow:global_step/sec: 34.8445\n", 383 | "INFO:tensorflow:step = 6600, loss = 0.86685824 (2.867 sec)\n", 384 | "INFO:tensorflow:accuracy = 0.71875 (2.883 sec)\n", 385 | "INFO:tensorflow:global_step/sec: 34.9814\n", 386 | "INFO:tensorflow:step = 6700, loss = 0.97715193 (2.859 sec)\n", 387 | "INFO:tensorflow:accuracy = 0.71875 (2.843 sec)\n", 388 | "INFO:tensorflow:global_step/sec: 35.6412\n", 389 | "INFO:tensorflow:step = 6800, loss = 0.5520328 (2.806 sec)\n", 390 | "INFO:tensorflow:accuracy = 0.8125 (2.806 sec)\n", 391 | "INFO:tensorflow:global_step/sec: 36.1309\n", 392 | "INFO:tensorflow:step = 6900, loss = 0.39738196 (2.786 sec)\n", 393 | "INFO:tensorflow:accuracy = 0.90625 (2.788 sec)\n", 394 | "INFO:tensorflow:global_step/sec: 35.1875\n", 395 | "INFO:tensorflow:step = 7000, loss = 1.3127048 (2.823 sec)\n", 396 | "INFO:tensorflow:accuracy = 0.625 (2.822 sec)\n", 397 | "INFO:tensorflow:global_step/sec: 34.4128\n", 398 | "INFO:tensorflow:step = 7100, loss = 0.7008237 (2.906 sec)\n", 399 | "INFO:tensorflow:accuracy = 0.71875 (2.906 sec)\n", 400 | "INFO:tensorflow:global_step/sec: 30.9428\n", 401 | "INFO:tensorflow:step = 7200, loss = 0.5086405 (3.232 sec)\n", 402 | "INFO:tensorflow:accuracy = 0.78125 (3.247 sec)\n", 403 | "INFO:tensorflow:global_step/sec: 30.5374\n", 404 | "INFO:tensorflow:step = 7300, loss = 0.81961846 (3.276 sec)\n", 405 | "INFO:tensorflow:accuracy = 0.71875 (3.261 sec)\n", 406 | "INFO:tensorflow:global_step/sec: 33.8693\n", 407 | "INFO:tensorflow:step = 7400, loss = 1.1805862 (2.951 sec)\n", 408 | "INFO:tensorflow:accuracy = 0.5625 (2.967 sec)\n", 409 | "INFO:tensorflow:Saving checkpoints for 7500 into ./pixel_classification/supervised_quad_conv\\model.ckpt.\n", 410 | "INFO:tensorflow:Loss for final step: 0.8065584.\n" 411 | ] 412 | }, 413 | { 414 | "data": { 415 | "text/plain": [ 416 | "" 417 | ] 418 | }, 419 | "execution_count": 6, 420 | "metadata": {}, 421 | "output_type": "execute_result" 422 | } 423 | ], 424 | "source": [ 425 | "estimator.train(input_fn=train_in_fn, steps=STEPS)" 426 | ] 427 | }, 428 | { 429 | "cell_type": "code", 430 | "execution_count": 7, 431 | "metadata": {}, 432 | "outputs": [ 433 | { 434 | "name": "stdout", 435 | "output_type": "stream", 436 | "text": [ 437 | "INFO:tensorflow:Calling model_fn.\n", 438 | "INFO:tensorflow:Done calling model_fn.\n", 439 | "INFO:tensorflow:Starting evaluation at 2018-08-05-09:28:49\n", 440 | "INFO:tensorflow:Graph was finalized.\n", 441 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_quad_conv\\model.ckpt-7500\n", 442 | "INFO:tensorflow:Running local_init_op.\n", 443 | "INFO:tensorflow:Done running local_init_op.\n", 444 | "INFO:tensorflow:accuracy = 1.0\n", 445 | "INFO:tensorflow:Finished evaluation at 2018-08-05-09:28:58\n", 446 | "INFO:tensorflow:Saving dict for global step 7500: global_step = 7500, loss = 0.7289746\n" 447 | ] 448 | }, 449 | { 450 | "data": { 451 | "text/plain": [ 452 | "{'global_step': 7500, 'loss': 0.7289746}" 453 | ] 454 | }, 455 | "execution_count": 7, 456 | "metadata": {}, 457 | "output_type": "execute_result" 458 | } 459 | ], 460 | "source": [ 461 | "estimator.evaluate(input_fn=lambda: classifier_input_fn(X_train,\n", 462 | " Y_train,\n", 463 | " 32, is_train=False))" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 8, 469 | "metadata": {}, 470 | "outputs": [ 471 | { 472 | "name": "stdout", 473 | "output_type": "stream", 474 | "text": [ 475 | "INFO:tensorflow:Calling model_fn.\n", 476 | "INFO:tensorflow:Done calling model_fn.\n", 477 | "INFO:tensorflow:Starting evaluation at 2018-08-05-09:29:13\n", 478 | "INFO:tensorflow:Graph was finalized.\n", 479 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_quad_conv\\model.ckpt-7500\n", 480 | "INFO:tensorflow:Running local_init_op.\n", 481 | "INFO:tensorflow:Done running local_init_op.\n", 482 | "INFO:tensorflow:accuracy = 0.0\n", 483 | "INFO:tensorflow:Finished evaluation at 2018-08-05-09:29:16\n", 484 | "INFO:tensorflow:Saving dict for global step 7500: global_step = 7500, loss = 7310.641\n" 485 | ] 486 | }, 487 | { 488 | "data": { 489 | "text/plain": [ 490 | "{'global_step': 7500, 'loss': 7310.641}" 491 | ] 492 | }, 493 | "execution_count": 8, 494 | "metadata": {}, 495 | "output_type": "execute_result" 496 | } 497 | ], 498 | "source": [ 499 | "estimator.evaluate(input_fn=test_in_fn)" 500 | ] 501 | }, 502 | { 503 | "cell_type": "markdown", 504 | "metadata": {}, 505 | "source": [ 506 | "## CoordConv over NotSoClever - Quadrant Split\n", 507 | "|![CoordConv Architecture for NotSoClever](./images/coordconv_arch_clf.png)|\n", 508 | "|:-------------------------------:|\n", 509 | "| Source: https://arxiv.org/pdf/1807.03247 |" 510 | ] 511 | }, 512 | { 513 | "cell_type": "code", 514 | "execution_count": 1, 515 | "metadata": {}, 516 | "outputs": [], 517 | "source": [ 518 | "import tensorflow as tf\n", 519 | "\n", 520 | "from utils.nsc import NotSoCleverCreator as NSCCreator\n", 521 | "from models.supervised_coordconv import model_fn as coordconv_model_fn\n", 522 | "from nn.pipeline import classifier_input_fn" 523 | ] 524 | }, 525 | { 526 | "cell_type": "code", 527 | "execution_count": 2, 528 | "metadata": {}, 529 | "outputs": [ 530 | { 531 | "data": { 532 | "text/plain": [ 533 | "((2408, 2), (841, 2), (2408, 64, 64, 1), (841, 64, 64, 1))" 534 | ] 535 | }, 536 | "execution_count": 2, 537 | "metadata": {}, 538 | "output_type": "execute_result" 539 | } 540 | ], 541 | "source": [ 542 | "nsc = NSCCreator()\n", 543 | "\n", 544 | "X_train, X_test = nsc.quadrant_split()\n", 545 | "Y_train = nsc.one_hot_coords(nsc.canvas_size, X_train)\n", 546 | "Y_test = nsc.one_hot_coords(nsc.canvas_size, X_test)\n", 547 | "\n", 548 | "X_train.shape, X_test.shape, Y_train.shape, Y_test.shape" 549 | ] 550 | }, 551 | { 552 | "cell_type": "code", 553 | "execution_count": 3, 554 | "metadata": {}, 555 | "outputs": [ 556 | { 557 | "name": "stdout", 558 | "output_type": "stream", 559 | "text": [ 560 | "INFO:tensorflow:Using default config.\n", 561 | "INFO:tensorflow:Using config: {'_service': None, '_is_chief': True, '_evaluation_master': '', '_keep_checkpoint_max': 5, '_cluster_spec': , '_num_ps_replicas': 0, '_save_checkpoints_secs': 600, '_global_id_in_cluster': 0, '_save_summary_steps': 100, '_keep_checkpoint_every_n_hours': 10000, '_master': '', '_log_step_count_steps': 100, '_session_config': None, '_task_id': 0, '_num_worker_replicas': 1, '_tf_random_seed': None, '_model_dir': './pixel_classification/supervised_quad_coord', '_task_type': 'worker', '_save_checkpoints_steps': None, '_train_distribute': None}\n" 562 | ] 563 | } 564 | ], 565 | "source": [ 566 | "estimator = tf.estimator.Estimator(model_fn=coordconv_model_fn,\n", 567 | " params={\n", 568 | " 'lr': 1e-3\n", 569 | " },\n", 570 | " model_dir='./pixel_classification/supervised_quad_coord')" 571 | ] 572 | }, 573 | { 574 | "cell_type": "code", 575 | "execution_count": 4, 576 | "metadata": {}, 577 | "outputs": [], 578 | "source": [ 579 | "train_in_fn = lambda: classifier_input_fn(X_train, Y_train, 32)\n", 580 | "test_in_fn = lambda: classifier_input_fn(X_test, Y_test, 32, is_train=False)" 581 | ] 582 | }, 583 | { 584 | "cell_type": "code", 585 | "execution_count": 5, 586 | "metadata": {}, 587 | "outputs": [ 588 | { 589 | "data": { 590 | "text/plain": [ 591 | "7500" 592 | ] 593 | }, 594 | "execution_count": 5, 595 | "metadata": {}, 596 | "output_type": "execute_result" 597 | } 598 | ], 599 | "source": [ 600 | "EPOCHS = 100\n", 601 | "STEPS_PER_EPOCH = X_train.shape[0] // 32\n", 602 | "STEPS = EPOCHS * STEPS_PER_EPOCH\n", 603 | "\n", 604 | "STEPS" 605 | ] 606 | }, 607 | { 608 | "cell_type": "code", 609 | "execution_count": 6, 610 | "metadata": {}, 611 | "outputs": [ 612 | { 613 | "name": "stdout", 614 | "output_type": "stream", 615 | "text": [ 616 | "INFO:tensorflow:Calling model_fn.\n", 617 | "INFO:tensorflow:Done calling model_fn.\n", 618 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 619 | "INFO:tensorflow:Graph was finalized.\n", 620 | "INFO:tensorflow:Running local_init_op.\n", 621 | "INFO:tensorflow:Done running local_init_op.\n", 622 | "INFO:tensorflow:Saving checkpoints for 1 into ./pixel_classification/supervised_quad_coord\\model.ckpt.\n", 623 | "INFO:tensorflow:step = 0, loss = 8.287167\n", 624 | "INFO:tensorflow:accuracy = 0.0\n", 625 | "INFO:tensorflow:global_step/sec: 3.42047\n", 626 | "INFO:tensorflow:step = 100, loss = 7.5643306 (29.274 sec)\n", 627 | "INFO:tensorflow:accuracy = 0.0 (29.274 sec)\n", 628 | "INFO:tensorflow:global_step/sec: 3.57952\n", 629 | "INFO:tensorflow:step = 200, loss = 6.385539 (27.899 sec)\n", 630 | "INFO:tensorflow:accuracy = 0.0 (27.899 sec)\n", 631 | "INFO:tensorflow:global_step/sec: 3.58036\n", 632 | "INFO:tensorflow:step = 300, loss = 5.1956162 (27.993 sec)\n", 633 | "INFO:tensorflow:accuracy = 0.0625 (27.993 sec)\n", 634 | "INFO:tensorflow:global_step/sec: 3.60377\n", 635 | "INFO:tensorflow:step = 400, loss = 4.6345787 (27.702 sec)\n", 636 | "INFO:tensorflow:accuracy = 0.03125 (27.702 sec)\n", 637 | "INFO:tensorflow:global_step/sec: 3.58071\n", 638 | "INFO:tensorflow:step = 500, loss = 4.5271225 (27.927 sec)\n", 639 | "INFO:tensorflow:accuracy = 0.0 (27.927 sec)\n", 640 | "INFO:tensorflow:global_step/sec: 3.56798\n", 641 | "INFO:tensorflow:step = 600, loss = 4.1263027 (28.016 sec)\n", 642 | "INFO:tensorflow:accuracy = 0.0 (28.016 sec)\n", 643 | "INFO:tensorflow:global_step/sec: 3.60146\n", 644 | "INFO:tensorflow:step = 700, loss = 3.5931976 (27.762 sec)\n", 645 | "INFO:tensorflow:accuracy = 0.0 (27.762 sec)\n", 646 | "INFO:tensorflow:global_step/sec: 3.57936\n", 647 | "INFO:tensorflow:step = 800, loss = 2.818496 (27.969 sec)\n", 648 | "INFO:tensorflow:accuracy = 0.34375 (27.969 sec)\n", 649 | "INFO:tensorflow:global_step/sec: 3.57588\n", 650 | "INFO:tensorflow:step = 900, loss = 3.1944697 (27.937 sec)\n", 651 | "INFO:tensorflow:accuracy = 0.0 (27.939 sec)\n", 652 | "INFO:tensorflow:global_step/sec: 3.60489\n", 653 | "INFO:tensorflow:step = 1000, loss = 4.130589 (27.752 sec)\n", 654 | "INFO:tensorflow:accuracy = 0.0 (27.751 sec)\n", 655 | "INFO:tensorflow:global_step/sec: 2.24523\n", 656 | "INFO:tensorflow:step = 1100, loss = 4.632641 (44.524 sec)\n", 657 | "INFO:tensorflow:accuracy = 0.03125 (44.524 sec)\n", 658 | "INFO:tensorflow:global_step/sec: 3.57137\n", 659 | "INFO:tensorflow:step = 1200, loss = 2.9158463 (28.031 sec)\n", 660 | "INFO:tensorflow:accuracy = 0.125 (28.031 sec)\n", 661 | "INFO:tensorflow:global_step/sec: 3.53361\n", 662 | "INFO:tensorflow:step = 1300, loss = 3.1402497 (28.270 sec)\n", 663 | "INFO:tensorflow:accuracy = 0.125 (28.270 sec)\n", 664 | "INFO:tensorflow:global_step/sec: 3.53746\n", 665 | "INFO:tensorflow:step = 1400, loss = 2.774085 (28.272 sec)\n", 666 | "INFO:tensorflow:accuracy = 0.25 (28.272 sec)\n", 667 | "INFO:tensorflow:global_step/sec: 3.55818\n", 668 | "INFO:tensorflow:step = 1500, loss = 2.5233355 (28.104 sec)\n", 669 | "INFO:tensorflow:accuracy = 0.15625 (28.106 sec)\n", 670 | "INFO:tensorflow:global_step/sec: 3.59343\n", 671 | "INFO:tensorflow:step = 1600, loss = 2.999454 (27.824 sec)\n", 672 | "INFO:tensorflow:accuracy = 0.09375 (27.838 sec)\n", 673 | "INFO:tensorflow:global_step/sec: 3.49545\n", 674 | "INFO:tensorflow:step = 1700, loss = 2.206543 (28.640 sec)\n", 675 | "INFO:tensorflow:accuracy = 0.65625 (28.624 sec)\n", 676 | "INFO:tensorflow:global_step/sec: 3.55008\n", 677 | "INFO:tensorflow:step = 1800, loss = 3.1997983 (28.153 sec)\n", 678 | "INFO:tensorflow:accuracy = 0.03125 (28.153 sec)\n", 679 | "INFO:tensorflow:global_step/sec: 3.58228\n", 680 | "INFO:tensorflow:step = 1900, loss = 3.1440716 (27.900 sec)\n", 681 | "INFO:tensorflow:accuracy = 0.03125 (27.900 sec)\n", 682 | "INFO:tensorflow:global_step/sec: 3.56223\n", 683 | "INFO:tensorflow:step = 2000, loss = 2.1683705 (28.072 sec)\n", 684 | "INFO:tensorflow:accuracy = 0.40625 (28.088 sec)\n", 685 | "INFO:tensorflow:Saving checkpoints for 2067 into ./pixel_classification/supervised_quad_coord\\model.ckpt.\n", 686 | "INFO:tensorflow:global_step/sec: 3.07622\n", 687 | "INFO:tensorflow:step = 2100, loss = 2.8269987 (32.512 sec)\n", 688 | "INFO:tensorflow:accuracy = 0.15625 (32.497 sec)\n", 689 | "INFO:tensorflow:global_step/sec: 3.56646\n", 690 | "INFO:tensorflow:step = 2200, loss = 2.298685 (28.081 sec)\n", 691 | "INFO:tensorflow:accuracy = 0.40625 (28.080 sec)\n", 692 | "INFO:tensorflow:global_step/sec: 3.57697\n", 693 | "INFO:tensorflow:step = 2300, loss = 3.1663077 (27.914 sec)\n", 694 | "INFO:tensorflow:accuracy = 0.125 (27.917 sec)\n", 695 | "INFO:tensorflow:global_step/sec: 3.56086\n", 696 | "INFO:tensorflow:step = 2400, loss = 1.8324646 (28.079 sec)\n", 697 | "INFO:tensorflow:accuracy = 0.25 (28.076 sec)\n", 698 | "INFO:tensorflow:global_step/sec: 3.5566\n", 699 | "INFO:tensorflow:step = 2500, loss = 2.1002176 (28.132 sec)\n", 700 | "INFO:tensorflow:accuracy = 0.65625 (28.132 sec)\n", 701 | "INFO:tensorflow:global_step/sec: 3.57904\n", 702 | "INFO:tensorflow:step = 2600, loss = 1.6405718 (27.925 sec)\n", 703 | "INFO:tensorflow:accuracy = 0.75 (27.925 sec)\n", 704 | "INFO:tensorflow:global_step/sec: 3.54975\n", 705 | "INFO:tensorflow:step = 2700, loss = 2.2290077 (28.241 sec)\n", 706 | "INFO:tensorflow:accuracy = 0.21875 (28.244 sec)\n", 707 | "INFO:tensorflow:global_step/sec: 3.54295\n", 708 | "INFO:tensorflow:step = 2800, loss = 1.7853448 (28.161 sec)\n", 709 | "INFO:tensorflow:accuracy = 0.5 (28.158 sec)\n", 710 | "INFO:tensorflow:global_step/sec: 3.5811\n", 711 | "INFO:tensorflow:step = 2900, loss = 2.6717975 (27.934 sec)\n", 712 | "INFO:tensorflow:accuracy = 0.15625 (27.934 sec)\n", 713 | "INFO:tensorflow:global_step/sec: 3.55978\n", 714 | "INFO:tensorflow:step = 3000, loss = 2.5039535 (28.092 sec)\n", 715 | "INFO:tensorflow:accuracy = 0.25 (28.092 sec)\n", 716 | "INFO:tensorflow:global_step/sec: 3.55305\n", 717 | "INFO:tensorflow:step = 3100, loss = 2.8196113 (28.129 sec)\n", 718 | "INFO:tensorflow:accuracy = 0.21875 (28.129 sec)\n", 719 | "INFO:tensorflow:global_step/sec: 3.57222\n", 720 | "INFO:tensorflow:step = 3200, loss = 1.0172906 (28.008 sec)\n", 721 | "INFO:tensorflow:accuracy = 0.9375 (28.008 sec)\n", 722 | "INFO:tensorflow:global_step/sec: 3.55184\n", 723 | "INFO:tensorflow:step = 3300, loss = 2.3917763 (28.140 sec)\n", 724 | "INFO:tensorflow:accuracy = 0.34375 (28.156 sec)\n", 725 | "INFO:tensorflow:global_step/sec: 3.53945\n", 726 | "INFO:tensorflow:step = 3400, loss = 1.5952688 (28.258 sec)\n", 727 | "INFO:tensorflow:accuracy = 0.6875 (28.245 sec)\n", 728 | "INFO:tensorflow:global_step/sec: 3.58229\n", 729 | "INFO:tensorflow:step = 3500, loss = 1.7708049 (27.916 sec)\n", 730 | "INFO:tensorflow:accuracy = 0.625 (27.916 sec)\n", 731 | "INFO:tensorflow:global_step/sec: 3.56756\n", 732 | "INFO:tensorflow:step = 3600, loss = 2.5225325 (28.025 sec)\n", 733 | "INFO:tensorflow:accuracy = 0.0625 (28.022 sec)\n", 734 | "INFO:tensorflow:global_step/sec: 3.56548\n", 735 | "INFO:tensorflow:step = 3700, loss = 1.827638 (28.085 sec)\n", 736 | "INFO:tensorflow:accuracy = 0.46875 (28.085 sec)\n", 737 | "INFO:tensorflow:global_step/sec: 3.58286\n", 738 | "INFO:tensorflow:step = 3800, loss = 2.243103 (27.873 sec)\n", 739 | "INFO:tensorflow:accuracy = 0.1875 (27.889 sec)\n", 740 | "INFO:tensorflow:global_step/sec: 3.57036\n", 741 | "INFO:tensorflow:step = 3900, loss = 1.2662117 (28.008 sec)\n", 742 | "INFO:tensorflow:accuracy = 0.59375 (28.008 sec)\n", 743 | "INFO:tensorflow:global_step/sec: 3.56839\n", 744 | "INFO:tensorflow:step = 4000, loss = 2.269358 (28.029 sec)\n", 745 | "INFO:tensorflow:accuracy = 0.1875 (28.016 sec)\n", 746 | "INFO:tensorflow:global_step/sec: 3.57314\n", 747 | "INFO:tensorflow:step = 4100, loss = 5.0169334 (27.981 sec)\n", 748 | "INFO:tensorflow:accuracy = 0.0 (27.979 sec)\n", 749 | "INFO:tensorflow:Saving checkpoints for 4191 into ./pixel_classification/supervised_quad_coord\\model.ckpt.\n", 750 | "INFO:tensorflow:global_step/sec: 3.20485\n", 751 | "INFO:tensorflow:step = 4200, loss = 2.818725 (31.207 sec)\n", 752 | "INFO:tensorflow:accuracy = 0.03125 (31.208 sec)\n", 753 | "INFO:tensorflow:global_step/sec: 3.57043\n", 754 | "INFO:tensorflow:step = 4300, loss = 2.0681467 (28.006 sec)\n", 755 | "INFO:tensorflow:accuracy = 0.28125 (28.005 sec)\n", 756 | "INFO:tensorflow:global_step/sec: 3.54638\n", 757 | "INFO:tensorflow:step = 4400, loss = 1.6070917 (28.211 sec)\n", 758 | "INFO:tensorflow:accuracy = 0.59375 (28.211 sec)\n", 759 | "INFO:tensorflow:global_step/sec: 3.58438\n", 760 | "INFO:tensorflow:step = 4500, loss = 2.2245493 (27.899 sec)\n", 761 | "INFO:tensorflow:accuracy = 0.15625 (27.899 sec)\n", 762 | "INFO:tensorflow:global_step/sec: 3.56547\n", 763 | "INFO:tensorflow:step = 4600, loss = 1.9861934 (28.047 sec)\n", 764 | "INFO:tensorflow:accuracy = 0.125 (28.047 sec)\n", 765 | "INFO:tensorflow:global_step/sec: 3.56361\n", 766 | "INFO:tensorflow:step = 4700, loss = 0.73254716 (28.077 sec)\n", 767 | "INFO:tensorflow:accuracy = 1.0 (28.077 sec)\n", 768 | "INFO:tensorflow:global_step/sec: 3.58303\n", 769 | "INFO:tensorflow:step = 4800, loss = 2.8787036 (27.894 sec)\n", 770 | "INFO:tensorflow:accuracy = 0.25 (27.894 sec)\n", 771 | "INFO:tensorflow:global_step/sec: 3.56926\n", 772 | "INFO:tensorflow:step = 4900, loss = 2.2056837 (28.001 sec)\n", 773 | "INFO:tensorflow:accuracy = 0.15625 (28.001 sec)\n", 774 | "INFO:tensorflow:global_step/sec: 3.56455\n", 775 | "INFO:tensorflow:step = 5000, loss = 1.7758607 (28.059 sec)\n", 776 | "INFO:tensorflow:accuracy = 0.125 (28.060 sec)\n", 777 | "INFO:tensorflow:global_step/sec: 3.58519\n", 778 | "INFO:tensorflow:step = 5100, loss = 2.8657746 (27.892 sec)\n", 779 | "INFO:tensorflow:accuracy = 0.03125 (27.892 sec)\n", 780 | "INFO:tensorflow:global_step/sec: 3.56725\n", 781 | "INFO:tensorflow:step = 5200, loss = 1.4326464 (28.066 sec)\n", 782 | "INFO:tensorflow:accuracy = 0.5 (28.065 sec)\n", 783 | "INFO:tensorflow:global_step/sec: 3.56755\n", 784 | "INFO:tensorflow:step = 5300, loss = 6.068924 (27.993 sec)\n", 785 | "INFO:tensorflow:accuracy = 0.03125 (27.993 sec)\n", 786 | "INFO:tensorflow:global_step/sec: 3.59923\n", 787 | "INFO:tensorflow:step = 5400, loss = 3.8438144 (27.784 sec)\n", 788 | "INFO:tensorflow:accuracy = 0.21875 (27.784 sec)\n", 789 | "INFO:tensorflow:global_step/sec: 3.5745\n", 790 | "INFO:tensorflow:step = 5500, loss = 2.6729772 (27.976 sec)\n", 791 | "INFO:tensorflow:accuracy = 0.09375 (27.976 sec)\n", 792 | "INFO:tensorflow:global_step/sec: 3.57158\n", 793 | "INFO:tensorflow:step = 5600, loss = 1.3262691 (28.000 sec)\n", 794 | "INFO:tensorflow:accuracy = 0.71875 (28.000 sec)\n", 795 | "INFO:tensorflow:global_step/sec: 3.59709\n", 796 | "INFO:tensorflow:step = 5700, loss = 2.1419368 (27.837 sec)\n", 797 | "INFO:tensorflow:accuracy = 0.375 (27.837 sec)\n", 798 | "INFO:tensorflow:global_step/sec: 3.56439\n", 799 | "INFO:tensorflow:step = 5800, loss = 0.52024734 (28.035 sec)\n", 800 | "INFO:tensorflow:accuracy = 1.0 (28.036 sec)\n", 801 | "INFO:tensorflow:global_step/sec: 3.56712\n", 802 | "INFO:tensorflow:step = 5900, loss = 1.2516215 (28.021 sec)\n", 803 | "INFO:tensorflow:accuracy = 0.6875 (28.020 sec)\n", 804 | "INFO:tensorflow:global_step/sec: 3.57386\n", 805 | "INFO:tensorflow:step = 6000, loss = 1.1910638 (27.992 sec)\n", 806 | "INFO:tensorflow:accuracy = 0.53125 (27.992 sec)\n", 807 | "INFO:tensorflow:global_step/sec: 3.59762\n", 808 | "INFO:tensorflow:step = 6100, loss = 0.91671205 (27.781 sec)\n", 809 | "INFO:tensorflow:accuracy = 0.65625 (27.781 sec)\n", 810 | "INFO:tensorflow:global_step/sec: 3.56221\n", 811 | "INFO:tensorflow:step = 6200, loss = 5.6158133 (28.107 sec)\n", 812 | "INFO:tensorflow:accuracy = 0.0 (28.107 sec)\n", 813 | "INFO:tensorflow:global_step/sec: 3.56464\n", 814 | "INFO:tensorflow:step = 6300, loss = 3.3761332 (28.023 sec)\n", 815 | "INFO:tensorflow:accuracy = 0.1875 (28.025 sec)\n", 816 | "INFO:tensorflow:Saving checkpoints for 6324 into ./pixel_classification/supervised_quad_coord\\model.ckpt.\n", 817 | "INFO:tensorflow:global_step/sec: 3.22887\n", 818 | "INFO:tensorflow:step = 6400, loss = 1.1873472 (30.967 sec)\n", 819 | "INFO:tensorflow:accuracy = 0.46875 (30.964 sec)\n", 820 | "INFO:tensorflow:global_step/sec: 3.56625\n", 821 | "INFO:tensorflow:step = 6500, loss = 1.4085164 (28.044 sec)\n", 822 | "INFO:tensorflow:accuracy = 0.5625 (28.046 sec)\n", 823 | "INFO:tensorflow:global_step/sec: 3.56925\n", 824 | "INFO:tensorflow:step = 6600, loss = 4.226528 (28.014 sec)\n", 825 | "INFO:tensorflow:accuracy = 0.0 (28.012 sec)\n", 826 | "INFO:tensorflow:global_step/sec: 3.58866\n", 827 | "INFO:tensorflow:step = 6700, loss = 0.30135167 (27.903 sec)\n", 828 | "INFO:tensorflow:accuracy = 1.0 (27.903 sec)\n", 829 | "INFO:tensorflow:global_step/sec: 3.56153\n", 830 | "INFO:tensorflow:step = 6800, loss = 0.62115324 (28.046 sec)\n", 831 | "INFO:tensorflow:accuracy = 0.96875 (28.048 sec)\n", 832 | "INFO:tensorflow:global_step/sec: 3.54716\n", 833 | "INFO:tensorflow:step = 6900, loss = 1.0371928 (28.186 sec)\n", 834 | "INFO:tensorflow:accuracy = 0.71875 (28.184 sec)\n", 835 | "INFO:tensorflow:global_step/sec: 3.58137\n", 836 | "INFO:tensorflow:step = 7000, loss = 0.7368101 (27.922 sec)\n", 837 | "INFO:tensorflow:accuracy = 0.96875 (27.922 sec)\n", 838 | "INFO:tensorflow:global_step/sec: 3.57479\n", 839 | "INFO:tensorflow:step = 7100, loss = 0.7946677 (27.989 sec)\n", 840 | "INFO:tensorflow:accuracy = 0.8125 (27.989 sec)\n", 841 | "INFO:tensorflow:global_step/sec: 3.5715\n", 842 | "INFO:tensorflow:step = 7200, loss = 1.9484146 (28.031 sec)\n", 843 | "INFO:tensorflow:accuracy = 0.34375 (28.031 sec)\n", 844 | "INFO:tensorflow:global_step/sec: 3.58905\n", 845 | "INFO:tensorflow:step = 7300, loss = 0.30018997 (27.820 sec)\n", 846 | "INFO:tensorflow:accuracy = 1.0 (27.823 sec)\n", 847 | "INFO:tensorflow:global_step/sec: 3.56802\n", 848 | "INFO:tensorflow:step = 7400, loss = 0.3769375 (28.027 sec)\n", 849 | "INFO:tensorflow:accuracy = 1.0 (28.026 sec)\n", 850 | "INFO:tensorflow:Saving checkpoints for 7500 into ./pixel_classification/supervised_quad_coord\\model.ckpt.\n", 851 | "INFO:tensorflow:Loss for final step: 2.1894236.\n" 852 | ] 853 | }, 854 | { 855 | "data": { 856 | "text/plain": [ 857 | "" 858 | ] 859 | }, 860 | "execution_count": 6, 861 | "metadata": {}, 862 | "output_type": "execute_result" 863 | } 864 | ], 865 | "source": [ 866 | "estimator.train(input_fn=train_in_fn, steps=STEPS)" 867 | ] 868 | }, 869 | { 870 | "cell_type": "code", 871 | "execution_count": 7, 872 | "metadata": {}, 873 | "outputs": [ 874 | { 875 | "name": "stdout", 876 | "output_type": "stream", 877 | "text": [ 878 | "INFO:tensorflow:Calling model_fn.\n", 879 | "INFO:tensorflow:Done calling model_fn.\n", 880 | "INFO:tensorflow:Starting evaluation at 2018-08-05-10:23:25\n", 881 | "INFO:tensorflow:Graph was finalized.\n", 882 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_quad_coord\\model.ckpt-7500\n", 883 | "INFO:tensorflow:Running local_init_op.\n", 884 | "INFO:tensorflow:Done running local_init_op.\n", 885 | "INFO:tensorflow:accuracy = 0.40625\n", 886 | "INFO:tensorflow:Finished evaluation at 2018-08-05-10:23:39\n", 887 | "INFO:tensorflow:Saving dict for global step 7500: global_step = 7500, loss = 2.7045329\n" 888 | ] 889 | }, 890 | { 891 | "data": { 892 | "text/plain": [ 893 | "{'global_step': 7500, 'loss': 2.7045329}" 894 | ] 895 | }, 896 | "execution_count": 7, 897 | "metadata": {}, 898 | "output_type": "execute_result" 899 | } 900 | ], 901 | "source": [ 902 | "estimator.evaluate(input_fn=lambda: classifier_input_fn(X_train,\n", 903 | " Y_train,\n", 904 | " 32, is_train=False))" 905 | ] 906 | }, 907 | { 908 | "cell_type": "code", 909 | "execution_count": 8, 910 | "metadata": {}, 911 | "outputs": [ 912 | { 913 | "name": "stdout", 914 | "output_type": "stream", 915 | "text": [ 916 | "INFO:tensorflow:Calling model_fn.\n", 917 | "INFO:tensorflow:Done calling model_fn.\n", 918 | "INFO:tensorflow:Starting evaluation at 2018-08-05-10:23:47\n", 919 | "INFO:tensorflow:Graph was finalized.\n", 920 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_quad_coord\\model.ckpt-7500\n", 921 | "INFO:tensorflow:Running local_init_op.\n", 922 | "INFO:tensorflow:Done running local_init_op.\n", 923 | "INFO:tensorflow:accuracy = 0.21875\n", 924 | "INFO:tensorflow:Finished evaluation at 2018-08-05-10:23:53\n", 925 | "INFO:tensorflow:Saving dict for global step 7500: global_step = 7500, loss = 2.587729\n" 926 | ] 927 | }, 928 | { 929 | "data": { 930 | "text/plain": [ 931 | "{'global_step': 7500, 'loss': 2.587729}" 932 | ] 933 | }, 934 | "execution_count": 8, 935 | "metadata": {}, 936 | "output_type": "execute_result" 937 | } 938 | ], 939 | "source": [ 940 | "estimator.evaluate(input_fn=test_in_fn)" 941 | ] 942 | }, 943 | { 944 | "cell_type": "markdown", 945 | "metadata": {}, 946 | "source": [ 947 | "## Deconvolution over NotSoClever - Uniform Split\n", 948 | "*Same architecture*" 949 | ] 950 | }, 951 | { 952 | "cell_type": "code", 953 | "execution_count": 1, 954 | "metadata": {}, 955 | "outputs": [], 956 | "source": [ 957 | "import tensorflow as tf\n", 958 | "\n", 959 | "from utils.nsc import NotSoCleverCreator as NSCCreator\n", 960 | "from models.supervised_conv import model_fn as conv_model_fn\n", 961 | "from nn.pipeline import classifier_input_fn" 962 | ] 963 | }, 964 | { 965 | "cell_type": "code", 966 | "execution_count": 2, 967 | "metadata": {}, 968 | "outputs": [ 969 | { 970 | "data": { 971 | "text/plain": [ 972 | "((2436, 2), (813, 2), (2436, 64, 64, 1), (813, 64, 64, 1))" 973 | ] 974 | }, 975 | "execution_count": 2, 976 | "metadata": {}, 977 | "output_type": "execute_result" 978 | } 979 | ], 980 | "source": [ 981 | "nsc = NSCCreator()\n", 982 | "\n", 983 | "X_train, X_test = nsc.uniform_split()\n", 984 | "Y_train = nsc.one_hot_coords(nsc.canvas_size, X_train)\n", 985 | "Y_test = nsc.one_hot_coords(nsc.canvas_size, X_test)\n", 986 | "\n", 987 | "X_train.shape, X_test.shape, Y_train.shape, Y_test.shape" 988 | ] 989 | }, 990 | { 991 | "cell_type": "code", 992 | "execution_count": 3, 993 | "metadata": {}, 994 | "outputs": [ 995 | { 996 | "name": "stdout", 997 | "output_type": "stream", 998 | "text": [ 999 | "INFO:tensorflow:Using default config.\n", 1000 | "INFO:tensorflow:Using config: {'_num_ps_replicas': 0, '_save_checkpoints_steps': None, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': './pixel_classification/supervised_uniform_conv', '_session_config': None, '_log_step_count_steps': 100, '_train_distribute': None, '_master': '', '_cluster_spec': , '_keep_checkpoint_max': 5, '_tf_random_seed': None, '_is_chief': True, '_global_id_in_cluster': 0, '_save_summary_steps': 100, '_task_type': 'worker', '_service': None, '_save_checkpoints_secs': 600, '_num_worker_replicas': 1, '_evaluation_master': '', '_task_id': 0}\n" 1001 | ] 1002 | } 1003 | ], 1004 | "source": [ 1005 | "estimator = tf.estimator.Estimator(model_fn=conv_model_fn,\n", 1006 | " params={\n", 1007 | " 'lr': 1e-3,\n", 1008 | " 'c': 1\n", 1009 | " },\n", 1010 | " model_dir='./pixel_classification/supervised_uniform_conv')" 1011 | ] 1012 | }, 1013 | { 1014 | "cell_type": "code", 1015 | "execution_count": 4, 1016 | "metadata": {}, 1017 | "outputs": [], 1018 | "source": [ 1019 | "train_in_fn = lambda: classifier_input_fn(X_train, Y_train, 32)\n", 1020 | "test_in_fn = lambda: classifier_input_fn(X_test, Y_test, 32, is_train=False)" 1021 | ] 1022 | }, 1023 | { 1024 | "cell_type": "code", 1025 | "execution_count": 5, 1026 | "metadata": {}, 1027 | "outputs": [ 1028 | { 1029 | "data": { 1030 | "text/plain": [ 1031 | "7600" 1032 | ] 1033 | }, 1034 | "execution_count": 5, 1035 | "metadata": {}, 1036 | "output_type": "execute_result" 1037 | } 1038 | ], 1039 | "source": [ 1040 | "EPOCHS = 100\n", 1041 | "STEPS_PER_EPOCH = X_train.shape[0] // 32\n", 1042 | "STEPS = EPOCHS * STEPS_PER_EPOCH\n", 1043 | "\n", 1044 | "STEPS" 1045 | ] 1046 | }, 1047 | { 1048 | "cell_type": "code", 1049 | "execution_count": 6, 1050 | "metadata": {}, 1051 | "outputs": [ 1052 | { 1053 | "name": "stdout", 1054 | "output_type": "stream", 1055 | "text": [ 1056 | "INFO:tensorflow:Calling model_fn.\n", 1057 | "INFO:tensorflow:Done calling model_fn.\n", 1058 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 1059 | "INFO:tensorflow:Graph was finalized.\n", 1060 | "INFO:tensorflow:Running local_init_op.\n", 1061 | "INFO:tensorflow:Done running local_init_op.\n", 1062 | "INFO:tensorflow:Saving checkpoints for 1 into ./pixel_classification/supervised_uniform_conv\\model.ckpt.\n", 1063 | "INFO:tensorflow:loss = 8.315047, step = 0\n", 1064 | "INFO:tensorflow:accuracy = 0.0\n", 1065 | "INFO:tensorflow:global_step/sec: 24.9472\n", 1066 | "INFO:tensorflow:loss = 7.67513, step = 100 (4.008 sec)\n", 1067 | "INFO:tensorflow:accuracy = 0.0 (4.025 sec)\n", 1068 | "INFO:tensorflow:global_step/sec: 36.4496\n", 1069 | "INFO:tensorflow:loss = 6.647333, step = 200 (2.744 sec)\n", 1070 | "INFO:tensorflow:accuracy = 0.0 (2.727 sec)\n", 1071 | "INFO:tensorflow:global_step/sec: 36.553\n", 1072 | "INFO:tensorflow:loss = 5.9990826, step = 300 (2.736 sec)\n", 1073 | "INFO:tensorflow:accuracy = 0.0 (2.736 sec)\n", 1074 | "INFO:tensorflow:global_step/sec: 36.9695\n", 1075 | "INFO:tensorflow:loss = 5.4760075, step = 400 (2.705 sec)\n", 1076 | "INFO:tensorflow:accuracy = 0.0 (2.721 sec)\n", 1077 | "INFO:tensorflow:global_step/sec: 36.7464\n", 1078 | "INFO:tensorflow:loss = 5.493181, step = 500 (2.737 sec)\n", 1079 | "INFO:tensorflow:accuracy = 0.0 (2.721 sec)\n", 1080 | "INFO:tensorflow:global_step/sec: 36.2443\n", 1081 | "INFO:tensorflow:loss = 4.969417, step = 600 (2.743 sec)\n", 1082 | "INFO:tensorflow:accuracy = 0.0 (2.743 sec)\n", 1083 | "INFO:tensorflow:global_step/sec: 36.3437\n", 1084 | "INFO:tensorflow:loss = 5.079538, step = 700 (2.752 sec)\n", 1085 | "INFO:tensorflow:accuracy = 0.03125 (2.752 sec)\n", 1086 | "INFO:tensorflow:global_step/sec: 36.2572\n", 1087 | "INFO:tensorflow:loss = 4.357486, step = 800 (2.758 sec)\n", 1088 | "INFO:tensorflow:accuracy = 0.0 (2.774 sec)\n", 1089 | "INFO:tensorflow:global_step/sec: 36.3343\n", 1090 | "INFO:tensorflow:loss = 4.337323, step = 900 (2.752 sec)\n", 1091 | "INFO:tensorflow:accuracy = 0.0625 (2.737 sec)\n", 1092 | "INFO:tensorflow:global_step/sec: 36.9508\n", 1093 | "INFO:tensorflow:loss = 4.426549, step = 1000 (2.706 sec)\n", 1094 | "INFO:tensorflow:accuracy = 0.0 (2.722 sec)\n", 1095 | "INFO:tensorflow:global_step/sec: 33.6079\n", 1096 | "INFO:tensorflow:loss = 3.71315, step = 1100 (2.975 sec)\n", 1097 | "INFO:tensorflow:accuracy = 0.0625 (2.960 sec)\n", 1098 | "INFO:tensorflow:global_step/sec: 36.337\n", 1099 | "INFO:tensorflow:loss = 4.158977, step = 1200 (2.752 sec)\n", 1100 | "INFO:tensorflow:accuracy = 0.03125 (2.752 sec)\n", 1101 | "INFO:tensorflow:global_step/sec: 36.4554\n", 1102 | "INFO:tensorflow:loss = 3.7037792, step = 1300 (2.743 sec)\n", 1103 | "INFO:tensorflow:accuracy = 0.0625 (2.743 sec)\n", 1104 | "INFO:tensorflow:global_step/sec: 36.7516\n", 1105 | "INFO:tensorflow:loss = 3.90911, step = 1400 (2.721 sec)\n", 1106 | "INFO:tensorflow:accuracy = 0.0625 (2.721 sec)\n", 1107 | "INFO:tensorflow:global_step/sec: 36.5304\n", 1108 | "INFO:tensorflow:loss = 3.0564778, step = 1500 (2.753 sec)\n", 1109 | "INFO:tensorflow:accuracy = 0.15625 (2.753 sec)\n", 1110 | "INFO:tensorflow:global_step/sec: 34.6026\n", 1111 | "INFO:tensorflow:loss = 3.3729024, step = 1600 (2.874 sec)\n", 1112 | "INFO:tensorflow:accuracy = 0.125 (2.874 sec)\n", 1113 | "INFO:tensorflow:global_step/sec: 36.7328\n", 1114 | "INFO:tensorflow:loss = 3.6605005, step = 1700 (2.722 sec)\n", 1115 | "INFO:tensorflow:accuracy = 0.03125 (2.738 sec)\n", 1116 | "INFO:tensorflow:global_step/sec: 36.7616\n", 1117 | "INFO:tensorflow:loss = 3.2328167, step = 1800 (2.720 sec)\n", 1118 | "INFO:tensorflow:accuracy = 0.09375 (2.721 sec)\n", 1119 | "INFO:tensorflow:global_step/sec: 36.6547\n", 1120 | "INFO:tensorflow:loss = 2.9335165, step = 1900 (2.876 sec)\n", 1121 | "INFO:tensorflow:accuracy = 0.1875 (2.860 sec)\n", 1122 | "INFO:tensorflow:global_step/sec: 34.2142\n", 1123 | "INFO:tensorflow:loss = 2.7996137, step = 2000 (2.775 sec)\n", 1124 | "INFO:tensorflow:accuracy = 0.15625 (2.775 sec)\n", 1125 | "INFO:tensorflow:global_step/sec: 35.4405\n", 1126 | "INFO:tensorflow:loss = 2.4623618, step = 2100 (2.822 sec)\n", 1127 | "INFO:tensorflow:accuracy = 0.25 (2.822 sec)\n", 1128 | "INFO:tensorflow:global_step/sec: 35.2412\n", 1129 | "INFO:tensorflow:loss = 2.6271224, step = 2200 (2.838 sec)\n", 1130 | "INFO:tensorflow:accuracy = 0.34375 (2.838 sec)\n", 1131 | "INFO:tensorflow:global_step/sec: 35.1684\n", 1132 | "INFO:tensorflow:loss = 2.5851204, step = 2300 (2.843 sec)\n", 1133 | "INFO:tensorflow:accuracy = 0.21875 (2.859 sec)\n", 1134 | "INFO:tensorflow:global_step/sec: 35.914\n", 1135 | "INFO:tensorflow:loss = 2.1686559, step = 2400 (2.804 sec)\n", 1136 | "INFO:tensorflow:accuracy = 0.21875 (2.790 sec)\n", 1137 | "INFO:tensorflow:global_step/sec: 35.8376\n", 1138 | "INFO:tensorflow:loss = 2.0306804, step = 2500 (2.771 sec)\n", 1139 | "INFO:tensorflow:accuracy = 0.25 (2.769 sec)\n", 1140 | "INFO:tensorflow:global_step/sec: 36.7494\n", 1141 | "INFO:tensorflow:loss = 2.4708242, step = 2600 (2.721 sec)\n", 1142 | "INFO:tensorflow:accuracy = 0.28125 (2.739 sec)\n", 1143 | "INFO:tensorflow:global_step/sec: 36.4508\n", 1144 | "INFO:tensorflow:loss = 2.1041446, step = 2700 (2.743 sec)\n", 1145 | "INFO:tensorflow:accuracy = 0.21875 (2.741 sec)\n", 1146 | "INFO:tensorflow:global_step/sec: 35.2547\n", 1147 | "INFO:tensorflow:loss = 2.7675467, step = 2800 (2.837 sec)\n", 1148 | "INFO:tensorflow:accuracy = 0.3125 (2.821 sec)\n", 1149 | "INFO:tensorflow:global_step/sec: 34.797\n", 1150 | "INFO:tensorflow:loss = 1.7947322, step = 2900 (2.874 sec)\n", 1151 | "INFO:tensorflow:accuracy = 0.375 (2.874 sec)\n", 1152 | "INFO:tensorflow:global_step/sec: 29.785\n", 1153 | "INFO:tensorflow:loss = 1.694282, step = 3000 (3.373 sec)\n", 1154 | "INFO:tensorflow:accuracy = 0.34375 (3.373 sec)\n", 1155 | "INFO:tensorflow:global_step/sec: 32.4072\n", 1156 | "INFO:tensorflow:loss = 2.2370768, step = 3100 (3.070 sec)\n", 1157 | "INFO:tensorflow:accuracy = 0.21875 (3.086 sec)\n", 1158 | "INFO:tensorflow:global_step/sec: 35.4392\n", 1159 | "INFO:tensorflow:loss = 1.9482484, step = 3200 (2.837 sec)\n", 1160 | "INFO:tensorflow:accuracy = 0.46875 (2.822 sec)\n", 1161 | "INFO:tensorflow:global_step/sec: 36.0444\n", 1162 | "INFO:tensorflow:loss = 1.5825856, step = 3300 (2.759 sec)\n", 1163 | "INFO:tensorflow:accuracy = 0.46875 (2.759 sec)\n", 1164 | "INFO:tensorflow:global_step/sec: 36.5423\n", 1165 | "INFO:tensorflow:loss = 1.9395276, step = 3400 (2.737 sec)\n", 1166 | "INFO:tensorflow:accuracy = 0.46875 (2.737 sec)\n", 1167 | "INFO:tensorflow:global_step/sec: 36.7675\n", 1168 | "INFO:tensorflow:loss = 1.1728095, step = 3500 (2.720 sec)\n", 1169 | "INFO:tensorflow:accuracy = 0.5625 (2.735 sec)\n", 1170 | "INFO:tensorflow:global_step/sec: 35.8493\n", 1171 | "INFO:tensorflow:loss = 1.3399034, step = 3600 (2.789 sec)\n", 1172 | "INFO:tensorflow:accuracy = 0.5 (2.789 sec)\n", 1173 | "INFO:tensorflow:global_step/sec: 34.0441\n", 1174 | "INFO:tensorflow:loss = 1.5210885, step = 3700 (2.937 sec)\n", 1175 | "INFO:tensorflow:accuracy = 0.5 (2.922 sec)\n", 1176 | "INFO:tensorflow:global_step/sec: 32.6823\n", 1177 | "INFO:tensorflow:loss = 1.4676447, step = 3800 (3.060 sec)\n", 1178 | "INFO:tensorflow:accuracy = 0.46875 (3.075 sec)\n", 1179 | "INFO:tensorflow:global_step/sec: 31.5523\n", 1180 | "INFO:tensorflow:loss = 1.6502252, step = 3900 (3.169 sec)\n", 1181 | "INFO:tensorflow:accuracy = 0.5 (3.154 sec)\n", 1182 | "INFO:tensorflow:global_step/sec: 34.1363\n", 1183 | "INFO:tensorflow:loss = 1.5589023, step = 4000 (2.929 sec)\n", 1184 | "INFO:tensorflow:accuracy = 0.46875 (2.929 sec)\n", 1185 | "INFO:tensorflow:global_step/sec: 35.0569\n", 1186 | "INFO:tensorflow:loss = 1.1725559, step = 4100 (2.853 sec)\n", 1187 | "INFO:tensorflow:accuracy = 0.71875 (2.868 sec)\n", 1188 | "INFO:tensorflow:global_step/sec: 34.9787\n", 1189 | "INFO:tensorflow:loss = 1.6962311, step = 4200 (2.859 sec)\n", 1190 | "INFO:tensorflow:accuracy = 0.34375 (2.843 sec)\n", 1191 | "INFO:tensorflow:global_step/sec: 35.6419\n", 1192 | "INFO:tensorflow:loss = 1.2714555, step = 4300 (2.821 sec)\n", 1193 | "INFO:tensorflow:accuracy = 0.5625 (2.821 sec)\n", 1194 | "INFO:tensorflow:global_step/sec: 33.0869\n", 1195 | "INFO:tensorflow:loss = 0.95222837, step = 4400 (3.007 sec)\n", 1196 | "INFO:tensorflow:accuracy = 0.6875 (3.022 sec)\n", 1197 | "INFO:tensorflow:global_step/sec: 34.6018\n", 1198 | "INFO:tensorflow:loss = 1.2433475, step = 4500 (2.906 sec)\n", 1199 | "INFO:tensorflow:accuracy = 0.59375 (2.890 sec)\n", 1200 | "INFO:tensorflow:global_step/sec: 34.8531\n", 1201 | "INFO:tensorflow:loss = 1.0254864, step = 4600 (2.853 sec)\n", 1202 | "INFO:tensorflow:accuracy = 0.625 (2.853 sec)\n", 1203 | "INFO:tensorflow:global_step/sec: 34.5893\n", 1204 | "INFO:tensorflow:loss = 0.8342484, step = 4700 (2.891 sec)\n", 1205 | "INFO:tensorflow:accuracy = 0.71875 (2.891 sec)\n", 1206 | "INFO:tensorflow:global_step/sec: 34.4117\n", 1207 | "INFO:tensorflow:loss = 0.7648108, step = 4800 (2.906 sec)\n", 1208 | "INFO:tensorflow:accuracy = 0.75 (2.906 sec)\n", 1209 | "INFO:tensorflow:global_step/sec: 34.3994\n", 1210 | "INFO:tensorflow:loss = 1.2422521, step = 4900 (2.907 sec)\n", 1211 | "INFO:tensorflow:accuracy = 0.5625 (2.907 sec)\n", 1212 | "INFO:tensorflow:global_step/sec: 34.8421\n", 1213 | "INFO:tensorflow:loss = 1.071286, step = 5000 (2.870 sec)\n", 1214 | "INFO:tensorflow:accuracy = 0.59375 (2.870 sec)\n", 1215 | "INFO:tensorflow:global_step/sec: 35.9261\n", 1216 | "INFO:tensorflow:loss = 0.9543378, step = 5100 (2.783 sec)\n", 1217 | "INFO:tensorflow:accuracy = 0.71875 (2.783 sec)\n", 1218 | "INFO:tensorflow:global_step/sec: 36.6506\n", 1219 | "INFO:tensorflow:loss = 1.3355398, step = 5200 (2.728 sec)\n", 1220 | "INFO:tensorflow:accuracy = 0.53125 (2.744 sec)\n", 1221 | "INFO:tensorflow:global_step/sec: 36.3313\n", 1222 | "INFO:tensorflow:loss = 1.1324289, step = 5300 (2.752 sec)\n", 1223 | "INFO:tensorflow:accuracy = 0.4375 (2.752 sec)\n", 1224 | "INFO:tensorflow:global_step/sec: 34.7899\n", 1225 | "INFO:tensorflow:loss = 0.851465, step = 5400 (2.874 sec)\n", 1226 | "INFO:tensorflow:accuracy = 0.78125 (2.859 sec)\n", 1227 | "INFO:tensorflow:global_step/sec: 34.4068\n", 1228 | "INFO:tensorflow:loss = 1.5587785, step = 5500 (2.906 sec)\n", 1229 | "INFO:tensorflow:accuracy = 0.46875 (2.922 sec)\n", 1230 | "INFO:tensorflow:global_step/sec: 33.6992\n", 1231 | "INFO:tensorflow:loss = 0.8045641, step = 5600 (2.967 sec)\n", 1232 | "INFO:tensorflow:accuracy = 0.6875 (2.952 sec)\n", 1233 | "INFO:tensorflow:global_step/sec: 33.965\n", 1234 | "INFO:tensorflow:loss = 1.0552111, step = 5700 (2.944 sec)\n", 1235 | "INFO:tensorflow:accuracy = 0.6875 (2.944 sec)\n", 1236 | "INFO:tensorflow:global_step/sec: 34.2193\n", 1237 | "INFO:tensorflow:loss = 1.0451174, step = 5800 (2.922 sec)\n", 1238 | "INFO:tensorflow:accuracy = 0.75 (2.922 sec)\n", 1239 | "INFO:tensorflow:global_step/sec: 30.5334\n", 1240 | "INFO:tensorflow:loss = 0.85441864, step = 5900 (3.275 sec)\n", 1241 | "INFO:tensorflow:accuracy = 0.75 (3.295 sec)\n", 1242 | "INFO:tensorflow:global_step/sec: 34.1722\n", 1243 | "INFO:tensorflow:loss = 0.71811265, step = 6000 (2.926 sec)\n", 1244 | "INFO:tensorflow:accuracy = 0.75 (2.906 sec)\n", 1245 | "INFO:tensorflow:global_step/sec: 33.2371\n", 1246 | "INFO:tensorflow:loss = 1.6024714, step = 6100 (3.040 sec)\n", 1247 | "INFO:tensorflow:accuracy = 0.40625 (3.056 sec)\n", 1248 | "INFO:tensorflow:global_step/sec: 32.9241\n", 1249 | "INFO:tensorflow:loss = 0.68524784, step = 6200 (3.006 sec)\n", 1250 | "INFO:tensorflow:accuracy = 0.75 (2.990 sec)\n", 1251 | "INFO:tensorflow:global_step/sec: 35.1718\n", 1252 | "INFO:tensorflow:loss = 0.44941682, step = 6300 (2.843 sec)\n", 1253 | "INFO:tensorflow:accuracy = 0.8125 (2.843 sec)\n", 1254 | "INFO:tensorflow:global_step/sec: 36.7328\n", 1255 | "INFO:tensorflow:loss = 0.42588514, step = 6400 (2.722 sec)\n", 1256 | "INFO:tensorflow:accuracy = 0.84375 (2.722 sec)\n", 1257 | "INFO:tensorflow:global_step/sec: 36.7575\n", 1258 | "INFO:tensorflow:loss = 0.45858726, step = 6500 (2.736 sec)\n", 1259 | "INFO:tensorflow:accuracy = 0.90625 (2.736 sec)\n", 1260 | "INFO:tensorflow:global_step/sec: 36.5412\n", 1261 | "INFO:tensorflow:loss = 0.763198, step = 6600 (2.721 sec)\n", 1262 | "INFO:tensorflow:accuracy = 0.65625 (2.737 sec)\n", 1263 | "INFO:tensorflow:global_step/sec: 33.791\n", 1264 | "INFO:tensorflow:loss = 2.1453755, step = 6700 (2.959 sec)\n", 1265 | "INFO:tensorflow:accuracy = 0.34375 (2.944 sec)\n", 1266 | "INFO:tensorflow:global_step/sec: 32.5837\n", 1267 | "INFO:tensorflow:loss = 0.9778922, step = 6800 (3.069 sec)\n", 1268 | "INFO:tensorflow:accuracy = 0.6875 (3.069 sec)\n", 1269 | "INFO:tensorflow:global_step/sec: 28.0408\n", 1270 | "INFO:tensorflow:loss = 0.737844, step = 6900 (3.584 sec)\n", 1271 | "INFO:tensorflow:accuracy = 0.6875 (3.587 sec)\n", 1272 | "INFO:tensorflow:global_step/sec: 31.6662\n", 1273 | "INFO:tensorflow:loss = 0.45940292, step = 7000 (3.140 sec)\n", 1274 | "INFO:tensorflow:accuracy = 0.875 (3.152 sec)\n", 1275 | "INFO:tensorflow:global_step/sec: 32.5172\n", 1276 | "INFO:tensorflow:loss = 0.56166005, step = 7100 (3.075 sec)\n", 1277 | "INFO:tensorflow:accuracy = 0.90625 (3.075 sec)\n", 1278 | "INFO:tensorflow:global_step/sec: 33.0915\n", 1279 | "INFO:tensorflow:loss = 1.1398807, step = 7200 (3.022 sec)\n", 1280 | "INFO:tensorflow:accuracy = 0.6875 (3.006 sec)\n", 1281 | "INFO:tensorflow:global_step/sec: 33.6917\n", 1282 | "INFO:tensorflow:loss = 1.4984584, step = 7300 (2.968 sec)\n", 1283 | "INFO:tensorflow:accuracy = 0.6875 (2.968 sec)\n", 1284 | "INFO:tensorflow:global_step/sec: 34.7558\n", 1285 | "INFO:tensorflow:loss = 0.6126008, step = 7400 (2.877 sec)\n", 1286 | "INFO:tensorflow:accuracy = 0.78125 (2.877 sec)\n", 1287 | "INFO:tensorflow:global_step/sec: 36.0683\n", 1288 | "INFO:tensorflow:loss = 0.4061339, step = 7500 (2.773 sec)\n", 1289 | "INFO:tensorflow:accuracy = 0.90625 (2.773 sec)\n", 1290 | "INFO:tensorflow:Saving checkpoints for 7600 into ./pixel_classification/supervised_uniform_conv\\model.ckpt.\n", 1291 | "INFO:tensorflow:Loss for final step: 0.6908253.\n" 1292 | ] 1293 | }, 1294 | { 1295 | "data": { 1296 | "text/plain": [ 1297 | "" 1298 | ] 1299 | }, 1300 | "execution_count": 6, 1301 | "metadata": {}, 1302 | "output_type": "execute_result" 1303 | } 1304 | ], 1305 | "source": [ 1306 | "estimator.train(input_fn=train_in_fn, steps=STEPS)" 1307 | ] 1308 | }, 1309 | { 1310 | "cell_type": "code", 1311 | "execution_count": 7, 1312 | "metadata": {}, 1313 | "outputs": [ 1314 | { 1315 | "name": "stdout", 1316 | "output_type": "stream", 1317 | "text": [ 1318 | "INFO:tensorflow:Calling model_fn.\n", 1319 | "INFO:tensorflow:Done calling model_fn.\n", 1320 | "INFO:tensorflow:Starting evaluation at 2018-08-05-10:51:31\n", 1321 | "INFO:tensorflow:Graph was finalized.\n", 1322 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_uniform_conv\\model.ckpt-7600\n", 1323 | "INFO:tensorflow:Running local_init_op.\n", 1324 | "INFO:tensorflow:Done running local_init_op.\n", 1325 | "INFO:tensorflow:accuracy = 0.78125\n", 1326 | "INFO:tensorflow:Finished evaluation at 2018-08-05-10:51:42\n", 1327 | "INFO:tensorflow:Saving dict for global step 7600: global_step = 7600, loss = 0.5717341\n" 1328 | ] 1329 | }, 1330 | { 1331 | "data": { 1332 | "text/plain": [ 1333 | "{'global_step': 7600, 'loss': 0.5717341}" 1334 | ] 1335 | }, 1336 | "execution_count": 7, 1337 | "metadata": {}, 1338 | "output_type": "execute_result" 1339 | } 1340 | ], 1341 | "source": [ 1342 | "estimator.evaluate(input_fn=lambda: classifier_input_fn(X_train,\n", 1343 | " Y_train,\n", 1344 | " 32, is_train=False))" 1345 | ] 1346 | }, 1347 | { 1348 | "cell_type": "code", 1349 | "execution_count": 8, 1350 | "metadata": {}, 1351 | "outputs": [ 1352 | { 1353 | "name": "stdout", 1354 | "output_type": "stream", 1355 | "text": [ 1356 | "INFO:tensorflow:Calling model_fn.\n", 1357 | "INFO:tensorflow:Done calling model_fn.\n", 1358 | "INFO:tensorflow:Starting evaluation at 2018-08-05-10:51:51\n", 1359 | "INFO:tensorflow:Graph was finalized.\n", 1360 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_uniform_conv\\model.ckpt-7600\n", 1361 | "INFO:tensorflow:Running local_init_op.\n", 1362 | "INFO:tensorflow:Done running local_init_op.\n", 1363 | "INFO:tensorflow:accuracy = 0.40625\n", 1364 | "INFO:tensorflow:Finished evaluation at 2018-08-05-10:51:55\n", 1365 | "INFO:tensorflow:Saving dict for global step 7600: global_step = 7600, loss = 0.9549831\n" 1366 | ] 1367 | }, 1368 | { 1369 | "data": { 1370 | "text/plain": [ 1371 | "{'global_step': 7600, 'loss': 0.9549831}" 1372 | ] 1373 | }, 1374 | "execution_count": 8, 1375 | "metadata": {}, 1376 | "output_type": "execute_result" 1377 | } 1378 | ], 1379 | "source": [ 1380 | "estimator.evaluate(input_fn=test_in_fn)" 1381 | ] 1382 | }, 1383 | { 1384 | "cell_type": "markdown", 1385 | "metadata": {}, 1386 | "source": [ 1387 | "## CoordConv over NotSoClever - Uniform Split\n", 1388 | "*Same Architecture*" 1389 | ] 1390 | }, 1391 | { 1392 | "cell_type": "code", 1393 | "execution_count": 1, 1394 | "metadata": {}, 1395 | "outputs": [], 1396 | "source": [ 1397 | "import tensorflow as tf\n", 1398 | "\n", 1399 | "from utils.nsc import NotSoCleverCreator as NSCCreator\n", 1400 | "from models.supervised_coordconv import model_fn as coordconv_model_fn\n", 1401 | "from nn.pipeline import classifier_input_fn" 1402 | ] 1403 | }, 1404 | { 1405 | "cell_type": "code", 1406 | "execution_count": 2, 1407 | "metadata": {}, 1408 | "outputs": [ 1409 | { 1410 | "data": { 1411 | "text/plain": [ 1412 | "((2436, 2), (813, 2), (2436, 64, 64, 1), (813, 64, 64, 1))" 1413 | ] 1414 | }, 1415 | "execution_count": 2, 1416 | "metadata": {}, 1417 | "output_type": "execute_result" 1418 | } 1419 | ], 1420 | "source": [ 1421 | "nsc = NSCCreator()\n", 1422 | "\n", 1423 | "X_train, X_test = nsc.uniform_split()\n", 1424 | "Y_train = nsc.one_hot_coords(nsc.canvas_size, X_train)\n", 1425 | "Y_test = nsc.one_hot_coords(nsc.canvas_size, X_test)\n", 1426 | "\n", 1427 | "X_train.shape, X_test.shape, Y_train.shape, Y_test.shape" 1428 | ] 1429 | }, 1430 | { 1431 | "cell_type": "code", 1432 | "execution_count": 3, 1433 | "metadata": {}, 1434 | "outputs": [ 1435 | { 1436 | "name": "stdout", 1437 | "output_type": "stream", 1438 | "text": [ 1439 | "INFO:tensorflow:Using default config.\n", 1440 | "INFO:tensorflow:Using config: {'_keep_checkpoint_max': 5, '_task_type': 'worker', '_train_distribute': None, '_task_id': 0, '_save_checkpoints_secs': 600, '_save_summary_steps': 100, '_cluster_spec': , '_num_worker_replicas': 1, '_master': '', '_num_ps_replicas': 0, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_save_checkpoints_steps': None, '_session_config': None, '_tf_random_seed': None, '_is_chief': True, '_service': None, '_global_id_in_cluster': 0, '_model_dir': './pixel_classification/supervised_uniform_coord', '_evaluation_master': ''}\n" 1441 | ] 1442 | } 1443 | ], 1444 | "source": [ 1445 | "estimator = tf.estimator.Estimator(model_fn=coordconv_model_fn,\n", 1446 | " params={\n", 1447 | " 'lr': 1e-2\n", 1448 | " },\n", 1449 | " model_dir='./pixel_classification/supervised_uniform_coord')" 1450 | ] 1451 | }, 1452 | { 1453 | "cell_type": "code", 1454 | "execution_count": 4, 1455 | "metadata": {}, 1456 | "outputs": [], 1457 | "source": [ 1458 | "train_in_fn = lambda: classifier_input_fn(X_train, Y_train, 32)\n", 1459 | "test_in_fn = lambda: classifier_input_fn(X_test, Y_test, 32, is_train=False)" 1460 | ] 1461 | }, 1462 | { 1463 | "cell_type": "code", 1464 | "execution_count": 5, 1465 | "metadata": {}, 1466 | "outputs": [ 1467 | { 1468 | "data": { 1469 | "text/plain": [ 1470 | "7600" 1471 | ] 1472 | }, 1473 | "execution_count": 5, 1474 | "metadata": {}, 1475 | "output_type": "execute_result" 1476 | } 1477 | ], 1478 | "source": [ 1479 | "EPOCHS = 100\n", 1480 | "STEPS_PER_EPOCH = X_train.shape[0] // 32\n", 1481 | "STEPS = EPOCHS * STEPS_PER_EPOCH\n", 1482 | "\n", 1483 | "STEPS" 1484 | ] 1485 | }, 1486 | { 1487 | "cell_type": "code", 1488 | "execution_count": null, 1489 | "metadata": {}, 1490 | "outputs": [ 1491 | { 1492 | "name": "stdout", 1493 | "output_type": "stream", 1494 | "text": [ 1495 | "INFO:tensorflow:Calling model_fn.\n", 1496 | "INFO:tensorflow:Done calling model_fn.\n", 1497 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 1498 | "INFO:tensorflow:Graph was finalized.\n", 1499 | "INFO:tensorflow:Running local_init_op.\n", 1500 | "INFO:tensorflow:Done running local_init_op.\n", 1501 | "INFO:tensorflow:Saving checkpoints for 1 into ./pixel_classification/supervised_uniform_coord\\model.ckpt.\n", 1502 | "INFO:tensorflow:step = 0, loss = 8.337212\n", 1503 | "INFO:tensorflow:accuracy = 0.0\n", 1504 | "INFO:tensorflow:global_step/sec: 3.41602\n", 1505 | "INFO:tensorflow:step = 100, loss = 7.7774725 (29.291 sec)\n", 1506 | "INFO:tensorflow:accuracy = 0.0 (29.275 sec)\n", 1507 | "INFO:tensorflow:global_step/sec: 3.58353\n", 1508 | "INFO:tensorflow:step = 200, loss = 6.0056696 (27.916 sec)\n", 1509 | "INFO:tensorflow:accuracy = 0.0 (27.917 sec)\n", 1510 | "INFO:tensorflow:global_step/sec: 3.57938\n", 1511 | "INFO:tensorflow:step = 300, loss = 6.148604 (27.914 sec)\n", 1512 | "INFO:tensorflow:accuracy = 0.0 (27.915 sec)\n", 1513 | "INFO:tensorflow:global_step/sec: 3.60666\n", 1514 | "INFO:tensorflow:step = 400, loss = 6.002205 (27.723 sec)\n", 1515 | "INFO:tensorflow:accuracy = 0.0 (27.720 sec)\n", 1516 | "INFO:tensorflow:global_step/sec: 3.5776\n", 1517 | "INFO:tensorflow:step = 500, loss = 6.516039 (27.967 sec)\n", 1518 | "INFO:tensorflow:accuracy = 0.0 (27.967 sec)\n", 1519 | "INFO:tensorflow:global_step/sec: 3.57822\n", 1520 | "INFO:tensorflow:step = 600, loss = 5.5351315 (27.931 sec)\n", 1521 | "INFO:tensorflow:accuracy = 0.0 (27.931 sec)\n", 1522 | "INFO:tensorflow:global_step/sec: 3.60576\n", 1523 | "INFO:tensorflow:step = 700, loss = 5.024356 (27.828 sec)\n", 1524 | "INFO:tensorflow:accuracy = 0.03125 (27.828 sec)\n", 1525 | "INFO:tensorflow:global_step/sec: 3.56843\n", 1526 | "INFO:tensorflow:step = 800, loss = 4.9154143 (27.929 sec)\n", 1527 | "INFO:tensorflow:accuracy = 0.0 (27.929 sec)\n", 1528 | "INFO:tensorflow:global_step/sec: 3.58079\n", 1529 | "INFO:tensorflow:step = 900, loss = 6.105327 (27.927 sec)\n", 1530 | "INFO:tensorflow:accuracy = 0.0 (27.927 sec)\n", 1531 | "INFO:tensorflow:global_step/sec: 3.60765\n", 1532 | "INFO:tensorflow:step = 1000, loss = 4.981456 (27.735 sec)\n", 1533 | "INFO:tensorflow:accuracy = 0.0 (27.735 sec)\n", 1534 | "INFO:tensorflow:global_step/sec: 3.56614\n", 1535 | "INFO:tensorflow:step = 1100, loss = 7.183775 (28.032 sec)\n", 1536 | "INFO:tensorflow:accuracy = 0.0 (28.035 sec)\n", 1537 | "INFO:tensorflow:global_step/sec: 3.5783\n", 1538 | "INFO:tensorflow:step = 1200, loss = 4.9289846 (27.971 sec)\n", 1539 | "INFO:tensorflow:accuracy = 0.03125 (27.969 sec)\n", 1540 | "INFO:tensorflow:global_step/sec: 3.57013\n", 1541 | "INFO:tensorflow:step = 1300, loss = 5.6439867 (27.979 sec)\n", 1542 | "INFO:tensorflow:accuracy = 0.03125 (27.979 sec)\n", 1543 | "INFO:tensorflow:global_step/sec: 3.60779\n", 1544 | "INFO:tensorflow:step = 1400, loss = 5.073251 (27.718 sec)\n", 1545 | "INFO:tensorflow:accuracy = 0.0 (27.718 sec)\n", 1546 | "INFO:tensorflow:global_step/sec: 3.58374\n", 1547 | "INFO:tensorflow:step = 1500, loss = 4.292246 (27.904 sec)\n", 1548 | "INFO:tensorflow:accuracy = 0.0 (27.919 sec)\n", 1549 | "INFO:tensorflow:global_step/sec: 3.58089\n", 1550 | "INFO:tensorflow:step = 1600, loss = 4.779973 (27.926 sec)\n", 1551 | "INFO:tensorflow:accuracy = 0.0 (27.910 sec)\n", 1552 | "INFO:tensorflow:global_step/sec: 3.60958\n", 1553 | "INFO:tensorflow:step = 1700, loss = 4.846997 (27.720 sec)\n", 1554 | "INFO:tensorflow:accuracy = 0.0 (27.720 sec)\n", 1555 | "INFO:tensorflow:global_step/sec: 3.57468\n", 1556 | "INFO:tensorflow:step = 1800, loss = 5.0733805 (27.975 sec)\n", 1557 | "INFO:tensorflow:accuracy = 0.0 (27.975 sec)\n", 1558 | "INFO:tensorflow:global_step/sec: 3.56615\n", 1559 | "INFO:tensorflow:step = 1900, loss = 4.9428277 (28.041 sec)\n", 1560 | "INFO:tensorflow:accuracy = 0.0 (28.041 sec)\n", 1561 | "INFO:tensorflow:global_step/sec: 3.57858\n", 1562 | "INFO:tensorflow:step = 2000, loss = 3.5652518 (27.928 sec)\n", 1563 | "INFO:tensorflow:accuracy = 0.0 (27.928 sec)\n", 1564 | "INFO:tensorflow:global_step/sec: 3.59899\n", 1565 | "INFO:tensorflow:step = 2100, loss = 4.1397123 (27.789 sec)\n", 1566 | "INFO:tensorflow:accuracy = 0.03125 (27.791 sec)\n", 1567 | "INFO:tensorflow:Saving checkpoints for 2134 into ./pixel_classification/supervised_uniform_coord\\model.ckpt.\n", 1568 | "INFO:tensorflow:global_step/sec: 3.12831\n", 1569 | "INFO:tensorflow:step = 2200, loss = 3.5766404 (31.963 sec)\n", 1570 | "INFO:tensorflow:accuracy = 0.0 (31.961 sec)\n", 1571 | "INFO:tensorflow:global_step/sec: 3.5824\n", 1572 | "INFO:tensorflow:step = 2300, loss = 3.3577461 (27.930 sec)\n", 1573 | "INFO:tensorflow:accuracy = 0.15625 (27.930 sec)\n", 1574 | "INFO:tensorflow:global_step/sec: 3.61081\n", 1575 | "INFO:tensorflow:step = 2400, loss = 3.788035 (27.679 sec)\n", 1576 | "INFO:tensorflow:accuracy = 0.0 (27.695 sec)\n", 1577 | "INFO:tensorflow:global_step/sec: 3.58154\n", 1578 | "INFO:tensorflow:step = 2500, loss = 3.906345 (27.921 sec)\n", 1579 | "INFO:tensorflow:accuracy = 0.0 (27.905 sec)\n", 1580 | "INFO:tensorflow:global_step/sec: 3.58388\n", 1581 | "INFO:tensorflow:step = 2600, loss = 3.9991732 (27.950 sec)\n", 1582 | "INFO:tensorflow:accuracy = 0.0 (27.950 sec)\n", 1583 | "INFO:tensorflow:global_step/sec: 3.58215\n", 1584 | "INFO:tensorflow:step = 2700, loss = 2.6168633 (27.869 sec)\n", 1585 | "INFO:tensorflow:accuracy = 0.125 (27.869 sec)\n", 1586 | "INFO:tensorflow:global_step/sec: 3.55431\n", 1587 | "INFO:tensorflow:step = 2800, loss = 4.8908997 (28.153 sec)\n", 1588 | "INFO:tensorflow:accuracy = 0.0 (28.155 sec)\n", 1589 | "INFO:tensorflow:global_step/sec: 3.5764\n", 1590 | "INFO:tensorflow:step = 2900, loss = 2.1932855 (27.959 sec)\n", 1591 | "INFO:tensorflow:accuracy = 0.1875 (27.957 sec)\n", 1592 | "INFO:tensorflow:global_step/sec: 3.54841\n", 1593 | "INFO:tensorflow:step = 3000, loss = 3.3526468 (28.166 sec)\n", 1594 | "INFO:tensorflow:accuracy = 0.09375 (28.166 sec)\n", 1595 | "INFO:tensorflow:global_step/sec: 3.54246\n", 1596 | "INFO:tensorflow:step = 3100, loss = 3.833461 (28.308 sec)\n", 1597 | "INFO:tensorflow:accuracy = 0.0625 (28.308 sec)\n", 1598 | "INFO:tensorflow:global_step/sec: 3.45256\n", 1599 | "INFO:tensorflow:step = 3200, loss = 2.6981692 (28.885 sec)\n", 1600 | "INFO:tensorflow:accuracy = 0.21875 (28.885 sec)\n", 1601 | "INFO:tensorflow:global_step/sec: 3.56652\n", 1602 | "INFO:tensorflow:step = 3300, loss = 2.4156854 (28.054 sec)\n", 1603 | "INFO:tensorflow:accuracy = 0.3125 (28.054 sec)\n", 1604 | "INFO:tensorflow:global_step/sec: 3.60584\n", 1605 | "INFO:tensorflow:step = 3400, loss = 2.4789586 (27.717 sec)\n", 1606 | "INFO:tensorflow:accuracy = 0.3125 (27.717 sec)\n", 1607 | "INFO:tensorflow:global_step/sec: 3.58142\n", 1608 | "INFO:tensorflow:step = 3500, loss = 0.65697885 (27.926 sec)\n", 1609 | "INFO:tensorflow:accuracy = 0.78125 (27.928 sec)\n", 1610 | "INFO:tensorflow:global_step/sec: 3.58235\n", 1611 | "INFO:tensorflow:step = 3600, loss = 2.089714 (28.143 sec)\n", 1612 | "INFO:tensorflow:accuracy = 0.375 (28.141 sec)\n", 1613 | "INFO:tensorflow:global_step/sec: 3.57798\n", 1614 | "INFO:tensorflow:step = 3700, loss = 4.687994 (27.717 sec)\n", 1615 | "INFO:tensorflow:accuracy = 0.03125 (27.717 sec)\n", 1616 | "INFO:tensorflow:global_step/sec: 3.51896\n", 1617 | "INFO:tensorflow:step = 3800, loss = 2.3000693 (28.418 sec)\n", 1618 | "INFO:tensorflow:accuracy = 0.0 (28.418 sec)\n", 1619 | "INFO:tensorflow:global_step/sec: 3.56142\n", 1620 | "INFO:tensorflow:step = 3900, loss = 1.4336262 (28.079 sec)\n", 1621 | "INFO:tensorflow:accuracy = 0.3125 (28.079 sec)\n", 1622 | "INFO:tensorflow:global_step/sec: 3.554\n", 1623 | "INFO:tensorflow:step = 4000, loss = 2.9369934 (28.137 sec)\n", 1624 | "INFO:tensorflow:accuracy = 0.28125 (28.137 sec)\n", 1625 | "INFO:tensorflow:global_step/sec: 3.56715\n", 1626 | "INFO:tensorflow:step = 4100, loss = 3.943876 (28.187 sec)\n", 1627 | "INFO:tensorflow:accuracy = 0.0 (28.203 sec)\n", 1628 | "INFO:tensorflow:global_step/sec: 3.51705\n", 1629 | "INFO:tensorflow:step = 4200, loss = 0.010305532 (28.284 sec)\n", 1630 | "INFO:tensorflow:accuracy = 1.0 (28.269 sec)\n", 1631 | "INFO:tensorflow:Saving checkpoints for 4259 into ./pixel_classification/supervised_uniform_coord\\model.ckpt.\n", 1632 | "INFO:tensorflow:global_step/sec: 3.17679\n", 1633 | "INFO:tensorflow:step = 4300, loss = 0.003750733 (31.478 sec)\n", 1634 | "INFO:tensorflow:accuracy = 1.0 (31.479 sec)\n", 1635 | "INFO:tensorflow:global_step/sec: 3.61045\n", 1636 | "INFO:tensorflow:step = 4400, loss = 0.0016167609 (27.693 sec)\n", 1637 | "INFO:tensorflow:accuracy = 1.0 (27.692 sec)\n", 1638 | "INFO:tensorflow:global_step/sec: 3.57938\n", 1639 | "INFO:tensorflow:step = 4500, loss = 0.0011663219 (27.938 sec)\n", 1640 | "INFO:tensorflow:accuracy = 1.0 (27.938 sec)\n", 1641 | "INFO:tensorflow:global_step/sec: 3.58055\n", 1642 | "INFO:tensorflow:step = 4600, loss = 0.00091003877 (27.979 sec)\n", 1643 | "INFO:tensorflow:accuracy = 1.0 (27.981 sec)\n", 1644 | "INFO:tensorflow:global_step/sec: 3.60599\n", 1645 | "INFO:tensorflow:step = 4700, loss = 0.000742465 (27.682 sec)\n", 1646 | "INFO:tensorflow:accuracy = 1.0 (27.696 sec)\n", 1647 | "INFO:tensorflow:global_step/sec: 3.58007\n", 1648 | "INFO:tensorflow:step = 4800, loss = 0.00058044377 (27.948 sec)\n", 1649 | "INFO:tensorflow:accuracy = 1.0 (27.932 sec)\n", 1650 | "INFO:tensorflow:global_step/sec: 3.58012\n", 1651 | "INFO:tensorflow:step = 4900, loss = 0.00047553543 (27.916 sec)\n", 1652 | "INFO:tensorflow:accuracy = 1.0 (27.916 sec)\n", 1653 | "INFO:tensorflow:global_step/sec: 3.56538\n", 1654 | "INFO:tensorflow:step = 5000, loss = 0.0004480104 (28.048 sec)\n", 1655 | "INFO:tensorflow:accuracy = 1.0 (28.063 sec)\n", 1656 | "INFO:tensorflow:global_step/sec: 3.60114\n", 1657 | "INFO:tensorflow:step = 5100, loss = 0.00035293118 (27.816 sec)\n", 1658 | "INFO:tensorflow:accuracy = 1.0 (27.800 sec)\n", 1659 | "INFO:tensorflow:global_step/sec: 3.57458\n", 1660 | "INFO:tensorflow:step = 5200, loss = 0.00031540781 (27.933 sec)\n", 1661 | "INFO:tensorflow:accuracy = 1.0 (27.934 sec)\n", 1662 | "INFO:tensorflow:global_step/sec: 3.57091\n", 1663 | "INFO:tensorflow:step = 5300, loss = 0.00028976315 (28.000 sec)\n", 1664 | "INFO:tensorflow:accuracy = 1.0 (27.998 sec)\n", 1665 | "INFO:tensorflow:global_step/sec: 3.60608\n", 1666 | "INFO:tensorflow:step = 5400, loss = 0.0002483044 (27.731 sec)\n", 1667 | "INFO:tensorflow:accuracy = 1.0 (27.731 sec)\n", 1668 | "INFO:tensorflow:global_step/sec: 3.58232\n", 1669 | "INFO:tensorflow:step = 5500, loss = 0.0002211646 (27.930 sec)\n", 1670 | "INFO:tensorflow:accuracy = 1.0 (27.930 sec)\n", 1671 | "INFO:tensorflow:global_step/sec: 3.57671\n", 1672 | "INFO:tensorflow:step = 5600, loss = 0.000208829 (27.974 sec)\n", 1673 | "INFO:tensorflow:accuracy = 1.0 (27.974 sec)\n", 1674 | "INFO:tensorflow:global_step/sec: 3.607\n", 1675 | "INFO:tensorflow:step = 5700, loss = 0.00018401237 (27.693 sec)\n", 1676 | "INFO:tensorflow:accuracy = 1.0 (27.693 sec)\n", 1677 | "INFO:tensorflow:global_step/sec: 3.57716\n", 1678 | "INFO:tensorflow:step = 5800, loss = 0.00016757558 (27.955 sec)\n", 1679 | "INFO:tensorflow:accuracy = 1.0 (27.955 sec)\n", 1680 | "INFO:tensorflow:global_step/sec: 3.58235\n", 1681 | "INFO:tensorflow:step = 5900, loss = 0.00014147279 (27.918 sec)\n", 1682 | "INFO:tensorflow:accuracy = 1.0 (27.918 sec)\n", 1683 | "INFO:tensorflow:global_step/sec: 3.5817\n", 1684 | "INFO:tensorflow:step = 6000, loss = 0.00012582492 (27.916 sec)\n", 1685 | "INFO:tensorflow:accuracy = 1.0 (27.916 sec)\n", 1686 | "INFO:tensorflow:global_step/sec: 3.60975\n", 1687 | "INFO:tensorflow:step = 6100, loss = 0.000110497174 (27.750 sec)\n", 1688 | "INFO:tensorflow:accuracy = 1.0 (27.750 sec)\n" 1689 | ] 1690 | } 1691 | ], 1692 | "source": [ 1693 | "estimator.train(input_fn=train_in_fn, steps=STEPS)" 1694 | ] 1695 | }, 1696 | { 1697 | "cell_type": "code", 1698 | "execution_count": 6, 1699 | "metadata": {}, 1700 | "outputs": [ 1701 | { 1702 | "name": "stdout", 1703 | "output_type": "stream", 1704 | "text": [ 1705 | "INFO:tensorflow:Calling model_fn.\n", 1706 | "INFO:tensorflow:Done calling model_fn.\n", 1707 | "INFO:tensorflow:Starting evaluation at 2018-08-05-11:30:53\n", 1708 | "INFO:tensorflow:Graph was finalized.\n", 1709 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_uniform_coord\\model.ckpt-4259\n", 1710 | "INFO:tensorflow:Running local_init_op.\n", 1711 | "INFO:tensorflow:Done running local_init_op.\n", 1712 | "INFO:tensorflow:accuracy = 1.0\n", 1713 | "INFO:tensorflow:Finished evaluation at 2018-08-05-11:31:14\n", 1714 | "INFO:tensorflow:Saving dict for global step 4259: global_step = 4259, loss = 0.004766937\n" 1715 | ] 1716 | }, 1717 | { 1718 | "data": { 1719 | "text/plain": [ 1720 | "{'global_step': 4259, 'loss': 0.004766937}" 1721 | ] 1722 | }, 1723 | "execution_count": 6, 1724 | "metadata": {}, 1725 | "output_type": "execute_result" 1726 | } 1727 | ], 1728 | "source": [ 1729 | "estimator.evaluate(input_fn=lambda: classifier_input_fn(X_train,\n", 1730 | " Y_train,\n", 1731 | " 32, is_train=False))" 1732 | ] 1733 | }, 1734 | { 1735 | "cell_type": "code", 1736 | "execution_count": 7, 1737 | "metadata": {}, 1738 | "outputs": [ 1739 | { 1740 | "name": "stdout", 1741 | "output_type": "stream", 1742 | "text": [ 1743 | "INFO:tensorflow:Calling model_fn.\n", 1744 | "INFO:tensorflow:Done calling model_fn.\n", 1745 | "INFO:tensorflow:Starting evaluation at 2018-08-05-11:31:23\n", 1746 | "INFO:tensorflow:Graph was finalized.\n", 1747 | "INFO:tensorflow:Restoring parameters from ./pixel_classification/supervised_uniform_coord\\model.ckpt-4259\n", 1748 | "INFO:tensorflow:Running local_init_op.\n", 1749 | "INFO:tensorflow:Done running local_init_op.\n", 1750 | "INFO:tensorflow:accuracy = 1.0\n", 1751 | "INFO:tensorflow:Finished evaluation at 2018-08-05-11:31:28\n", 1752 | "INFO:tensorflow:Saving dict for global step 4259: global_step = 4259, loss = 0.0046338784\n" 1753 | ] 1754 | }, 1755 | { 1756 | "data": { 1757 | "text/plain": [ 1758 | "{'global_step': 4259, 'loss': 0.0046338784}" 1759 | ] 1760 | }, 1761 | "execution_count": 7, 1762 | "metadata": {}, 1763 | "output_type": "execute_result" 1764 | } 1765 | ], 1766 | "source": [ 1767 | "estimator.evaluate(input_fn=test_in_fn)" 1768 | ] 1769 | } 1770 | ], 1771 | "metadata": { 1772 | "kernelspec": { 1773 | "display_name": "Python 3", 1774 | "language": "python", 1775 | "name": "python3" 1776 | }, 1777 | "language_info": { 1778 | "codemirror_mode": { 1779 | "name": "ipython", 1780 | "version": 3 1781 | }, 1782 | "file_extension": ".py", 1783 | "mimetype": "text/x-python", 1784 | "name": "python", 1785 | "nbconvert_exporter": "python", 1786 | "pygments_lexer": "ipython3", 1787 | "version": "3.5.1" 1788 | } 1789 | }, 1790 | "nbformat": 4, 1791 | "nbformat_minor": 2 1792 | } 1793 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal -------------------------------------------------------------------------------- /images/coordconv_arch_clf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyush2896/CoordConv-Implementation/92e788a2c1829691ff0902c4e829e8818b9c1562/images/coordconv_arch_clf.png -------------------------------------------------------------------------------- /images/coordconv_vs_conv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyush2896/CoordConv-Implementation/92e788a2c1829691ff0902c4e829e8818b9c1562/images/coordconv_vs_conv.png -------------------------------------------------------------------------------- /images/deconv_arch_clf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyush2896/CoordConv-Implementation/92e788a2c1829691ff0902c4e829e8818b9c1562/images/deconv_arch_clf.png -------------------------------------------------------------------------------- /images/notsoclever_ds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyush2896/CoordConv-Implementation/92e788a2c1829691ff0902c4e829e8818b9c1562/images/notsoclever_ds.png -------------------------------------------------------------------------------- /models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyush2896/CoordConv-Implementation/92e788a2c1829691ff0902c4e829e8818b9c1562/models/__init__.py -------------------------------------------------------------------------------- /models/supervised_conv.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | from nn.layers import DeConv2D 3 | import numpy as np 4 | 5 | def _accuracy(labels_flattened, logits_flattened): 6 | return tf.reduce_mean(tf.cast( 7 | tf.equal(tf.argmax(logits_flattened, 1), 8 | tf.argmax(labels_flattened, 1)), tf.float32)) 9 | 10 | def model_fn(features, labels, mode, params): 11 | c = params['c'] 12 | deconv64c = DeConv2D(2, 64*c, 2, 'valid', activation=tf.nn.leaky_relu) 13 | deconv32c = DeConv2D(2, 32*c, 2, 'valid', activation=tf.nn.leaky_relu) 14 | deconv1c = DeConv2D(2, 1, 2, 'valid') 15 | 16 | coords = tf.reshape(features['coords'], (-1, 1, 1, 2)) 17 | deconv1 = deconv64c(coords) 18 | deconv2 = deconv64c(deconv1) 19 | deconv3 = deconv64c(deconv2) 20 | deconv4 = deconv32c(deconv3) 21 | deconv5 = deconv32c(deconv4) 22 | logits = deconv1c(deconv5) 23 | 24 | out = tf.nn.softmax(logits) 25 | 26 | 27 | if mode == tf.estimator.ModeKeys.PREDICT: 28 | predictions = { 29 | 'imgs': out 30 | } 31 | spec = tf.estimator.EstimatorSpec(mode=mode, 32 | predictions=predictions) 33 | else: 34 | logits_flattened = tf.layers.flatten(logits) 35 | labels_flattened = tf.layers.flatten(labels) 36 | 37 | accuracy = _accuracy(labels_flattened, logits_flattened) 38 | logging_hook = tf.train.LoggingTensorHook({"accuracy" : accuracy}, 39 | every_n_iter=100) 40 | 41 | cost = tf.nn.softmax_cross_entropy_with_logits_v2( 42 | labels=labels_flattened, logits=logits_flattened) 43 | loss = tf.reduce_mean(cost) 44 | 45 | eval_metric_ops = { 46 | "accuracy": accuracy, 47 | "loss": loss 48 | } 49 | 50 | optimizer = tf.train.AdamOptimizer(params['lr']) 51 | train_op = optimizer.minimize(loss, 52 | global_step=tf.train.get_global_step()) 53 | 54 | spec= tf.estimator.EstimatorSpec(mode=mode, 55 | loss=loss, train_op=train_op, 56 | training_hooks=[logging_hook], 57 | evaluation_hooks=[logging_hook]) 58 | 59 | return spec 60 | -------------------------------------------------------------------------------- /models/supervised_coordconv.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | from nn.layers import CoordConv2D, Conv2D 3 | import numpy as np 4 | 5 | def _accuracy(labels_flattened, logits_flattened): 6 | return tf.reduce_mean(tf.cast( 7 | tf.equal(tf.argmax(logits_flattened, 1), 8 | tf.argmax(labels_flattened, 1)), tf.float32)) 9 | 10 | def model_fn(features, labels, mode, params): 11 | coords = tf.reshape(features['coords'], (-1, 1, 1, 2)) 12 | features_tiled = tf.tile( 13 | coords, [1, tf.shape(labels)[1], tf.shape(labels)[2], 1]) 14 | 15 | coord_conv = CoordConv2D(1, 32, 1, activation=tf.nn.leaky_relu) 16 | conv32 = Conv2D(1, 32, 1, activation=tf.nn.leaky_relu) 17 | conv64 = Conv2D(1, 64, 1, activation=tf.nn.leaky_relu) 18 | conv1 = Conv2D(1, 1, 1) 19 | 20 | x = coord_conv(features_tiled) 21 | x = conv32(x) 22 | x = conv64(x) 23 | x = conv64(x) 24 | logits = conv1(x) 25 | 26 | out = tf.nn.softmax(logits) 27 | 28 | if mode == tf.estimator.ModeKeys.PREDICT: 29 | predictions = { 30 | 'imgs': out 31 | } 32 | spec = tf.estimator.EstimatorSpec(mode=mode, 33 | predictions=predictions) 34 | else: 35 | logits_flattened = tf.layers.flatten(logits) 36 | labels_flattened = tf.layers.flatten(labels) 37 | 38 | accuracy = _accuracy(labels_flattened, logits_flattened) 39 | logging_hook = tf.train.LoggingTensorHook({"accuracy" : accuracy}, 40 | every_n_iter=100) 41 | 42 | cost = tf.nn.softmax_cross_entropy_with_logits_v2( 43 | labels=labels_flattened, logits=logits_flattened) 44 | loss = tf.reduce_mean(cost) 45 | optimizer = tf.train.AdamOptimizer(params['lr']) 46 | train_op = optimizer.minimize(loss, 47 | global_step=tf.train.get_global_step()) 48 | 49 | spec= tf.estimator.EstimatorSpec(mode=mode, 50 | loss=loss, train_op=train_op, 51 | training_hooks=[logging_hook], 52 | evaluation_hooks=[logging_hook]) 53 | 54 | return spec 55 | -------------------------------------------------------------------------------- /nn/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyush2896/CoordConv-Implementation/92e788a2c1829691ff0902c4e829e8818b9c1562/nn/__init__.py -------------------------------------------------------------------------------- /nn/layers.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | 3 | class CoordConv2D: 4 | def __init__(self, k_size, filters, 5 | strides=1, padding='same', 6 | with_r=False, activation=None, 7 | kernel_initializer=None, name=None): 8 | 9 | self.with_r = with_r 10 | 11 | self.conv_kwargs = { 12 | 'filters': filters, 13 | 'kernel_size': k_size, 14 | 'strides': strides, 15 | 'padding': padding, 16 | 'activation': activation, 17 | 'kernel_initializer': kernel_initializer, 18 | 'name': name 19 | } 20 | 21 | def __call__(self, in_tensor): 22 | with tf.name_scope('coord_conv'): 23 | batch_size = tf.shape(in_tensor)[0] 24 | x_dim = tf.shape(in_tensor)[1] 25 | y_dim = tf.shape(in_tensor)[2] 26 | 27 | xx_indices = tf.tile( 28 | tf.expand_dims(tf.expand_dims(tf.range(x_dim), 0), 0), 29 | [batch_size, y_dim, 1]) 30 | xx_indices = tf.expand_dims(xx_indices, -1) 31 | 32 | yy_indices = tf.tile( 33 | tf.expand_dims(tf.reshape(tf.range(y_dim), (y_dim, 1)), 0), 34 | [batch_size, 1, x_dim]) 35 | yy_indices = tf.expand_dims(yy_indices, -1) 36 | 37 | xx_indices = tf.divide(xx_indices, x_dim - 1) 38 | yy_indices = tf.divide(yy_indices, y_dim - 1) 39 | 40 | xx_indices = tf.cast(tf.subtract(tf.multiply(xx_indices, 2.), 1.), 41 | dtype=in_tensor.dtype) 42 | yy_indices = tf.cast(tf.subtract(tf.multiply(yy_indices, 2.), 1.), 43 | dtype=in_tensor.dtype) 44 | 45 | processed_tensor = tf.concat([in_tensor, xx_indices, yy_indices], axis=-1) 46 | 47 | if self.with_r: 48 | rr = tf.sqrt(tf.add(tf.square(xx_indices - 0.5), 49 | tf.square(yy_indices - 0.5))) 50 | processed_tensor = tf.concat([processed_tensor, rr], axis=-1) 51 | 52 | return tf.layers.conv2d(processed_tensor, **self.conv_kwargs) 53 | 54 | class Conv2D: 55 | def __init__(self, k_size, filters, 56 | strides=1, padding='same', 57 | activation=None, kernel_initializer=None, 58 | name=None): 59 | self.conv_kwargs = { 60 | 'filters': filters, 61 | 'kernel_size': k_size, 62 | 'strides': strides, 63 | 'padding': padding, 64 | 'activation': activation, 65 | 'kernel_initializer': kernel_initializer, 66 | 'name': name 67 | } 68 | 69 | def __call__(self, in_tensor): 70 | with tf.name_scope('conv'): 71 | return tf.layers.conv2d(in_tensor, **self.conv_kwargs) 72 | 73 | class DeConv2D: 74 | def __init__(self, k_size, filters, 75 | strides=1, padding='same', 76 | activation=None, kernel_initializer=None, 77 | name=None): 78 | self.conv_kwargs = { 79 | 'filters': filters, 80 | 'kernel_size': k_size, 81 | 'strides': strides, 82 | 'padding': padding, 83 | 'activation': activation, 84 | 'kernel_initializer': kernel_initializer, 85 | 'name': name 86 | } 87 | 88 | def __call__(self, in_tensor): 89 | with tf.name_scope('deconv'): 90 | return tf.layers.conv2d_transpose(in_tensor, **self.conv_kwargs) 91 | -------------------------------------------------------------------------------- /nn/pipeline.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | 3 | def classifier_input_fn(X, y=None, batch_size=32, is_train=True): 4 | if y is not None: 5 | ds = tf.data.Dataset.from_tensor_slices((X, y)) 6 | else: 7 | ds = tf.data.Dataset.from_tensor_slices((X,)) 8 | 9 | if is_train: 10 | ds = ds.shuffle(2000).batch(batch_size).repeat(None) 11 | else: 12 | ds = ds.prefetch(2000).batch(batch_size).repeat(1) 13 | 14 | if y is not None: 15 | X, y = ds.make_one_shot_iterator().get_next() 16 | return {'coords': X}, y 17 | X = ds.make_one_shot_iterator().get_next()[0] 18 | return {'coords': X} 19 | 20 | def get_classifier_train_spec(X, y, batch_size, epochs, steps_per_epoch): 21 | train_in_fn = lambda: classifier_input_fn(X, y, batch_size) 22 | return tf.estimator.TrainSpec(input_fn=train_in_fn, 23 | max_steps=epochs*steps_per_epoch) 24 | 25 | def get_classifier_eval_spec(X, y, batch_size): 26 | eval_in_fn = lambda: classifier_input_fn(X, y, batch_size, False) 27 | return tf.estimator.TrainSpec(input_fn=eval_in_fn) 28 | -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyush2896/CoordConv-Implementation/92e788a2c1829691ff0902c4e829e8818b9c1562/utils/__init__.py -------------------------------------------------------------------------------- /utils/nsc.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | class NotSoCleverCreator: 4 | def __init__(self, 5 | canvas_size=(64, 64), 6 | center_region=(56, 56), 7 | square_size=(9, 9)): 8 | self.canvas_size = canvas_size 9 | self.center_region = center_region 10 | self.square_size = square_size 11 | self._calc_coords() 12 | self.indices = None 13 | 14 | def _calc_coords(self): 15 | xx_start = (self.canvas_size[0] - self.center_region[0]) // 2 16 | xx_end = self.center_region[0] + xx_start 17 | xx_indices = np.arange(xx_start, xx_end + 1) 18 | 19 | yy_start = (self.canvas_size[1] - self.center_region[1]) // 2 20 | yy_end = self.center_region[1] + yy_start 21 | yy_indices = np.arange(yy_start, yy_end + 1) 22 | 23 | self.coords = np.reshape( 24 | np.stack(np.meshgrid(xx_indices, yy_indices), -1), 25 | (-1, 2)).astype('float32') 26 | 27 | @classmethod 28 | def one_hot_coords(cls, canvas_size, coords): 29 | coords = coords.astype('int32') 30 | n_coords = coords.shape[0] 31 | one_hot = np.zeros((n_coords, *canvas_size)) 32 | one_hot[list(range(n_coords)), coords[:, 0], coords[:, 1]] = 1 33 | one_hot = np.expand_dims(one_hot, -1) 34 | return one_hot.astype('float32') 35 | 36 | def quadrant_split(self): 37 | mid_x = self.canvas_size[0] // 2 38 | mid_y = self.canvas_size[1] // 2 39 | test_indices = (self.coords[:, 0] >= mid_x) & (self.coords[:, 1] >= mid_y) 40 | train_coords = self.coords[~test_indices] 41 | test_coords = self.coords[test_indices] 42 | return train_coords, test_coords 43 | 44 | def uniform_split(self): 45 | split = int(0.75 * self.coords.shape[0]) 46 | if self.indices is None: 47 | self.indices = np.random.permutation(self.coords.shape[0]) 48 | train_indices = self.indices[:split] 49 | test_indices = self.indices[split:] 50 | 51 | return self.coords[train_indices], self.coords[test_indices] 52 | -------------------------------------------------------------------------------- /visualize_coords.py: -------------------------------------------------------------------------------- 1 | from utils.nsc import NotSoCleverCreator as NSCCreator 2 | from matplotlib import pyplot as plt 3 | import argparse 4 | import numpy as np 5 | 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--canvas_size', metavar='canvas_size', 8 | help='Canvas Size; default: 64, 64', type=int, 9 | nargs='+', default=(64, 64)) 10 | parser.add_argument('--center_region', metavar='center_region', 11 | help='Center coordinates region; default: 56, 56', type=int, 12 | nargs='+', default=(56, 56)) 13 | parser.add_argument('--square_size', metavar='square_size', 14 | help='Square Size; default: 9, 9', type=int, 15 | nargs='+', default=(9, 9)) 16 | 17 | args = vars(parser.parse_args()) 18 | 19 | 20 | nsc = NSCCreator(**args) 21 | 22 | # Uniform distribution 23 | #all_coord_imgs = nsc.one_hot_coords(args['canvas_size'], nsc.coords) 24 | #np.random.shuffle(all_coord_imgs) 25 | #split = int(0.8 * all_coord_imgs.shape[0]) 26 | #train_imgs = all_coord_imgs[:split] 27 | #test_imgs = all_coord_imgs[split:] 28 | 29 | train_coords, test_coords = nsc.uniform_split() 30 | train_imgs = nsc.one_hot_coords(args['canvas_size'], train_coords) 31 | test_imgs = nsc.one_hot_coords(args['canvas_size'], test_coords) 32 | 33 | summation_train = np.sum(train_imgs, axis=0) 34 | summation_test = np.sum(test_imgs, axis=0) 35 | 36 | # quadrant distribution 37 | train_quad_coords, test_quad_coords = nsc.quadrant_split() 38 | train_quad_imgs = nsc.one_hot_coords(args['canvas_size'], train_quad_coords) 39 | test_quad_imgs = nsc.one_hot_coords(args['canvas_size'], test_quad_coords) 40 | 41 | summation_train_quad = np.sum(train_quad_imgs, axis=0) 42 | summation_test_quad = np.sum(test_quad_imgs, axis=0) 43 | 44 | plt.figure(figsize=(7, 7)) 45 | plt.subplot(2, 3, 1) 46 | plt.title('Sum of all\ntrain points') 47 | plt.imshow(summation_train[..., 0], cmap='gray') 48 | plt.axis('off') 49 | #plt.text(-20, args['canvas_size'][0] // 2, 'Uniform\nSplit') 50 | 51 | plt.subplot(2, 3, 2) 52 | plt.title('Sum of all\ntest points') 53 | plt.imshow(summation_test[..., 0], cmap='gray') 54 | plt.axis('off') 55 | 56 | plt.subplot(2, 3, 3) 57 | plt.text(0, 0.5, 'Uniform\nSplit') 58 | plt.xlim(0, 1) 59 | plt.ylim(0, 1) 60 | plt.axis('off') 61 | 62 | plt.subplot(2, 3, 4) 63 | plt.imshow(summation_train_quad[..., 0], cmap='gray') 64 | plt.axis('off') 65 | #plt.text(-20, args['canvas_size'][0] // 2, 'Quadrant\nSplit') 66 | 67 | plt.subplot(2, 3, 5) 68 | plt.imshow(summation_test_quad[..., 0], cmap='gray') 69 | plt.axis('off') 70 | 71 | plt.subplot(2, 3, 6) 72 | plt.text(0, 0.5, 'Quadrant\nSplit') 73 | plt.xlim(0, 1) 74 | plt.ylim(0, 1) 75 | plt.axis('off') 76 | 77 | plt.tight_layout() 78 | plt.show() --------------------------------------------------------------------------------