李天宇,吴 浩,毛艳玲,田洋川,陈明举+
(1.四川轻化工大学 人工智能四川省重点实验室,四川 宜宾 644000;2.四川轻化工大学 自动化与信息工程学院,四川 宜宾 644000)
近年来,基于卷积神经网络的安全帽佩戴检测方法[1,2]已成为目前研究的主流,基于深度学习的目标检测算法主要分为两阶段检测算法和单阶段检测算法。如针对二阶段的检测算法,徐守坤等[3]在Faster RCNN的基础上利用特征融合来优化RPN网络,并采用困难样本挖掘技术训练模型,提高了检测的准确率。孙国栋等[4]通过自注意力机制以及锚框补选增强方法来提高Faster CNN对小目标的检测准确率。
由于施工作业现场的环境复杂多变,对安全帽检测的实时性要求高,于是单阶段检测算法凭借其快速且准确的优点在安全帽佩戴检测上获得了大量应用。如李明山等[5]、徐先峰等[6]利用SSD检测网络构建新的安全帽检测网络,分别对模型结构和训练方式进行改进以提高其检测能力。陈柳等[7]在RFBNet基础上引入SE-Ghost模块来轻量化检测模型,并利用FPN提高网络对小目标检测的鲁棒性。徐凯等[8]、徐守坤等[9]都对YOLOv3的网络结构、损失函数以及预选框尺寸进行了优化,提高了网络对安全帽的检测准确率,特别是提高了对小目标的检测能力。
本文针对施工作业区域安全帽检测困难的问题,以YOLOv4网络为基础提出了一种施工现场安全帽检测方法SR_YOLO。该检测网络引入多尺度空间金字塔层和特征增强模块,并利用Kmeans++算法来对目标样本进行anchor尺寸优化,提高了网络对安全帽的检测能力。实验结果表明,在施工现场区域,本文的安全帽检测方法能够实现对复杂背景下安全帽的准确检测,且满足实时检测的需求。
YOLOv4[10]是YOLO系列第四代算法,其在YOLOv3的基础上融合了一系列的网络模型和训练技巧,得到的一个实时性的单阶段目标检测算法。该算法由主干特征提取网络、Neck网络以及检测头部组成,主干特征提取网络在Darknet53的基础上,引入CSPNet的思想[11],形成了新的主干网络CSPDarknet,在降低网络参数量的同时还保证了网络的检测准确率;同时为了提高网络的感受野,YOLOv4在主干网络尾部插入了一个空间金字塔池化层(SPPNet),利用5×5、9×9、13×13的最大池化层来获得不同大小的感受野,提高网络对于小目标物体的捕获能力;最后在Neck网络中利用PANet[12]代替FPN金字塔结构[13],进一步融合高低层的语义信息和位置信息;检测头部则和YOLOv3保持一致,利用3×3卷积和1×1卷积调整通道数后输出检测。
YOLOv4以608×608的图片作为输入,利用主干网络CSPDarknet53提取特征,经5次下采样之后,输出3个不同大小的特征图(19×19、38×38、76×76),其中19×19特征图后接SPPNet空间金字塔模块,通过3个5×5、9×9以及13×13的最大池化层来增大网络的感受野;随后Neck网络中将3种不同大小的特征层通过PANet双向特征金字塔网络来实现浅层特征信息与高层特征信息的融合,充分利用了深层的语义信息和浅层的位置信息,使得网络对于小目标物体的检测性能提升。最后在检测头部,利用回归思想对3种不同大小的特征图进行目标检测,分别在大的特征图检测小目标、中等大小特征图检测中等目标以及小特征图上检测大目标。YOLOv4相比于YOLOv3,检测精度和速度都有所提升,相比于一般的两阶段检测算法,其速度和精度都拥有很大的优势。其算法结构示意如图1所示。
图1 YOLOv4结构
YOLOv4虽然在检测速度和检测精度上都要优于目前的大多数单阶段目标检测算法,但是对于施工现场复杂背景下的弱小安全帽目标,检测精度不足。针对此类问题,本文通过改进空间金字塔池化层和Neck网络中引入特征增强模块来提高YOLOv4对小目标物体检测的鲁棒性,并利用Kmeans++算法聚类出适合本文安全帽数据集Anchor尺寸,使其更适合于安全帽检测任务,并在一定程度上满足实时性检测的要求。
为了提高网络对弱小目标安全帽目标的检测能力,本文建立了一种基于改进YOLOv4的安全帽佩戴检测新方法SR_YOLO来提高施工现场弱小安全帽目标的检测精度。
YOLOv4根据SPPNet[14]的结构,在主干网络后嵌入了一个空间金字塔池化层,对高层特征进行多尺度池化用来扩大感受野,其结构如图2所示。针对输入的特征图,分别利用5×5、9×9以及13×13的池化核做步长为1的最大池化(空间金字塔池化层如图2所示),此最大池化层不仅具有平移不变性,而且利用不同大小的池化核扩大了感受野,且带来的计算成本很小。随后将3种池化操作结果与输入特征图进行concat操作,使得特征层能够分离出最显著的上下文特征,便于网络对目标的定位与分类[15]。
式中:A0—样品的初始14C放射性浓度(Bq/g),实际应用时取“现代碳”标准(813.6Bq/g);A—停止交换t年后样品的14C放射性浓度(Bq/g);t—停止交换后所经历的时间;λ—14C的衰变常数,λ=ln2/T1/2=0.693/T1/2,T1/2为14C半衰期(5730a),带入后得到:
图2 空间金字塔池化层结构
考虑到原始YOLOv4中使用了608×608大小的图片作为输入,而本文从计算资源方面考虑,使用了416×416大小的图片作为输入,故重新计算池化核大小,采用4×4,7×7,13×13大小的池化核来进行最大池化操作。并且为了使各特征层中的感受野差距较小,能够在一定程度上充分利用到全局信息,本文额外添加了一个2×2的池化分支,来获得一个较小的感受野,使空间金字塔层的感受野层级更加细化,进一步利用不同尺度特征图上的不同子区域特征。
因此,结构上本文借鉴了PSPNet中的金字塔模块,采用2×2,4×4,7×7,13×13这4个不同大小的池化核来提出一种多尺度的空间金字塔池化层,其结构如图3所示。首先利用4个不同池化核做最大池化操作,得到4种具有不同感受野层级的特征图;然后分别使用1×1的卷积对池化操作后的图片进行降维,将其通道数降为输入通道数的1/4;最后通过concat操作将4种不同最大池化操作后结果与输入特征出进行通道上的拼接,得到一个通道数为2C的特征图,再由一个1×1的卷积将通道降为C。将此多尺度的空间金字塔模块嵌入CSP_Darknet53主干网络后,得到的特征图中各层级的感受野差距较小,获得的安全帽目标的全局信息完整,能够分离出较为显著的上下文信息,提升网络对安全帽目标的检测精度。
图3 多尺度的空间金字塔池化层
在YOLOv4中,Neck网络使用了PANet融合高低层的特征信息来完成多尺度检测,该结构能够缩短特征信息的传播路径并利用到低层特征图上位置信息。PANet使用了Concat的融合方式,对特征图做通道上的拼接,并利用5次卷积对融合后的特征进行整合与信息提取。其中,5次卷积由1×1和3×3卷积组成,主要通过3×3的卷积进行特征提取,1×1卷积用来调整通道数。因此,这样操作虽然能够在一定程度上提取到丰富的特征信息,但是提取到的特征信息较为单一,同时也带来了网络参数量的增加。文献[16]提出了一种基于分层卷积结构的特征提取网络Res2 Net,其构建了一种新的类残差连接模块,即在一个独立的残差块中使用了分层卷积。Res2 Net网络利用该模块代替原始的残差模块后,使得特征图上的感受野能够在更细粒度级别上的变化来捕获细节特征和全局特性[17]。因此,本文借鉴Res2 Net中的类残差结构并结合5次卷积中的设计思想,利用1×1、3×3的分层卷积结构来组成新的特征增强模块来代替5次卷积模块。
同时,为了使网络学习到更为全局的特征,本文在特征增强模块中引入了注意力机制scSE模块[18],scSE模块为cSE通道注意力与sSE空间注意力进行相加而得来的,分别从通道和空间的角度来增强特征信息,使网络关注感兴趣区域。本文在增强模块尾部嵌入scSE模块,分别利用通道注意力机制和空间注意力机制来对通道间和空间上的特征信息的重新标定,进一步增强了有意义的特征,抑制了无用特征。特征增强模块的结构如图4所示。
图4 特征增强模块
首先通过1×1卷积调整输入特征图的通道数;然后输出4个并行支路x1、x2、x3、x4,分别利用1×1、3×3卷积进行特征提取,其中有3条支路使用了分层卷积操作,即本支路3×3卷积操作后送入相邻支路与该支路输入特征图进行一个残差连接后,再利用3×3卷积进行采样操作,并将4条支路的输出特征图y1、y2、y3、y4做一个通道上的拼接;最后使用一个1×1卷积来整合通道数,并嵌入scSE注意力机制对权重进行标定,凸显目标特征的有用信息。
因此,本文将该特征增强模块引入Neck网络中代替原本的5次卷积,对检测网络中经过Concat融合后的特征图进行通道调整和特征提取。特征提取模块在Neck网络中的使用位置如图5所示(Detection block为特征增强模块),通过本文的特征提取模块操作后,能够在一定程度上增加网络的复杂度,提取到更多的特征信息,同时也能减少信息的丢失并提高网络的检测精度。
图5 基于特征增强模块的Neck网络
YOLOv4网络设置了9种不同大小和宽高比的Anchor(Anchor box=12,16;19,36;40,28;36,75;76,55;72,146;142,110;192,243;459,401),分别应用于3种不同尺寸的特征图来检测出目标的Bounding box。由于YOLOv4中的Anchor是在 PASCAL VOC目标检测数据集上以608×608的尺寸大小通过Kmeans算法聚类得来的,其比例尺寸分配较为均匀,且尺寸较大。而本文的安全帽数据集中目标大小较为极端且使用了416×416大小的图片作为输入,所以YOLOv4预设的Anchor不太适合本文的模型训练。
因此,本文使用了Kmeans++聚类算法来对本文的安全帽数据集的anchor box进行聚类分析。Kmeans++为聚类算法Kmeans的改进算法,相比于传统的Kmeans算法,其通过对初始点的优化提高了聚类的精度,能够针对数据集聚类出更为合适的Anchor box尺寸。同时,使用了anchor box与ground truth的最大比IOU作为度量距离,其计算公式如下所示
D(box,centroid)=1-IOU
(1)
其中,box为数据集中真实标注框,centroid为聚类的中心点。Kmeans++聚类算法的步骤如下:
(1)首先随机选取某一样本目标框区域作为初始聚类中心;
(2)随后计算每个样本与当前聚类中心的距离D,并计算该样本被选为下一聚类中心的概率,然后使用轮盘法选取下一聚类中心;
(3)重复步骤(2)直到聚类出k个聚类中心;
(4)最后利用Kmeans算法,通过计算每个样本到聚类中心的距离得到最后的目标框尺寸。
本次实验在深度学习工作站上搭建环境并进行训练,服务器硬件配置为CPU(Inter Xeon E5-2695)、GPU(Nvidia TITAN Xp)、主板(超微X10DRG-Q);操作系统为Windows10专业版;软件配置为Anaconda、Pycharm;编程语言为Python,深度学习框架为Keras。
实验数据为网上收集的安全帽检测数据集,由网页爬取的施工现场图片和SCUT-HEAD中的部分图像组成(大部分为某学校课堂监控视频),所有的图像用labelimg标注出目标区域及类别,一共分为两个类别,佩戴安全帽的标记为‘hat’,未佩戴安全帽的标记为‘person’。该安全帽数据集一共有6600张图片,其中6000张作为训练集,600张作为测试集。并且,为了增加实验数据集的多样性以及防止安全帽检测模型过拟合,本文在训练集数据输入模型训练前使用图像缩放、长宽扭曲、图像翻转、色域扭曲以及为图像多余部分增加灰条等操作对训练集进行预处理。
本文采用安全帽数据集对检测网络进行训练,训练时输入图片尺寸设置为416×416,优化器为Adam。网络训练分两个阶段进行,第一阶段为粗训练,旨在快速降低网络的损失值,第二阶段为细训练,使网络能够更好的收敛。第一阶段训练20轮(epoch),batch size设置为12,学习率(learning rate)设置为 0.001;第二阶段训练140轮(epoch),batch size设置为12,学习率采用了余弦退火下降策略,基础学习率(learning rate)设置为0.0001,下降最小学习率为0.000 001,开始学习率为0.000 01,学习率先线性上升,再以余弦的方式下降,在140轮内多次上升和下降,以此来越过局部最小点。SR_YOLO的损失下降曲线如图6所示。由图6可知,本文改进算法最终损失值下降至17左右区域平稳,此时网络收敛。
图6 SR_YOLO的损失下降曲线
本文以召回率(Recall)、漏检率(Larm)、平均精确率AP(average precision)以及平均精确率均值mAP(mean average precision)作为网络的性能评判指标。其中,检测的召回率Recall、漏检率Larm以及平均精确率均值mAP的计算公式如下所示
Recall=TPTP+FN×100%
(2)
Larm=FNTP+FN×100%
(3)
mAP=∑ci=1APic
(4)
式中:TP为正类预测为正类数,FN为将正类预测为负类数,c表示类别数,AP为单个目标的平均精确度,其中,AP=∫10P(R)dR。
(1)Kmeans++聚类结果分析
本文实验采用Kmeans++算法对安全帽数据集中目标的Anchor box尺寸进行聚类分析,同时采用平均交并比(Avg IOU)作为聚类结果的评价指标。Anchor框个数与Avg IOU分析结果如图7所示,图7中展示了k值取1~12时不同的Avg IOU值,由于本文未改动YOLOv4输出特征层的数量,故使用k=9,Avg IOU=81.32%所产生的Anchor框尺寸。
图7 Anchor框个数与Avg IOU结果
图8为Kmeans++算法聚类图,其中图8(a)为安全帽数据集中目标框分布图,可知目标框尺寸主要集中在[0~150,0~200]的区间中,原始YOLOv4中所使用的Anchor框尺寸并不符合安全帽数据训练的要求。图8(b)为Kmeans++算法对安全帽数据的聚类结果,聚类k值取9,经过迭代最后所有数据点聚类成9个区域,每个区域中使用了五角星代表其聚类中心,即最终获得的9种不同大小的Anchor尺寸。
本文利用Kmeans++算法聚类得到的anchor尺寸见表1,其中13×13大小的特征图上分配最大的3个Anchor,26×26上分配中等的3个Anchor,最大的特征图上使用最小的3个Anchor,满足YOLOv4在小的特征图预测大目标,在大的特征图上预测小目标的规范。
表1 anchor参数
(2)消融实验分析
为了验证改进点对安全帽检测的有效性,本文利用消融实验进行了纵向对比分析,采用相同的测试集,从网络的平均精确率AP以及平均精确率均值mAP的结果来判断改进网络是否有效,其中IOU阈值设置为模型评估通用的0.5。
由表2可知,对空间金字塔池化层进行改进后,可以看出佩戴安全帽的AP值基本保持不变,未戴完全帽的AP值则上升了0.78%,mAP值达到了83.23%,这表明利用多池化核做最大池化能够很好分离出上下文信息,提高了对安全帽和未佩戴安全帽的小目标检测精度;使用基于分层卷积与scSE模块的特征增强模块对Neck网络中的融合特征图进行采样后,佩戴安全帽和未戴完全帽的AP值分别上升了0.66%和0.32%,mAP值达到了83.09%,说明该特征增强模块提取到特征信息更为丰富,对于一些小目标安全帽的特征也能很好的凸显出来;使用Kmeans++聚类出的新Anchor进行训练后,佩戴安全帽和未佩戴安全帽的AP值分别上升了0.47%和1.46%,说明利用Kmeans++聚类出来的anchor尺寸更符合训练样本,能够提高网络对安全帽佩戴检测的精确度。最后,将所有改进点结合训练得到SR_YOLO,其mAP值为84.05%,比为未改进前YOLOv4的mAP值高1.45%,说明本文建立的基于改进YOLOv4的安全帽佩戴检测方法真实有效,能够提高对安全帽的检测精度。
表2 消融实验结果
(3)横向对比实验分析
同时,为了验证本文改进算法的检测实用性,选取了SSD、RFBNet、YOLOv4网络在相同的实验环境下利用相同的训练方式和数据集训练,进行了横向对比实验分析。并利用相同的测试集对4种网络进行测试,从网络模型的召回率(Recall)、漏检率(Larm)、平均精确率(AP)、平均精确率均值(mAP)以及检测速度等评价指标来验证改进网络的优越性。网络模型检测性能见表3。
表3 横向对比实验结果
由表3可以看出,在相同的训练条件下,对于“Hat”和“Person”两类,本文检测方法的召回率最高且漏检率最低,分别为83.35%、76.33%和22%、67%。这说明本文所提检测方法在相同测试集下,能够正确检测出的安全帽和未带安全帽的目标最多,并且其综合检测性能最佳。同时,本文所提出检测方法SR_YOLO的mAP值最高,相较于SSD、RFBNet以及YOLOv4分别高出了15.58%、19.46%和1.45%,这说明SR_YOLO对安全帽的检测精度最高,检测效果更好。针对这4个模型的检测速度和参数量可知,SSD的检测速度最快并且其模型参数量最低,本文的SR_YOLP的参数量达到233 MB,较改进前有一定程度的下降,且其检测速度为30 fps,完全满足实时性的要求。从以上数据数据可知,本文的安全帽检测算法SR_YOLO完全满足是施工现场复杂环境下对佩戴安全帽和未佩戴安全帽的工作人员的准确识别,并且满足实时性的要求。
为进一步说明本文检测方法在真实环境下对施工现场工作人员安全帽佩戴检测的性能,利用上述训练好的模型进行测试,并对测试结果进行对比分析。随机选取了4张真实施工现场作业图,如图9(a)、图9(b)、图9(c)、图9(d)从左至右分别为4张不同环境下的测试图片。图10为检测结果,图10(a)~图10(d)从左至右分别为SSD、RFBNet、YOLOv4以及SR_YOLO对4张测试图的检测结果,图中的浅灰色框为表示安全帽,用“hat”表示其类别,深灰色框为未佩戴安全帽,用“person”表示其类别。
图9 测试图片
从图10中可以看出,SSD和RFBNet网络的检测性能最差,4幅图都有不同程度的漏检和误检,针对图中出现的有遮挡和较小安全帽目标,两种检测网络均存在大量的漏检测情况,其中第三行图中二者均存在误检测,误将旁边的物体检测为佩戴安全帽的目标。两种检测网络性能较差的原因可能是都以VGG16作为主干特征提取网络,导致其未能挖掘更深层次的特征信息。其次,YOLOv4的检测性能较SSD和RFBNet都好,能够对大部分的安全帽进行准确,但是存在少量的漏检。针对安全帽分布较为密集的环境下,YOLOv4检测能力要强于SSD和RFBNet。测试图1、测试图2中较为密集的环境,YOLOv4能够对大多数的安全帽目标进行检测但存在少量漏检;针对测试图3、测试图4较为稀疏环境,YOLOv4能实现所有安全帽目标的进行准确检测。这说明对于密集情况下的有遮挡和弱小安全帽目标,YOLOv4的检测效果一般,存在一定的漏检情况。最后,本文提出的检测方法SR_YOLO能够将测试图1~测试图4中所有的遮挡以及弱小安全帽目标都检测出来,这说明本文方法的检测性能最好,所提出的改进方法真实有效,能够更好挖掘出更深层次的特征信息,提高网络的检测性能。
针对真实施工场景下,安全帽佩戴检测所面临的检测目标较小、背景干扰性强等问题,本文在YOLOv4的基础上,引入了多尺度空间金字塔层和特征增强模块来改进检测网络,并利用Kmeans++算法来对安全帽样本进行anchor尺寸优化,进一步提高了网络对安全帽的检测准确率。实验结果表明,本文SR_YOLO的mAP值为84.05%,检测速度为30 fps,能够对真实的施工现场环境下工作人员是否佩戴安全帽进行实时且准确的检测。但本文检测网络只针对检测的精确度进行改进提升,未对检测速度方面进行优化,因此下一步可以通过使用轻量化模型,在保证检测精度的情况下进行检测速度的提升。