├── README.md ├── conv1.jpg ├── conv2.jpg ├── lenet.png └── 交通标志识别_CNN卷积神经网络实现.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # 交通标志识别_CNN卷积神经网络实现) 2 | 此项目来自优达学城-自动驾驶车辆课程项目,实现方法通过卷积神经网络(LeNet)算法。 3 | 4 | 整个项目分为以下几部分: 5 | --- 6 | - 1.数据导入与分析 7 | - 2.搭建卷积神经网络模型实现 8 | - 3.测试集上验证识别效果 9 | - 4.可视化显示不同卷积层结果 10 | 11 | ## 1.数据导入与分析 12 | 13 | 本项目用到的交通标图片来源于网站:[German Traffic Sign Benchmarks](http://benchmark.ini.rub.de/?section=gtsrb&subsection=dataset) 14 | 15 | 项目中用到的图片压缩包文件下载地址为,需要下载并解压: 16 | - https://sid.erda.dk/public/archives/daaeac0d7ce1152aea9b61d9f1e19370/GTSRB_Final_Training_Images.zip 17 | - https://sid.erda.dk/public/archives/daaeac0d7ce1152aea9b61d9f1e19370/GTSRB_Final_Test_Images.zip 18 | - https://sid.erda.dk/public/archives/daaeac0d7ce1152aea9b61d9f1e19370/GTSRB_Final_Test_GT.zip 19 | 20 | 21 | ### 训练集数据文件夹结构 22 | 23 | 解压GTSRB_Final_Training_Images.zip文件到指定位置。得到文件夹结构:...\GTSRB\Final_Training\Images\... 24 | 训练集(Training)中图片总共有43种交通标志,对应解压后的...\Images文件夹下的43个子文件夹。每一个文件夹内的图片(.ppm格式)对应一种类型的交通标志(例如stop single),同时每一个文件夹内有一个.CSV问价存储记录了图片文件的相关信息。文件夹结构如下: 25 | 26 | ``` 27 | Training_Images 28 | + GTSRB 29 | + Final_Training 30 | + Images 31 | + 00000 32 | + 00000_00000.ppm 33 | + 00000_00001.ppm 34 | ... 35 | + GT-00000.csv 36 | + 00001 37 | + 00000_00000.ppm 38 | + 00000_00001.ppm 39 | ... 40 | + GT-00001.csv 41 | ... 42 | ``` 43 | 注意:所有的图片格式为[PPM](https://blog.csdn.net/kinghzkingkkk/article/details/70226214)格式。需要借助Python的 `matplotlib` 与 `pillow` 库进行图片处理。如果想直接打开查看图片可能需要借助[其他软件](http://www.4qx.net/Extension_DaQuan.php?name=ppm)。 44 | 45 | ## 2.模型实现 46 | ### LeNet-5 模型架构 47 | 48 | 这里用到的时是[LeNet-5](http://www.tensornews.cn/lenet/)模型。它是第一个成功应用于数字识别问题的卷积神经网络。LeNet-5模型结构图如下: 49 | 50 | ![LeNet](/lenet.png) 51 | 52 | 来源: http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf 53 | 54 | 针对本项目,这里用到的模型在在原始LeNet模型基础上有调整: 55 | 56 | #### 输入 57 | 58 | 输入为32x32x3(RGB - 3通道)图片 59 | 60 | #### 架构 61 | 第一层: 62 | - 卷积,输出节点矩阵为28x28x6; 63 | - 激活函数:ReLU; 64 | - 池化,过滤器大小为2x2,长宽步长为2,输出矩阵大小为14x14x6 65 | 66 | 第二层: 67 | - 卷积,输出节点矩阵为10x10x16; 68 | - 激活函数:ReLU; 69 | - 池化,过滤器大小为2x2,长宽步长为2,输出矩阵大小为5x5x16 70 | - Flatten 71 | 72 | 第三层: 73 | - 全连接(Fully Connected),输出节点个数为120; 74 | - 激活函数:ReLU; 75 | 76 | 第四层: 77 | - 全连接(Fully Connected),输出节点个数为84; 78 | - 激活函数:ReLU; 79 | 80 | 第五层: 81 | - 全连接(Fully Connected).输出节点个数为43 82 | 83 | #### 输出 84 | 85 | 第二次全连接之后的43种交通标志分类 86 | 87 | |Layer | Shape | 88 | |----------------------------|:--------:| 89 | |Input | 32x32x3 | 90 | |Convolution (valid, 5x5x6) | 28x28x6 | 91 | |Max Pooling (valid, 2x2) | 14x14x6 | 92 | |Activation (ReLU) | 14x14x6 | 93 | |Convolution (valid, 5x5x16) | 10x10x16 | 94 | |Max Pooling (valid, 2x2) | 5x5x16 | 95 | |Activation (ReLU) | 5x5x16 | 96 | |Flatten | 400 | 97 | |Dense | 120 | 98 | |Activation (ReLU) | 120 | 99 | |Dense | 43 | 100 | |Activation (Softmax) | 43 | 101 | 102 | ## 3.实现效果验证分析 103 | 导入测试数据集之外新的图片验证识别准确率 104 | ### 测试集数据 105 | 106 | 测试图片位于文件夹Test_Images/GTSRB/Final_Test内 107 | ``` 108 | Test_Images 109 | +GTSRB 110 | + Final_Test 111 | + Images 112 | + 00000.ppm 113 | + 00001.ppm 114 | + ... 115 | + GT-final_test.csv # 扩展的注释,包括图片分类id 116 | + GT-final_test.test.csv 117 | ``` 118 | 119 | GT-final_test.csv文件是单独下载,包含测试集图片label信息 120 | 121 | ## 4.可视化 122 | 可视化显示CNN神经网络不同层的输出 123 | 124 | 第一层: 125 | ![conv1](/conv1.jpg) 126 | 第二层: 127 | ![conv2](/conv2.jpg) 128 | -------------------------------------------------------------------------------- /conv1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangHang978/Traffic_Signal_Classifier-with-CNN/68204701e0c8b5c2f419235adb43f9e903e144cb/conv1.jpg -------------------------------------------------------------------------------- /conv2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangHang978/Traffic_Signal_Classifier-with-CNN/68204701e0c8b5c2f419235adb43f9e903e144cb/conv2.jpg -------------------------------------------------------------------------------- /lenet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YangHang978/Traffic_Signal_Classifier-with-CNN/68204701e0c8b5c2f419235adb43f9e903e144cb/lenet.png --------------------------------------------------------------------------------