- 1. Overview
- 2. Data Set Summary & Exploration
- 3. Design and Test a Model Architecture
- 4. Test a Model on New Images
1. Overview
In this project, I have implemented a classifier using deep neural networks, convolutional neural networks and transfer learning to classify traffic signs. I have trained a model so that it can decode traffic signs from natural images by using the German Traffic Sign Dataset. After the model is trained, I have tested my model program on new images of traffic signs collected from the web.
The steps of this project are the following:
- Load the data set (see below for links to the project data set)
- Explore, summarize and visualize the data set
- Design, train and test a model architecture
- Use the model to make predictions on new images
- Analyze the softmax probabilities of the new images
- Summarize the results with a written report
2. Data Set Summary & Exploration
This is a pickled dataset in which we’ve already resized the images to 32x32.
Provide a basic summary of the data set
I used the numpy library to calculate summary statistics of the traffic signs data set:
- The size of training set is 34799
- The size of validation set is 4410
- The size of test set is 12630
- The shape of a traffic sign image is (32, 32, 3)
- The number of unique classes/labels in the data set is 43
Include an exploratory visualization of the dataset
Here is an exploratory visualization of the data set. It pulls in a random set of 5 images.
I also detail the dataset structure by plotting the occurrence of each image class to get an idea of how the data is distributed.
3. Design and Test a Model Architecture
My final model consisted of the following layers:
Layer | Description |
---|---|
Input | 32x32x3 RGB image |
Convolution 5x5 | 2x2 stride, valid padding, outputs 28x28x6 |
RELU | |
Max pooling | 2x2 stride, outputs 14x14x6 |
Convolution 5x5 | 2x2 stride, valid padding, outputs 10x10x16 |
RELU | |
Max pooling | 2x2 stride, outputs 5x5x6 |
Fully connected | input 400, output 120 |
RELU | |
Dropout | 50% keep |
Fully connected | input 120, output 84 |
RELU | |
Dropout | 50% keep |
Fully connected | input 84, output 43 |
To train the model, I used an LeNet for the most part that was given, but I added a dropout function for deleteing the fully connected layer’s output. I used the AdamOptimizer with a learning rate of 0.001. The epochs used was 30 while the batch size was 64. Other important parameters I learned were important was the number and distribution of additional data generated.
My final model results were:
- Train Accuracy = 0.999
- Valid Accuracy = 0.968
- Test Accuracy = 0.946
4. Test a Model on New Images
Here are five German traffic signs that I found on the web:
The model was able to correctly guess 8 of the 8 traffic signs, which gives an accuracy of 100%.
For the first image, the model is relatively sure that this is a Bumpy road (probability of 0.996), and the image does contain a bumpy road. The top 3 soft max probabilities were:
Probability | Prediction |
---|---|
0.9967528 | Bumpy Road |
0.0015 | Bicycles crossing |
0.0013 | Traffic signals |