赵江河,王海瑞,吴 蕾
昆明理工大学 信息工程与自动化学院,昆明 650504
安全帽作为施工工地的一项重要的安全保障,外壳能有效地分散下坠物的冲击力量,内部可以进一步地对冲击力进行缓冲、吸能,从而保障工人的头部安全。虽然安全帽可以有效地保护工人,但是依旧有很多建筑工人进入建筑工地以及在施工现场不佩戴安全帽,尽管有很多建筑工人管理者都会在工人进入建筑工地时进行强制性的佩戴安全帽的要求。但是在施工中,难免会有许多工人忘记佩戴安全帽,而导致严重的后果。针对实时性的安全帽检测,需要使用计算机来代替人工巡视进行处理。
基于安全帽的佩戴检测,包括传统的手工提取的方法以及基于深度学习的方法。
传统的手工提取的方法主要是通过肤色、眼睛等来大致判断图像中人脸所在的位置,随后通过颜色以及线条的特征来判断人脸的区域内是否有安全帽的特征。李太华等提出了一种基于头盔的行人检测和颜色识别算法,根据检测到的行人识别是否戴头盔[1]。冯国臣等采用Canny边缘检测方法先进行人体的边缘检测,通过人体的位置来估测实现安全帽的检测识别,对估测矩形内的像素特征进行判别,若满足安全帽像素特征,则判定为已佩戴安全帽,若不满足,则判定为未佩戴安全帽[2]。庞霞等通过人脸定位来判断安全帽的位置,采用检测肤色和眼睛、嘴巴的映射定位人脸,然后扫描人脸上部的矩形区域区域,通过提取颜色和形状特征来判断头部是否佩戴安全帽[3]。
基于深度学习的方式则是使用目标检测的框架直接对安全帽进行检测,不需要人手工地提取特征,实现起来相对简单。现有的研究是在原有的SOTA(state-ofthe-art module)目标检测框架上进行对应的优化来提升准确度,如Faster-RCNN[4]、YOLO[5-7]、Mask-RCNN[8]、DSSD[9]、RetinaNet[10]、CenterNet[11]等。Long等通过训练深度卷积神经网络(DCNN)来优化SSD[12]。Gu等基于骨骼点信息确定施工人员的头部区域,使用YOLO v4检测安全帽区域,通过两个区域的交叠情况来判断是否佩戴安全帽[13]。Li等提出了一种在线硬示例挖掘(OHEM)与多部分组合相结合的目标检测框架来优化安全帽的检测精度[14]。Shen等采用互蒸馏的方法训练了具有两个对等DenseNet网络的网络模型来提高准确性[15]。
此外针对目标检测框架的优化还有复用特征图、增加注意力模块、修改损失函数以及替换特征提取主干网络等操作。方钧婷等提出了一种基于注意力机制的级联网络缺陷检测算法来优化R-CNN[16]。赵鹏飞等选用Darknet-53来优化SSD并融入特征增强模块以及通道注意力机制[17]。宋艳艳等利用残差结构思想,将浅层特征和深层特征进行上采样连接融合来优化YOLO v3[18]。
综上所述,由于施工场地采取到的图像较小,小目标的数量过多,导致深度学习的精确度并不高。本文采用网络结构较为简单的one-stage代表的CenterNet作为安全帽佩戴检测的算法框架,并在此基础上提出FPNCenterNet,实验结果表明,该算法在安全帽佩戴检测上有良好的准确性和效率。
对于施工场地采集到的图像来说,往往存在由于多个施工工人在一起而出现的目标集中且目标范围小的特点,这种情况,如:目标遮挡、目标重叠等就造成了关于关键点网络(CenterNet)无法正常检测目标的问题。
CenterNet是基于关键点的one-stage的Anchor-free的目标检测网络,首先使用经典的特征提取主干网络(如:ResNet-50、DLA或Hourglass等)对图像进行特征提取操作。然后采用反卷积操作,将特征图的长宽变为原始输入图像的1/4。随后在128×128长宽的特征图上进行卷积计算分别求出128×128个物体类别以及置信度、对中心点的偏移进行回归以及对边框的长宽进行回归。本文使用的是ResNet-50作为特征提取的主干网络。
本文提出了针对CenterNet的三个方面的改进:
(1)借鉴FPN[19]的思想,将CenterNet提取到的特征进行金字塔的特征融合,构建FPN-CenterNet框架,对提取到的特征进行复用。
(2)在FPN-CenterNet的基础上,在特征提取的主干网络层ResNet-50中增加ACB[20](非对称卷积核)模块,来增强特征提取能力。
(3)针对Anchor-free边框回归精度不高的问题,引入了DIoU[21]损失函数来优化该问题。
改进的算法的整体框架FPN-CenterNet如图1所示。改进之处分别用红框框出并标出序号。
图1 FPN-CenterNet框架Fig.1 Structure of FPN-CenterNet
FPN-CenterNet框架是在原有的CenterNet框架上融入了特征金字塔结构,将主干网络提取到的特征以及反卷积提取到的特征进行计算,实现特征的复用。FPN的框架如图2所示。
图2 特征金字塔网络结构Fig.2 Structure of feature pyramid net
小范围目标的定义为像素值低于32×32的目标。当进行二倍下采样的时候,原本32×32长宽的特征图会变成16×16长宽的特征图;当进行32倍下采样的时候,会由原来的32×32长宽的特征图变成1×1长宽的特征图,由原来的1 024个像素点信息变成了1个像素点信息,在后面的预测中1个像素点的信息不足以支持高精确度的推导。在下采样的过程中,小目标的像素信息会急剧减少。在之后的上采样过程中,由于小目标像素点的信息较少,上采样之后的信息也较少。
特征金字塔FPN的出发点是当特征图在不断的下采样过程中特征图的长宽在不断减小,小目标由于本身所具有的像素信息就少,导致在下采样的过程中信息会不断消失。此外在CenterNet的上采样的过程中会携带更少的小目标的信息进行推导从而导致CenterNet对小目标的推导的准确性并不高。因此采用FPN的结构对CenterNet进行优化,复用主干网络提取过程中的特征图,使得网络携带更多的小目标的信息去推导,从而提高CenterNet对小目标推导的准确性。
ACNet(asymmetric convolution net)是通过三种不同的卷积核来对同一个特征图进行卷积操作,卷积核长宽为H×W、1×W以及H×1三种尺寸。它的切入点是通过非对称卷积核来获取更好的特征表达。并且由于卷积计算满足分配率的性质,其在推导过程中没有带来任何的时间损失。卷积计算的分配率如公式(1)所示:
其中,I表示输入的矩阵,K(1)和K(2)表示的是两种大小的卷积核。
以3×3的为例,在训练阶段非对称卷积核则是由3×3、1×3、3×1组成,分别对特征图进行三种不同的卷积计算,计算完成后则进行卷积加操作。在推导阶段,则是将这三种卷积进行卷积加操作以3×3卷积核为基核,1×3的卷积核直接与3×3卷积核的第二行的各个值进行相加,3×1的卷积核则与卷积核的第二列的各个值进行相加操作,在对输入的特征图进行卷积计算,从而在不增加推导时间的同时提升了整体提取特征图信息的丰富性。ACB卷积核如图3所示。
图3 非对称卷积核Fig.3 Asymmetric convolution kernel
非对称卷积核能提升特征图的信息,是因为其提升了模型对目标翻转以及旋转的鲁棒性。如图4所示,例如针对1×3的卷积核获取到的特征提取,在图像旋转后就成了3×1的特征提取,三个红色框分别代表原始的、翻转后的以及旋转后的1×3卷积核。因此1×3以及3×1的卷积核相对于3×3的卷积核来说是一个特征提取的扩展,可以更有效地获取图像中目标旋转以及翻转之后的特征信息。
图4 图像翻转旋转之后的信息Fig.4 Information after image flip and spin
DIoU(distance-IoU)损失函数是在IoU损失函数的基础上考虑了预测款和真实框中心点的距离,从而提升了回归的准确性。其计算公式如公式(2)所示:
其中,ρ(b,bgt)表示的是预测框以及真实框之间中心点的距离,c表示的是两个边框构成的最小闭包的对角线长度。如图5所示。
图5 预测框与真实框的距离比Fig.5 Distance ratio between bounding box and ground true
公式(2)中IoU的值如公式(3)所示:
其中,A表示的是预测框,B表示的是真实框。
IoU的图表示如图6所示。其中A表示预测框,B表示真实框。
图6 交并比Fig.6 IoU
原始的边框的回归分为两个损失函数,分别为边框中心点的偏移回归以及边框的宽高回归,原始的边框回归损失函数Lbox如公式(4)所示:
公式(4)中λoff和λsize分别是偏移损失和尺寸损失的权重;偏移损失Loff如公式(5)所示:
其中,N表示真实框的个数,表示各个中心点偏移的预测值;表示原始点缩放比的向下取整,如公式(6)所示;R表示图像的缩放比,这里的值一般设置为4。
尺寸损失Lsize如公式(7)所示:
其中,N表示真实框的个数;表示各个中心点对应的边框长宽的预测值;sk表示各个中心点对应边框的真实值。
使用DIoU损失函数替换原始的边框损失,故总修改之后的总损失如公式(8)所示:
其中focal损失函数如公式(9)所示:
其中,N表示热度图点的个数;Yxyc表示的是在特征图中(x,y,c)这个点是否代表有物体,0表示不是物体,1表示是物体;表示在特征图中(x,y,c)这个点的置信度;α、β是超参数,分别设置成2和4。
DIoU是在IoU损失函数的基础上添加了预测框与真实框之间的中心点的距离关系,并且将该项作为损失函数的惩罚项。它可以直接最小化两个中心点的距离,比GIoU损失函数还要收敛得快,此外,当两个边框没有交集的时候,可以根据该惩罚项来提供梯度优化的方向。
对于Anchor-based的目标检测框架来说,每一个点都要预测3~9个不等的边框,而对于Anchor-free的目标检测框架来说,每一个点只预测一个边框。虽然Anchorfree减少了参数量,但是只有一个预测框会很大程度上导致整体预测框的不准确性。针对以上分析,Anchor-free系列的目标检测框架应该使用对交并比更敏感的DIoU的损失函数来进行优化。从而提升单个预测框的精度。
本实验采用的是Windows 10操作系统,使用的深度学习框架是PyTorch深度学习框架,使用的是Python3.8作为代码解释器。实验环境配置如表1所示。
表1 实验环境及配置Table 1 Experimental environment and configuration
由于网上没有相关的安全帽数据集,因此在数据集方面需要自己去制作。该数据集的分类有两类,一个是Hat(代表佩带安全帽的),一类是Person(代表的是没有佩戴安全帽的)。使用网络爬虫的技术在百度图库等网站上抓取图片,以及采用视频截取的方式来获取数据源图片,然后使用Labelimg工具进行图片的标注,将其制作成Voc格式的数据并存储到硬盘中。
由于在实际应用环境中,可能会出现检测目标过小的情况,因此在数据采集的过程中尽量采集图像中目标较小的情况。最终收集到的数据集共7 581张图像。图像中目标的展示如图7所示。
图7 安全帽数据集Fig.7 Safety helmet date sets
本实验的初始化学习率设为0.001,前5次的训练的批次设置为10。后55次的学习率设为0.000 1,训练批次为3。
针对学习率的修改,使用的是PyTorch下的Reduce-LROnPlateau函数来动态地更新学习率,当发现评估的损失不再降低时,则动态减小学习率,factor设为0.5,patience设为2。后55次的学习率随着训练次数的变化如图8所示。
图8 学习率的变化Fig.8 Changes in learning rates
修改DIoU损失函数后,损失函数的值由分类损失以及DIoU损失两部分构成,经过115 600次梯度优化之后,分类的损失徘徊在了0.74左右,DIoU的损失则是徘徊在了0.52左右。如图9为后55轮训练后的loss值。
在最后的5轮训练中,除了最开始的一批的波动外,损失值接近于平稳,如图10所示分类损失稳定在0.74左右,定位损失稳定在0.52左右。
图9 分类和定位loss值Fig.9 Loss value of classify and locate
图10 最后5轮训练的损失值Fig.10 Loss value of last 5 rounds of training
将原始的模型以及修改的三个模型(在原始的模型上依次增加FPN模块、ACB非对称卷积核模块和DIOU损失函数)按照上述相同的超参数进行60轮的迭代训练,同时训练Faster-RCNN以及YOLO v3,并且对这几种模型进行比较。
mAP(mean average precision)表示的是各类AP的均值。AP表示的是PR曲线、x轴和y轴所围成的近似面积。PR曲线是由Precision和Recall组成的曲线。其中精度Precision的计算公式如公式(10)所示,召回率Recall的计算公式如公式(11)所示。
TP(true positives)表示的是推导结果是正样本并且确实是正样本;FP(false positives)表示的是推导结果为正样本但实际为负样本;FN(false negative)表示的是推导结果为负样本但实际为正样本。正样本表示的是计算的类型为该类且计算的边框与真实框的交并比大于某个阈值,AP(0.5)时,该阈值为0.5。如图11为FPNCenterNet的佩戴安全帽类的PR曲线。
根据控制变量法的思想,对修改处进行消融实验,实验结果如表2所示。其中mAP(0.5)表示的是在IoU交并比大于等于0.5的情况下,所有类的平均精确度。本实验中FPS是指在GTX GeForce 1050的显卡上的每秒处理的帧数。
图11 FPN-CenterNet的佩戴安全帽类的PR曲线Fig.11 PR curve of wearing helmet of FPN-centernet
表2 消融实验Table 2 Ablation experiment
由表2的消融实验数据可知,在加入FPN(实验2)之后,mAP(0.5)提升了4.52个百分点,FPS减少了0.51,提升了非常多,在没有明显减少推理速度的同时增加了mAP。证实了CenterNet在推理过程中,由于下采样而造成的像素信息的消失,这也造成了在后续上采样的过程中像素信息不够而导致的小目标的检测精度不高。在引入FPN之后,安全帽佩戴检测的精度有了很大程度的提升。原因在于FPN的引入很大程度上增加了推导的特征图的像素信息,将特征提取的主干网络推导过程中的特征图进行复用,即复用推导过程中特征图的像素信息。
实验3是在FPN的基础上增加了ACNet模块,将ACNet模块添加到特征提取的主干网络ResNet-50中,目的是为了增强主干网络的特征提取能力,相比于实验2,其mAP增加了0.42个百分点,FPS下降了0.9。本实验中使用ACB非对称卷积模块代替普通的3×3卷积核。目的在于通过额外增加的两个卷积核来提升网络提取旋转以及翻转后目标特征的能力。在没有明显增加推理时间的同时能提升特征图的细粒度信息。
实验4是在实验3的基础上将原始的边框损失函数修改为了DIoU损失函数。mAP提升了0.05个百分点。由于没有修改网络结构,因此FPN不变。对于Anchorfree来说一个点的边框回归只有一个,不需要进行非极大抑制剔除多余的预测框。不像Anchor-based可以一个点预测好几种不同尺寸大小的边框,当使用非极大抑制算法来消去多余的预测框时会增加整体的推导时间,此外使用DIoU损失函数优化效果也不是很明显,但还是有点提升。由于数据集没有进行缩放等数据增强的行为,因此提升较低。
本实验中,还分别使用该数据集训练了YOLO v3和Faster-RCNN,它们的mAP以及FPS对比数据如表3所示。
表3 各算法的性能对比Table 3 Performance comparison of each algorithm
根据表3的数据显示,改进之后的FPN-CenterNet能有效地检测安全帽的佩戴,相比与原始的CenterNet,mAP提升了4.99个百分点。相比于Faster-RCNN(Vgg-16)、Faster-RCNN(ResNet-50)、YOLO v3(ResNet-50)、YOLO v3(DarkNet-53)和FAENet(ResNet-50),mAP分别高了37.37、33.47、14.25、8.67和12.15个百分点。同时在GTX GeForce 1050的显卡上,FPS分别提高了20.74、23.01、9.97、11.13和16.7。Hog+SVM算法则是使用opencv的人像检测再按比例计算出头部的位置,随后根据SVM分类器进行分类。由于人像检测和分类器必须两者全部预测正确,结果才能预测正确,因此mAP并不高。
如图12是原始的CenterNet和改进之后的FPNCenterNet的效果比较。
图12 改进前后的检测结果比较Fig.12 Comparison of test results before and after improvement
如图12所示,改进前图像的中间有许多的目标没有检测到从而导致了检测精确度的下降。改进之后中间许多目标都检测到了,每一个框的置信度都相较于原始的算法有了一定的提升。这说明FPN-CenterNet能有效地利用像素的信息来有效地提升安全帽检测的精度。其在安全帽数据集的效果如图13所示。
图13 FPN-CenterNet效果展示Fig.13 FPN-Centernet effect display
如本实验结果所示,FPN-CenterNet在安全帽的佩戴检测方面有良好的精确度以及效率。
本文针对原始的CenterNet在安全帽佩戴检测中精度不高的问题做出了分析。由于小范围目标的数量较多而且容易出现密集分布,对于以关键点来验证的CenterNet来说,密集的分布更容易出现像素点信息的丢失。针对下采样过程中像素点信息容易消散的问题,结合了FPN的思想,对原始的框架进行了修改,修改为FPN-CenterNet框架,将提取到的特征信息进行了复用,从而减缓了下采样过程中出现的像素点信息消散的情况;此外将非对称卷积核融入到特征提取的主干网络ResNet-50中,使用非对称卷积来替换原始的3×3卷积核,在不增加推导时间的同时能丰富提取到的特征信息,提升特征图的细粒度信息;最后通过DIoU损失函数替换原始的中心点偏移损失以及边框的长宽回归损失,对于Anchor-free来说每个点只有一个回归的框,使用DIoU损失函数代替原有的边框损失函数,能在一定程度上提升边框预测的准确性。
实验结果表明,FPN-CenterNet的改进相比于原始的CenterNet在速度基本不变的情况下可以有更好的检测精度。改进之后的FPN-CenterNet算法相比于原始的CenterNet的mAP提升了4.99个百分点,在GTX GeForce 1050的显卡上FPS为25.81。实验表明修改之后的FPN-CenterNet算法在安全帽佩戴检测上有良好的准确性和效率。
但依旧存在漏检等问题,该问题出现在多个目标重叠或相近等情况,可能的原因是单尺度预测导致多个关键点重叠从而在解码阶段只有一个关键点有预测的信息。今后的实验将会围绕着这个问题进行优化和改进。