随着社会生活的发展, 汽车已然变成人们日常生活中重要的组成, 但交通事故死亡率却一直居高不下[1,2]. 高级辅助驾驶的提出对降低交通堵塞, 避免交通事故发生以及对无人驾驶应用都有着重要的意义. 交通标志的实时识别也是无人驾驶不可缺少的一部分[3-5]. 因此无论对交通标志检测理论研究和实际研究都有着很高的价值.
交通标志的研究即使已经普遍进行, 能否达到准确、快速检测交通标志仍然是一个值得深究的问题[6,7]. 对交通标志识别最早展开的研究可回归到上个世纪80年代. 日本大阪大学推出一套交通标志自动识别系统[8], 但对路况多样化环境下的交通标志识别准确率仍需提高. Trăsnea等[9]采用思路简单, 计算量小的模板匹配来实现交通标志的识别, 但是在实际场景应用中实时识别性不强. Armingol等[10]提出基于HIS的红色分割方法. 王洋[11]提出基于HSV的多阀值分割方法. Gao等[12]提出了一种在鲁棒性上较优的CIECAM97颜色空间分割方法, 但不足之处是运算量大. 随着无人驾驶的发展, 交通标志检测的研究已经取得众多成果, 但是实时性和准确性仍然有很大提升的空间, 因此进行研究很有必要.
交通标志的检测需要对图像进行预处理, 使得图像增强, 为检测提供高质量的图像[13,14]. 本文先对图像采用了直方图均衡化、BM3D预先处理的方法, 再基于YOLOv2算法, 对网络顶层卷积层输出特征图划分更细, 得到高细粒度的特征图来检测小尺寸的交通标志, 网络结构及损失函数优化得到R-YOLOv2, 并通过实验验证了R-YOLOv2的准确性以及实时性.
1 交通标志的预处理在具有多因素影响的自然场景下取得的交通标志, 例如: 不同光照条件的问题, 背景复杂、遮挡、运动模糊等, 为了尽可能提高检测效果. 所以对图像进行预先处理来增强图像品质是非常有必要的.
(1)彩色图像的直方图均衡化
在众多的图像增强处理方法中, 图像直方图均衡化是被应用最广泛的, 也是效果最突出的, 原因在于其简易性和高效性, 很好的提高图像的亮度和清晰度[15]. RGB图像可以拆分为3个灰度图像, 彩色图像直方图均衡化即为对模型的三分量R, G, B分别进行处理.
将原图的每个灰度等级根据灰度变换表变换成一个新的灰度等级, 再将这些变换后的灰度级组合起来, 即完成R分量的均衡化图像, G分量和B分量的灰度化同R分量的灰度化, 将三者单独处理的结果组合成彩色图, 得到彩色图像均衡后的效果图[16]. 如图1所示.
(2)图像降噪
NLM算法采用的是inter-patchcorrelation, 但Wavelet shrinkage采用的却是intra-patch correlation[17]. 由于两种算法的去噪效果都不错, 所以本文使用的是将两者结合起来的去噪算法BM3D. 如图2所示是算法BM3D的去噪步骤.
BM3D算法主要通过2个步骤实现图像去噪: 步骤1先在噪声图像中寻找相似块, 运用硬阀值定义相似性, 然后叠加成不同的块. 再对不同的组块做3D线性变换, 以及变换谱的收缩, 最后逆变换得到块估计. 根据前面得到的补丁质量对所有块输入不同的权值, 其次对其加权平均操作. 聚合是利用图像的冗余性进行复原. 步骤2和步骤1类似, 不同之处有两点, 步骤2对比的是过滤后的补丁而不是原始补丁, 在处理新的3D组块时将硬阀值处理换成维纳过滤. 步骤2相比较步骤1恢复图像细节更多, 去噪性能更好.
常用去噪算法有中值滤波、均值滤波、BM3D滤波, 运用Matlab对3种去噪方法进行比较, 去噪结果如表1所示.
从表1的数据可以看出BM3D、均值滤波、中值滤波的信噪比提高量依次递减. 其中, BM3D滤波的信噪比提高量最大, BM3D的滤波效果最好. BM3D去噪效果对比如图3所示.
(3)实验验证
为了表明直方图均衡化和去噪算法对检测结果的影响, 利用控制变量法对YOLOv2和R-YOLOv2模型进行预处理前后的对比实验, 检测结果如表2所示.
由于噪声和光照不均衡都会对图像造成影响, 从上表可以看出加入直方图均衡化预处理对YOLOv2和R-YOLOv2的mAP分别提高0.4和0.3, FPS均未改变, BM3D预处理对YOLOv2和R-YOLOv2的mAP分别提高0.7和0.9, 对FPS都提高了1, 验证了加入预处理对检测算法有着一定程度的提高, 因此在检测前进行预处理是很有必要.
2 交通标志的识别交通标志识别出现频率较高的检测算法有两个大的方向(图4), 即传统目标检测算法和回归的深度学习算法. 对于利用候选区域来检测交通标志的准确度较高, 而基于深度学习的回归法对目标检测速度更快, 两者各有优势[18].
两大算法主体想法大都相同, 即都是利用算法将原始图像分割成许多有关或者无关候选区域, 再将特征向量提取、输入、分类. 由于交通标志的实时识别是无人驾驶的核心部分, 因此两者算法对比, 为了达到实时性要求, 基于回归的目标检测算法更具有优势.
(1)基本原理
YOLOv2算法借鉴了R-CNN系列算法采用候选区域搭建检测框架, 把目标检测问题处理成回归问题, 用网络模型实现端到端的目标检测, 其网络结构如图5所示.
YOLOv2算法模型是将输入图片划分为S×S的网格, 且S为划分的网格数, 目标中心的检测由所划分的每个格子来负责, 所有格子所含目标的边界框(bounding boxes)、定位置信度(confidence)以及所有类别概率向量(class probability map)通过一次预测来对图像进行目标分类, 结合多次训练, 找到最优权值, 最后得到图像的目标边框. 但是YOLOv2算法存在以下两个缺点: ① 在尺度上的泛化能力较差. 由于网格单元是固定的正方形, 对于相同种类目标显露崭新、少见的长宽关系时, 标准的变化相较于推测的框线来更为敏锐. ② 对于小型的目标, 由于实践中大型目标和小型目标的损失值存在不一样的效果, YOLOv2的损失函数对小尺寸的检测和大尺寸的检测结合在一起计算, 使得小型目标损失一部分精度, 检测失败. 针对这两个缺点, 在此提出R-YOLOv2模型: ① 在YOLOv2浅层结构中加入多个1×1卷积层, 以进一步简化网络结构以及减少参数数量, 以此增加网络的泛化能力和跨通道学习能力; ② 改进原网络的损失函数, 采用归一化及根据各自的损失部分情况给定权重值使网络适用于小目标检测.
(2)网络结构
整个交通标志识别网络模型如表3所示.
对R-YOLOv2模型, 该网络结构使用12个卷积层, 而相对应的卷积核尺寸采用3×3和1×1这两种尺寸, 设计将网络顶层卷积层输出特征图划分更细, 以得到高细粒度的特征图来检测小尺寸的交通标志, 提高对小目标的检测率. 对每个卷积层后接着池化层, 1×1的卷积层以及无量纲化层, 对特征图利用无量纲化层提升网络学习新样本能力. 利用3层全连接完成交通标志的类别判定以及定位. 模型中passthrough层是把之前高解析度的特征图注入, 再连结到之后的低解析度的特征图上. 前面的特征图维数相当于之后的2倍, passthrough层挨个抽取上一层2×2的特征图, 接着将特征图维数转变成通道维数, passthrough层的池化处理变成拆分处理, 然后对此处理后的特征图做卷积预测, 提高网络的精度. 整个交通标志识别网络模型如表3所示.
(3)损失函数
YOLOv2原损失函数分为3部分, 即位置损失函数计算公式:
$ \begin{split} L_{\rm local}= {\lambda _{{\rm{coord}}}}\sum\nolimits_{i = 0}^{{{{s}}^2}} {\sum\nolimits_{{{j}} = {\rm{0}}}^B {I_{ij}^{\rm obj}} } \left[ {{{\left( {{x_i} - {{\hat x}_i}} \right)}^2} + {{\left( {{y_i} - {{\hat y}_i}} \right)}^2}} \right]+{\lambda _{{\rm{coord}}}}\sum\nolimits_{i = 0}^{{{{s}}^2}} {\sum\nolimits_{{{j}} = {\rm{0}}}^B {I_{ij}^{\rm obj}} } \left[ {{{\left( {\sqrt {{w_i}} + \sqrt {{{\hat w}_i}} } \right)}^2} + {{\left( {\sqrt {{h_i}} - \sqrt {{{\hat h}_i}} } \right)}^2}} \right] \end{split}$ | (1) |
预测损失函数公式:
$\begin{split} L_{\rm pre}=\sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {\sum\nolimits_{j = 0}^B {I_{ij}^{\rm obj}} } {\left( {{C_i} - {{\hat C}_i}} \right)^2} +{\lambda _{\rm noobj}}\sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {\sum\nolimits_{j = 0}^B {I_{ij}^{\rm noobj}} } {\left( {{C_i} - {{\hat C}_i}} \right)^2}\end{split}$ | (2) |
类别损失函数公式:
${L_{\rm class}=\sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {I_{ij}^{\rm obj}\sum\nolimits_{c \in classes} {\left( {{p_i}\left( c \right) - {{\hat p}_i}\left( c \right)} \right)} } ^2}$ | (3) |
YOLOv2的损失函数即为:
$ \begin{split} L=&{\lambda _{{\rm{coord}}}}\sum\nolimits_{i = 0}^{{{{s}}^2}} {\sum\nolimits_{{{j}} = {\rm{0}}}^B {I_{ij}^{\rm obj}} } \left[ {{{\left( {{x_i} - {{\hat x}_i}} \right)}^2} + {{\left( {{y_i} - {{\hat y}_i}} \right)}^2}} \right] + {\lambda _{{\rm{coord}}}}\sum\nolimits_{i = 0}^{{{{s}}^2}} {\sum\nolimits_{{{j}} = {\rm{0}}}^B {I_{ij}^{\rm obj}} } \left[ {{{\left( {\sqrt {{w_i}} + \sqrt {{{\hat w}_i}} } \right)}^2} + {{\left( {\sqrt {{h_i}} - \sqrt {{{\hat h}_i}} } \right)}^2}} \right] \\ &+ \sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {\sum\nolimits_{j = 0}^B {I_{ij}^{\rm obj}} } {\left( {{C_i} - {{\hat C}_i}} \right)^2} + {\lambda _{\rm noobj}}\sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {\sum\nolimits_{j = 0}^B {I_{ij}^{\rm noobj}} } {\left( {{C_i} - {{\hat C}_i}} \right)^2} + {\sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {I_{ij}^{\rm obj}\sum\nolimits_{c \in classes} {\left( {{p_i}\left( c \right) - {{\hat p}_i}\left( c \right)} \right)} } ^2} \end{split} $ | (4) |
但YOLOv2损失函数有3个问题: (1)对小目标的损失置信度相比较大目标检测容易被忽略; (2)定位损失和分类损失权重相同, 而实际检测其实并不相同; (3)不包含目标对象网络对梯度更新的贡献度将远大于包含目标对象网格对梯度更新的贡献度, 这会使网络训练十分不稳定.
解决这3个问题的方法: (1)采用归一化可以提高对小比例的宽度w和高度h的关注度; (2)在目标预测时, 令置信度评分的损失比例λ1为5; (3)当要检测的边框内未有目标时, 则令损失比例λ2为0.5. 同时, 包含目标对象边框和类别预测的损失权重为1. 因此改进后的损失函数如式(5)所示.
$\begin{gathered} L_{\rm new}= {\lambda _{\rm{1}}}\sum\nolimits_{i = 0}^{{{{s}}^2}} {\sum\nolimits_{{{j}} = {\rm{0}}}^B {I_{ij}^{\rm obj}} } \left[ {{{\left( {{x_i} - {{\hat x}_i}} \right)}^2} + {{\left( {{y_i} - {{\hat y}_i}} \right)}^2}} \right] + {\lambda _1}\sum\nolimits_{i = 0}^{{{{s}}^2}} {\sum\nolimits_{{{j}} = {\rm{0}}}^B {I_{ij}^{\rm obj}} } \left[ {{{\left( {\frac{{{w_i} + {{w'}_i}}}{{{{w'}_i}}}} \right)}^2} + {{\left( {\frac{{{h_i} - {{h'}_i}}}{{{{h'}_i}}}} \right)}^2}} \right] \\ \quad\quad\quad\quad\quad\quad\quad\; + \sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {\sum\nolimits_{j = 0}^B {I_{ij}^{\rm obj}} } {\left( {{C_i} - {{\hat C}_i}} \right)^2} + {\lambda _2}\sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {\sum\nolimits_{j = 0}^B {I_{ij}^{\rm noobj}} } {\left( {{C_i} - {{\hat C}_i}} \right)^2} + {\sum\nolimits_{{{i}} = 0}^{{{{s}}^2}} {I_{ij}^{\rm obj}\sum\nolimits_{c \in classes} {\left( {{p_i}\left( c \right) - {{\hat p}_i}\left( c \right)} \right)} } ^2} \\ \end{gathered} $ | (5) |
(1)网络模型训练过程
通过带标签的数据集对模型进行多次训练从而使得网络模型具有高识别性能, 此过程为网络模型的训练. 实验环境硬件采用的是CPU: i7, 试验平台: Tensorflow, OpenCV, Python.
对于交通标志识别迄今为止还没有开放源代码标示注明的交通标志数据集合, 因此需要对其进行标示注明, 方便后续的识别. 结合CCTSD数据集[19]和TT100K数据集制作新的数据集, 针对不同模型训练测试. 数据集13 748张训练集, 3072张做测试集, 采用Labellmg进行标注, 生成XML文件. XML文件内的信息统一记录到csv表格, 从csv表格中创建TFRecords格式. 将标注好的图片作为训练样本, 模型训练时每隔10批训练样本改变输入图片大小, 进行多尺度训练.
由于数据集中仅标注了3类交通标志, 因此在损失函数中类别取3. 训练中设置边界框数k=5, S=19, 输出19×19×40的特征图. 在训练过程中学习率初始值为0.0001, 观察损失的下降率, 当损失值稳定在大于1的时候将学习率改为0.001, 使得网络模型的收敛速度提升. 通过设定阈值t, 来评定是否采用这些图像的候选框, t则是结合位置信息和类别的总置信度分数. 表4所示为不同阈值t下R-YOLOv2模型的精度和召回率, 可知在阈值和精确率成正比, 和召回率成反比, 且在t=0.4或0.5时, 模型性能较优.
采用相同网络结构除却loss模型, 且采用相同数据集对模型进行训练测试. YOLOv2采用的原损失函数, R-YOLOv2采用改进的损失函数, YOLOv3-tiny模型就是在YOLOv3的基础上去掉了一些特征层, 只保留了2个独立预测分支, 且相对简化, 因此采用YOLOv3-tiny作为对比模型, 其损失函数变化如图6所示.
对两个损失函数模型进行训练, 初训练时前面的损失值偏大是由于刚开始训练学习到的准确率不高, 随着训练次数的增加, 模型的性能越来越好. 如图7所示是YOLOv2、YOLOv3和R-YOLOv2模型训练损失函数变化曲线图, 由图6可以看出对损失函数的改进使得模型性能有一定程度的提升, 即R-YOLOv2的损失函数模型优于YOLOv2, 且优于YOLOv3的损失函数.
(2)网络模型的测试
为了测试模型的准确性, 使用训练好的模型对3072张从实景中选取的图片进行识别, 目标检测以研究重点不同而有多种评价指标, 在此采用平均精度均值(mean Average Precision, mAP)来描述检测精度, 每秒帧数(Frames Per Second, FPS)描述检测速率, 统计检测的结果如表5所示, 准确率的变化曲线见图7.
由表5可以看出R-YOLOv2模型性能优于现有算法YOLOv2, YOLOv3, 且较于YOLOv2准确率提高了8.7%. 检测速率提高了15 FPS. 较于YOLOv3准确率提高了4.2%. 检测速率提高了3 FPS, 表明网络结构的改进对mAP和FPS有着提升.
由于刚开始学习率低, 图7可以看出改进后的模型R-YOLOv2较YOLOv2在初始准确率都不高, 且基本一致, 在迭代值达到6000时, R-YOLOv2与YOLOv2差距出现, 达到15 000次时两者的准确率变换趋于平缓. 在改进后的网络模型R-YOLOv2较于YOLOv2, YOLOv3的准确率有一定程度的提高, 验证了网络结构的改进对准确率的提升.
如图8所示是部分图像检测结果, 图8(a)、8(c)两图是采用原始模型检测的结果图, 图8(b)、8(d)两图是采用改进后的模型检测的结果图. 结果表明由于R-YOLOv2将网络顶层卷积层输出特征图划分更细, 损失函数加入归一化和权值的改变, 且使用高细粒度的特征图来检测小尺寸的交通标志, 因此较于YOLOv2模型, R-YOLOv2模型对小目标的检测更优.
为更好的分析测试结果, 设定阈值t=0.5, 以保证较高的准确精度. 如表6所示即为3种方法的分类结果对比, 时间为检测单张图片时间的均值.
从表6和可以看出得到的指示标志和警告标志的召回率最好, 达到了75.23%和83.41%, 且可以看出改进的模型R-YOLOv2比YOLOv2和YOLOv3都检测速率都快, YOLOv2模型识别每张图片需0.161 s; YOLOv3模型识别每张图片需0.041 s, 而R-YOLOv2模型识别每张图片仅需0.016 s, 上述结果显示在网络结构中加入1×1×64卷积层, 以及简化网络结构以及减少参数数量, 使得网络的泛化能力和检测速率都有所提升.
为了进一步具体的表明3种模型的性能, 进行精准率(P)和召回率(R)曲线图绘制来对实验结果进一步评价, 因此3个超类别的P-R曲线如图9所示.
AUC值表明的是线下面积值, 从图9可以看出R-YOLOv2模型较于YOLOv2模型和YOLOv3模型在指示、禁止、警告中的AUC值最大, 表明R-YOLOv2模型的性能比YOLOv2模型和YOLOv3模型更稳定.
从以上结果分析验证了对模型的改进有效提升了模型检测的准确率和速率.
4 结论本文先对目标采用了直方图均衡化、BM3D等一系列预处理, 再改进了YOLOv2模型以及其损失函数, 提高了模型的检测性能, 主要是对网络顶层卷积层输出特征图划分更细, 利用高细粒度的特征图来检测小尺寸的交通标志, 模型损失函数加入了归一化处理提高泛化能力和对小目标的检测, 以及将passthrough层的池化处理改为拆分对准确率提高了8.7%, 并简化了网络结构, 运算速率提高了15 FPS. 本文通过将训练好的模型通过Ttensorflow进行实验, 结果表明该模型识别率和实时性优于现有模型. 但有些工作仍需完善, 未能通过对视频的实际操作测试, 以及实车实验, 后续将其重点研究放在与实车结合部分上.
[1] |
He KM, Zhang XY, Ren SQ, et al. Deep residual learning for image recognition. Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV, USA. 2016. 770–778.
|
[2] |
Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection. Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV, USA. 2016. 779–788.
|
[3] |
周攀. 基于深度学习的交通标志检测与识别算法研究[硕士学位论文]. 广州: 广东工业大学, 2018.
|
[4] |
Redmon J, Farhadi A. YOLO9000: Better, faster, stronger. arXiv: 1612.08242, 2016.
|
[5] |
马永杰, 李雪燕, 宋晓凤. 基于改进深度卷积神经网络的交通标志识别. 激光与光电子学进展, 2018, 55(12): 121009. |
[6] |
Klambauer G, Unterthiner T, Mayr A, et al. Self-normalizing neural networks. arXiv: 1706.02515, 2017.
|
[7] |
曹继承. 基于机器学习的交通标志检测与分类方法研究[硕士学位论文]. 成都: 电子科技大学, 2018.
|
[8] |
秦恩泉. 基于显著图的交通标志检测方法研究[硕士学位论文]. 南京: 南京理工大学, 2012.
|
[9] |
Trăsnea B, Măceşanu G, Grigorescu S, et al. Smartphone based mass traffic sign recognition for real-time navigation maps enhancement. Proceedings of 2017 International Conference on Optimization of Electrical and Electronic Equipment (OPTIM) & 2017 Intl Aegean Conference on Electrical Machines and Power Electronics (ACEMP). Brasov, Romania. 2017. 1138–1144.
|
[10] |
Armingol JM, de la Escalera A, Hilario C, et al. IVVI: Intelligent vehicle based on visual information. Robotics and Autonomous Systems, 2007, 55(12): 904-916. DOI:10.1016/j.robot.2007.09.004 |
[11] |
王洋. 计算机网络可靠性优化设计研究[硕士学位论文]. 长春: 吉林大学, 2014.
|
[12] |
Gao XW, Podladchikova L, Shaposhnikov D, et al. Recognition of traffic signs based on their colour and shape features extracted using human vision models. Journal of Visual Communication and Image Representation, 2006, 17(4): 675-685. DOI:10.1016/j.jvcir.2005.10.003 |
[13] |
张永涛. 基于机器视觉的路面交通标志识别的应用研究[硕士学位论文]. 广州: 广东工业大学, 2015.
|
[14] |
江春宇. 交通标志的自动检测和识别[硕士学位论文].苏州: 苏州大学, 2015.
|
[15] |
王超, 孙玉秋, 徐石瑶, 等. 自适应直方图均衡化图像增强算法研究. 长江大学学报(自科版), 2018, 15(1): 55-59. |
[16] |
Fu CY, Liu W, Ranga A, et al. DSSD: Deconvolutional single shot detector. arXiv: 1701.06659, 2017.
|
[17] |
鞠荟荟, 刘志刚, 姜江军, 等. 基于低通滤波残差图的高光谱条带噪声去除. 光学学报, 2018, 38(12): 1228002. |
[18] |
许晏铭. 视觉主导的无人机航拍目标快速检测技术研究[硕士学位论文]. 大连: 大连海事大学, 2018.
|
[19] |
Zhang JM, Wang W, Lu CQ, et al. Lightweight deep network for traffic sign classification. Annals of Telecommunications, 2019, published online. DOI:10.1007/s12243-019-00731-9 |