├── .gitignore ├── LICENSE ├── LeNet.png ├── Pipeline architecture.png ├── README.md ├── Saved_Models ├── LeNet.data-00000-of-00001 ├── LeNet.index ├── LeNet.meta ├── VGGNet.data-00000-of-00001 ├── VGGNet.index ├── VGGNet.meta └── checkpoint ├── Traffic_Sign_Classifier.html ├── Traffic_Sign_Classifier.ipynb ├── VGGNet.png ├── _config.yml ├── signnames.csv └── traffic-signs-data ├── Screenshots ├── Equalized.png ├── Gray.png ├── LeNet.png ├── NewImg.png ├── Normalized.png ├── Test.png ├── TestHist.png ├── TopSoft.png ├── Train.png ├── TrainHist.png ├── VGGNet.png ├── Valid.png ├── ValidHist.png └── cm.png └── new_test_images ├── 001.jpg ├── 002.jpg ├── 003.jpg ├── 004.jpg └── 005.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints/ 2 | traffic-signs-data/*.p -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Mohamed Ameen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LeNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/LeNet.png -------------------------------------------------------------------------------- /Pipeline architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/Pipeline architecture.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # German Traffic Sign Classification Using TensorFlow 2 | **In this project, I used Python and TensorFlow to classify traffic signs.** 3 | 4 | **Dataset used: [German Traffic Sign Dataset](http://benchmark.ini.rub.de/?section=gtsrb&subsection=dataset). 5 | This dataset has more than 50,000 images of 43 classes.** 6 | 7 | **I was able to reach a +99% validation accuracy, and a 97.6% testing accuracy.** 8 | 9 | ## Pipeline architecture: 10 | - **Load The Data.** 11 | - **Dataset Summary & Exploration** 12 | - **Data Preprocessing**. 13 | - Shuffling. 14 | - Grayscaling. 15 | - Local Histogram Equalization. 16 | - Normalization. 17 | - **Design a Model Architecture.** 18 | - LeNet-5. 19 | - VGGNet. 20 | - **Model Training and Evaluation.** 21 | - **Testing the Model Using the Test Set.** 22 | - **Testing the Model on New Images.** 23 | 24 | I'll explain each step in details below. 25 | 26 | #### Environement: 27 | - Ubuntu 16.04 28 | - Anaconda 5.0.1 29 | - Python 3.6.2 30 | - TensorFlow 0.12.1 (GPU support) 31 | 32 | --- 33 | ## Step 1: Load The Data 34 | 35 | Download the dataset from [here](https://d17h27t6h515a5.cloudfront.net/topher/2017/February/5898cd6f_traffic-signs-data/traffic-signs-data.zip). This is a pickled dataset in which we've already resized the images to 32x32. 36 | 37 | We already have three `.p` files of 32x32 resized images: 38 | - `train.p`: The training set. 39 | - `test.p`: The testing set. 40 | - `valid.p`: The validation set. 41 | 42 | We will use Python `pickle` to load the data. 43 | 44 | --- 45 | 46 | ## Step 2: Dataset Summary & Exploration 47 | 48 | The pickled data is a dictionary with 4 key/value pairs: 49 | 50 | - `'features'` is a 4D array containing raw pixel data of the traffic sign images, (num examples, width, height, channels). 51 | - `'labels'` is a 1D array containing the label/class id of the traffic sign. The file `signnames.csv` contains id -> name mappings for each id. 52 | - `'sizes'` is a list containing tuples, (width, height) representing the original width and height the image. 53 | - `'coords'` is a list containing tuples, (x1, y1, x2, y2) representing coordinates of a bounding box around the sign in the image. 54 | 55 | **First, we will use `numpy` provide the number of images in each subset, in addition to the image size, and the number of unique classes.** 56 | Number of training examples: 34799 57 | Number of testing examples: 12630 58 | Number of validation examples: 4410 59 | Image data shape = (32, 32, 3) 60 | Number of classes = 43 61 | 62 | **Then, we used `matplotlib` plot sample images from each subset.** 63 | 64 | 65 |
66 | Combined Image 67 |
68 |

69 |
70 |
71 | 72 | 73 |
74 | Combined Image 75 |
76 |

77 |
78 |
79 | 80 |
81 | Combined Image 82 |
83 |

84 |
85 |
86 | 87 | 88 | **And finally, we will use `numpy` to plot a histogram of the count of images in each unique class.** 89 | 90 | 91 |
92 | Combined Image 93 |
94 |

95 |
96 |
97 | 98 |
99 | Combined Image 100 |
101 |

102 |
103 |
104 | 105 |
106 | Combined Image 107 |
108 |

109 |
110 |
111 | 112 | --- 113 | 114 | ## Step 3: Data Preprocessing 115 | 116 | In this step, we will apply several preprocessing steps to the input images to achieve the best possible results. 117 | 118 | **We will use the following preprocessing techniques:** 119 | 1. Shuffling. 120 | 2. Grayscaling. 121 | 3. Local Histogram Equalization. 122 | 4. Normalization. 123 | 124 | 1. **Shuffling**: In general, we shuffle the training data to increase randomness and variety in training dataset, in order for the model to be more stable. We will use `sklearn` to shuffle our data. 125 | 126 | 2. **Grayscaling**: In their paper ["Traffic Sign Recognition with Multi-Scale Convolutional Networks"](http://yann.lecun.com/exdb/publis/pdf/sermanet-ijcnn-11.pdf) published in 2011, P. Sermanet and Y. LeCun stated that using grayscale images instead of color improves the ConvNet's accuracy. We will use `OpenCV` to convert the training images into grey scale. 127 | 128 |
129 | Combined Image 130 |
131 |

132 |
133 |
134 | 135 | 3. **Local Histogram Equalization**: This technique simply spreads out the most frequent intensity values in an image, resulting in enhancing images with low contrast. Applying this technique will be very helpfull in our case since the dataset in hand has real world images, and many of them has low contrast. We will use `skimage` to apply local histogram equalization to the training images. 136 | 137 |
138 | Combined Image 139 |
140 |

141 |
142 |
143 | 144 | 4. **Normalization**: Normalization is a process that changes the range of pixel intensity values. Usually the image data should be normalized so that the data has mean zero and equal variance. 145 | 146 |
147 | Combined Image 148 |
149 |

150 |
151 |
152 | 153 | --- 154 | 155 | ## Step 3: Design a Model Architecture 156 | 157 | In this step, we will design and implement a deep learning model that learns to recognize traffic signs from our dataset [German Traffic Sign Dataset](http://benchmark.ini.rub.de/?section=gtsrb&subsection=dataset). 158 | 159 | We'll use Convolutional Neural Networks to classify the images in this dataset. The reason behind choosing ConvNets is that they are designed to recognize visual patterns directly from pixel images with minimal preprocessing. They automatically learn hierarchies of invariant features at every level from data. 160 | We will implement two of the most famous ConvNets. Our goal is to reach an accuracy of +95% on the validation set. 161 | 162 | I'll start by explaining each network architecture, then implement it using TensorFlow. 163 | 164 | **Notes**: 165 | 1. We specify the learning rate of 0.001, which tells the network how quickly to update the weights. 166 | 2. We minimize the loss function using the Adaptive Moment Estimation (Adam) Algorithm. Adam is an optimization algorithm introduced by D. Kingma and J. Lei Ba in a 2015 paper named [Adam: A Method for Stochastic Optimization](https://arxiv.org/abs/1412.6980). Adam algorithm computes adaptive learning rates for each parameter. In addition to storing an exponentially decaying average of past squared gradients like [Adadelta](https://arxiv.org/pdf/1212.5701.pdf) and [RMSprop](https://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf) algorithms, Adam also keeps an exponentially decaying average of past gradients mtmt, similar to [momentum algorithm](http://www.sciencedirect.com/science/article/pii/S0893608098001166?via%3Dihub), which in turn produce better results. 167 | 3. we will run `minimize()` function on the optimizer which use backprobagation to update the network and minimize our training loss. 168 | 169 | 170 | ### 1. LeNet-5 171 | LeNet-5 is a convolutional network designed for handwritten and machine-printed character recognition. It was introduced by the famous [Yann LeCun](https://en.wikipedia.org/wiki/Yann_LeCun) in his paper [Gradient-Based Learning Applied to Document Recognition](http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf) in 1998. Although this ConvNet is intended to classify hand-written digits, we're confident it have a very high accuracy when dealing with traffic signs, given that both hand-written digits and traffic signs are given to the computer in the form of pixel images. 172 | 173 | **LeNet-5 architecture:** 174 |
175 | Combined Image 176 |
177 |

178 |
179 |
180 | 181 | This ConvNet follows these steps: 182 | 183 | Input => Convolution => ReLU => Pooling => Convolution => ReLU => Pooling => FullyConnected => ReLU => FullyConnected 184 | 185 | **Layer 1 (Convolutional):** The output shape should be 28x28x6. 186 | 187 | **Activation.** Your choice of activation function. 188 | 189 | **Pooling.** The output shape should be 14x14x6. 190 | 191 | **Layer 2 (Convolutional):** The output shape should be 10x10x16. 192 | 193 | **Activation.** Your choice of activation function. 194 | 195 | **Pooling.** The output shape should be 5x5x16. 196 | 197 | **Flattening:** Flatten the output shape of the final pooling layer such that it's 1D instead of 3D. 198 | 199 | **Layer 3 (Fully Connected):** This should have 120 outputs. 200 | 201 | **Activation.** Your choice of activation function. 202 | 203 | **Layer 4 (Fully Connected):** This should have 84 outputs. 204 | 205 | **Activation.** Your choice of activation function. 206 | 207 | **Layer 5 (Fully Connected):** This should have 10 outputs. 208 | 209 | ### 2. VGGNet 210 | VGGNet was first introduced in 2014 by K. Simonyan and A. Zisserman from the University of Oxford in a paper called [Very Deep Convolutional Networks for Large-Scale Image Recognition](https://arxiv.org/pdf/1409.1556.pdf). They were investigating the convolutional network depth on its accuracy in the large-scale image recognition setting. Their main contribution is a thorough evaluation of networks of increasing depth using an architecture with very small (3x3) convolution filters, which shows that a significant improvement on the prior-art configurations can be achieved by pushing the depth to 16-19 weight layers. 211 | 212 | **VGGNet architecture:** 213 |
214 | Combined Image 215 |
216 |

217 |
218 |
219 | 220 | The original VGGNet architecture has 16-19 layers, but I've excluded some of them and implemented a modified version of only 12 layers to save computational resources. 221 | 222 | This ConvNet follows these steps: 223 | 224 | Input => Convolution => ReLU => Convolution => ReLU => Pooling => Convolution => ReLU => Convolution => ReLU => Pooling => Convolution => ReLU => Convolution => ReLU => Pooling => FullyConnected => ReLU => FullyConnected => ReLU => FullyConnected 225 | 226 | **Layer 1 (Convolutional):** The output shape should be 32x32x32. 227 | 228 | **Activation.** Your choice of activation function. 229 | 230 | **Layer 2 (Convolutional):** The output shape should be 32x32x32. 231 | 232 | **Activation.** Your choice of activation function. 233 | 234 | **Layer 3 (Pooling)** The output shape should be 16x16x32. 235 | 236 | **Layer 4 (Convolutional):** The output shape should be 16x16x64. 237 | 238 | **Activation.** Your choice of activation function. 239 | 240 | **Layer 5 (Convolutional):** The output shape should be 16x16x64. 241 | 242 | **Activation.** Your choice of activation function. 243 | 244 | **Layer 6 (Pooling)** The output shape should be 8x8x64. 245 | 246 | **Layer 7 (Convolutional):** The output shape should be 8x8x128. 247 | 248 | **Activation.** Your choice of activation function. 249 | 250 | **Layer 8 (Convolutional):** The output shape should be 8x8x128. 251 | 252 | **Activation.** Your choice of activation function. 253 | 254 | **Layer 9 (Pooling)** The output shape should be 4x4x128. 255 | 256 | **Flattening:** Flatten the output shape of the final pooling layer such that it's 1D instead of 3D. 257 | 258 | **Layer 10 (Fully Connected):** This should have 128 outputs. 259 | 260 | **Activation.** Your choice of activation function. 261 | 262 | **Layer 11 (Fully Connected):** This should have 128 outputs. 263 | 264 | **Activation.** Your choice of activation function. 265 | 266 | **Layer 12 (Fully Connected):** This should have 43 outputs. 267 | 268 | --- 269 | 270 | ## Step 4: Model Training and Evaluation 271 | 272 | In this step, we will train our model using `normalized_images`, then we'll compute softmax cross entropy between `logits` and `labels` to measure the model's error probability. 273 | 274 | The `keep_prob` and `keep_prob_conv` variables will be used to control the dropout rate when training the neural network. 275 | Overfitting is a serious problem in deep nural networks. Dropout is a technique for addressing this problem. 276 | The key idea is to randomly drop units (along with their connections) from the neural network during training. This prevents units from co-adapting too much. During training, dropout samples from an exponential number of different “thinned” networks. At test time, it is easy to approximate the effect of averaging the predictions of all these thinned networks by simply using a single unthinned network that has smaller weights. This significantly reduces overfitting and gives major improvements over other regularization methods. This technique was introduced by N. Srivastava, G. Hinton, A. Krizhevsky I. Sutskever, and R. Salakhutdinov in their paper [Dropout: A Simple Way to Prevent Neural Networks from Overfitting](https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf). 277 | 278 | Now, we'll run the training data through the training pipeline to train the model. 279 | - Before each epoch, we'll shuffle the training set. 280 | - After each epoch, we measure the loss and accuracy of the validation set. 281 | - And after training, we will save the model. 282 | - A low accuracy on the training and validation sets imply underfitting. A high accuracy on the training set but low accuracy on the validation set implies overfitting. 283 | 284 | ### LeNet Model 285 | ``` 286 | EPOCH 1 : Validation Accuracy = 81.451% 287 | EPOCH 2 : Validation Accuracy = 87.755% 288 | EPOCH 3 : Validation Accuracy = 90.113% 289 | EPOCH 4 : Validation Accuracy = 91.519% 290 | EPOCH 5 : Validation Accuracy = 90.658% 291 | EPOCH 6 : Validation Accuracy = 92.608% 292 | EPOCH 7 : Validation Accuracy = 92.902% 293 | EPOCH 8 : Validation Accuracy = 92.585% 294 | EPOCH 9 : Validation Accuracy = 92.993% 295 | EPOCH 10 : Validation Accuracy = 92.766% 296 | EPOCH 11 : Validation Accuracy = 93.356% 297 | EPOCH 12 : Validation Accuracy = 93.469% 298 | EPOCH 13 : Validation Accuracy = 93.832% 299 | EPOCH 14 : Validation Accuracy = 94.603% 300 | EPOCH 15 : Validation Accuracy = 93.333% 301 | EPOCH 16 : Validation Accuracy = 93.787% 302 | EPOCH 17 : Validation Accuracy = 94.263% 303 | EPOCH 18 : Validation Accuracy = 92.857% 304 | EPOCH 19 : Validation Accuracy = 93.832% 305 | EPOCH 20 : Validation Accuracy = 93.605% 306 | EPOCH 21 : Validation Accuracy = 93.447% 307 | EPOCH 22 : Validation Accuracy = 94.286% 308 | EPOCH 23 : Validation Accuracy = 94.671% 309 | EPOCH 24 : Validation Accuracy = 94.172% 310 | EPOCH 25 : Validation Accuracy = 94.399% 311 | EPOCH 26 : Validation Accuracy = 95.057% 312 | EPOCH 27 : Validation Accuracy = 95.329% 313 | EPOCH 28 : Validation Accuracy = 94.218% 314 | EPOCH 29 : Validation Accuracy = 94.286% 315 | EPOCH 30 : Validation Accuracy = 94.853% 316 | ``` 317 | We've been able to reach a maximum accuracy of **95.3%** on the validation set over 30 epochs, using a learning rate of 0.001. 318 | 319 | Now, we'll train the VGGNet model and evaluate it's accuracy. 320 | 321 | ### VGGNet Model 322 | ``` 323 | EPOCH 1 : Validation Accuracy = 31.655% 324 | EPOCH 2 : Validation Accuracy = 59.592% 325 | EPOCH 3 : Validation Accuracy = 78.639% 326 | EPOCH 4 : Validation Accuracy = 88.617% 327 | EPOCH 5 : Validation Accuracy = 92.812% 328 | EPOCH 6 : Validation Accuracy = 95.601% 329 | EPOCH 7 : Validation Accuracy = 96.667% 330 | EPOCH 8 : Validation Accuracy = 97.528% 331 | EPOCH 9 : Validation Accuracy = 98.390% 332 | EPOCH 10 : Validation Accuracy = 98.322% 333 | EPOCH 11 : Validation Accuracy = 98.776% 334 | EPOCH 12 : Validation Accuracy = 98.730% 335 | EPOCH 13 : Validation Accuracy = 98.617% 336 | EPOCH 14 : Validation Accuracy = 98.571% 337 | EPOCH 15 : Validation Accuracy = 99.025% 338 | EPOCH 16 : Validation Accuracy = 99.116% 339 | EPOCH 17 : Validation Accuracy = 98.776% 340 | EPOCH 18 : Validation Accuracy = 98.707% 341 | EPOCH 19 : Validation Accuracy = 98.526% 342 | EPOCH 20 : Validation Accuracy = 98.685% 343 | EPOCH 21 : Validation Accuracy = 99.297% 344 | EPOCH 22 : Validation Accuracy = 99.320% 345 | EPOCH 23 : Validation Accuracy = 99.297% 346 | EPOCH 24 : Validation Accuracy = 99.161% 347 | EPOCH 25 : Validation Accuracy = 98.798% 348 | EPOCH 26 : Validation Accuracy = 98.707% 349 | EPOCH 27 : Validation Accuracy = 99.048% 350 | EPOCH 28 : Validation Accuracy = 99.116% 351 | EPOCH 29 : Validation Accuracy = 98.458% 352 | EPOCH 30 : Validation Accuracy = 99.161% 353 | ``` 354 | 355 | Using VGGNet, we've been able to reach a maximum **validation accuracy of 99.3%**. As you can observe, the model has nearly saturated after only 10 epochs, so we can reduce the epochs to 10 and save computational resources. 356 | 357 | We'll use this model to predict the labels of the test set. 358 | 359 | 360 | --- 361 | 362 | ## Step 5: Testing the Model using the Test Set 363 | 364 | Now, we'll use the testing set to measure the accuracy of the model over unknown examples. 365 | We've been able to reach a **Test accuracy of 97.6%**. A remarkable performance. 366 | 367 | Now we'll plot the confusion matrix to see where the model actually fails. 368 | 369 |
370 | Combined Image 371 |
372 |

373 |
374 |
375 | 376 | We observe some clusters in the confusion matrix above. It turns out that the various speed limits are sometimes misclassified among themselves. Similarly, traffic signs with traingular shape are misclassified among themselves. We can further improve on the model using hierarchical CNNs to first identify broader groups (like speed signs) and then have CNNs to classify finer features (such as the actual speed limit). 377 | 378 | --- 379 | 380 | ## Step 6: Testing the Model on New Images 381 | 382 | In this step, we will use the model to predict traffic signs type of 5 random images of German traffic signs from the web our model's performance on these images. 383 | Number of new testing examples: 5 384 | 385 |
386 | Combined Image 387 |
388 |

389 |
390 |
391 | 392 | These test images include some easy to predict signs, and other signs are considered hard for the model to predict. 393 | 394 | For instance, we have easy to predict signs like the "Stop" and the "No entry". The two signs are clear and belong to classes where the model can predict with high accuracy. 395 | 396 | On the other hand, we have signs belong to classes where has poor accuracy, like the "Speed limit" sign, because as stated above it turns out that the various speed limits are sometimes misclassified among themselves, and the "Pedestrians" sign, because traffic signs with traingular shape are misclassified among themselves. 397 | 398 |
399 | Combined Image 400 |
401 |

402 |
403 |
404 | 405 | As we can notice from the top 5 softmax probabilities, the model has very high confidence (100%) when it comes to predict simple signs, like the "Stop" and the "No entry" sign, and even high confidence when predicting simple triangular signs in a very clear image, like the "Yield" sign. 406 | 407 | On the other hand, the model's confidence slightly reduces with more complex triangular sign in a "pretty noisy" image, in the "Pedestrian" sign image, we have a triangular sign with a shape inside it, and the images copyrights adds some noise to the image, the model was able to predict the true class, but with 80% confidence. 408 | 409 | And in the "Speed limit" sign, we can observe that the model accurately predicted that it's a "Speed limit" sign, but was somehow confused between the different speed limits. However, it predicted the true class at the end. 410 | 411 | The VGGNet model was able to predict the right class for each of the 5 new test images. Test Accuracy = 100.0%. 412 | In all cases, the model was very certain (80% - 100%). 413 | 414 | 415 | --- 416 | 417 | ## Conclusion 418 | 419 | Using VGGNet, we've been able to reach a very high accuracy rate. We can observe that the models saturate after nearly 10 epochs, so we can save some computational resources and reduce the number of epochs to 10. 420 | We can also try other preprocessing techniques to further improve the model's accuracy.. 421 | We can further improve on the model using hierarchical CNNs to first identify broader groups (like speed signs) and then have CNNs to classify finer features (such as the actual speed limit) 422 | This model will only work on input examples where the traffic signs are centered in the middle of the image. It doesn't have the capability to detect signs in the image corners. 423 | -------------------------------------------------------------------------------- /Saved_Models/LeNet.data-00000-of-00001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/Saved_Models/LeNet.data-00000-of-00001 -------------------------------------------------------------------------------- /Saved_Models/LeNet.index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/Saved_Models/LeNet.index -------------------------------------------------------------------------------- /Saved_Models/LeNet.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/Saved_Models/LeNet.meta -------------------------------------------------------------------------------- /Saved_Models/VGGNet.data-00000-of-00001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/Saved_Models/VGGNet.data-00000-of-00001 -------------------------------------------------------------------------------- /Saved_Models/VGGNet.index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/Saved_Models/VGGNet.index -------------------------------------------------------------------------------- /Saved_Models/VGGNet.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/Saved_Models/VGGNet.meta -------------------------------------------------------------------------------- /Saved_Models/checkpoint: -------------------------------------------------------------------------------- 1 | model_checkpoint_path: "VGGNet" 2 | all_model_checkpoint_paths: "VGGNet" 3 | -------------------------------------------------------------------------------- /VGGNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/VGGNet.png -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /signnames.csv: -------------------------------------------------------------------------------- 1 | ClassId,SignName 2 | 0,Speed limit (20km/h) 3 | 1,Speed limit (30km/h) 4 | 2,Speed limit (50km/h) 5 | 3,Speed limit (60km/h) 6 | 4,Speed limit (70km/h) 7 | 5,Speed limit (80km/h) 8 | 6,End of speed limit (80km/h) 9 | 7,Speed limit (100km/h) 10 | 8,Speed limit (120km/h) 11 | 9,No passing 12 | 10,No passing for vehicles over 3.5 metric tons 13 | 11,Right-of-way at the next intersection 14 | 12,Priority road 15 | 13,Yield 16 | 14,Stop 17 | 15,No vehicles 18 | 16,Vehicles over 3.5 metric tons prohibited 19 | 17,No entry 20 | 18,General caution 21 | 19,Dangerous curve to the left 22 | 20,Dangerous curve to the right 23 | 21,Double curve 24 | 22,Bumpy road 25 | 23,Slippery road 26 | 24,Road narrows on the right 27 | 25,Road work 28 | 26,Traffic signals 29 | 27,Pedestrians 30 | 28,Children crossing 31 | 29,Bicycles crossing 32 | 30,Beware of ice/snow 33 | 31,Wild animals crossing 34 | 32,End of all speed and passing limits 35 | 33,Turn right ahead 36 | 34,Turn left ahead 37 | 35,Ahead only 38 | 36,Go straight or right 39 | 37,Go straight or left 40 | 38,Keep right 41 | 39,Keep left 42 | 40,Roundabout mandatory 43 | 41,End of no passing 44 | 42,End of no passing by vehicles over 3.5 metric tons 45 | -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/Equalized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/Equalized.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/Gray.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/LeNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/LeNet.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/NewImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/NewImg.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/Normalized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/Normalized.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/Test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/Test.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/TestHist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/TestHist.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/TopSoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/TopSoft.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/Train.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/Train.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/TrainHist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/TrainHist.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/VGGNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/VGGNet.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/Valid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/Valid.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/ValidHist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/ValidHist.png -------------------------------------------------------------------------------- /traffic-signs-data/Screenshots/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/Screenshots/cm.png -------------------------------------------------------------------------------- /traffic-signs-data/new_test_images/001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/new_test_images/001.jpg -------------------------------------------------------------------------------- /traffic-signs-data/new_test_images/002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/new_test_images/002.jpg -------------------------------------------------------------------------------- /traffic-signs-data/new_test_images/003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/new_test_images/003.jpg -------------------------------------------------------------------------------- /traffic-signs-data/new_test_images/004.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/new_test_images/004.jpg -------------------------------------------------------------------------------- /traffic-signs-data/new_test_images/005.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohamedameen93/German-Traffic-Sign-Classification-Using-TensorFlow/af991d67ae7466852760093ba614e6c02485a19d/traffic-signs-data/new_test_images/005.jpg --------------------------------------------------------------------------------