改进YOLOv7的复杂道路场景目标检测算法
2024-01-18崔少华晋美娟
杜 娟,崔少华,晋美娟,茹 琛
1.太原科技大学 机械工程学院,太原 030024
2.山西平阳重工机械有限责任公司,山西 临汾 043000
在过去的几年中,随着计算机技术和深度学习的发展,道路目标检测技术在实现自动驾驶和智能交通系统等领域中扮演着越来越重要的角色。道路目标检测的主要目的是在道路图像中检测和识别各种交通标志、行人、车辆和其他障碍物,从而为自动驾驶和智能交通系统提供必要的信息。因此,准确地检测和识别这些目标对于保证车辆和行人的安全和提高道路交通效率至关重要。
道路目标检测技术已经经历了多个发展阶段。早期的目标检测方法主要基于传统的计算机视觉算法,如Haar[1]特征分类器、HOG[2]特征分类器和SIFT[3]特征分类器等。这些方法需要手动选择特征并且对特征提取和分类算法进行调试,难以适应复杂的场景,并且准确率和鲁棒性相对较低。
近年来,随着深度学习技术的发展,基于深度学习的道路目标检测方法逐渐兴起。深度学习模型能够自动学习特征,并且在目标检测和识别任务中表现出色。常用的深度学习目标检测框架主要分为两类:基于区域的目标检测(region-based detection)和单阶段目标检测(single-stage detection)。基于区域的目标检测算法主要是通过提取图像中的区域(region proposal)来实现目标检测,这些区域通常是预先选定的,然后通过CNN进行分类和定位。基于区域的目标检测算法主要包括RCNN[4]、Fast R-CNN[5]、Faster R-CNN[6]等。单阶段目标检测算法则是直接在图像中进行分类和定位,通常比基于区域的算法速度更快,但在精度方面稍逊一筹。单阶段目标检测算法主要包括SSD[7]、RetinaNet[8]、YOLO[9-12]系列等算法在复杂道路场景目标检测方面,这些算法已经得到了广泛的应用。
例如针对道路中的行人检测问题,樊嵘等人[13]以DETR[14]为基础模型,引入注意力编码器来有效利用小目标的特征信息,并在训练时使用Smooth-L1与GIoU[15]结合的损失函数来加速收敛,在Wider-Person数据集上取得了较好的检测效果。针对道路中的交通标志检测问题,韦强等人[16]以YOLOv5 为基础模型,引入递归门控卷积[17]用于骨干网络,并引入F-EIoU[18]损失函数和SOCA[19]注意力进一步小目标的检测精度,并在TT100K数据集上得到了较大的检测精度提升。对于复杂道路场景中的目标检测问题,盛博莹等人[20]提出基于反馈机制的特征提取网络(RFP-PAN),并提出级联注意力机制(SECA)用来提高杂交通场景下的小目标检测精度;冉险生等人[21]基于YOLOv5算法,改进了特征融合方式并改进了感受野模块以增大网络感受野从而更好地学习目标特征信息,最后引入quality focal loss[22]进一步加速网络收敛,在BDD100K 数据集和自制数据集上得到了较高的精度提升,且检测速度没有下降,使复杂道路场景下的检测性能得到提升。
目前,虽然基于深度学习的目标检测算法在复杂道路场景中的目标检测方面已经取得了很好的效果,但是对于场景中的小目标检测仍然存在一些问题。首先,目前的算法在小目标检测方面仍然存在一定的误检率和漏检率。这是由于小目标的尺寸和形状各异,加之环境因素的干扰,容易导致误检或漏检。其次,复杂道路场景中的背景干扰也是一个难点问题。由于道路场景中背景复杂多变,很容易出现背景中的物体被误检为小目标的情况。另外,复杂道路场景中小目标的检测速度也是一个需要关注的问题。对于自动驾驶这些对实时性和准确性要求较高的任务而言,算法的检测速度需要足够快,准确度要足够高,以便及时做出决策。
针对上述问题,本文提出一种基于YOLOv7[23]的改进算法,可以有效改善复杂道路场景中的小目标检测精度低的问题,且满足了精度与速度的平衡。改进主要包括以下5 点:(1)在检测头部增加了一个小目标检测层,用于降低对小目标的漏检误检概率;(2)对先验框用K-means++算法进行重聚类,用于增加对小目标的定位能力;(3)替换损失函数为WIoU loss[24],增加对低质量锚框的聚焦能力,加快模型收敛速度;(4)在颈部和头部引入协调坐标卷积,增强对特征图的空间感知能力;(5)提出一种partial convolution(PConv)与ELAN 结构融合的P-ELAN 结构来使网络轻量化,减少模型参数,加快推理速度。
1 YOLOv7算法概述
YOLOv7 是一款优秀的一阶段目标检测器,它是在YOLOv5 的基础上进行改进和优化得到的,它结合了众多优秀的先进思想,共有YOLOv7-tiny、YOLOv7、YOLOv7-d6、YOLOv7-e6、YOLOv7-e6e、YOLOv7-w6六个版本。其中YOLOv7 保证了在边缘设备推理时的精度与速度平衡,本文也是在此版本基础上进行改进,在推理速度不受影响的前提下使其获得更高的精度。
YOLOv7 算法由输入端(InPut)、特征提取网络(Backbone)、颈部网络(Neck)、多尺度检测头(Head)组成。YOLOv7网络结构图如图1所示。
1.1 输入端
输入端进行图像的预处理,包括一些mixup、mosaic等数据增强方案,并把图像对齐为特定尺寸大小的图片,之后送入特征提取网络。
1.2 特征提取网络
特征提取网络主要由多个CBS,ELAN[25]和MP 模块的连续堆叠组成,总共对图像进行了32 倍下采样。CBS 由Conv、BN、SiLu[26]组成,ELAN 由多个CBS 模块堆叠组成,含有丰富的梯度流信息,能够有效地使用网络参数并且加速网络的推理,MP模块由CBS和最大池化层组成,主要用于下采样操作,能够有效减少特征丢失。各个模块结构图如图2所示。
1.3 颈部网络
颈部网络主要由SPPCSPC、ELANW、CBS、MP 等模块组成一个自上而下的FPN 和自下而上的PAN。ELANW 相比于ELAN 增加了两个拼接操作,SPPCSPC主要用于增大感受野。FPN 主要对含有高维强语义信息的特征进行上采样,增强多个尺度上的语义表达,PAN主要将浅层的定位信息传递到深层,增加多个尺度上的定位能力,从而实现特征高效融合。各个模块结构如图3所示。
图3 颈部网络结构图Fig.3 Structure diagram of Neck
1.4 多尺度检测头
多尺度检测头主要为REP 结构。REP 采用重参数化设计,通过加大训练代价换取推理时的迅速。融合的多尺度特征图(分别为80×80×128,40×40×256,20×20×512)通过REP模块进行锚框位置和物体分类的预测,最后用CIoU 损失函数进行反向传播从而更新权重参数,从而实现模型对不同尺度目标的检测。REP结构如图4所示。
图4 REP结构图Fig.4 Structure diagram of REP
2 改进的YOLOv7算法
针对YOLOv7对于复杂道路场景中的密集目标,远处的小尺度目标检测精度低,容易出现漏检误检等问题对其进行改进,改进后的YOLOv7网络结构图如图5所示。
图5 改进的YOLOv7网络结构Fig.5 Improved YOLOv7 network structure
2.1 小目标检测层
由于道路场景目标情况复杂,离得比较远的目标尺度较小,原YOLOv7在经过骨干网络特征提取之后经过特征融合网络进行特征融合,最后在检测头输出三个不同尺度的特征图,分别为20×20、40×40、80×80,在原有的YOLOv7 架构中,发现对于小目标的检测效果不佳,为解决YOLOv7对小目标检测的能力较弱,本文增加了一个输出尺寸为160×160 的小目标检测层用于提高YOLOv7的小目标检测精度,该层位于原有的最后一个特征融合模块之后,该层的输入由两部分拼接组成,一部分来自于骨干网络第一个ELAN 模块经过卷积之后的特征图,另一部分为FPN继续上采样为一个160×160的特征图,之后经过ELANW 模块融合特征之后,得到一个具有高维度信息的特征图,该征图感受野较小,包含的位置信息更为丰富,能够充分降低小目标的误检漏检概率,更适用于小目标的检测。增加小目标检测层之后进一步使得YOLOv7网络的目标检测尺寸范围增大,增加了在复杂道路背景下的检测鲁棒性。增加的小目标检测层如图5中的红色虚线框所示。
2.2 用K-means++对先验框进行重聚类
原YOLOv7 网络的先验框是通过在COCO 数据集使用K-means 算法聚类得来,虽然也能用于本文数据集,但并不完全符合道路目标的特征,导致其先验框高宽尺寸与道路目标的尺寸不吻合,从而导致尺寸较小目标定位存在一定的偏差。
针对这一问题,本文在增加小目标检测层的基础上提出优化先验框的方法,以提高YOLOv7网络的目标定位精度。首先使先验框总数增加到12,然后使用K-means++算法对SODA10M数据集标注的物体边界框进行聚类分析,以得到更适用于道路目标的先验框。具体而言,K-means++算法首先随机选取一个点作为第一个聚类中心,然后以概率的形式选取其他点作为新的聚类中心,使得新的聚类中心与已选取的聚类中心距离越远的点被选中的概率越高,重复执行该过程,直到所有聚类中心被选出为止。这一方法使得网络能够更好地检测复杂道路场景中的小目标。重聚类后的先验框尺寸如表1所示。
表1 先验框重聚类结果Table 1 Priori box reunites class results
2.3 损失函数改进
损失函数是用来衡量预测结果与实际标签之间的差异,一个好的损失函数能够加速网络收敛,提高网络精度,原YOLOv7 采用的损失函数为CIoU loss[27],CIoU loss 把预测框与真实框的长宽比、中心点距离、重叠面积这三个对损失函数影响较大的因素都考虑进去了,但是对于一些标注质量较低的锚框并不能很好地收敛。CIoU的相关公式如下:
式(1)中b、bgt分别表示预测框和真实框的中心点,ρ代表两个中心点的欧氏距离,c代表真实框和预测框最小外接矩形的对角线长度,α是权重函数,v用来衡量宽高比的一致性。
从式(3)中可以看出CIoU 中使用的是预测框与真实框之间的比值,当预测框的宽高比满足一定条件时,CIoU 的惩罚函数会退化失效,会阻碍模型的收敛。CIoU中w、h相对于v的梯度如式(4)和(5),通过观察发现这两个梯度是一对相反数,也就是说,w和h不能同时增大或减小。
因此本文引入WIoU loss,WIoU是基于动态非单调的聚焦机制设计的,动态非单调聚焦机制使用“离群度”替代IoU对锚框进行质量评估,并提供了明智的梯度增益分配策略,使得模型更聚焦于低质量的锚框,提高模型的定位能力。WIoU包含三个版本,分别为WIoUv1、WIoUv2、WIoUv3,本文使用WIoUv3 版本,它是在WIoUv1、WIoUv2基础上优化得来的。其中WIoUv1相关公式如下:
式中,RWIoU∈[1,e) 这将显著放大普通锚框的LIoU。LIoU∈[0,1],这将显著降低高质量锚框的RWIoU,并在锚框与目标框重合较好的情况下显著降低其对中心点距离的关注。Wg、Hg分别为最小外接矩形的宽和高。*表示将Wg、Hg从计算图中分离,作用是为了防止RWIoU产生阻碍收敛的梯度。
WIoUv3在WIoUv2的基础上引入动态非单调聚焦系数。其相关公式如下:
式(11)中β为离群值,式(12)中α和δ是控制梯度增益r的超参数,本文选取α=1.9,δ=3。
2.4 协调坐标卷积
为了使网络更好地感知特征图中的位置信息,引入了协调坐标卷积,它可以感知空间信息。该方法是标准卷积的简单扩展,其中卷积由空间坐标作为条件。通过为过滤器提供像素的位置信息,可以在笛卡尔空间和像素空间之间建立映射。一般而言,卷积具有三个主要特征:少量的训练参数、通过GPU进行快速计算以及平移不变性。然而,就许多任务而言,关于平移不变性是否真正有助于模型性能是有争议的。CoordConv[28]允许网络根据任务需要保留或丢弃平移不变性的特性。在这个过程中,CoordConv确保了卷积和空间特征的最佳效果。CoordConv的实现方式是通过将两个额外的i和j通道连接到输入通道来完成的。如果连接CoordConv的坐标层与卷积的权重不为零,会使得CoordConv允许学习具有一定程度平移依赖性的函数,或者如果它们设置为零,则可以模拟常规卷积层。本文使用CoordConv替换FPN 中的1×1 卷积和检测头前的REP 卷积。常规卷积如图6所示,CoordConv如图7所示。
图6 常规卷积Fig.6 Convolution
图7 协调坐标卷积Fig.7 CoordConv
2.5 骨干网络轻量化
为了降低网络参数量和计算量,加快网络推理速度,本文基于PConv 算子提出轻量化的P-ELAN。P-ELAN结构如图8所示。
图8 P-ELAN结构Fig.8 P-ELAN structure
PConv 算子是Chen 等人[29]提出来的一种能够提高每秒浮点运算效率的轻量化卷积模块,通过同时减少冗余计算和内存访问从而更有效地提取空间特征。
图9 为PConv 基本工作原理。它只需要对输入特征图中的一部分通道进行常规卷积运算(图9 中*操作),其余通道保持不变并进行Identity操作。
图9 部分卷积工作原理Fig.9 Principle of PConv
对于大小为k的卷积核,输入特征图大小为h×w,通道数为c,若输入和输出特征图大小和通道数相同,则常规卷积的计算量为:
由此可知,ELAN作为原YOLOv7骨干网络中的主要组成模块,在ELAN中引入PConv算子能够大幅降低计算量和内存访问量,从而使模型轻量化并加速推理速度。
3 实验
3.1 实验环境及参数设置
本文所有实验所使用的运行环境:13th Gen Intel®Core™i5-13600KF@3.5 GHz 处理器,NVIDIA GeForce RTX 4090(24 GB 显存)显卡,32 GB 内存;Windows10专业版操作系统,Python3.9.16 编译语言,Pytorch1.13.1深度学习框架,CUDA11.7加速计算架构。
本文以YOLOv7 为基础模型,采用SGD 方法训练300 个epoch,初始学习率设置为0.01,批次大小设置为16,动量参数设置为0.937,预热训练3 个epoch,并按一定概率使用mixup、mosaic、fliplr等一系列数据增强操作。
3.2 数据集
本文选用华为诺亚方舟实验室联合中山大学发布的自动驾驶数据集SOAD10M[30]。该数据集收集了我国不同城市在不同天气条件、不同时间段、不同位置的场景。划分后的数据集包含5 000张训练集,2 500张验证集和2 500张测试集,共包含6种主要的人车场景类别:Pedestrian、Cyclist、Car、Truck、Tram、Tricycle。
3.3 评价指标
本文选用的算法评价指标包括参数量(Parameters)、计算量(FLOPs)、准确率(Percision)、召回率(Recall)、平均精度(mAP)、每秒传输帧数(FPS)。相应的计算公式如下:
其中,TP代表正确检测框,FP代表误检框,FN代表漏检框,len(GTs)代表所有标签框数量,AP代表一个目标的检测精度,N代表检测类别数,Frames代表帧数,Time代表检测时间。
3.4 消融实验
采用消融实验验证本文所提各个改进方法的有效性,本消融实验共分为10 组,各组实验均保持输入图像、训练超参数等的一致性。其中Head、K-means++、WIoU、CoordConv、P-ELAN为本文所提改进方法,表中“√”表示引入此改进方法。消融实验结果如表2所示。
表2 消融实验结果Table 2 Ablation experimental results
从表2 可以得出,第一组为原始YOLOv7 算法,mAP 为62.2%;第二组为加入小目标检测层,mAP 上升了1个百分点,说明加入小目标检测层能够增加小目标尺寸的可检测范围;第三组为使用K-means++重聚类先验框,mAP 上升了0.9 个百分点,说明重聚类先验框能够增加对小目标的定位能力;第四组为使用WIoU损失函数,使模型对普通质量锚框更加关注,mAP上升了0.6个百分点;第五组为使用CoordConv 模块,mAP 上升了0.6 个百分点,说明CoordConv 模块可以使网络更好地感受特征图中的空间位置信息;第六组为将ELAN模块替换为P-ELAN 模块,虽然mAP 略微下降,但是换来了参数量和运算量的下降,使模型更加轻量化;第七组为在第二组的基础上使用K-means++重聚类先验框,mAP上升了2.2 个百分点;第八组为在第七组的基础上更换损失函数为WIoU,mAP上升了2.7个百分点;第九组为在第八组的基础上引入CoordConv 模块,mAP 上升了3.4 个百分点;第十组为本文所提最终算法,mAP 较原YOLOv7 上升了2.6 个百分点,达到了64.8%,且参数量和运算量分别下降12%和7%,证明了本文各个改进方法对复杂道路场景目标的有效性。
3.5 模块对比实验分析
3.5.1 增加小目标检测层实验分析
基于YOLOv7提出YOLOv7-H(增加一个输出尺寸为160×160 的检测层),为验证增加小目标检测层的有效性,将改进后的算法与原始算法在SOAD10M数据集上进行实验对比,实验结果如表3所示。
表3 小目标检测层实验结果Table 3 Experimental results of small target detection layer
从表3 中可以看出,增加了小目标检测层之后,参数量和运算量都有所上升,在一定程度上增加了计算复杂度,但在可接受范围内使mAP 增加了1.0 个百分点,证明了改进方法的有效性。
3.5.2 改进ELAN模块实验分析
为了验证P-ELAN 模块的有效性,将P-ELAN 模块与根据不同算子提出的ELAN 模块进行对比分析。G-ELAN 模块是由GhostConv[31]组成;DS-ELAN 模块是由高效卷积(DSConv[32])组成;D-ELAN是由可变形卷积(DCNv2[33])组成。实验结果如表4所示。
表4 改进ELAN模块实验结果Table 4 Improved experimental results of ELAN module
从表4 中可以得出P-ELAN 模块相较于其他模块而言,FPS 最高,达到了94,参数量最少,运算量只比DS-ELAN 模块多了4.2×109,mAP 达到了61.3%。实验结果表明P-ELAN 模块在保持较高检测精度的同时检测速度更快。
3.6 对比实验
为了进一步验证本文算法的有效性,将本文所提最终算法与SSD、Faster R-CNN、YOLOv3、YOLOv5、YOLOX、YOLOv6、YOLOv8m、RetinaNet等主流的目标检测算法在SOAD10M 数据集上进行mAP 和FPS 指标的比较,实验结果如表5所示。
表5 对比实验结果Table 5 Comparative experimental results
通过对比表5中不同算法的实验结果,可以看出本文算法在SOAD10M 数据集上的mAP 指标明显高于其他主流的目标检测算法,达到了64.8%;FPS比其他一阶段检测算法略微低一些,但比二阶段检测FasterR-CNN算法高很多。本文算法的FPS为80,相较于主流的一阶段检测算法,牺牲了一点检测速度换取了更高的检测精度,达到了速度和精度的平衡。综上所述,本文所提算法与其他主流算法相比更加符合复杂道路场景目标检测的实时性和准确性需求。
4 结束语
针对复杂道路场景中目标遮挡以及小尺度目标漏检误检等问题。本文在YOLOv7 的基础上增加一个小目标检测层,用于增加对小目标特征的学习能力并增加小尺寸目标的可检测范围;使用K-means++算法重聚类先验框,使先验框尺寸更加贴合本文数据集,增加对小目标的定位能力;替换损失函数为WIoU,进一步增加网络对普通质量锚框的关注度,使锚框预测更加准确,有效降低漏检误检概率;在颈部和头部引入CoordConv,使网络能够更好地感受特征图中的空间位置信息,从而更好地检测出小目标;提出一种P-ELAN结构用来降低网络的复杂度,使检测速度和精度能够达到更好的平衡。改进后的算法在SOAD10M 数据集上进行了大量实验,证明了本文算法在速度和精度上的平衡,能够更好地适用于复杂道路场景下的目标检测任务。在未来的工作中,将对本文算法在嵌入式设备上进行部署,并与实例分割等领域进行结合,进一步提高模型的实用性。