杜金航,何 宁
北京联合大学,北京100101
图1 YOLOV3网络结构
道路车辆检测技术是机器视觉的重要研究内容,其中基于深度学习的车辆检测技术是目前主要的研究技术手段。车辆检测技术可应用于无人驾驶、智能交通、交通安全等众多领域,尤其在交通监控、刑事案件取证等应用中具有重要应用价值。近几年随着计算机计算性能的提升和存储空间的增长,卷积神经网络逐渐成为了计算机视觉领域研究的热点和重点,并凭借其强大的特征表达能力取得了巨大的成功。最早的经典卷积神经网络结构是Alex 等提出的AlexNet 模型[1],之后为了提高卷积神经网络的性能,国内外学者在网络结构和网络深度方面进行了深入探索,高阶特征在卷积神经网络中的研究也取得了一定的进展[2-4]。基于深度学习的车辆检测方法可以分为两类。一类是基于区域推荐的目标检测算法,首先使用区域推荐产生候选目标,随后使用卷积神经网络进行处理。具有代表性的算法有RCNN[5]、Fast RCNN[6]、Faster RCNN[7]、Mask RCNN[8]等,这类方法的优点是精度较高,缺点是由于计算量过大而不能满足实时应用的需求。另一类是基于回归的目标检测方法,将检测问题作为回归问题处理,直接预测目标位置与类别。具有代表性的算法有YOLO[9]、SSD[10]、YOLOv2[11]、YOLOv3[12]等。这类方法的优点是结构清晰,实时性好,缺点是相对于RCNN系列方法而言精度偏低。
本文针对车辆检测算法存在检测精度低、速度慢的问题,提出了一种基于改进YOLOv3的道路车辆目标检测方法。为了降低目标检测算法复杂度,提出了更为简单的网络模型,同时为了降低检测速度增加检测精度使用k-means 聚类方法选取先验框,在保证检测精度不降低的前提下显著提高检测速度,保证检测的实时性。
为了保证目标能够快速检测的前提下提高检测性能,Redmon J 等[12]于2018 年提出YOLOv3,主要应用于图像目标检测、视频目标检测、摄像头实时目标检测等方面。
YOLOv3 的网络结构主要包括Darknet53 与YOLO层两部分,分别用于提取图像特征和多尺度预测,通过在三种尺度上进行预测的方法,有效增强了对不同大小物体及被遮挡物体的检测效果,并引入跃层连接以强化收敛效果,同时采用随机多尺度训练的方式增强了算法的鲁棒性。
YOLOv3提出了新的提取图片特征的网络Darknet53,作为全卷积网络,Darknet53主要由卷积层、批量标准化及跃层连接组成,激活函数采用Leaky Relu,其网络结构如图1所示,其中输入图像尺寸为416×416×3,虚线部分为Darknet53骨架网络,其余部分为YOLO网络层。
图1 中DBL 结构是YOLOv3 的基本组件,由卷积层,批量标准化与激活函数构成,如图1 左下角所示。resn 结构为YOLOv3 中的主要组成部分,n 代表数字,表示这个res_block里含有多少个res_unit。该结构中包括零填充与残差结构,如图1右下角所示。图中用红色虚线框出的部分是骨干网络Darknet53,该网络用于提取图像特征。卷积层的工作原理如图2所示,其中淡蓝色区域是大小为5×5的输入图像,绿色区域是大小为5×5 的输出图像,输入图像中深蓝色区域为大小为3×3 的卷积核。为保证输出图像与输入图像大小不变,首先扩充输入图像如图中白色虚线框。随后计算输入图像中左上角3×3大小的区域,通过卷积运算将其映射到输出图像的第一个点上。最后滑动卷积核,完成整张图像的卷积操作。通过卷积可以突出图像的特征。
图2 卷积层原理示意图
图3 YOLOV3多尺度检测示意图
图1 右侧为YOLOv3 网络的特征交互层,YOLOv3在对目标物体进行分类时不再使用softmax函数。这是由于一个目标边框中出现的物体可能同时属于多个类别,而softmax 进行分类时只能将其分为一类。所以YOLOv3 采取多尺度分类思想,将YOLO 层分为3 个尺度,在同尺度YOLO 层利用卷积操作,使用卷积核(3×3和1×1)完成特征图和局部特征的交互。YOLOv3 输出了3 个不同尺度的feature map,如图1 所示的y1,y2,y3。在特征图大小为13×13、26×26、52×52的3个尺度上对目标进行检测,每一个单元格借助3个锚点框(anchor box)预测3 个边界框。该部分网络用于多尺度预测。多尺度检测示意图如图3,图3(a)为缩放后的图片示意图,缩放前图片大小为1 242×375,缩放后图片的大小为416×416。图3(b)、(c)、(d)分别为YOLOv3 在52×52、26×26、13×13 尺度上进行目标检测的示意图。图中蓝色部分为当前尺度下的锚点位置,YOLOv3使用锚点机制预测车辆边界框,在锚点位置处产生维度比例为1∶1、1∶2和2∶1的锚点框,预测目标位置。
骨干网络Darknet53对于道路车辆目标检测过于复杂与冗余,会出现检测速度过慢的问题。特征交互层使用的锚点框是根据经验、使用手工方式获取锚点的尺度,YOLOv3的锚点选取在对道路车辆目标检测时实用性低,从图4(a)、(b)中可以看出会误检的问题,从图4(c)中可以看出会漏检的问题,从图4(c)、(d)中可以看出会重复检测的问题。
本文提出利用锚点机制预测道路车辆边界框,并改进骨干网络,降低网络复杂度,在保证检测精度的同时提高检测速度。
Redmon等人[12]在YOLOv3中提出了Darknet53网络,获得了很好的检测精度与速度的平衡。虽然Darknet53通过残差结构使网络的训练难度降低,并使用了大量的1×1 和3×3 是卷积核,步长为2 的卷积核替代最大池化层减少了参数数量,但对于道路车辆的检测,Darknet53网络有些复杂与冗余,过多的参数会导致训练复杂、增大对数据量的需求、减慢检测速度。
图4 YOLOV3在KITTI数据集上的错误检测结果实例
为了提高道路车辆目标检测速度,以保持准确度、减少参数量为出发点,本文借鉴Darknet53,提出一种参数数量相对较少、运算复杂度相对较低的卷积神经网络作为特征提取网络。本文提出的卷积神经网络,称为Darknet30,网络结构如表1所示。
第一个卷积层用32 个大小为3×3 的卷积核(滤波器)操作416×416分辨率的输入图像;然后,将先前卷积层的输出作为输入,使用64个尺寸为3×3的卷积核以及两个像素的步长对它们进行卷积操作,实现下采样操作,同时添加残差块增加网络的深度,该残差块由1×1卷积层和3×3 卷积层组成,此时得到的特征图尺寸为208×208;接下来,执行包含2×残差块的5 组网络,分别获取104×104、52×52、26×26、26×26、13×13 分辨率的特征图。在这5组残差块组成的网络中,除了卷积核数与特征图的尺度不同之外,每一个残差块都相似。
该网络结构包含1×、2×残差块的6组网络,相比较于YOLOv3中1×、2×、8×、8×、4×残差块的5组网络,参数数量减少47%,运算复杂度下降,实现检测速度的提升。
表1 Darknet30的网络结构
为高效地预测不同尺度与宽高比的物体边界框,Faster R-CNN 最早提出使用锚点框作为选取物体边界框的参照物,代替传统的图像金字塔与特征金字塔的方法,同时降低了模型训练的复杂度,提高了运行速度。随后SSD、YOLOv2与YOLOv3均采用了锚点机制并取得了良好效果,因此,本文延用YOLOv3中的锚点机制预测车辆边界框。传统YOLOv3 中的锚点个数与维度是由VOC 20 类和COCO 80 类数据集聚类得到,锚点框维度比例为1∶1、1∶2和2∶1。不适用于道路车辆目标检测。道路车辆目标的长宽比始终是一个相对固定的值,聚类后长宽比呈现为1∶1,因此需要对道路车辆目标候选框进行聚类分析,重新确定锚点个数和宽高维度。
Faster R-CNN 通过在每个滑动位置采用3 个尺度和3个纵横比的框产生9个锚点,SSD使用6个纵横比表示不同形状的锚点。这些方法的共性是根据经验、使用手工方式获取锚点的尺度,然后在模型训练过程中调整锚点框的尺寸。受到YOLOv2的启发,本文使用k-means维度聚类的方法对训练数据集的边界框做聚类,选取最合适的边界框先验,对车辆进行更好的预测,其中聚类方法中距离公式定义如下:
其中,B 为矩形框的大小,C 为矩形框的中心,RIOU表示两个矩形框的交叠比。
本文权衡平均交并比与锚点框的数量关系如图5所示,取9 个锚点框,使用k -means 聚类方法处理数据集标签信息。聚类是将数据集中的道路车辆目标位置信息划分为9 个簇,让簇内的点之间距离尽量小,而让簇间的距离尽量大。聚类操作后9 个簇的位置就是锚点框的位置,这样选取的9个锚点框可以更加有效地检测目标,本文实验中有52 000 个二维的数据点,作图点与点之间的距离太近,不易观察算法的执行过程,图6(a)、(b)、(c)示意性实验采取了100个二维的数据点进行,k 值取3,每个数据点的横纵坐标为在图片中的位置信息,为方便计算将其进行归一化处理。
图5 锚点框数量与平均交并比的关系
图6 k-means实验示意图
k-means算法的执行过程可以分以下步骤:
(1)随机选择3个位置,作为初始聚类中心,本实验选取的3 个初始聚类中心位置如图6(a)中黑色叉线表示。随后计算图中所有点到这3 个初始聚类中心的欧式距离,将每一个点划入到距离其最近的初始聚类中心。如图6(a)中不同颜色的点表示划分到不同的簇中。
(2)将每一簇的中心位置更新为聚类中心位置。重复计算步骤(1),直到每个种子点的前后两次的更新值之间满足预设的阈值或迭代次数。
图6(b)是聚类迭代4次后的结果,原本属于红色簇的右上角红色的点群随着迭代的进行,距离蓝色簇聚类中心的距离变为最小,故将其重新划分到蓝色点群中,颜色由红色变为蓝色;图6(c)是聚类8 次以后的结果。第9 次聚类结果与第8 次相同,故第8 次迭代的结果就是最终聚类结果。
本文中锚点框的选取为图6(d)中的实验结果,分别是(8,66),(8,205),(79,198),(137,195),(183,190),(224,186),(279,185),(282,17),(353,178)。在每个尺度上的每一个单元格借助3个锚点框预测3个边界框。
表2 显示了使用锚点机制预测道路车辆边界框在KITTI 数据集上的检测结果。本实验中使用的算法使用了锚点机制,所以命名为YOLOv3-anchors,改方法在检测速度上比传统的YOLOv3提高了19.77 f/s。同时获得90.05%的mAP,比传统的YOLOv3提高了0.44%。可以看出使用锚点机制对检测速度有显著的提升效果。
道路车辆检测的损失函数包括坐标误差,置信度误差与分类误差。
中心坐标误差为:
宽高坐标误差为:
置信度误差为:
分类误差为:
其中,λ 为损失权重,λcoord取5,λnoobj取0.5;K×K 为网格大小,取值分别为52×52,26×26,13×13;M 为每个网格中候选框个数,取值为3;xi、yi、wi、hi、Ci、pi为横坐标、纵坐标、高度、宽度、置信度、类别预测值,为其对应的真实值,其中横坐标、纵坐标、高度、宽度的最大值为图片的大小416。置信度与类别预测值的取值范围为0到1。
本文在公开数据集KITTI[13]与车辆行驶动态数据集上进行训练和测试。实验基于Darknet神经网络框架[14]实现,在配置有Intel Xeon Silver 4110 CPU和RTX2080Ti GPU的PC机上运行。程序设计语言为Python语言。本文使用均值平均精度(mAP)与检测速度两项指标对模型进行评价。mAP计算公式如下:
其中,Nclasses为类别个数,PclassAve为不同类别的平均精度,计算方法如式(7),其中,Pclass为每幅图像中的类别检测精度,Ntotal为该类别的物体在测试集中的照片数目。
检测速度计算公式如下:
车辆检测标准数据集KITTI,KITTI 数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。KITTI还提取了用于2D、3D目标检测、目标跟踪和姿态预估数据集。本次实验使用2D目标检测数据集,并对数据集原有的标签信息进行处理,保留实验需要的3 个类别的标签,即:Car,Van,Truck。选取该数据集中7 481张图像作为实验数据,并分成两部分:5 000张图像用于训练验证数据集,2 481张图像用于测试数据集。
车辆行驶动态数据集取材于日常车辆行驶中拍摄的视频,视频格式为AVI,包括不同天气情况、不同道路的视频数据,总大小为2.68 GB。使用Labellmg 对视频序列中的每一帧图像进行标注用于测试。从视频序列中选取的道路车辆图像如图7所示,其中包括了复杂环境、车辆遮挡、夜晚低亮度等情况。
本文在训练阶段,进行50 200 次迭代,动量配置为0.9,权重衰减配置为0.000 5,批量大小设置为16,学习率初始为10-3,并在网络迭代40 000次时学习率降低为10-4。在网络迭代45 000 次时学习率降低10-5。图8 为训练过程中的损失函数收敛曲线,从图中可以看出,在训练次数达到5 000次时损失函数收敛曲线趋于平缓。
表2 使用锚点机制在KITTI测试集上的检测结果
图7 车辆行驶动态数据集实例
图8 收敛曲线
图9 显示了本文提出的方法与YOLO 系列算法在KITTI 数据集上的比较,其中本文提出的方法获得76.04 f/s 的检测速度,相比于YOLO 与YOLOv3 方法,本文提出的方法在检测速度上有显著的提高。同时,本文所使用的方法在测试集上获得90.08%的mAP,比传统的YOLOv3提高了0.47%,相比于YOLOv2与YOLO,本文提出的方法在检测精度上有大幅度提高。
图9 YOLO系列算法性能对比
本文使用均值平均精度(mAP)与检测速率两项指标对改进的YOLOv3模型进行评价。表3显示了本文方法与传统的YOLOv3 在车辆行驶动态数据集上检测的效果。其中YOLOv3-anchors采用了锚点机制预测道路车辆边界框,YOLOv3-anchors-30 采用了锚点机制预测道路车辆边界框的同时更改骨架网络为Darknet30。可以看出在同时采用锚点机制预测边界框和Darknet30网络时,检测效果更佳。
表3 不同方法在车辆行驶动态数据集上的检测结果
表4 显示了Fast R-CNN、Faster R-CNN、YOLO、YOLOv2、YOLOv3 与本文提出的改进的YOLOv3 方法的实验结果。从表中可以看到,本文提出的YOLOv3-anchors-30获得了90.08%的mAP,在精度方面优于所有其他方法,并且以76.04 f/s的速度实现了实时检测。可以看出本文提出的方法在综合考虑检测精度与检测速度之后取得了更好的效果。
图10显示了本文方法在车辆行驶动态数据集上检测的效果。图11 显示了本文方法在KITTI 数据集上检测的效果。图10(a)、图10(b)、图11(b)、图11(c)、图11(d)显示了本文提出的方法在复杂环境下的检测效果。图11(a)显示了在强光照环境下的检测效果。图10(b)、图11(b)显示了在遮挡情况下的检测效果。可以看出本文提出的模型对城市交通监控车辆的检测具有良好的鲁棒性。
图10 本文方法在车辆行驶动态数据集上检测的效果
表5 显示了本文方法与其他文献中方法的对比结果。从表中可以看到,本文方法在检测精度方面略有不足,但在检测速度方面具有明显优势,可以得出本文方法在检测精度与检测速度的综合考虑中检测效果更好的结论。
表4 不同方法在KITTI测试集上的检测结果
表5 不同文献方法检测结果对比
图11 本文方法在KITTI数据集上检测的效果
车辆实时检测在很多领域里具有重要作用,例如无人驾驶、智能交通、交通安全、停车场管理等。目前的车辆实时检测算法还存在一定的局限性,比如受光照变化、车辆遮挡、目标的快速运动等因素的影响,常常不能达到很好的检测效果,该研究依然具有一定的挑战性。本文提出的改进的YOLOv3 算法在检测速度方面有了显著的提示,并且在检测精度方面优于现有的目标检测方法。在后续工作中,如何在保证实时性的基础上增加车辆检测精度可以作为主要的突破方向。