2. 贵阳信息技术研究院, 贵阳 550081
2. Guiyang Academy of Information Technology, Guiyang 550081, China
自动驾驶能够有效避免因驾驶技能、心理变化、疲劳程度等人为因素而导致的交通事故, 能够有助于合理管控道路交通流量以改善道路的通行能力, 还能够提供舒适友好的驾乘体验, 具有广阔的应用前景以及潜在的社会效益[1]. 自动驾驶系统的核心可以分为3个部分: 感知、规划和控制, 其中目标检测是自动驾驶领域环境感知系统的一个重要分支. 在自动驾驶环境感知领域, 从相机拍摄的视频中检测前方目标是近年来的研究热点[2]. 传统检测方法主要是人工提取图像中的颜色、形状和纹理等特征, 然后通过支持向量机和AdaBoost等分类器识别[3]. 与传统的人工基于特征的提取方法相比, 深度学习算法提高了检测的速度和准确率. 因此, 使用2D图像的深度学习算法已经成为自动驾驶中道路目标检测的最有力工具之一[2].
随着深度学习的广泛应用, 目标检测的精确率和效率都得到了较大提升, 但基于深度学习的目标检测仍面临改进与优化主流目标检测算法的性能、提高小目标物体检测精度、实现多类别物体检测等关键技术的挑战[4]. 基于深度学习的检测方法可以分为one-stage和two-stage两大类. 以Faster R-CNN[5]为代表的two-stage方法首先通过RPN找出图片中待检测物体的候选区域, 再对候选区域的特征进行分类和目标框检测, 该类方法具有精度高和速度较慢的特点. 以YOLO系列[6-9]为代表的one-stage目标检测算法, 通过归回方式预测出物体的位置和类别, 经过单次检测能直接输出检测结果, 该类方法具有检测速度快的特点, 被广泛应用于目标检测任务中.
在自动驾驶应用场景下, 将YOLOv5应用于目标检测中, 性能较之前版本有明显的提升, 但在高运行速度情况下检测精度仍不够高. 因此本文提出一种基于改进YOLOv5的车辆端目标检测方法.
1 YOLOv5基本原理它的结构由4部分组成, 包括输入端(input)、主干网络(backbone)、颈部网络(neck)和输出端(head). YOLOv5本整体的网络结构如图1所示, 网络组件结构如图2所示.
1.1 输入端(Input)YOLOv5在输入端会对图像数据进行自适应图像填充和Mosaic数据增强. 输入端还集成了自适应锚框计算, 使得在训练不同数据集前, 模型通过对数据集的标签框进行聚类获得初始锚框大小, 无需人工设定锚框的参数.
Mosaic是一种基于Cutmix[10]的数据增强方法. 在Cutmix中组合了两张图像, 而Mosaic将4张训练图像组合成1张进行训练. 作用是增强了对正常背景之外的对象的检测. 在训练时每个批量数据包含大量的图像, 使用Mosai后是原来批量所包含图像数量的4倍, 因此减少了估计均值和方差时需要大批量的要求.
自适应图片缩放操作仅在模型推理阶段执行, 首先根据原始图片大小与输入到网络图片大小计算缩放比例. 然后根据原始图片大小与缩放比例计算缩放后的图片大小. 最后缩放到适合模型输入大小的图片.
在YOLOv2[7]、YOLOv3[8]、YOLOv4[9]版本中, 其中通过聚类提取先验框尺度, 针对不同的数据集都需要设定特定长宽的锚点框. 训练不同的数据集时, 都是通过单独的程序运行来获得初始锚点框. YOLOv5版本将自适应锚框计算功能嵌入到代码中, 每次训练时根据数据集的名称自适应的计算出最佳的锚点框.
1.2 主干网络(Backbone)主干网络能从图像中提取到特征, 在YOLOv5中主要使用了C3模块和SPPF模块. 其中使用C3模块能减少模型计算量和提高推理速度, 使用SPPF模块能对同一个特征图进行多尺度特征提取, 有利于提升模型的精度.
C3模块其包含了3个标准卷积层以及多个瓶颈模块(bottleneck), 其中瓶颈模块数量由配置文件. YAML的n和depth_multiple参数乘积决定. 其结构如图2所示. C3模块是对残差特征进行学习的主要模块, 其结构分为两个分支, 一分支使用了上述指定多个Bottleneck堆叠和3个标准卷积层, 另分一支仅经过一个基本卷积模块, 最后将两支进行Concat操作. 其中在Concat操作后的标准卷积模块中的激活函数是SiLU. 它是一种按元素应用Sigmoid线性单元的函数, 其特点是处处可导、连续光滑和并非一个单调的函数, 有助于表示非线性特征. SiLU激活函数定义如下:
$ {\textit{SiLU}}(x) = x \times {\textit{Sigmoid}}(x) $ | (1) |
SPPF模块原理和空间金字塔池化(spatial pyramid pooling, SPP)[11]基本一致, 但用到的池化核设计不一样. SPP在YOLOv5中默认使用4个池化核, 分别是: 5×5、9×9、13×13和1×1. SPPF在YOLOv5中默认使用两个池化核, 分别是: 5×5和1×1. 两者对比下SPPF在提取特征时速度会更快.
空间金字塔池化[11]能融合不同尺度大小的特征图, 对任意尺寸的特征图直接进行固定尺寸的池化, 来得到固定数量的特征. 然后将每个池化得到的特征合起来即得到固定长度的特征个数, 接着输入到全连接层中进行训练网络. SPP增加感受野, 解决了CNN输入图像大小必须固定的问题, 从而可以使得输入任意图像的高宽比和大小.
1.3 颈部网络(Neck)由特征金字塔(feature pyramid network , FPN)[12]和路径聚合结构(path aggregation network, PAN)[13]组成. 其中FPN同时使用低层特征高分辨率和高层特征的语义信息, 在网络中自上而下传递语义信息. PAN是自下而上传递定位信息, 使低层信息更容易传播到顶层. PAN能融合不同尺寸特征图的特征信息, 有助于提升模型对不同形状大小物体的检测能力.
1.4 输出端(Head)输出端作为模型的检测部分, 主要是对提取到的多尺度特征图进行预测不同大小的物体. 输出端的锚框机制通过聚类提取先验框尺度, 并约束预测边框的位置.
模型输出3种尺度的张量, 第1种是对相对输入图像做了8倍下采样的输出, 其感受野较小, 保存了低层高分辨的特征, 对于检测小物体是很有帮助的. 第2种是相对输入图像做了16倍下采样的输出, 其感受野中等, 对于检测中等物体是有帮助的. 第3种是相对输入图像做了32倍下采样的输出, 其感受野较大等, 适合检测大物体.
1.5 损失函数(Loss)损失函数方面, 边框信息的回归损失计算采用了CIoU函数[14]. 它能同时考虑检测框和目标框重叠面积、边界框中心距离和边界框宽高比, 加速训练过程中目标检测框回归速度, 提高边界框的定位精度.
CIoU公式如下:
$ CIoU = IoU - \frac{{{\rho ^2}(b, {b^{gt}})}}{{{c^2}}} - av\; $ | (2) |
其中,
$ \alpha = \frac{v}{{1 - IoU + v}}\; $ | (3) |
$ v = \frac{4}{{{\pi ^2}}}{\left(\arctan \frac{{{w^{gt}}}}{{{h^{gt}}}} - \arctan \frac{{{w^{}}}}{h}\right)^2}\;\; $ | (4) |
CIoU的损失公式如式(5)和式(6):
$ Los{s_{{\rm{CIoU}}}} = 1 - CIoU $ | (5) |
$ Los{s_{{\rm{CIoU}}}} = 1 - \;IoU + \frac{{{\rho ^2}(b, {b^{gt}})}}{{{c^2}}} + av\; $ | (6) |
改进后模型简称YOLOv5-TR, 其网络结构如图3所示, 组件结构如图4所示. 在原始模型的主干网络添加压缩与激励模块(squeeze and excitation, SE)[15], 筛选针对通道的特征信息, 提升特征表达能力.为了提升检测不同大小物体时的精度, 把卷积注意力模块(convolutional block attention module, CBAM)[16, 17]与Neck部分融合, 使模型更加注意检测目标相关的特征, 提升模型特征提取能力. 在激活函数方面, 卷积操作后使用Hardswish激活函数[18], 应用于整个网络模型.
2.1 主干网络(Backbone)改进在自动驾驶场景下进行目标检测, 由于复杂的环境会使模型学习到较多背景特征, 这不利于目标区域的特征学习, 进而影响目标检测的精度.
压缩与激励模块主要包含压缩(squeeze)和激励(excitation)两部分. SE模块对输入的特征信息先经过压缩操作, 然后经过激励操作, 最终得到模块的输出.它能使模型更加关注目标区域的通道特征, 而抑制不重要的通道特征[15].
本文在主干网络中的SPP模块后面, 加入一个SE模块, 改进后的主干网络如图3所示. 原因是主干网络能提取图像大量的特征, 加入的SE模块能使模型更加关注目标区域的通道特征, 并能抑制不重要的通道特征, 提升模型对关键特征的提取能力, 从而提高目标检测的精度.
2.2 颈部网络(Neck)改进在自动驾驶场景下, 检测的类别可分为“Car”“Van”“Truck”“Tram”“Pedestrian”“Person_sitting”“Cyclist”“Tram”[18], 类别之间的大小是有较大差异的. 同时由于相机成像模型, 导致距离相机近的物体在图像中显示较大, 距离相机远的物体在图像中显示较小. 检测的目标按形状大小可分为小目标、一般目标和大目标. 模型以高精度和高检测速度情况下, 同时对不同大小的目标进行检测是有困难的.
卷积注意力模块CBAM主要由两部分组成, 包括通道注意力模块 (channel attention module, CAM)和空间注意力模块 (spatial attention module, SAM). CBAM同时关注了空间信息和通道信息, 对网络中间的特征图进行重构, 使模型更加关注重要的特征, 提升模型的特征提取能力[16].
本文在颈部网络中融合两个CBAM模块, 改进后的颈部网络如图3所示, 同时对输入的特征图进行CBAM模块处理时, 先进行通道注意力操作, 然后进行空间注意力操作, 最终得到输出结果. 原因是特征图通过注意力机制处理后能获注意力信息, CBAM模块能同时提取空间注意力信息和通道注意力信息. 将CBAM模块融合在颈部网络, 突出特征图中的重要信息, 经过后面的进一步特征提取, 预测输出不同大小特征图的目标检测结果. 使得模型在检测不同大小的物体时, 能更关注重要的特征和提升特征提取能力, 从而提升物体的检测精度.
2.3 激活函数改进
为了提高模型的表达能力, 同时考虑模型计算的速度, 选择合适的激活函数尤为重要.
Hardswish在MobileNetV3架构[19]中被提出, 具有无上界、有下界、平滑和非单调等特点, 可使神经网络层具有更丰富的表达能力.
本文使用Hardswish函数替换SiLU函数. 原因是相较于SiLU函数, 它用分段线性模拟代替了计算成本高的Sigmoid处理, 具有数值稳定性好和计算速度快的优点, 同时使模型具有丰富的表达能力. 其中, Hardswish激活函数公式定义如式(7), 它分别考虑3种输入情况,
$ Hardwish(x) = \left\{ \begin{gathered} 0, \; {\rm{if}} \;x \leqslant - 3 \\ x, \; {\rm{if}} \; x \geqslant + 3 \\ \frac{{x(x + 3)}}{6}, \; {\rm{otherwise}} \\ \end{gathered} \right. $ | (7) |
改进后的检测模型在KITTI 2D[18]目标检测数据集上测试, 其中评估指标包括精确率、平均精度均值、帧率和召回率. 在实验结果分析中还包括边界框回归损失和类别损失等指标. 最终使用不同改进策略后, 进行多组对比实验, 得到检测结果.
3.1 数据集KITTI 2D目标检测数据集, 采用左侧相机图像, 包含7481张带有标签的图片, 其中图像是彩色并保存为png格式. 按照7:2:1的比例划分, 其中训练集5241个样本, 验证集1500个样本和测试集750个样本. 标签中包括7种类别, 分别是“Car”“Van”“Truck”“Tram”“Pedestrian”“Person_sitting”“Cyclist”“Tram”.
对训练数据进行数据增强, 包括图片HSV色域变换、随机位移(translation)、大小变换(scale)、随机左右翻转和Mosaic数据增强等, 具体参数如表1. 通过数据增强增加训练样本的多样性, 提高模型的泛化能力.
3.2 实验环境
实验环境分为训练环境和测试环境. 训练环境使用2块NVIDIA GeForce GTX 1080 8 GB显存的GPU, 内存是32 GB, CPU是Intel(R) Core(TM) i7-6700K . 加载软件环境有VSCode、Python 3.8、Cuda 11.4. 模型在Linux系统, 通过PyTorch深度学习框架搭建.
测试环境使用1块NVIDIA GeForce GTX 1080 8 GB显存的GPU, 其余环境因素和训练环境一致.
3.3 训练模型模型参数depth_multiple表示模型深度倍数, 设置其值为0.33, 参数width_multiple表示模型宽度倍数, 设置其值为0.50. 改进后的检测模型在KITTI 2D目标检测数据集上训练, 模型具体训练参数如表2.
3.4 评估指标
本文实验采用4个指标, 包括精确率(Precision, P)、类别的平均精度均值(mean average precision, mAP)、帧率(frames per second, FPS)和召回率(recall, R).
计算公式如式(8)–式(11)所示:
$ P = \frac{{TP}}{{TP + FP}} $ | (10) |
$ mAP = \frac{1}{N}\sum\limits_{i = 1}^N {A{P_i}} $ | (11) |
$ FPS = \frac{{FrameNum}}{{ElapsedTime}} $ | (12) |
$ R = \frac{{TP}}{{TP + FN}} $ | (13) |
其中, TP为正样本预测正确的数量, FN为负样本预测错误的数量, FP为正样本预测错误的数量, TN为负样本预测正确的数量.
改进后的模型YOLOv5-TR, 在主干网络中添加压缩与激励模块(SE), 把卷积注意力模块 (CBAM)与Neck部分融合, 同时进行卷积操作后使用Hardswish激活函数, 应用于整个网络模型.
模型训练300轮, 并在验证集上测试, 观察改进后的模块和原模型的边界框回归损失(box_loss)、目标置信度损失(obj_loss)和类别损失(cls_loss)的变化, 具体如图5所示.
如图5所示, 改进后的模型YOLOv5-TR和YOLOv5相比较下, 其边界框回归损失和目标置信度损失更低, 模型收敛速度更快. YOLOv5-TR模型在迭代300轮后, 边界框回归损失曲线渐趋平缓, 最后达到0.0238左右不再降低. 目标置信度损失达到0.0351左右不再降低. 类别损失达到0.0021左右不再降低.
如图6所示, 在验证集上测试, 观察改进后的模块和原模型的精确率(P)、召回率(R)和当IoU为0.5时平均精度均值(mAP)的变化, 具体数据如表3. YOLOv5-TR的整体性能比YOLOv5高, 在模型迭代300轮后, 精确率达到0.945, 召回率达到0.875, 平均精度值到达0.929.
在测试集上测试, 观察改进后的模块和原模型的评估指标, 具体数据如表4. YOLOv5-TR的整体性能比YOLOv5高, 在模型迭代300轮后, 精确率达到0.939, 提高了2.5%. 召回率达到0.875, 提高了5.1%. 当IoU为0.5时的平均精度值到达0.929, 提高了2.3%.
在测试集上测试, 观察不同改进带来的模型指标提升结果. 其中改进内容包括压缩与激励模块(SE)、卷积注意力模块(CBAM)和激活函数(Hardswish). 从表5可以观察到, 对精确率提升起到关键作用的是压缩与激励模块, 让精确率提升了2.2%. 对召回率提升起到关键作用的是压缩与激励模块和卷积注意力模块, 分别让召回率提升了2.7%和2.2%. 对平均精度均值提升起到关键作用的是压缩与激励模块和卷积注意力模块., 分别让平均精度均值提升了0.8%和1.1%.
YOLOv5-TR在KITTI 2D数据集中的7种类型的测试数据如表6.
4 结论与展望
本文提出一种基于改进YOLOv5的车辆端目标检测方法, 在主干网络添加SE模块, 筛选针对通道的特征信息, 提升特征表达能力. 为了提升检测不同大小物体时的精度, 将注意力机制与检测网络融合, 把卷积注意力模块CBAM与Neck部分融合, 使模型在检测不同大小的物体时, 能更关注重要的特征, 和提升特征提取能力. 在整个网络模型中的卷积操作后使用Hardswish激活函数. 实验结果表明, 目标检测的精确率、召回率和平均精度值均得到了提升.
[1] |
章军辉, 陈大鹏, 李庆. 自动驾驶技术研究现状及发展趋势. 科学技术与工程, 2020, 20(9): 3394-3403. DOI:10.3969/j.issn.1671-1815.2020.09.005 |
[2] |
Fan JQ, Huo TJ, Li X. A review of one-stage detection algorithms in autonomous driving. Proceedings of the 2020 4th CAA International Conference on Vehicular Control and Intelligence (CVCI). Hangzhou: IEEE, 2020. 210–214.
|
[3] |
肖雨晴, 杨慧敏. 目标检测算法在交通场景中应用综述. 计算机工程与应用, 2021, 57(6): 30-41. DOI:10.3778/j.issn.1002-8331.2011-0361 |
[4] |
赵永强, 饶元, 董世鹏, 等. 深度学习目标检测方法综述. 中国图象图形学报, 2020, 25(4): 629-654. DOI:10.11834/jig.190307 |
[5] |
Ren SQ, He KM, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149. DOI:10.1109/TPAMI.2016.2577031 |
[6] |
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: IEEE, 2016. 779–788.
|
[7] |
Redmon J, Farhadi A. YOLO9000: Better, faster, stronger. Proceedings of 2017 IEEE Conference on Computer Vision and Pattern Recognition. Honolulu: IEEE, 2017. 6517–6525.
|
[8] |
Redmon J, Farhadi A. YOLOv3: An incremental improvement. arXiv:1804.02767v1, 2018.
|
[9] |
Bochkovskiy A, Wang CY, Liao HYM. YOLOv4: Optimal speed and accuracy of object detection. arXiv:2004.10934, 2020.
|
[10] |
Yun S, Han D, Chun S, et al. CutMix: Regularization strategy to train strong classifiers with localizable features. Proceedings of the 2019 IEEE/CVF International Conference on Computer Vision (ICCV). Seoul: IEEE, 2019. 6022–6031.
|
[11] |
He KM, Zhang XY, Ren SQ, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2015, 37(9): 1904-1916. DOI:10.1109/TPAMI.2015.2389824 |
[12] |
Lin TY, Dollár P, Girshick R, et al. Feature pyramid networks for object detection. Proceedings of the 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Honolulu: IEEE, 2017. 936–944.
|
[13] |
Li HC, Xiong PF, An J, et al. Pyramid attention network for semantic segmentation. British Machine Vision Conference 2018. Newcastle: BMVA Press, 2018.
|
[14] |
Zheng ZH, Wang P, Liu W, et al. Distance-IoU Loss: Faster and better learning for bounding box regression. Proceedings of the 34th AAAI Conference on Artificial Intelligence. Palo Alto: AAAI Press, 2020.
|
[15] |
Hu J, Shen L, Albanie S, et al. Squeeze-and-excitation networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2020, 42(8): 2001-2023. |
[16] |
Woo S, Park J, Lee JY, et al. CBAM: Convolutional block attention module. Proceedings of the 15th European Conference on Computer Vision. Munich: Springer, 2018. 3–19.
|
[17] |
李永上, 马荣贵, 张美月. 改进YOLOv5s+DeepSORT的监控视频车流量统计. 计算机工程与应用, 2022, 58(5): 271-279. DOI:10.3778/j.issn.1002-8331.2108-0346 |
[18] |
Geiger A, Lenz P, Urtasun R. Are we ready for autonomous driving? The KITTI vision benchmark suite. Proceedings of the 2012 IEEE Conference on Computer Vision and Pattern Recognition. Providence: IEEE, 2012. 3354–3361.
|
[19] |
Howard A, Sandler M, Chen B, et al. Searching for MobileNetV3. Proceedings of the 2019 IEEE/CVF International Conference on Computer Vision (ICCV). Seoul: IEEE, 2020. 1314–1324.
|