改进YOLOv3的交通标志检测方法研究

2020-10-19 04:40邓天民周臻浩
计算机工程与应用 2020年20期
关键词:交通标志卷积聚类

邓天民,周臻浩,方 芳,王 琳

重庆交通大学 交通运输学院,重庆 400074

1 引言

交通标志检测与识别技术是自动驾驶领域的关键技术之一,被广泛地应用于汽车辅助驾驶系统中,随着计算机性能、人工智能和目标检测技术快速的发展,端到端的智能化检测是自动驾驶领域的一个全新的途径。因此,本文研究基于YOLOv3的交通标志牌检测与识别方法对于提高自动驾驶公路交通规范具有重要意义。

传统机器学习应用在交通标志检测的方法主要是基于颜色、形状或者两者相结合的方法。Li等[1]将图像从RGB 颜色空间转换到高斯颜色空间,然后使用kmeans对颜色进行聚类并提取出交通标志;Berkaya等[2]提出使用形状检测算法来检测圆形交通标志。这些方法主要是利用交通标志颜色与形状的特殊特性进行特征的提取,通过依据分类器来实现分类。但是存在检测速度慢、检测精度差、抗环境干扰能力差等问题,难以在实际应用中实现精准的识别效果。

近年来,随着深度学习在图像分类、目标检测、图像语义分割等领域取得了一系列突破性的研究成果。John等[3]使用CNN提取特征并检测道路交通标志,绘制出包含交通灯位置的特征图。Girshick 等[4]提出了一种基于快速区域的卷积网络方法(Fast R-CNN),使用深度卷积网络有效地对目标进行分类。为了执行快速准确的交通标志检测和识别,Zhu 等[5]采用了整体嵌套的边缘检测网络。Tian等[6]提出了采用多尺度CNN方法,融合了不同网络层的特征信息来识别交通标志,并将检测问题看作回归问题,使用深度卷积神经网络作为回归预测其输入图像中目标。总体而言,这些方法中使用的主要方法是首先提取感兴趣区域的特征,然后使用分类器定位位置。因此,这些方法统称为两阶段目标检测。它们具有较高的检测精度和较强的泛化能力,但是确定感兴趣区域需要大量的计算,这就导致实现实时检测的能力很差。

为了提高检测效率,Redmon等[7]提出了将目标检测作为回归问题的YOLOv1(You Only Look Once)网络,该网络是一个采用深度卷积神经网络的全新实时目标检测方法,它直接利用网格对目标位置进行回归。与当前的卷积神经网络相比,YOLO网络显著提高了检测速度,并在很多领域得到了广泛的应用。与R-CNN 相比,YOLOv1网络以较低的准确性和较低的召回率来定位目标物体。为了进一步提高检测精度,YOLOv3[8]使用了增量改进技术,大大提高了小目标的检测精度。

综上,本文针对交通标志易受光照、实际道路场景复杂等特征影响导致识别准确率和识别速率不高的问题,采用了Darknet 框架结合改进YOLOv3 算法的交通标志检测方法。最后,通过大量实验对比改进算法和原始算法在复杂交通标志情况下的检测识别率和鲁棒性的差异,验证了该算法的有效实用性。

2 交通标志检测模型

网络整体框架选用整图训练的方式将检测问题看作了回归问题,可以更好地区分目标和背景区域;并且接受不同大小尺寸输入的图片,由Darknet 网络提取图像的特征,然后将特征图输入到后续的多尺度分类检测网络中,最后YOLOv3 输出3 个不同尺度的特征,可以对不同大小的目标进行检测,有助于实现交通标志目标的检测要求。

2.1 Darknet-53特征提取网络结构

在交通标志图像特征提取方面,YOLOv2[9]采用了Darknet-19网络结构,由于直筒型网络结构层数过多会造成训练过程中梯度爆炸等问题,因此YOLOv2 所采用的Darknet 网络架构只有19 层。YOLOv3 采用了称之为Darknet-53 的网络结构(含有53 个卷积层)结合了YOLOv2 的基础特征提取器并借鉴了残差网络的思想[10],如图1所示。

图1 Darknet-53网络结构

Darknet-53 由5 个残差块组成,每个残差块由残差单元组成,残差单元中由DBL单元组成,两个DBL单元在残差块中进行残差操作,如图2(a)所示。其中DBL单元包含了卷积层(convolutional)、批归一化(Batch Normalization)和Leaky Relu激活函数,如图2(b)所示,通过引入残差结构,可以增加网络架构的深度并防止训练的过程梯度爆炸和消失等问题。

图2 结构单元

本文对Darknet53网络进行了模型简化。YOLO网络中引入了BN[11](Batch Normalization)层,通过对每个卷积层后添加BN层,可以在网络训练时期加速网络收敛以及防止过拟合,并且可以简化调参,使网络更加稳定。虽然BN层在训练时起到了归一化作用,但是在网络前向推理时增加了运算,影响了模型的性能,且占用了更多的内存或者显存空间,从而降低了网络模型的前向推理速度。

卷积层与BN 层都是线性变换,提供了合并的可能性。在YOLOv3中,BN计算过程如下:

其中,γ为缩放因子,μ为均值,δ2为方差,β为偏置,xout为BN计算结果,xconv为卷积计算结果。

合并卷积层与BN层,式(2)代入到式(1)得:

即:

合并后权值参数变为:

偏置变为:

即合并后的计算变为:

卷积层与BN 层合并后可以与卷积层共用Blob 数据,从而可以减少内存占用,有利于速度提升。

如图3 所示,输入图片经过卷积得到特征图后,然后输入到BN 层中进行归一化处理,再经过Leaky-Relu函数激活之后,进入网络的下一层。本文将DBL 单元结构中的批归一化层和卷积层合并为一层,通过实验可知该方法提高了模型的前向推理速度,从而可以提高目标检测的速率。

图3 合并BN层和CONV层

2.2 基于YOLOv3的交通标志检测模型

YOLOv2中引入一种称为passthrough layer的方法在特征图中保留一些细节信息,为了加强YOLO算法对小目标检测的精度。在YOLOv3 中采用类似FPN 的上采样(upsample)[12]和尺度融合方法[13],将上采样后的高语义特征与浅层的定位细节特征进行融合。如图4 所示,卷积网络在79层后,经过下方几个卷积层得到一种尺度的检测结果。相比输入图像,这里用于检测的特征图有32倍的下采样,特征图就是13×13了。由于下采样倍数高,这里特征图的感受野比较大,因此适合检测图像中尺寸较大的目标。为了实现细粒度的检测,第79层的特征图又开始作上采样,然后与第61 层特征图融合,这样得到第91层较细粒度的特征图,同样经过几个卷积层后得到相对输入图像16倍下采样的特征图。最后,第91 层特征图再次上采样,并与第36 层特征图融合,得到相对输入图像8倍下采样的特征图。它的感受野最小,适合检测小尺寸的目标。此方法融合了3个尺度(13×13、26×26、52×2),通道数为3,就是说每个box负责对三个anchor box进行回归,取其中的一个作为最终检测结果,共对9 个anchor box 进行回归,所以对于一张输入图像,最后的输出尺寸为1×(3×(13×13+26×26+52×52))× (5+m),m代表检测类别数。在多个尺度的融合特征图上分别做检测,最终对小目标的检测效果较前几代的YOLO有了明显的提升。

图4 YOLOv3多尺度融合

2.2.1 目标边界框的预测

YOLOv3 的设计理念遵循端到端的训练和实时检测,可将图片作为输入,直接输出目标位置和对应位置的置信度评分。首先通过特征提取网络对输入图像提取特征,得到一定大小的特征图,然后将输入图像分成s×s个单元格,如果真实框中某个目标的中心坐标落在哪个单元格中,那么就由该单元格来预测该目标。每个单元格都会预测3 个固定数量的边界框。每一个边界框获得1个偏移坐标(tx,ty)、1个真实宽高坐标(tw,th)和一个置信度评分C。

在YOLOv1 版本中,x、y、w、h是直接预测物体框的中心坐标和预测框的宽度和高度,预测值的微小变化都会被放大到整个图像的任何范围,导致坐标波动较大,预测不准确。YOLOv2 和YOLOv3 对其进行了改进,其公式为:

其中,tx、ty为预测的坐标偏移值,σ(tx)、σ(ty)用sigmoid运算将tx、ty压缩到[0,1]区间内,可以有效确保目标中心处于执行预测的网格单元中,防止偏移过多。tw、th为尺度缩放。cx、cy为grid cell 坐标,也就是距离左上角顶点的偏移量;pw、ph代表cell 对应先验框(anchor box)的宽高,计算出 bounding box 的位置,如图5 所示。confidence=pr(Object)×IoUtruthpred,通过对confidence这一项设定阈值,过滤掉低分的预测框,然后对剩下的预测框执行非极大抑值(Non Maximum Suppression,NMS)[14]处理,得到网络的最终预测。

图5 bounding box坐标转换公式

2.2.2 目标定位损失函数的改进

当前很多目标检测算法的坐标误差损失函数都使用预测框与真实框角点坐标距离的1-范数Loss 或者2-范数Loss,但是评测的时候却又采用IoU(Intersection over Union)来判断是否检测到目标。显然二者有一个分歧,即loss低不代表IoU就一定小。由图6可知,其中红色框为真实框,黑色框为预测框。第一排,所有物体的2-范数loss 都一样,但是第三个IoU 显然要高于第一个,主观来看也是第三个检测结果要好。第二排也是类似,1-范数都一样,但是IoU却不同。

图6 相同1-范数或2-范数对应的IoU和GIoU

当L1或L2范数都相同的时候,发现IoU和GIoU的值差别都很大,这表明使用L范数来度量边界框的距离是不合适的。针对这个问题会直接采用IoU 当作模型的坐标误差损失函数,但是IoU作为损失函数存在两个问题:(1)当预测框和真实框之间没有重合时,不管两者之间的距离有多远对应的IoU 值都为0,导致优化损失函数时梯度也为0,意味着无法优化,无法进行学习训练,见图7。(2)IoU无法辨别不同方式的对齐,比如方向不一致等。如图7,场景 A 和场景B 的 IoU 值都为 0,但是显然场景B的预测效果较A更佳,因为两个边界框的距离更近(L范数更小)。

图7 IoU为0的两种不同情况的回归

IoU是目标检测中使用最广的评价指标,然而优化回归bounding box 参数的距离损失并不等价于最大化IoU指标。对于轴对齐的2D bounding box,IoU可直接用作坐标误差回归损失,但是IoU 无法优化无重叠的bounding box,所以本文使用一种泛化版的GIoU[15](Generalized Intersection over Union)来代替IoU 作为坐标误差损失函数,该改进方法加快模型拟合预测框与真实框的位置关系,并提高模型的预测精度。

对于预测框A与真实框B,可以计算出两者的最小凸集(包含A、B的最小包围框)C。通过最小凸集,可以计算GIoU。IoU和GIoU的计算公式如下:

公式(9)中分式部分分子为最小凸集中不包含A和B的部分。GIoU与IoU相似,GIoU作为一个距离度量指标,其坐标误差损失函数LGIou计算公式如式(10)所示:

GIoU 有以下性质:(1)与 IoU 类似,GIoU 也可以作为一个距离度量,loss 可以用LGIoU=1-GIoU来计算。(2)同原始IoU 类似,GIoU 对物体的大小不敏感。(3)GIoU 是 IoU 的下界,GIoU 总是小于等于IoU,对于IoU,有 0 ≤IoU≤ 1 ,GIoU 则是-1 ≤GIoU≤ 1 。在A和B形状完全重合时,有GIoU=IoU=1;当A和B不重合度越高(离得越远),GIoU 越趋近于-1。(4)由于GIoU引入了包含A、B两个形状的C,所以当A、B不重合时,依然可以进行优化,保留了IoU 的原始性质同时弱化了它的缺点。

2.2.3 Anchor参数设定

Anchor(先验框)机制起初是由Faster R-CNN 提出,后来被广泛用于一阶段及二阶段目标检测框架,如SSD、YOLO、RetinaNet 等。Anchor 主要用来解决目标检测任务中尺度及宽高比例变化范围过大的问题,模型训练的时候真实标签被编码为相对于Anchor 的偏移量,模型测试时根据模型预测的相对于Anchor 的偏移量来解码检测结果。通过Anchor 机制,将尺度和宽高比例的空间划分为相应的几个子空间,降低了目标检测任务的难度,使模型更容易学习。但是在Faster R-CNN和SSD 中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性,如果一开始选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv3中采用k-means聚类算法对数据集(COCO)中80 类目标的标注框做了聚类分析。本文针对k-means聚类方法在初始聚类点的选择上存在较大的随机性的问题,使用了随机性更小的k-means++[16]聚类算法来代替原始聚类算法对本文数据集的标注框进行聚类计算,可以有效降低原始算法在初始聚类点所造成的聚类偏差。得到Anchor 较好尺寸并匹配到对应的特征图,从而可以提高检测准确度和召回率。

3 实验与分析

本文实验在计算机环境配置为Ubuntu16.04、CUD(Compute Unified Device architecture)10.0、CUDNN(CUDA Deep Neural Network library)7.0。硬件配置为Intel-CPU-i7-8750H 处理器,显卡为Nvidia GeForce GTX 1050Ti,调用GPU进行加速训练。

3.1 交通标志数据集

本文采用的数据集为Lisa(加州大学圣地亚哥分校数据集)交通标志数据集和CQ-data(重庆交通标志数据集)见图8和图9。Lisa数据集中图片拍摄角度以及分类更规范,因此作为本文算法的主要研究数据集。CQ-data数据集为个人制作数据集,图片的获取来由是百度实景街道截取,该数据集验证本文改进算法的实用性。Lisa数据集共包含20类交通标志,选取了数据集中的4 706张图片。在Lisa 数据集中选取其中数量最多的4 类交通标志作为检测识别对象,分别为stop、pedestraincrossing、signalahead、speedlimit,共计 5 373 个标注。CQ-data 数据集共制作了1 000张图片。在CQ-data数据集中,选取了5 类交通标志作为检测识别对象,分别为:禁止鸣喇叭、禁止停车、禁止向左转弯、限速、其他禁令标志,共计1 500个标注。将标注信息生成与之对应的xml格式的目标区域位置的信息,编写python程序将xml格式的目标区域位置的信息统一转化为txt格式,以便让YOLOv3读取图片标注信息位置。最后按照VOC2007数据集格式进行了整理,分别按3∶1比例将两个数据集中的图片分为训练集和测试集两类。

图8 Lisa交通标志数据集

图9 重庆交通标志数据集

3.2 Anchor参数预设

由于YOLOv3 最原始选定anchor 尺度和宽高比是基于COCO数据集(80个分类)确定的,但是本文的Lisa数据集应用目标是交通路面上的交通标志牌,原先设置的anchor box 尺寸不适合本文研究的环境中,基于此,本文使用k-means++聚类算法对交通标志数据集的真实标注框进行聚类操作,真实标注框长宽映射到模型输入大小size下的聚类结果如图10所示。

图10 Grounding truth box长和宽聚类散点图

由代码实现上来看,anchor尺寸是相对于预测的特征图大小(13×13),因此真实标注框长宽映射到模型后输出的 anchor 尺寸大小为:(12.41,23.50)、(15.96,31.73)、(21.11,34.88)、(21.74,48.11)、(28.83,42.13)、(29.57,63.04)、(37.08,52.16)、(44.06,75.64)、(64.64,103.84),使用自己的数据集进行维度聚类,得出结果和原始的参数相比,自己的聚类结果更为集中,宽高比更符合交通标志数据集的特点,因此使用k-means++算法聚类得到的anchor 参数来代替原始的参数进行训练和测试。可以使anchor框更容易拟合真实目标,从而可以降低模型训练的难度。

3.3 模型训练

训练阶段更改YOLOv3 配置文件来对图片进行数据增强预处理以此来提高模型的泛化能力,包括旋转图片角度、调整图片饱和度、调整图片曝光量、调整图片色调、裁剪图片大小、调整图片色度扭曲、调整图片噪声来生成更多的训练样本。之后将增强后的图片resize 到416×416 送入到网络模型中进行模型的训练。同时在训练阶段,为了防止Anchor 与真实框没有IoU 大于0.5的情况,本实验设置当出现这种情况时将与真实框IoU最高的Anchor作为对应类别的正样本参与训练。

该实验以Darknet53 为基础网络框架,以YOLOv3为检测算法框架,基于迁移学习的方法,使用预训练模型作为基础特征提取网络,整个训练过程中共进行20 000 次迭代,其中动量和权重衰减分别配置为0.9 和0.000 5,批量大小设置为64,初始学习率为0.001,并在迭代次数达到16 000和18 000时,学习率分别为0.000 1和0.000 01。由图11可以看出,到后期的训练损失值基本低于0.030,迭代至17 500次左右,loss值在0.030上下浮动,即达到理想效果。训练过程中平均Avg IoU 和Avg GIoU 如图12 和 13 所示,可以看出 GIoU 整体训练相较于IoU更加密集,性能更优。训练过程中精度和召回率如图14所示。

图11 平均损失变化曲线

图12 平均IoU变化曲线

图13 平均GIoU变化曲线

图14 precision与recall变化曲线

3.4 实验结果与分析

该实验分别使用Loss-IoU 和Loss-GIoU 对数据集进行训练,以IoU和GIoU为度量评价方式,分别得到权重文件IoU 和权重文件GIoU,然后设定Threshold(阈值)为0.75分别用Loss-IoU和Loss-GIoU对这两个权重文件的性能进行测试统计。结果如表1,使用Loss-GIoU 作为回归损失来训练数据集相比于使用原来的Loss-IoU作为回归损失,性能得到了提高。

表1 LIoU和LGIoU对权重文件的性能测试

实验中设置阈值为0.5 时4 类交通标志的AP 值和准确率的均值(mAP),如表2所示。实验中的前向推理时间都是与实验A进行对比,对比结果如图15所示。原始的网络检测模型性能较低,前向推理时间达到了151 s,由于使用的是原始的Anchor 尺寸及宽高比,因此对于“signalAhead”这类较小的交通标志在目标定位方面效果不如其他几类交通标志,如图16(a)所示。

在网络结构中融合了BN层和Conv层后,检测速率以及前向推理速度有21 个百分点的提高,但是检测精度基本不变;在原始模型的基础上加入维度聚类操作后,对于“signalAhead”这类小目标交通标志AP 提升较明显,同时mAP 有3 个百分点的提高;在原始模型的基础上把坐标误差回归的损失函数改进为GIoU-Loss后,“Pedestraincrossing”的AP 值有8 个百分点的提高;当同时引入维度聚类和GIoU-LOSS 的方法后,mAP 相对于只引入GIoU-LOSS 有3 个百分点的提高;同时mAP 相对于只加入维度聚类有6个百分点的提高,但是前向推理速度略微下降了4个百分点;当同时改变3个模块时,mAP 提升8.1 个百分点同时前向推理速度也有19 个百分点的提升,如图17和18所示。

表2 不同模块对模型的性能影响对比

图15 前向推理时间优化

图16 改进后算法在LISA数据集的检测效果

图16(a)(b)为模型改进前后在Lisa 数据集测试集的检测效果。改进后的交通标志检测识别效果相较于未改进的在定位预测上更加准确。原始算法中对于复杂路况上容易产生误检,改进后的算法更有利于实时道路场景中交通标志的检测。图19 为模型改进后在CQ-data 数据集测试集的检测效果,显示了本文提出的改进方法在复杂环境下的检测效果。

为进一步验证本文改进模型对于交通标志检测的有效性,在Lisa 数据集和CQ-data 数据集上分别训练了对应的检测模型并与FasterR-CNN、YOLOv2、YOLOv3等主流算法进行了对比。实验结果如表3和4。

图17 交通标志检测精度mAP

图18 4类交通标志检测精度AP

图19 改进后算法在CQ-data数据集的检测效果

表3 各模型在Lisa数据集上效果对比

表4 各模型在CQ-data数据集上效果对比

从实验结果看,本文的改进模型与Faster R-CNN所训练的模型在精度上很近似,但在速度上本文改进方法还是具有显著的优势。在兼顾精度的同时相比Faster R-CNN 能够达到更快的检测速度,这满足实时交通场景检测的速率要求,与YOLOv2 相比,虽然检测速度降低了,但是经过BN层和CONV层的融合已经有了显著的提升。综合来看,本文改进的YOLOv3模型具有一定的泛化性和鲁棒性。

4 结束语

针对YOLOv3 原始算法直接运用于本文的两个交通标志数据集上性能不高的问题,首先将DBL 单元中BN 层和CONV 层合并提高模型前向推理速度,其次引入更加接近检测任务的评价标准GIoU-Loss 作为代价函数以提高模型的定位能力。最后使用k-means++聚类算法重新确定anchor 的大小可以使模型更容易收敛来更好适用于本文数据集的检测与识别。实验结果表明,改进后的YOLOv3算法相较于原始算法在Lisa数据集和CQ-data数据集上检测平均准确率和检测平均速率有一定的提升。同时本文还有很多地方需要改进,本文算法在识别小目标时,识别精度仍没有达到预期的效果,并且由于工作计算量大消耗大量内存,该模型仍然不适用于实时性工程应用中。如何在提高性能条件的基础上精简网络结构、降低计算量将是未来的主要研究方向。

猜你喜欢
交通标志卷积聚类
基于双向特征融合的交通标志识别
基于3D-Winograd的快速卷积算法设计及FPGA实现
卷积神经网络的分析与设计
基于K-means聚类的车-地无线通信场强研究
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
基于高斯混合聚类的阵列干涉SAR三维成像
交通标志小课堂
基于Spark平台的K-means聚类算法改进及并行化实现
基于改进的遗传算法的模糊聚类算法