改进YOLO,V5的密集行人检测算法研究
曹 选,郝万君
(1.苏州科技大学 物理科学与技术学院,江苏 苏州 215009;
2.苏州科技大学 电子与信息工程学院,江苏 苏州 215009)
行人检测在辅助驾驶系统、车辆监控系统和预警防护系统等多个领域扮演着重要角色,是目标检测领域中的一个重要的基础研究课题[1],可以为商场和景区等人流密度较大的公共场所以及智能安防领域提供有效的信息支撑[2]。
随着人工智能产业的高速发展与计算机硬件计算能力的提升,国内外学者已经开展了基于深度学习的研究行人检测方案,并且取得了一些的效果[3]。而目前的行人检测算法在实际大规模拥挤场景应用过程中,始终存在着由于行人交叠、遮挡而导致的漏检率较高的问题,此类问题依然困扰着很多研究者,也是目前行人检测面临的巨大挑战[4]。
许多学者基于深度学习理论提出了不同措施以提高算法的性能。2019年,Wojke等人[5]提出了Deep Sort算法,运用一个残差网络结构来提取目标的外观信息,用匈牙利算法将外观特征向量的余弦距离与运动信息关联起来,然而其跟踪效果依赖目标检测器的精确度和特征区分程度,跟踪速度与目标检测速度密切相关。2019年,徐诚极等人[6]使用注意力机制改进了YOLO V3,提出了Attention-YOLO算法,有效提高了检测准确率,但是其短板在于对小范围的不连续的信息上的表现并不准确。2021年,周大可等人[7]以RetinaNet作为基础框架,在回归和分类支路分别添加空间注意力和通道注意力子网络,提出一种结合双重注意力机制的遮挡感知行人检测算法,有效提高了行人检测算法在严重遮挡情况下的性能,降低遮挡对检测造成的影响,但由于双重注意力机制子网络带来了附加的计算量,因此检测帧率只有11.8 fps。沈军宇等人[8]基于YOLO算法进行端到端训练,快速检测实时视频中目标的数量,根据预先设置的阈值触发截图与保存视频功能,实现鱼群高效地检测与跟踪,系统鲁棒性强,对数据处理与存储效率较高,但是并未针对视频中的鱼群由于数量较多,处于密集状态的这一特殊情况进行考虑,在进行密集鱼群的检测计数时会有较高的漏检率。
SENet(通道注意力机制,Squeeze-and-Excitation Networks)是一种将各个通道之间的特征进行通道卷积来改善模型的表达能力,注重各类通道特征关系的网络结构。将SENet应用在公共大规模场景拥挤情况下的行人检测上,可以增强重要特征的通道权重,从而提高检测的效果。
针对上述学者研究中的问题与不足,笔者在文献[6-8]研究的基础上提出一种融合注意力机制的改进YOLO V5的密集行人检测算法。该算法利用SENet融合网络特征对融合的特征图采用自适应调整的方式更新不同特征通道的权重,提高网络特征提取和特征融合的能力,并通过数据增强、标签平滑的方式提高模型的泛化能力,丰富行人的样本特征,以及利用CIoU、DIoU_NMS参数对YOLO V5原有的损失函数进行改进,提升算法的检测准确率和降低漏检率。
YOLO V5由Ultralytics LLC公司于2020年5月提出,按照网络深度和特征图宽度大小分为YOLO V5s、YOLO V5m、YOLO V5l、YOLO V5x。文中采用了YOLO V5s作为使用模型,其网络模型结构如图1所示。从网络结构图中可看出,YOLO V5s模型主要分为4个部分,分别为Input、Backbone、Neck和Prediction。
图1 YOLO V5s网络模型结构
SENet(通道注意力机制)最早见于2017年,由国内自动驾驶公司Momenta的胡杰团队[9]在《Squeezeand-Excitation Networks》一文中提出。通道注意力机制通过研究特征图的各个通道之间的相关性,计算了各个通道的重要性得分,并且作为分配给各个通道的不同权重,以此凸显出包含重要特征信息的相关通道表达[10]。
SENet主要由压缩(Squeeze)和激励(Excitation)两部分组成,其网络结构如图2所示[11]。
图2 SELayer示意图
3.1 训练数据处理改进
在大多数应用场景中,训练模型使用的原始数据集并不能满足理想的训练需要,而获取更多的数据集也会增加训练的成本和带来更多的工作量,所以更好的处理方式是进行适当的数据预处理,数据预处理包括数据增强和标签平滑处理两个部分。
应用数据增强进行数据预处理的主要目的是:通过数据增强的方式扩充训练集图片,可以让用于训练的数据集样本更加多样,降低各方面的额外因素对识别的影响。而图像中添加随机噪声,也可以有效提高模型的泛化能力和鲁棒性[12]。在实际应用过程中使用次数较多的单样本数据增强方法包括对图像进行缩放并进行长和宽的扭曲、对图像进行翻转的几何变换类数据增强,以及在图像上添加噪声和修改对比度、亮度等的颜色变换类数据增强。文中实验过程中所采用的数据增强方法在原有的传统增强方法基础上增加了噪声图片随机裁剪-拼接法,即将多个待检测图像添加噪声后,再从每一张图片中截取一部分,合成一张图片进行整体检测。这种方式能够同时有效提升微小扰动和大量扰动条件下模型的检测准确性。标签平滑处理(label smooth)其本质是一种正则化处理,能够减少过拟合训练的可能性,使得模型对测试集预测的概率分布更接近真实的分布情况,从而提升分类器性能[13]。文中实验过程中采用的标签平滑方法为随机增加训练集中的错误标注,并在训练过程中使其拥有负的学习率,由此促使模型的分类结果更快地向正确的分类结果靠近。
3.2 YOLO V5网络改进
为了进一步提升密集场景的行人检测效果,文中提出了一种改进的YOLO V5算法,引入通道注意力机制SELayer改进YOLO V5的骨干网络,提升特征图不同通道间目标信息的相关性表述。将SELayer加入后的YOLO V5网络结构如图3所示(图中黑色方框为加入的SENet结构)。
图3 改进后的YOLO V5网络结构
从文中扩充后的拥挤行人数据集中随机抽取了如图4(a)、图4(d)2张图片。利用原始YOLO V5算法与增加了SENet后的YOLO V5算法进行检测,检测结果分别如图4(b)、图4(e)与图4(c)、图4(f)所示。
“星星急救”教学方式多样化,采用情景再现、模拟演示、应急演练、健康讲座等多种方式相结合的形式,为社会公众提供培训服务。太和医院提供的资料显示,小分队以情景剧开展急救知识的科普宣传活动,获得了国家知识产权保护。
图4 SENet加入前后的检测效果
在图4(a)与背景差别不大的被遮挡目标和中间部分的由于距离较远的小尺度目标检测中,仅增加了SENet后的改进算法对其进行了正确标注,如图4(c)的白色箭头指向所示,而传统YOLO V5算法的检测结果图4(b)中并未对其标注,如图4(b)中白色箭头指向所示;
对于图4(d)存在相似物体的行人检测,原始YOLO V5算法的检测结果图4(e)出现了错误标注的情况,而增加了SENet的YOLO V5算法并未受到相似物体的干扰,其检测结果如图4(f)所示。从图4的实验结果可以看出,SENet模块的引入,有效地滤除了密集行人检测中的背景干扰,降低了误检率,提高了检测精度。
3.3 损失函数改进
3.3.1 使用CIoU
在对画面中的目标进行检测时,因视场内存在不止一个目标,算法将生成不止一个预测框,因此需要使用非极大值抑制方法删除多余的预测框,选择最接近真实框的预测框[14]。在YOLO V5中采用GIoU_Loss作为损失函数,其原理见公式(1)[15]。GIoU加了相交尺度的衡量方式,有效解决了边界框不重合时问题。但当预测框和目标框出现互相包含关系,或者宽和高对齐的情况时,GIoU就会在回归的过程中,逐渐退化为IoU,从而无法评估相对位置,容易出现迭代次数增加和检测速度减慢的情况,且存在发散的风险[16]。
针对上述问题,Zheng等人[16]将不同目标框中心点之间的中心距离一同考虑进去,提出了回归更加稳定、收敛更快更难发散的Distance-IoU(DIoU)Loss。但是在进行实际目标检测时,还需要将边框的高宽比的一致性列入考虑范围。为此,文中在文献[16]的基础上,将边框的高宽比的一致性列入考虑范围,引入CIoU_Loss作为损失函数对YOLO V5算法进行改进。相比于DIoU,CIoU_Loss的收敛速度更快,回归的效果也更好。
CIoU_Loss的惩罚项定义如下
CIoU_Loss的最终定义如下
如图5所示,利用Opencv+numpy绘制了不同尺寸和长宽比的两个矩形框模拟算法的预测框和实际框之间的交并情况,并利用公式(1)得到GIoU,利用公式(2)-(5)计算得到CIoU,计算结果如图5(b)、图5(a)所示。从图5中CIoU与GIoU的计算结果可以看出,由于此时GIoU损失退化,导致在预测框bbox和ground truth bbox包含的时候优化变得非常困难,特别是在水平和垂直方向收敛难,而CIoU仍可以使回归更快。
图5 当预测框与目标框存在交叠情况时的CIoU与GIoU对比
因此,文中利用CIoU来代替原始YOLO V5算法中的GIoU进行anchor的回归,实现真实框和预测框无重合时的梯度回传,提高模型收敛能力。当边界框与真实框上下或左右相邻时,CIoU能够优化不相交的边界框,保留位置更准确的边界框,提高模型对目标位置预测的精确度,使其通过非极大值抑制筛选得到的结果更加合理。同时,使用CIoU能够降低模型的训练难度,提高检测的准确率。
3.3.2 非极大值抑制改进
在原始YOLO V5算法目标检测预测结果处理阶段,针对出现的众多目标框的筛选,采用加权NMS操作,获得最优目标框。但是加权NMS只考虑两个目标框的重叠区域面积,容易出现定位与得分不一致的问题[16]。在抑制准则中,不仅应考虑重叠区域,还应该考虑两个box之间的中心点间距,DIoU_NMS则同时考虑了这两点。因此,文中使用DIoU_NMS进行评判,使得效果更符合实际。对于score最高的预测box M,可以将DIoU_NMS的si更新公式正式定义为
其中通过同时考虑IoU和两个box的中心点之间的距离来删除box Bi,M为当前得分最高预测框,Bi表示与M相交的第i个预测框,si是分类得分,ε是NMS阈值。
如图6所示,分别利用LCIoU+加权NMS与LCIoU+DIoU_NMS同时对图6(a)的行人进行检测,CIoU+加权NMS的检测结果如图6(b)所示,出现了由于目标框重叠导致的漏检率增大,而在LCIoU+DIoU_NMS的检测结果图6(c)中,图6(b)中未能框选出的目标得到了正确的标注,检测率高于图6(b),如图6(b)与图6(c)中的白色箭头指向所示。实验表明,利用DIoU_NMS来代替原始YOLO V5的加权NMS,有效提升了由于行人密集导致的遮挡情况的检测率。
图6 不同NMS时的检测结果
4.1 实验平台与数据集
文中进行模型训练与验证测试的硬件平台CPU为Core(TM)i5-10400F CPU@2.90 GHz,内存16 GB,选用的GPU是RTX 2060S 8 GB,在Windows 10操作系统上运行。
根据YOLO系列算法训练集格式要求,笔者从野外密集行人检测的WiderPerson数据集与旷世发布的CrowdHuman数据集中各随机选择了8 000张与5 000张图片,并将数据集标注格式全部转化为VOC格式,同时使用上文中提到的数据增强的方法对数据集进行扩容,最终得到数据集共20 000张,按照8∶2的比例区分训练集、测试集。
4.2 网络训练
文中利用Python语言应用Pytorch深度学习框架对YOLO V5网络模型进行结构搭建与编写程序,并且在训练过程中应用随机梯度下降算法(stochastic gradient descent,SGD[17])作为优化算法,对训练过程中的参数进行优化[18]。训练过程中设置动量为0.7,权重衰减0.000 2,初始学习率设定为0.01,每训练10次后学习率衰减0.01,总的训练次数为300次。
4.3 模型评价与对比
文中在进行模型训练时,将准确率、召回率、平均精度均值以及调和均值作为评估指标[19]。利用准确率和召回率作为判别行人检测识别效果的标准,但两者为负相关关系[20]。平均精度均值与调和均值是同时考虑准确率和召回率的量化指标,它们的数值越大,则识别效果越好[21]。
为了验证修改后网络的有效性,文中比较了原始YOLO V5网络与改进后的YOLO V5网络在同一数据集中训练时间及实际检测效果。在同一数据集中分别训练300次,训练中的损失值与mAP的收敛曲线对比如图7所示,准确率变化与召回率曲线如图8所示。迭代完成后损失值大约为0.021 76,mAP最终的收敛值在0.976 4,绘制Loss、mAP曲线后对参数的收敛情况进行对比分析可得,文中提出的基于YOLO V5的改进模型训练结果相比于原始YOLO V5模型准确率更高、Loss更低。
图7 原始YOLO V5与文中算法损失值与平均精度值对比
图8 文中算法的准确率与召回率曲线
4.4 检测效果对比
训练结束后利用得到的权重参数模型对待检测目标样本进行检测,同时标出检测的对象位置,结果如图9所示,左中右三幅图依次为原图、文中改进算法检测图与原始YOLO V5检测图。
在光线明亮、遮挡较少的正常情况的图9(a)的检测对比实验中,原始YOLO V5能框选出图9(a)中的大部分行人目标,但仍然是出现了漏检率较高的情况,如图9(c)所示;
在光线正常、不同目标之间存在相互遮挡的图9(d)检测对比中,原始YOLO V5的漏检率与文中算法均存在漏检情况,但从图9(e)、图9(f)中的框选结果可以看出,原始YOLO V5算法的漏检率更高;
在对比度较低情况下的图9(g)检测对比实验中,由于拍摄图片角度与距离原因,行人与阴影部分的重叠区域较大,且行人目标也较前两个实验的目标更小,原始YOLO V5的在该次实验中的漏检率进一步增加,如图9(i)所示,而文中的改进算法依旧能够将图片中的行人框选出来,如图9(h)所示,虽然也出现了漏检情况,但从检测结果可以看出,文中算法的鲁棒性比原始YOLO V5算法更好。
图9 正常情况、存在遮挡、对比度较低情况下的对比实验结果
为统计分析各种算法的性能,在上文提到的软硬件环境下利用文中扩充后的拥挤行人数据集将SSD、原始YOLO V5以及文中改进算法进行训练和测试。IoU设定为0.5,它是VOC数据集的测试标准,也是常用指标[22]。文中以这一指标进行准确率对比,各算法的实验结果见表1。
表1 各算法的性能对比
实验表明,相比原始YOLO V5算法,文中改进算法mAP提升了10.5%,精准率提升接近16%,漏检率降低了接近10%,同时保持了原始YOLO V5算法的高帧率。改进后的模型对行人检测较为精准,在多目标、行人相互遮挡的情况下也可以很好地进行检测,有效地避免了漏检的问题,整体表现良好,目标定位准确,识别率较高。
笔者针对公共场景下的行人检测问题,研究了当下主流的YOLO V5算法,并在原始YOLO V5算法的基础上进行了以下改进:(1)引入SENet对原始YOLO V5网络进行改进,对融合的特征图进行自适应的调整;
(2)通过引入数据增强、标签平滑的方式对原有数据集数据进行拓展得到大量新的训练数据,有效提升模型训练集大小,快速提升目标检测效果;
(3)引入CIoU、DIoU_NMS参数,提高网络特征提取和特征融合的能力,同时提升算法的检测准确率和检测速度。与原算法相比,在文中扩充后的拥挤行人数据集上,笔者提出基于YOLO V5的改进算法检测的准确率和漏检率明显优于原始YOLO V5算法,同时保持了原有算法的实时性,mAP达到了0.976 4,帧率达到了140 fps,满足公共大规模拥挤场景下进行行人检测时的速度与精度的要求。
下一篇:幼儿园小班班务工作总结集锦8篇