{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Self-Driving Car Engineer Nanodegree\n", "\n", "## Deep Learning\n", "\n", "## Project: Build a Traffic Sign Recognition Classifier\n", "\n", "In this notebook, a template is provided for you to implement your functionality in stages which is required to successfully complete this project. If additional code is required that cannot be included in the notebook, be sure that the Python code is successfully imported and included in your submission, if necessary. Sections that begin with **'Implementation'** in the header indicate where you should begin your implementation for your project. Note that some sections of implementation are optional, and will be marked with **'Optional'** in the header.\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide.\n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## Step 0: Load The Data" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Load pickled data\n", "import pickle\n", "import tensorflow as tf\n", "\n", "# TODO: Fill this in based on where you saved the training and testing data\n", "\n", "training_file = \"./data/train.p\"\n", "testing_file = \"./data/test.p\"\n", "\n", "with open(training_file, mode='rb') as f:\n", " train = pickle.load(f)\n", "with open(testing_file, mode='rb') as f:\n", " test = pickle.load(f)\n", " \n", "X, y = train['features'], train['labels']\n", "X_test, y_test = test['features'], test['labels']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## Step 1: Dataset Summary & Exploration\n", "\n", "The pickled data is a dictionary with 4 key/value pairs:\n", "\n", "- `'features'` is a 4D array containing raw pixel data of the traffic sign images, (num examples, width, height, channels).\n", "- `'labels'` is a 2D array containing the label/class id of the traffic sign. The file `signnames.csv` contains id -> name mappings for each id.\n", "- `'sizes'` is a list containing tuples, (width, height) representing the the original width and height the image.\n", "- `'coords'` is a list containing tuples, (x1, y1, x2, y2) representing coordinates of a bounding box around the sign in the image. **THESE COORDINATES ASSUME THE ORIGINAL IMAGE. THE PICKLED DATA CONTAINS RESIZED VERSIONS (32 by 32) OF THESE IMAGES**\n", "\n", "Complete the basic data summary below." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of training examples = 39209\n", "Number of testing examples = 12630\n", "Image data shape = (32, 32)\n", "Number of classes = 43\n" ] } ], "source": [ "### Replace each question mark with the appropriate value.\n", "import numpy as np\n", "\n", "# TODO: Number of training examples\n", "n_train = X.shape[0]\n", "\n", "# TODO: Number of testing examples.\n", "n_test = X_test.shape[0]\n", "\n", "# TODO: What's the shape of an traffic sign image?\n", "image_shape = (X.shape[1], X.shape[2])\n", "\n", "# TODO: How many unique classes/labels there are in the dataset.\n", "n_classes = np.unique(y).shape[0]\n", "\n", "print(\"Number of training examples =\", n_train)\n", "print(\"Number of testing examples =\", n_test)\n", "print(\"Image data shape =\", image_shape)\n", "print(\"Number of classes =\", n_classes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize the German Traffic Signs Dataset using the pickled file(s). This is open ended, suggestions include: plotting traffic sign images, plotting the count of each sign, etc.\n", "\n", "The [Matplotlib](http://matplotlib.org/) [examples](http://matplotlib.org/examples/index.html) and [gallery](http://matplotlib.org/gallery.html) pages are a great resource for doing visualizations in Python.\n", "\n", "**NOTE:** It's recommended you start with something simple first. If you wish to do more, come back to it after you've completed the rest of the sections." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ImportError", "evalue": "No module named 'seaborn'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;31m### Feel free to use as many code cells as needed.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;31m# Visualizations will be shown in the notebook.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'matplotlib inline'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mImportError\u001b[0m: No module named 'seaborn'" ] } ], "source": [ "### Data exploration visualization goes here.\n", "### Feel free to use as many code cells as needed.\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "# Visualizations will be shown in the notebook.\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'sns' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m15\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcountplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Distribution of Training Labels\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'sns' is not defined" ] } ], "source": [ "plt.figure(figsize=(15,5))\n", "sns.countplot(y)\n", "plt.title(\"Distribution of Training Labels\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n+2RVq1QxpwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "plt.imshow(X[500])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "\n", "## Step 2: Design and Test a Model Architecture\n", "\n", "Design and implement a deep learning model that learns to recognize traffic signs. Train and test your model on the [German Traffic Sign Dataset](http://benchmark.ini.rub.de/?section=gtsrb&subsection=dataset).\n", "\n", "There are various aspects to consider when thinking about this problem:\n", "\n", "- Neural network architecture\n", "- Play around preprocessing techniques (normalization, rgb to grayscale, etc)\n", "- Number of examples per label (some have more than others).\n", "- Generate fake data.\n", "\n", "Here is an example of a [published baseline model on this problem](http://yann.lecun.com/exdb/publis/pdf/sermanet-ijcnn-11.pdf). It's not required to be familiar with the approach used in the paper but, it's good practice to try to read papers like these.\n", "\n", "**NOTE:** The LeNet-5 implementation shown in the [classroom](https://classroom.udacity.com/nanodegrees/nd013/parts/fbf77062-5703-404e-b60c-95b78b2f3f9e/modules/6df7ae49-c61c-4bb2-a23e-6527e69209ec/lessons/601ae704-1035-4287-8b11-e2c2716217ad/concepts/d4aca031-508f-4e0b-b493-e7b706120f81) at the end of the CNN lesson is a solid starting point. You'll have to change the number of classes and possibly the preprocessing, but aside from that it's plug and play!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation\n", "\n", "Use the code cell (or multiple code cells, if necessary) to implement the first step of your project. Once you have completed your implementation and are satisfied with the results, be sure to thoroughly answer the questions that follow." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "### Preprocess the data here.\n", "### Feel free to use as many code cells as needed.\n", "import cv2\n", "\n", "def convert_to_y(images):\n", " #images_y = np.array([cv2.cvtColor(img, cv2.COLOR_BGR2YUV) for img in images])\n", " images_y = images\n", " return images_y\n", "\n", "#X_train_y = convert_to_y(X_train)\n", "#X_test_y = convert_to_y(X_test)\n", "#train_mean = np.mean(X_train_y)\n", "#X_train_pre = X_train_y - train_mean\n", "#X_test_pre = X_test_y - train_mean\n", "#plt.imshow(X_train_y[500,:,:,:])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#plt.imshow(X_train_pre[500,:,:,:])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 \n", "\n", "_Describe how you preprocessed the data. Why did you choose that technique?_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "\n", "I preprocessed the data by converting the images to YUV and extracting the Y channel. I then subtracting the mean training pixel value from the images. I choose these techniques based on the \"Traffic Sign Recognition with Multi-Scale Convolutional Networks\" as these seemed to work well as preprocessing steps. Also, I new it would be important to normalize the data to help gradient descent perform better. Since pixels are already bounded in a range of 0-255 this isn't as necessary, but I figured it could only help." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "### Generate data additional data (OPTIONAL!)\n", "### and split the data into training/validation/testing sets here.\n", "### Feel free to use as many code cells as needed.\n", "\n", "def rescale(img):\n", " scale_factor = np.random.uniform(.9, 1.1)\n", " if scale_factor > 1:\n", " inter_type = cv2.INTER_LINEAR\n", " else:\n", " inter_type = cv2.INTER_AREA\n", " return cv2.resize(img,None,fx=scale_factor, fy=scale_factor, interpolation = inter_type)\n", "\n", "def rotate(img):\n", " rows,cols,_ = img.shape\n", " rotate_factor = np.random.uniform(-15.0, 15.0)\n", " M = cv2.getRotationMatrix2D((cols/2,rows/2),rotate_factor,1)\n", " return cv2.warpAffine(img,M,(cols,rows))\n", "\n", "def translate(img):\n", " rows,cols,_ = img.shape\n", " x_translate_factor = np.random.uniform(-2.0, 2.0)\n", " y_translate_factor = np.random.uniform(-2.0, 2.0)\n", " M = np.float32([[1,0,x_translate_factor],[0,1,y_translate_factor]])\n", " return cv2.warpAffine(img,M,(cols,rows))\n", "\n", "def jitter_data(data, labels, scale=5):\n", " assert data.shape[0] == labels.shape[0]\n", " shape = data.shape\n", " jitter_data = np.zeros((shape[0]*scale,shape[1],shape[2],shape[3]))\n", " jitter_labels = np.zeros(shape[0]*scale)\n", " for n in range(scale):\n", " start_index = n * shape[0]\n", " for i in range(shape[0]):\n", " img = rescale(data[i,:,:,:])\n", " img = rotate(img)\n", " img = translate(img)\n", " row, col, _ = img.shape\n", " if row > 32:\n", " inter_type = cv2.INTER_LINEAR\n", " else:\n", " inter_type = cv2.INTER_AREA\n", " img = cv2.resize(img,(32, 32), interpolation = inter_type)\n", " jitter_data[start_index+i,:,:,:] = img\n", " jitter_labels[start_index+i] = labels[i]\n", " return jitter_data, jitter_labels\n", "\n", "\n", "def dense_to_one_hot(y, nb_classes=None):\n", " y = np.array(y, dtype='int')\n", " if not nb_classes:\n", " nb_classes = np.max(y)+1\n", " Y = np.zeros((len(y), nb_classes))\n", " for i in range(len(y)):\n", " Y[i, y[i]] = 1.\n", " return Y\n", "\n", "\n", "class DataSet(object):\n", "\n", " def __init__(self,\n", " X,\n", " y):\n", "\n", " self.X = X\n", " self.y = y\n", "\n", " self.pointer = 0\n", " self.dataset_length = len(y)\n", "\n", "\n", " def next_batch(self, size):\n", " next_indices = np.arange(self.pointer, self.pointer + size) % self.dataset_length\n", " self.pointer += size\n", " self.pointer = self.pointer % self.dataset_length\n", "\n", " return self.X[next_indices], self.y[next_indices]\n", " \n", " \n", " def length(self):\n", " return self.dataset_length" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#X_train_jitter, y_train_jitter = jitter_data(X_train_pre, y_train, scale=1)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#X_train_jitter.shape" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#X_train_all = np.concatenate((X_train_jitter, X_train_pre), axis=0)\n", "#y_train_all = np.append(y_train_jitter, y_train)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#print(X_train_all.shape[0])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(26270, 32, 32, 3)\n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.33, random_state=0)\n", "X_train = X_train.astype('float32')\n", "X_val = X_val.astype('float32')\n", "X_train = X_train / 255 - 0.5\n", "X_val = X_val / 255 - 0.5\n", "y_train = dense_to_one_hot(y_train)\n", "y_val = dense_to_one_hot(y_val)\n", "print(X_train.shape)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "train_ds = DataSet(X_train, y_train)\n", "val_ds = DataSet(X_val, y_val)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2\n", "\n", "_Describe how you set up the training, validation and testing data for your model. **Optional**: If you generated additional data, how did you generate the data? Why did you generate the data? What are the differences in the new dataset (with generated data) from the original dataset?_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\**Answer:**\n", "\n", "I left the testing set as was given to us and split the training data into training and validation. To do this I used scikit learn's train test split functionality using 30% for the validation set and 70% for the training set.\n", "\n", "I generated data in the same way as, \"Traffic Sign Recognition with Multi-Scale Convolutional Networks.\" I created 5 extra versions of each image by slightly perturbing the scale, rotation, and translation of the image. I generated the data because adding some distortion to our training data will help our model be more robust." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "### Define your architecture here.\n", "### Feel free to use as many code cells as needed.\n", "from tensorflow.contrib.layers import flatten\n", "\n", "def conv2d(input, weight_tuple, strides_list):\n", " # Filter (weights and bias)\n", " depth = weight_tuple[-1]\n", " F_W = tf.Variable(tf.truncated_normal(weight_tuple))\n", " F_b = tf.Variable(tf.zeros(depth))\n", " strides = strides_list\n", " padding = 'VALID'\n", " return tf.nn.relu(tf.nn.conv2d(input, F_W, strides, padding) + F_b)\n", "\n", "def max_pool(input, ksize=[1,3,3,1], strides=[1,2,2,1]):\n", " padding = 'VALID'\n", " return tf.nn.max_pool(input, ksize, strides, padding)\n", "\n", "def alexnet_layer(input, weight_tuple, strides_list):\n", " conv = conv2d(input, weight_tuple, strides_list)\n", " max_layer = max_pool(conv)\n", " return tf.nn.local_response_normalization(max_layer)\n", "\n", "def fully_connected(fc, fc_shape):\n", " units = fc_shape[-1]\n", " W = tf.Variable(tf.truncated_normal(shape=(fc_shape)))\n", " b = tf.Variable(tf.zeros(units))\n", " fc_mult = tf.matmul(fc, W) + b\n", " return tf.nn.tanh(fc_mult)\n", "\n", "def alexnet(x):\n", " network = alexnet_layer(x, (4,4,1,14), [1,4,4,1])\n", " network = alexnet_layer(network, (2,2,14,38), [1,1,1,1])\n", " network = conv2d(network, (2,2,38,57), [1,1,1,1])\n", " network = conv2d(network, (2,2,57,57), [1,1,1,1])\n", " network = alexnet_layer(network, (2,2,57,38), [1,1,1,1])\n", "\n", " network = flatten(network)\n", " network_shape = (network.get_shape().as_list()[-1], 4096)\n", " network = fully_connected(network, network_shape)\n", " network = tf.nn.dropout(network, 0.5)\n", " network = fully_connected(network, (4096, 4096))\n", " network = tf.nn.dropout(network, 0.5)\n", " \n", " W = tf.Variable(tf.truncated_normal(shape=(4096, 43)))\n", " b = tf.Variable(tf.zeros(43))\n", " return tf.matmul(network, W) + b\n", "\n", "def LeNet(x):\n", " x = conv2d(x, (5,5,3,6), [1,1,1,1])\n", " x = max_pool(x, [1,2,2,1], [1,2,2,1])\n", " \n", " x = conv2d(x, (2,2,6,16), [1,2,2,1])\n", " x = max_pool(x, [1,2,2,1], [1,2,2,1])\n", " \n", " # Flatten\n", " fc1 = flatten(x)\n", " # (5 * 5 * 16, 120)\n", " fc1_shape = (fc1.get_shape().as_list()[-1], 120)\n", " \n", " fc1_W = tf.Variable(tf.truncated_normal(shape=(fc1_shape)))\n", " fc1_b = tf.Variable(tf.zeros(120))\n", " fc1 = tf.matmul(fc1, fc1_W) + fc1_b\n", " fc1 = tf.nn.relu(fc1)\n", " \n", " fc2_W = tf.Variable(tf.truncated_normal(shape=(120, 43)))\n", " fc2_b = tf.Variable(tf.zeros(43))\n", " return tf.matmul(fc1, fc2_W) + fc2_b\n", "\n", "def simple_net(x):\n", " F_W = tf.Variable(tf.truncated_normal((3,3,3,32)))\n", " F_b = tf.Variable(tf.zeros(32))\n", " conv_layer = tf.nn.relu(tf.nn.conv2d(x, F_W, [1,1,1,1], \"VALID\") + F_b)\n", " conv_layer = conv2d(x, (3,3,3,32), [1,1,1,1])\n", " fc1 = flatten(conv_layer)\n", " fc1_shape = (fc1.get_shape().as_list()[-1], 128)\n", " \n", " fc1_W = tf.Variable(tf.truncated_normal(shape=(fc1_shape)))\n", " fc1_b = tf.Variable(tf.zeros(128))\n", " fc1 = tf.matmul(fc1, fc1_W) + fc1_b\n", " fc1 = tf.nn.relu(fc1)\n", " \n", " fc2_W = tf.Variable(tf.truncated_normal(shape=(128, 43)))\n", " fc2_b = tf.Variable(tf.zeros(43))\n", " return tf.matmul(fc1, fc2_W) + fc2_b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3\n", "\n", "_What does your final architecture look like? (Type of model, layers, sizes, connectivity, etc.) For reference on how to build a deep neural network using TensorFlow, see [Deep Neural Network in TensorFlow\n", "](https://classroom.udacity.com/nanodegrees/nd013/parts/fbf77062-5703-404e-b60c-95b78b2f3f9e/modules/6df7ae49-c61c-4bb2-a23e-6527e69209ec/lessons/b516a270-8600-4f93-a0a3-20dfeabe5da6/concepts/83a3a2a2-a9bd-4b7b-95b0-eb924ab14432) from the classroom._\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "### Train your model here.\n", "### Feel free to use as many code cells as needed.\n", "\n", "x = tf.placeholder(tf.float32, (None, 32, 32, 3))\n", "y = tf.placeholder(tf.float32, (None, 43))\n", "fc2 = simple_net(x)\n", "\n", "loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(fc2, y))\n", "opt = tf.train.AdamOptimizer()\n", "train_op = opt.minimize(loss_op)\n", "correct_prediction = tf.equal(tf.argmax(fc2, 1), tf.argmax(y, 1))\n", "accuracy_op = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def eval_data(dataset, BATCH_SIZE):\n", " \"\"\"\n", " Given a dataset as input returns the loss and accuracy.\n", " \"\"\"\n", " # If dataset.num_examples is not divisible by BATCH_SIZE\n", " # the remainder will be discarded.\n", " # Ex: If BATCH_SIZE is 64 and training set has 55000 examples\n", " # steps_per_epoch = 55000 // 64 = 859\n", " # num_examples = 859 * 64 = 54976\n", " #\n", " # So in that case we go over 54976 examples instead of 55000.\n", " steps_per_epoch = dataset.length() // BATCH_SIZE\n", " num_examples = steps_per_epoch * BATCH_SIZE\n", " total_acc, total_loss = 0, 0\n", " sess = tf.get_default_session()\n", " for step in range(steps_per_epoch):\n", " batch_x, batch_y = dataset.next_batch(BATCH_SIZE)\n", " loss, acc = sess.run([loss_op, accuracy_op], feed_dict={x: batch_x, y: batch_y})\n", " total_acc += (acc * batch_x.shape[0])\n", " total_loss += (loss * batch_x.shape[0])\n", " return total_loss/num_examples, total_acc/num_examples" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "EPOCH 1 ...\n", "Validation loss = 13.227\n", "Validation accuracy = 0.072\n", "\n", "EPOCH 2 ...\n", "Validation loss = 4.869\n", "Validation accuracy = 0.058\n", "\n" ] }, { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mstep\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msteps_per_epoch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0mbatch_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch_y\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrain_ds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mBATCH_SIZE\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_op\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbatch_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbatch_y\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mval_loss\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mval_acc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0meval_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mval_ds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBATCH_SIZE\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/tylerfolkman/anaconda/envs/carnd/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 715\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 716\u001b[0m result = self._run(None, fetches, feed_dict, options_ptr,\n\u001b[0;32m--> 717\u001b[0;31m run_metadata_ptr)\n\u001b[0m\u001b[1;32m 718\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 719\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/tylerfolkman/anaconda/envs/carnd/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_run\u001b[0;34m(self, handle, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 913\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfinal_fetches\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mfinal_targets\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 914\u001b[0m results = self._do_run(handle, final_targets, final_fetches,\n\u001b[0;32m--> 915\u001b[0;31m feed_dict_string, options, run_metadata)\n\u001b[0m\u001b[1;32m 916\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 917\u001b[0m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/tylerfolkman/anaconda/envs/carnd/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_do_run\u001b[0;34m(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 963\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhandle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 964\u001b[0m return self._do_call(_run_fn, self._session, feed_dict, fetch_list,\n\u001b[0;32m--> 965\u001b[0;31m target_list, options, run_metadata)\n\u001b[0m\u001b[1;32m 966\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 967\u001b[0m return self._do_call(_prun_fn, self._session, handle, feed_dict,\n", "\u001b[0;32m/Users/tylerfolkman/anaconda/envs/carnd/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_do_call\u001b[0;34m(self, fn, *args)\u001b[0m\n\u001b[1;32m 970\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_do_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 971\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 972\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 973\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mOpError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 974\u001b[0m \u001b[0mmessage\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcompat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_text\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/tylerfolkman/anaconda/envs/carnd/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_run_fn\u001b[0;34m(session, feed_dict, fetch_list, target_list, options, run_metadata)\u001b[0m\n\u001b[1;32m 952\u001b[0m return tf_session.TF_Run(session, options,\n\u001b[1;32m 953\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 954\u001b[0;31m status, run_metadata)\n\u001b[0m\u001b[1;32m 955\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 956\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_prun_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "EPOCHS = 100\n", "BATCH_SIZE = 128\n", "saver = tf.train.Saver()\n", "\n", "with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:\n", " sess.run(tf.initialize_all_variables())\n", " steps_per_epoch = train_ds.length() // BATCH_SIZE\n", " num_examples = steps_per_epoch * BATCH_SIZE\n", "\n", " # Train model\n", " for i in range(EPOCHS):\n", " for step in range(steps_per_epoch):\n", " batch_x, batch_y = train_ds.next_batch(BATCH_SIZE)\n", " loss = sess.run(train_op, feed_dict={x: batch_x, y: batch_y})\n", "\n", " val_loss, val_acc = eval_data(val_ds, BATCH_SIZE)\n", " print(\"EPOCH {} ...\".format(i+1))\n", " print(\"Validation loss = {:.3f}\".format(val_loss))\n", " print(\"Validation accuracy = {:.3f}\".format(val_acc))\n", " print()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "y_train.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Input, Activation, Conv2D, Flatten\n", "\n", "X_train = X_train.astype('float32')\n", "X_val = X_val.astype('float32')\n", "X_train = X_train / 255 - 0.5\n", "X_val = X_val / 255 - 0.5\n", "y_train = dense_to_one_hot(y_train, 43)\n", "y_val = dense_to_one_hot(y_val)\n", "\n", "model = Sequential()\n", "model.add(Conv2D(32, 3, 3, input_shape=(32, 32, 3), activation='relu'))\n", "model.add(Flatten())\n", "model.add(Dense(128, activation='relu'))\n", "model.add(Dense(43, activation='softmax'))\n", "\n", "model.summary()\n", "# TODO: Compile and train the model here.\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer='adam',\n", " metrics=['accuracy'])\n", "history = model.fit(X_train, y_train,\n", " batch_size=128, nb_epoch=20,\n", " verbose=1, validation_data=(X_val, y_val))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "### Question 4\n", "\n", "_How did you train your model? (Type of optimizer, batch size, epochs, hyperparameters, etc.)_\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5\n", "\n", "\n", "_What approach did you take in coming up with a solution to this problem? It may have been a process of trial and error, in which case, outline the steps you took to get to the final solution and why you chose those steps. Perhaps your solution involved an already well known implementation or architecture. In this case, discuss why you think this is suitable for the current problem._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## Step 3: Test a Model on New Images\n", "\n", "Take several pictures of traffic signs that you find on the web or around you (at least five), and run them through your classifier on your computer to produce example results. The classifier might not recognize some local signs but it could prove interesting nonetheless.\n", "\n", "You may find `signnames.csv` useful as it contains mappings from the class id (integer) to the actual sign name." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation\n", "\n", "Use the code cell (or multiple code cells, if necessary) to implement the first step of your project. Once you have completed your implementation and are satisfied with the results, be sure to thoroughly answer the questions that follow." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "### Load the images and plot them here.\n", "### Feel free to use as many code cells as needed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6\n", "\n", "_Choose five candidate images of traffic signs and provide them in the report. Are there any particular qualities of the image(s) that might make classification difficult? It could be helpful to plot the images in the notebook._\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "### Run the predictions here.\n", "### Feel free to use as many code cells as needed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 7\n", "\n", "_Is your model able to perform equally well on captured pictures when compared to testing on the dataset? The simplest way to do this check the accuracy of the predictions. For example, if the model predicted 1 out of 5 signs correctly, it's 20% accurate._\n", "\n", "_**NOTE:** You could check the accuracy manually by using `signnames.csv` (same directory). This file has a mapping from the class id (0-42) to the corresponding sign name. So, you could take the class id the model outputs, lookup the name in `signnames.csv` and see if it matches the sign from the image._\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "### Visualize the softmax probabilities here.\n", "### Feel free to use as many code cells as needed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 8\n", "\n", "*Use the model's softmax probabilities to visualize the **certainty** of its predictions, [`tf.nn.top_k`](https://www.tensorflow.org/versions/r0.12/api_docs/python/nn.html#top_k) could prove helpful here. Which predictions is the model certain of? Uncertain? If the model was incorrect in its initial prediction, does the correct prediction appear in the top k? (k should be 5 at most)*\n", "\n", "`tf.nn.top_k` will return the values and indices (class ids) of the top k predictions. So if k=3, for each sign, it'll return the 3 largest probabilities (out of a possible 43) and the correspoding class ids.\n", "\n", "Take this numpy array as an example:\n", "\n", "```\n", "# (5, 6) array\n", "a = np.array([[ 0.24879643, 0.07032244, 0.12641572, 0.34763842, 0.07893497,\n", " 0.12789202],\n", " [ 0.28086119, 0.27569815, 0.08594638, 0.0178669 , 0.18063401,\n", " 0.15899337],\n", " [ 0.26076848, 0.23664738, 0.08020603, 0.07001922, 0.1134371 ,\n", " 0.23892179],\n", " [ 0.11943333, 0.29198961, 0.02605103, 0.26234032, 0.1351348 ,\n", " 0.16505091],\n", " [ 0.09561176, 0.34396535, 0.0643941 , 0.16240774, 0.24206137,\n", " 0.09155967]])\n", "```\n", "\n", "Running it through `sess.run(tf.nn.top_k(tf.constant(a), k=3))` produces:\n", "\n", "```\n", "TopKV2(values=array([[ 0.34763842, 0.24879643, 0.12789202],\n", " [ 0.28086119, 0.27569815, 0.18063401],\n", " [ 0.26076848, 0.23892179, 0.23664738],\n", " [ 0.29198961, 0.26234032, 0.16505091],\n", " [ 0.34396535, 0.24206137, 0.16240774]]), indices=array([[3, 0, 5],\n", " [0, 1, 4],\n", " [0, 5, 1],\n", " [1, 3, 5],\n", " [1, 4, 3]], dtype=int32))\n", "```\n", "\n", "Looking just at the first row we get `[ 0.34763842, 0.24879643, 0.12789202]`, you can confirm these are the 3 largest probabilities in `a`. You'll also notice `[3, 0, 5]` are the corresponding indices." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \\n\",\n", " \"**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda env:carnd]", "language": "python", "name": "conda-env-carnd-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }