刘雅洁,伊力哈木·亚尔买买提,席凌飞,英特扎尔·艾山江
新疆大学 电气工程学院,乌鲁木齐 830017
近年来,因施工场地管理得不到位,惨剧时有发生,佩戴安全帽可以有效减少事故的发生率,保证施工人员的生命安全,对施工人员来说具有重要意义。安全帽的目标检测算法多种多样,基于传感器的检测方法需要借助传感器采集数据进行检测,并且在安全帽内放置传感器,这种技术难度较高且参数量十分庞大。基于传统计算机视觉技术的检测方法使用滑动窗口扫描图像中的每个像素点,统计分析待检测目标的特征进行描述,采用分类方法或者基于提取到的特征建立模型,来判定检测目标是否佩戴安全帽[1],此类方法检测精度和鲁棒性不足且推理速度非常慢。
随着高性能计算的快速发展,使得安全监察自动化、实时化和智能化成为了可能[2]。近年来,基于深度学习技术的目标检测算法也逐渐应用到了安全帽佩戴的检测中。Ren 等人[3]在2017 年提出Faster R-CNN 算法后,张博等人[4]通过OpenPose从图像中定位人体头颈部位置,并自动截取其周围小范围的子图像,利用Faster R-CNN 检测子图像中的安全帽适应性,该方法易受环境影响,降低检测速度;Redmon 等人[5]提出了YOLO 算法,此后YOLO 系列蓬勃发展至今,王兵等人[6]将GIoU与YOLOv3的目标函数相结合,实现了目标函数局部最优,但没有提高速度;赵红成等人[7]将MobileNetv2[8]引入了YOLOv5s网络,对模型压缩并进行冗余通道剪枝,通过知识蒸馏微调模型,召回率及mAP都有所提升,但增大了模型参数量和权重,不能满足实际的生产安全需要;杨永波等人[9]将MobileNetv3[10]替换YOLOv5s 中的Backbone网络,并使用Diou-NMS替换NMS,添加CBAM注意力机制,成功降低了模型大小和计算量,但却降低了模型的精度;2021年,Ding等人[11]提出了RepVGG,一个具有3×3conv 和ReLU 堆栈的架构,通过结构重参数化获得更多的特征模型,同年李明山等人[12]提出了改进SSD 的安全帽检测方法,其中增加特征分支,引入可变参数调节先验框的取值,但算法的鲁棒性较差且检测速率降低。上述改进算法检测的速度和准确率仍然不够理想,未能更好地解决目标检测算法中参数多、推理速度慢、检测准确率低等问题。
因此本文以YOLOv5s 网络模型为基础,首先在主干网络添加坐标注意力机制(coordinate attention,CA)提高模型的提取能力;其次在特征提取网络引入轻量化卷积神经网络RepVGG模块降低参数量,颈部网络采用鬼影混洗卷积(ghost-shuffle conv,GSConv)代替标准卷积,并嵌入跨级部分网络VoV-GSCSP 融合成为Slimneck,不仅降低计算和网络模型的复杂程度,还能保持足够的精度。最后,设计使用SIoU 优化边界框回归损失函数,加快模型收敛速度。改进后YOLOv5s 模型不仅降低模型复杂度减少了模型参数量,同时获得了较高的检测精度。
YOLOv5是一种较为先进和流行的对象检测算法,是YOLO 算法系列的一部分,YOLOv5 共4 个版本[13],4个版本中的子模块采用不同的深度和宽度,YOLOv5模型的网络如图1所示。
图1 YOLOv5网络结构图Fig.1 YOLOv5 network structure diagram
在特征提取网络中用一系列的卷积核和特征融合模块来提高网络的鲁棒性,其颈部网络实现了数据与特征的有机结合。其中YOLOv5s 是YOLOv5 最小、最快的变体,虽然每一版的检测精度在不断提高,但是检测速度却在不断降低,并且对硬件的配置也越来越高,因此使用YOLOv5s网络作为研究的基础模型。YOLOv5s使用单个神经网络来检测输入图像中的对象,并且可以一次识别多个对象,该算法工作原理是将输入图像划分为单元格网格,预测每个单元格的边界框、类概率和置信度分数,对位于同锚点的多个边界框进行非极大抑制(non-maximum suppression,NMS)处理,去除重复的边界框和低置信度的边界框,保留最终预测出来的目标边界框。
为解决安全帽佩戴目标检测算法中参数多、推理速度慢和检测准确率低等问题,对YOLOv5s的主干网络、颈部网络以及损失函数都做了相应的改进,提出基于改进YOLOv5s的安全帽佩戴检测算法研究。
为了提高模型对关键特征的注意能力,更聚焦训练安全帽相关目标特征,提高准确率,在主干网络中添加坐标注意力机制[14],如图2所示,通过把位置信息嵌入到通道注意力,避免产生显著的计算开销,有助于模型更准确地定位和识别感兴趣的对象。
图2 CA注意力机制Fig.2 CA attention mechanism
首先分别对水平方向和垂直方向进行平均池化操作,拼接1×1 卷积实现通道压缩,再通过批量归一化(batch normalization,BN)模块和激活函数来编码垂直方向和水平方向的空间信息,其次在拆分时,使用1×1卷积来计算每个分支的通道数,保证特征权重通道数相同再进行归一化加权,最后把空间信息通过在通道上加权的方式融合,实现对各通道的调整,以保留每个分支的空间信息使得模型更准确地定位到并识别目标区域。
为了保证模型检测精度和泛化能力,同时大幅降低模型参数量,在特征提取网络引入RepVGG,它使用一个类似Res Net-style的多分支结构,而推理时会转化成VGG-style的单线型结构[15]。在传统的Res Net中,每个残差块包含了两个卷积层和一个跳跃连接。而在RepVGG 中,每个残差块被替换成了一个卷积层,其中包括两个卷积操作,一个BN 层和ReLU 激活函数。这些组件被转化成一个单一的卷积层,从而有效地减少了网络参数量。
2.2.1 RepVGG Block
RepVGG 是通过连续堆叠RepVGG Block 形成的,在训练过程中时,采用单路的结构,提高推理的速度,单线型的模型比多分支的模型并行度高,相对速度就会更快,如图3所示。
图3 RepVGG部分结构示意图Fig.3 Schematic diagram of structure of RepVGG part
图3(a)(b)显示了RepVGG 训练中使用网络结构,从图3的(a)中的一个模块可以看出,需要分别计算3×3卷积核、1×1卷积核和BN模块,将三个分支上的输出进行相加,在计算的过程当中,每个分支上的计算量是不一样的,会消耗一部分算力,导致并行度降低。由于残差结构有多个分支,相当于向网络添加多个梯度流路,类似于模型集成,可以提高网络的训练效果。多分支模型的每个分支都要访问输入的特征图,相较于单线型结构来说内存访问成本很高。单线型结构比多分支的模型更快,更省内存,更加灵活。图3(c)为推理过程,推理过程的网络结构非常简单,整个网络由内核大小为3×3的卷积和ReLu激活函数组成,便于模型推理和加速,节省内存。
2.2.2 结构重参数化
在RepVGG网络中最重要的就是结构重参数化,所谓结构重参数化就是在训练时采用模块化多分支的结构获得更多的特征模型,模型的参数数量大幅减小。此外,这种分解方法还可以提高模型的泛化性能和鲁棒性。结构重参数化主要体现在BN层与卷积层做线性运算,过程如图4所示。
图4 RepVGG网络分支合并Fig.4 RepVGG network branch merging
卷积层计算公式为:
其中,w(x)为权重函数,b为偏置。
对于特征图第i个通道BN的计算公式为:
其中,μ是均值,σ2是方差,γ是尺度缩放因子,β是平移因子,ε是常量。
将式(1)带入式(2)可得:
合并后新卷积层对应的权重为:
对应卷积核新的偏置为:
将式(4)式(5)带入式(3)可得:
根据推导可知:BN层直接合并到了卷积层的运算,卷积核缩放了一定的倍数,对偏置进行了改变,减少了原有BN 层的参数量。由图4(a)可以看出,将3×3 卷积和BN 层融合成为了一个3×3 卷积;将1×1 的卷积填充为3×3的卷积再与BN层融合为3×3卷积;对于只有BN的分支来说,由于没有卷积层,所以做恒等映射,故BN层可以转换成3×3卷积,最后,进行多分支融合,得到融合的3×3 卷积网络层[16]。图4(b)是根据图4(a)给出的参数量变化的过程,可以看出经过结构重参数化,从一个3×3卷积、一个1×1卷积和3个BN层降低参数为一个3×3 卷积网络层,既减少了模型的参数量,又加快了模型的推理速度。
Slim-neck是一种通过减小模型中间层的通道数来减少参数量的技术,是在GSConv和VoV-GSCSP的基础上进行进一步扩展和融合的产物,在颈部网络中将2个GSConv模块进行级联,使用VoV-GSCSP来代替颈部网络中的C3结构,组成Slim-neck,在保持精度的同时,大幅度降低模型复杂度和存储资源。
2.3.1 GSConv卷积
鬼影混洗卷积是一种基于标准卷积(standard convolution,SC)、深度可分离卷积(depth-wise separable convolution,DSC)和通道混洗操作的新型卷积方法,其核心思想是将输入通道分离成多组,对每组执行单独的深度分离卷积,然后通过通道混洗的方式重新组合,结构如图5所示。
图5 GSConv模块结构Fig.5 GSConv module structure
假设f×g是卷积核尺寸,M是输入图像通道数,N是输出图像的通道数,x×y是输出图像的尺寸,标准卷积和深度可分离卷积计算量如式(7)(8)所示:
通过DSC可将SC的计算量压缩为:
在GSConv中,每个卷积核被分成两个部分:主卷积核和幽灵卷积核。其中主卷积核是用来进行主要计算的,而幽灵卷积核则是用来补全主卷积核的计算,以便达到分组卷积的效果,用它来代替普通卷积可以大大减少计算量。公式为:
其中,n表示输入的长度,⊖表示异或操作,r(i)表示输入的第i个元素,在卷积中对应的随机移位量。GSConv 保留了通道密集卷积,时间复杂度较低,因此SC、GSC和GSConv的时间复杂度为:
其中,C1是卷积核的通道数,C2是输出特征图的通道数。在卷积操作中,主卷积核与幽灵卷积核横向和纵向的位置是不同的,采用了通道混洗的策略,将输入的通道进行分组,并且让每一组中的通道进行交错计算,增强网络的性能并减少模型中参数量。
2.3.2 跨级部分网络VoV-GSCSP
VoV-GSCSP 是基于GSConv 和跨级部分的网络结构,在颈部网络中同时引入GSConv和VoV-GSCSP的网络,构成跨级部分网络是类似于残差块的结构,如图6所示。
图6 GSbottleneck模块和VoV-GSCSP模块结构Fig.6 GSbottleneck module and VoV-GSCSP module structure
将前层的特征图和后层的特征图进行拼接,再进行卷积的操作。这样可以避免残差块中出现信息丢失和梯度消失问题。在VoV-GSCSP网络中,GSConv被用来代替传统的卷积操作,将2个GSConv模块进行串联,使用VoV-GSCSP来代替颈部网络中的C3结构,将不同尺度的特征图按照顺序连接起来形成一个更长的特征向量,以增加模型的多样性,跨级部分则用来增加网络的深度和非线性能力,融合结果以期在降低模型计算量的同时,提高模型精度。
边界框回归损失函数通常用于目标检测任务中的边界框坐标预测,传统的边界框回归损失函数常常存在优化上的不足,收敛速度较慢等,因此出现很多基于交并比(intersection over union,IoU)的损失。YOLOv5s的损失函数为定位损失、目标损失和分类损失的加权和,公式如式(12)所示:
式(12)中,N为检测层个数,Si×Si为相应检测层分割网格数,Bi为先验框个数。Lbox和Lcls均采用二元交叉熵(binary cross entropy,BCE),Lbox使用CIoU[17]作为边界框回归损失计算,公式如式(13)所示:
除了考虑目标检测框的中心点之间的距离、重叠区域和宽高比,SIoU 还新增了对角度的损失计算,如图7所示,可以更准确地估计目标检测框的旋转角度,从而提高目标检测的准确性。
图7 真实框与预测框Fig.7 True box vs.prediction box
使用数据集是以开源项目Smart Construction 的safety helmet wearing 数据集为基础,其中的一些图片来自教室监控下的画面,不适合作为安全帽检测图像的负样本,因此删减一些无效负样本并将在新疆大学建筑工地中拍摄的照片百余张作为补充,防止过拟合,使用Labelimg 对图片进行标注,最终的数据集符合训练要求。数据集共包含7 584 张图片,按照8∶1∶1 划分为训练集、验证集和测试集。
实验所用的操作系统为Windows11,内存为16 GB,显卡为NVIDIA GeForce RTX4060 Laptop GPU,使用GPU 计算,搭配Cuda 和Cudnn 提高计算能力,对应的torch版本为1.10.0,编程语言使用python。
对二分类问题来说,可将样例划分为TP、FP、TN、FN四种情况,分类结果“混淆矩阵”如表1所示。
表1 分类结果混淆矩阵Table 1 Confusion matrix of classification results
召回率(Recall)和精确率(Precision)的公式为式(16)和式(17):
平均精度和平均精度均值(mean average precision,mAP)越大表明精度越高,计算公式分别为式(18)和式(19):
参数量越小表明参数越少,指标性能越好,其计算公式为式(20):
其中,I是输入尺寸,f是卷积核大小,C是输出大小。
使用YOLOv5s官网提供的权重参数作为训练的初始化参数,使用数据集中的图片对网络参数进行微调,使整个网络检测效果最优。一些实验参数设置如表2所示。
表2 训练参数Table 2 Training parameters
为验证提出的CA 模块的有效性,进行了注意力机制的对比实验,比较不同的注意力机制对YOLOv5s 模型的影响,进行的对比实验在相同的硬件条件下进行,实验结果如表3所示。
表3 与其他注意力机制结果对比Table 3 Comparison with other attention mechanism results
对比了目前主流的注意力机制SE、CBAM、ECA和CA,从表3中可以看出,在加入了SE、CBAM和ECA以后mAP值均出现了不同程度的下降,分别下降了0.004、0.008 和0.006,推理时间分别增加了4.6 ms、42.3 ms 和45.5 ms,这表明对模型来说,加入的注意力机制效果不显著。相对于其他注意力机制来说,CA 注意力机制在保证模型大小的前提下,不仅可以提升mAP值,而且降低了模型的推理时间。因此综合考虑,加入CA注意力机制可以提升检测性能。
3.6.1 轻量化模块的消融实验
为验证RepVGG模块有效性,进行一系列轻量化模块对比实验,比较它们对YOLOv5s模型性能的影响,实验在相同的硬件条件下进行,结果如表4所示。
表4 轻量化模块的消融实验Table 4 Lightweight module ablation experiment
对比了目前主流的轻量化模块,ShuffleNetV2、MobilenetV3、GhostNet 以及所使用的RepVGG 模块。表4 中准确率、召回率和mAP 越接近1 越好,参数量和模型大小是越小越好,推理时间越短,执行速度越快。从表4 中可以看出,ShuffleNetV2 从模型大小和参数量来说占有巨大优势,但其mAP 非常低。相对于其他模型来说,GhostNet的mAP值很高,但同时也具备较为复杂的结构,导致其模型大小和参数量较大。综合考虑,加入RepVGG 网络检测性能更加领先于其他的轻量级网络,RepVGG网络从精确度、召回率、模型大小和推理速度都略优于其他网络。
3.6.2 消融实验
为了验证融合的Slim-neck以及优化边界框回归函数SIoU的有效性,在相同实验条件,将不同的模块分别加入到YOLOv5s 检测算法中,评估各个模块对检测算法性能的影响,消融实验对比的结果如表5 所示,最终mAP0.5、mAP0.5:0.95 的结果如图8 所示。表5 中准确率、召回率和mAP 越大越好,参数量、模型大小和推理时间是越小越好。由表5 可以看出,初始YOLOv5s 的模型大小为13.71 MB,参数量为7.016×106,推理速度为122 ms,mAP值为0.897,将主干网络引入RepVGG模块以后,模型大小压缩为3.90 MB,参数量为1.871×106,推理速度为62 ms,mAP 为0.895,可以看出使用RepVGG轻量化模块可以保证较少的参数量、计算量以及算法的实时性,让模型更加轻量实用;颈部网络构造Slim-neck后,参数量为1.586×106,推理速度为60.3 ms,mAP 为0.883,可看出引入Slim-neck 可以减轻模型复杂度;在加入注意力机制以后,参数量为1.586×106,推理速度为58.8 ms,mAP 为0.900,优化边界框回归损失函数使精度有小幅度提升;通过优化边界框回归函数,成功提高了mAP,确保准确性,虽然增加了一些模型大小和参数量,但是它们所占的比例很小,而相比之下,mAP 增长了0.029。
表5 消融实验Table 5 Ablation experiments
图8 mAP0.5和mAP0.5:0.95的消融实验结果图Fig.8 Ablation results plot of mAP0.5 and mAP0.5:0.95
图8 是通过每一轮的训练结果信息绘制平均精度均值的变化曲线,每个模型的mAP 分别使用不同颜色的线来表示。从图中可看出,与初始YOLOv5s 的算法相比,改进算法速度提高了49.51%,模型参数大小压缩了75.03%,mAP提升了0.029,具有良好效果。
为了进一步验证改进算法的优越性,现与现阶段主流的目标检测算法进行对比实验,实验选择目前目标检主流方法SSD、YOLOv3、YOLOv4、YOLOv5s和YOLOv5x与本文方法进行比较,对以上方法进行实验与改进算法进行比较的性能结果如表6 所示,设置相同的实验参数,以及相同的硬件、软件环境,分别从准确率、召回率、平均精度均值、参数量、模型大小和推理速度来进行比较,来证明改进后的算法具有优越性。
表6 目标检测算法对比Table 6 Comparison of object detection algorithms
从表6 可以看出,YOLOv3、YOLOv4 与YOLOv5x的检测速度较慢,参数量大,鲁棒性较差,不能满足实际场景的实时性;SSD 的精度和准确率对该模型来说,作用都不是非常显著。综合来说,本文改进方法的准确度、平均精度均值、推理速度以及参数量都略优于其他5种算法,准确度和平均精度均值分别达到了0.947 和0.926,改进的算法也提高了检测过程中的推理速度和平均精度,具有较好实时性。
为了更直观地感受改进的检测算法在实际场景中的效果,选取了在新疆大学建筑工地拍摄的遮挡场景和小目标场景,从数据集里选取了光线昏暗场景和密集场景分别进行验证,结果如图9 所示,左为改进前算法的效果,右为改进后算法的效果。
图9 检测结果对比Fig.9 Comparison of test results
由图9(a)可知,改进前将一个佩戴安全帽的人误检为未佩戴安全帽的人,改进后的算法对遮挡场景下的安全帽佩戴检测有较好的精度;由图9(b)可知改进前漏检了一个佩戴安全帽的人,而改进后的算法将一个戴帽子骑自行车的人误检为了佩戴安全帽的人,可以看出对于小目标场景的检测精度还需要加强;由图9(c)可知改进前和改进后的算法在光线昏暗模糊的场景下都具有良好的检测效果,由图9(d)可知改进前在密集场景中有漏检的概率而改进后的算法都很好地检测出来了。总的来说,改进后的算法在大大降低了参数量和模型大小的情况下,也能较好地保持精度。
针对安全帽佩戴目标检测算法中参数多、推理速度慢以及检测准确率低等问题,提出了基于改进的YOLOv5s 安全帽佩戴检测算法。实验结果表明,坐标注意力机制可提高模型对关键特征的注意能力,RepVGG网络使模型整体更轻、采用鬼影混洗卷积和跨级部分网络在提高模型的检测精度和泛化能力的同时大幅降低模型的计算量,使用SIoU 优化边界框回归损失函数同时加速模型收敛。改进的算法可有效检测施工人员是否佩戴安全帽,节省了检测安全帽佩戴的时间并提高了检测的效率,相比于原YOLOv5s模型,改进后的模型速度提高了49.51%,参数大小压缩了75.03%,且模型平均精度提升了0.029。本文改进的算法与其他主流算法进行对比后,实验结果表明改进后的YOLOv5s模型综合表现最佳。通过改进算法,能够有效识别在实际场景中未佩戴安全帽人员,验证了算法实际应用的可行性和有效性。