版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_14916279/article/details/72452195

交通标志识别实际上包括交通标志的检测和识别两个过程,检测是在图像中寻找到感兴趣目标并定位,识别是对感兴趣目标进行分类。现在R-CNN系列、YOLO、SSD能够很好的将检测和分类两个过程融合到一起,并且在PASCAL VOC等数据集上取得了很好的效果,但对像交通标志这种小目标的检测效果并不好。就交通标志检测而言,如果在Faster RCNN的anchor中,将scale调小一点,ratio调下再做训练,是可以很好的检测到图像中尺寸较小的交通标志;也可以训练级联CNN,将目标检测问题转化为分类问题。传统的检测方法中,可以人工设计特征来检测感兴趣目标,例如可以利用交通标志的颜色和形状等信息来检测并定位到交通标志;然后对检测到的标志进行识别或分类,判断它是哪种交通标志。
我们暂时先不考虑检测问题,先做分类实验。利用卷积神经网络来试试交通标志识别的效果如何。
The German Traffic Sign Recognition Benchmark是IJCNN 2011举办的一个图像分类挑战赛,其提供了GTSRB数据集,共包含了43类交通标志,训练样本39209张,测试样本12630张。提供的样本图像中包含了标志区域及其周围10%的区域(这是为采用边缘方法者所考虑),样本图像尺寸范围为15x15到250x250,当然它不一定是正方形。

该挑战赛的冠军是IDSIA团队所采用的Multi-column Deep Neural Network即多列深度神经网络的方法来进行交通标志识别,最后在43类交通标志的识别准确率达到了99.46%,超过了人类表现的98.84%。该方法采用了25个具有完全相同网络结构的DNN(实际上是总共9层的卷积神经网络) Paper地址
这25个DNN分别对应了五种输入数据,包括原图像以及原图经过四种不同的预处理后得到的图像共五种;然后每种都采用五个不同的随机网络初始值来训练,得到网络结构和参数相同但训练得到的网络权重不同的DNN模型。
测试时将每张图像做四种预处理得到共五张输入图像,再将每张图象都送入到其对应的五种网络初始值不同的DNN中,然后将求得的共25个分数做平均得到最后的识别结果。
其DNN结构实际上是在三个卷积层后面跟上两个全连接层做分类,输入图像固定尺寸为48x48。GTSRB数据集下载地址如下,分别下载训练集和测试集。数据集下载地址
下载得到的GTSRB数据集的格式是ppm格式,需要转换成jpg格式。注解标签存放在csv文件中,包括了位置标签(包围标志的最小矩形框位置)和类别标签,通过位置标签进行裁剪并缩放到固定尺寸,固定尺寸大小48x48,下图为裁剪缩放后测试集的部分图像,有的标志人眼都很难分辨,若将其进行直方图均衡等预处理则可能会更容易识别。IDSIA团队采用的多列DNN方法所达到的99.46%的超过人眼的识别水平确实很高。
接下来我们来做交通标志的识别实验,暂时先不考虑多列问题。这里提供 项目下载地址




1.数据集准备

暂时先不考虑数据增广(后面会提到有关预处理)。
如果你对数据集的制作不感兴趣,可以跳过后面的制作过程,项目中提供已经转换好的可以直接作为caffe输入,解压‘GTSRB数据集’文件夹,包含了tran_lmdb文件夹、val_lmdb文件夹和mean.binaryproto文件,将上述三个文件放在data\gtsrb文件夹下

下面简单介绍数据集的制作过程。
由于GTSRB提供的下载数据集格式是ppm格式,需要转化成jpg格式,数据集中的图像是带有周围背景的,需要根据提供的csv文件裁剪出感兴趣区域即最小包围框,然后缩放到固定尺寸(这一步也可以在用caffe转换成lmdb格式时来归一化尺寸)。可以用下图所示的matlab脚本实现之,包括如何读取csv中图像标签信息、转换PPM文件为jpg格式,三种图像预处理(后面会提到),以及生成train.txt、val.txt。

这里也提供转化后的图片数据集以及制作好的类别标注文本,下载链接,解压得到‘GTSRB数据集’文件夹,将其放在data\gtsrb目录下。需要注意的是,如果是在windows下使用caffe,train.txt中的’/’要替换成反斜杠’\’。


这样就准备好了训练和测试数据集以及对应的train.txt、val.txt。
因为博主的前期预处理在windows下进行的,所以只介绍windows系统下转化成lmdb文件。首先在caffe-master/data/gtsrb目录下新建了一个create_gtsrb.txt,打开后加入以下代码,其中包括了转化训练集、测试集(直接将测试集作为验证集,在验证模型好坏的同时得到测试效果)、生成均值向量文件三个过程,关闭保存,修改后缀名为.bat得到create_gtsrb.bat文件,直接双击执行就可以了。完成后会发现data/gtsrb文件夹下多出了tran_lmdb文件夹、val_lmdb文件夹和mean.binaryproto文件。

2.训练卷积神经网络

在models\gtsrb文件夹下,准备好网络模型文件train_val.prototxt、训练超参数文件solver.prototxt,测试时还需要用到deploy.prototxt,需要注意的是不要在prototxt中对样本进行镜像。卷积神经网络结构如下图:

经过多次调整参数实验后确定,我的训练超参数solver.prototxt文件内容如图,学习率0.001,步进式衰减,4000次迭代衰减10倍,最大迭代20000次,train_val.prototxt中训练集和验证集batchsize分别为50和20,test_iter为632次(12630/20),每次20个刚好能覆盖12630个测试样本,每5000次打印一次快照。

3 实验初步效果

以不做预处理的原图训练单列DNN最后的测试(验证),迭代20000次后,准确率可以达到96%左右,由于随机初始化最后的结果会稍有差异。
  • 1


下图给出了部分识别出错的标志图像,可以发现,部分图像中标志人眼很好识别但算法识别出错,说明网络在极端情况还有提升空间,还有一些倾斜严重、图像质量太差、最小包围框不够准确等情况。

4 实验改进

考虑两种改进思路:
(1)对数据集进行数据增广,例如部分交通标志具有水平镜像或垂直镜像的不变性,还可以对训练样本图像随机旋转一个较小的角度来应对真实场景下图像中的标志倾斜问题(上图中就有因标志倾斜而出现识别出错),训练耗时增加而测试时耗时不变,泛化能力提高。
(2)采用多列深度网络的思路,对原始数据集进行多种预处理得到多个数据集,对每个数据集采用同样的网络结构进行训练,在测试时对测试图像进行多种预处理,分别送入到各自的卷积神经网络中,最后将输出结果取平均。

博主首先对数据进行了增广,对具有水平镜像或垂直镜像的不变性的标志进行了镜像,对所有标志额外进行了随机旋转某个小角度,单列DNN的测试结果提高到96.79%。
然后采用了原数据集和经过三种预处理(图像调整、直方图均衡、自适应直方图均衡)共四种数据源,每种采用两个不同初始化的DNN网络构成了的8列DNN,对8列DNN求平均的结果作为输出,最后将准确率提高到了97.88%(也牺牲了速度),12630张测试图像中有268张识别出错,相比于人类表现还有一段距离。
其中在做图像预处理时,对彩色图像进行对比度拉伸、直方图均衡化和自适应直方图均衡化,实际上先将RGB空间转换到Lab颜色空间,其中L为图像亮度,取值范围0~100,表示从纯黑到纯白,然后对亮度通道L进行对比度拉伸、直方图均衡化和自适应直方图均衡化,然后再转回到RGB空间。
另外也曾尝试在网络中加入Relu层、Norm层和dropout层但效果均不理想,大家也可以试试改改网络参数来刷准确率。

caffe--交通标志识别相关推荐

  1. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  2. python识别简单训练模型_Python3+OpenCV实现简单交通标志识别

    由于该项目是针对中小学生竞赛并且是第一次举行,所以识别的目标交通标志仅仅只有直行.右转.左转和停车让行. 数据集:https://pan.baidu.com/s/1sLl0CadEutv3PQXhmq ...

  3. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  4. 深度学习之基于Inception_ResNet_V2和CNN实现交通标志识别

    这次的结果是没有想到的,利用官方的Inception_ResNet_V2模型识别效果差到爆,应该是博主自己的问题,但是不知道哪儿出错了. 本次实验分别基于自己搭建的Inception_ResNet_V ...

  5. python交通标志识别_YOLOv3目标检测实战:交通标志识别

    在无人驾驶中,交通标志识别是一项重要的任务.本项目以美国交通标志数据集LISA为训练对象,采用YOLOv3目标检测方法实现实时交通标志识别. 具体项目过程包括包括:安装Darknet.下载LISA交通 ...

  6. 动手学无人驾驶(1):交通标志识别

    今天主要介绍无人驾驶当中深度学习技术的应用. 本文是根据博客专家AdamShan的文章整理而来,在此表示感谢. 关于深度学习的图像分类技术,网上已有很多关于深度学习的课程(如吴恩达老师的深度学习专项课 ...

  7. 【交通标志识别】BP神经网络交通标志识别【含GUI Matlab源码 718期】

    ⛄一.BP神经网络交通标志识别简介 道路交通标志用以禁止.警告.指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生.但是由于道路交通错综复 ...

  8. ​【交通标志识别】基于BP神经网络实现交通标志识别matlab代码

    1 简介 近年来,交通标志识别在车辆视觉导航系统中是一个热门研究课题.为了安全驾驶和高效运输,交通部门在公路道路上设置了各类重要的交通标志,以提醒司机和行人有关道路交通信息,如指示标志.警告标志.禁止 ...

  9. 基于深度学习的大规模交通标志识别(附6GB交通标志数据集)

    01 1.文章信息 <Deep Learning for Large-Scale Traffic-Sign Detection and Recognition>. 国外学者2020年发在I ...

  10. Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]

    1.图片演示: 2.视频演示: 3.标注好的数据集: 4.YOLO网络的构建: 网络结构是首先用Focus将计算图长宽变为原先1/4, channel 数量乘4.再用bottlenectCSP 提取特 ...

最新文章

  1. IT公司100题-10-翻转句子中单词的顺序
  2. Ajax基础知识梳理
  3. Docker视频发布
  4. 她说要介绍10000个开源项目?来!我们一起监督!
  5. 雾霾经济:这10款产品,马云看了都想投资
  6. oracle 存储过程 输入,Oracle 存储过程加密方法
  7. QT的QMovie类的使用
  8. Caffe2 Compilation Error gflags.cc' is being linked both statically and dynamically into this execut
  9. python对浏览器的常用操作_selenium+python基本操作(02)
  10. 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法
  11. 浅谈深拷贝 与 浅拷贝
  12. PostgrSQL流复制wal异常
  13. 重命名Windows内置Administrator帐户的方法
  14. 测试linux mongodb数据库开启,安装配置MongoDB数据库
  15. 190709每日一句 以这样的方式去过每一天,你的生活将永远改变!
  16. LaTex安装及快速入门使用
  17. QT 信号与槽不在同一个线程 connect
  18. android nmea 工具,android – 如何从nmea句子信息计算以米为单位的gps准确度
  19. 计算机会计二级科目,(完整版)会计科目一览表(一级科目二级科目三级科目)..pdf...
  20. 利用Arcgis Engine 二次开发的使用和总结

热门文章

  1. HTTP头部POST表单详解
  2. redis系列--深入哨兵集群
  3. SpringBoot 使用小技巧合集
  4. git中clone出来项目,导入到eclipse并运行web项目
  5. JAVA的第一个小程序:Hello world
  6. cocos2d Labels and Fonts 标签和字体
  7. 学习杂谈:费曼学习法和show me the code
  8. Golang 入门 : 打造开发环境
  9. Okhttp3 使用和原理(DEMO)
  10. Cocos2d-x 3.0 动作