周敏新,张方舟,龚声蓉
(1.东北石油大学 计算机与信息技术学院,黑龙江 大庆 163000;2.常熟理工学院 计算机科学与工程学院,江苏 苏州 215500)
目前已经有学者对安全帽佩戴检测做出了研究,现有的大多方法依赖人的脸部特征,一旦人背离摄像头就无法检测[1]。也有方法虽然可以在工作场所进行检测,但是只对近处的工人有很好的检测效果,远处的工人检测效果不佳[2-6]。这是因为工地监控摄像头拍摄到的远处工人仅占据图像的小部分,特征难以识别,很难与复杂的背景区分开,并且工地的监控摄像头大多安装在高处,采集到的图像中工人大部分都是小尺度的。基于这些原因,迫切需要一个能够解决小尺度工人问题的自动安全帽佩戴检测器。
本文提出在CenterNet[7]基础上引入新型特征融合结构用于安全帽佩戴检测,为了提高对小尺度工人检测的有效性,首先引入一个U型结构的特征金字塔模块(feature pyramid module,FPM),采用自顶向下的方式融合深层和浅层特征[8]。受PoolNet[9]启发,深层语义信息在融合过程中容易被稀释,因此引入全局引导模块(global guidance module,GGM),即在特征金字塔结构的每一个横向连接处添加深层语义信息。其次高倍数的上采样会造成失真,采用特征整合模块(feature aggregation module,FAM)使粗层次的语义信息在自顶向下过程中与精细特征更好融合[9]。
目前关于安全帽佩戴检测的研究主要分为基于传感器的方法和基于视觉的方法[2]。基于传感器的方法使用场景受限,一旦超过了信号范围就无法检测,并且设备需要定期充电,不利于长期使用。因此,使用普通相机进行实际应用比传感器具有更重要的现实意义[2]。基于视觉的方法进一步分为基于手工设计特征的方法和目前主流的基于深度学习的方法。
Shrestha等[1]提取头部区域的边缘特征来判断工人是否佩戴了安全帽。Park等[3]提出使用背景分离法从复杂的背景中检测人体和安全帽,再分别提取人的身体部分和安全帽的HOG特征,最后根据它们的空间关系进行匹配。Li等[4]提出采用行人检测算法检测出行人,再利用头部定位、颜色空间变化和颜色特征识别实现安全帽佩戴检测。可以看出基于手工设计特征的方法大都需要进行多步骤检测,首先从复杂的背景中提取行人,再提取目标的边缘、颜色、形状和其它具有判别性的特征,这些特征通常被编码成低层次的视觉描述器,检测速度慢[10]。还有方法依赖人的正脸特征,使用场景受限。此外,该类方法的特征描述符是基于低层次的视觉线索手工设计的,难以在复杂的上下文环境中捕获具有代表性的语义信息[11]。
随着计算资源比如GPU的发展以及更多公开的数据集,和基于手工设计特征的方法相反,深度卷积神经网络可以从大量训练数据集中自动学习并将图片的原始像素信息表示成高层次的语义信息,因此基于深度卷积神经网络的目标检测算法具有更强的特征表示能力[11]。基于这些特性,深度学习目标检测算法逐渐成为主流。
目前已经有学者使用深度学习目标检测算法进行安全帽佩戴检测,但是仍处于起步阶段[2]。直接将Faster R-CNN[14]用于安全帽佩戴检测,结构复杂,不能达到实时的效果,并且仅在最后一层特征图上进行预测,对小尺度目标检测效果不佳。Wu F等[5]将YOLOv3[12]的骨干网络DarkNet53替换成了DenseNet用于安全帽佩戴检测,训练简单,并且该方法在多尺度特征映射图上进行预测提高了对小尺度目标的检测效果。Luo等[6]采用SSD[13]算法进行安全帽佩戴检测,但是SSD[13]算法利用浅层特征预测小尺度目标,深层特征预测大尺度目标,没有结合深层和浅层特征各自的优势,因此对于小尺度的目标检测效果依然不佳。
上述方法均采用了锚框机制,在设置锚框宽高比时麻烦,此外,还存在大量的冗余框导致正负样本严重失衡。2018年~2019年期间出现了大量基于关键点的目标检测方法,不需要预设锚框,直接根据关键点定位目标。CenterNet[7]仅使用中心点表示目标,边界框的其它属性通过中心点区域的特征映射图进行回归,每个目标只有一个中心点,因此不需要做极大值抑制后处理。在与YOLOv3[12]相同的检测速度下,CenterNet的检测精度要比YOLOv3[12]高3倍[7]。
为了全面考虑检测的速度和精度,本文提出以CenterNet[7]为基础的改进方法用于安全帽佩戴检测。
CenterNet属于无锚框目标检测,图1为CenterNet的无锚框机制与传统的锚框机制对比,如图1(a)所描述的,目标直接通过它的中心点来表示,图1(b)表示的是传统的基于锚框的目标检测算法,每个位置都预设了固定尺度的锚框,每个锚框负责预测与真值框交并比大于某个阈值的目标[14]。
图1 CenterNet与传统的锚框机制对比
CenterNet网络结构如图2所示,仅在最后一层特征映射图上进行预测,忽略了浅层特征的细节信息,导致对小尺度目标不敏感,在应用于安全帽佩戴检测时仍然会存在漏检、误检情况。本文采用新型特征融合方式充分融合深层和浅层特征,提高对小目标的检测精度和召回率。
图2 CenterNet网络结构
深层语义信息有助于分类,而浅层特征具有丰富的细节信息有利于定位[8],CenterNet仅通过最后一层特征进行预测,忽略了浅层特征的细节信息,导致在检测小尺度目标时效果不佳。本文提出在CenterNet中引入一种新型特征融合方法,称之为CenterNet-Feature-Fusion(CenterNetFF),利用3个模块更好的融合深层和浅层特征,扩大了整体网络的感受野,以便更精确捕捉目标的位置信息,提升对小尺度目标的检测效果。
如图3所示,CenterNet作为基础网络,输入512×512大小的图片,经过骨干网络得到最终的特征映射图Conv_5。本文提出3个模块更好融合深层和浅层特征,提高对小尺度目标的检测效果。首先引入特征金字塔模块采用自顶向下的方式融合深层特征与浅层特征,由于深层语义信息会在自顶向下融合过程中被稀释[9],本文在特征金字塔模块中插入全局引导模块,由图3中的金字塔池化模块(pyramid pooling module,PPM)和全局引导流(global guidance flows,GGFs)组成。金字塔池化通过不同尺度的缩放Conv_5获得全局引导信息,全局引导流负责在特征金字塔的每一个横向连接处添加金字塔池化获得的全局引导信息,弥补在自顶向下过程中逐渐被稀释的深层语义信息。高倍数的上采样容易引入杂质,造成混叠效应,引入特征整合模块,也就是图3中的A,对每一层融合特征映射图进行处理,不仅减少了混叠效应,同时通过在不同尺度空间上查看上下文信息,进一步扩大了整个网络的感受野。最后使用融合后的特征进行预测,分为3个分支用于生成关键点热力图、边界框的尺度预测(Wi,Hi)以及关键点的偏差预测(ΔXi,ΔYi),均采用3×3和1×1的卷积。根据预测得到的中心点坐标(Xi,Yi),即关键点热力图中的峰值点、边界框的尺度以及偏差值可以定位目标的位置 (Xi+ΔXi-Wi/2,Yi+ΔYi-Hi/2,Xi+ΔXi+Wi/2,Yi+ΔYi+Hi/2)。
由于小尺度目标占据图像的像素较小,在自底向上过程中随着特征图的分辨率越来越低,小尺度目标的像素信息逐渐丢失,仅通过最后一层特征层进行预测导致在检测小尺度目标时存在不足。本文在CenterNet基础上引入U型结构的特征金字塔模块。第一步是自底向上的过程,也就是网络的前向传播过程,如图3所示,Conv_2~Conv_5特征映射图的大小随着网络层数的加深逐渐减小,分辨率也越来越低。Conv_1~Conv_3浅层特征包含丰富的目标边缘等细节信息,但是缺乏语义信息,而深层特征Conv_4~Conv_5语义信息丰富,有利于目标的分类,但是缺乏浅层特征的细节信息,不利于定位。第二步,采用自顶向下的方式融合深层特征和浅层特征,如图3中的F模块,将上一层的特征映射图进行2倍上采样,下一层的特征映射图采用1×1的卷积核减少通道数,与上采样后的上一层特征
图3 改进后的网络CenterNetFF结构
进行融合。本文将骨干网络的Conv_5,Conv_4,Conv_3这3层特征图依次进行上采样融合,融合后的特征图既包含了浅层特征的细节信息,又包含了深层特征的语义信息,提高了对小尺度目标的敏感性,并且融合后的特征图分辨率高,感受野与小尺度目标刚好匹配。
特征金字塔是融合不同特征层的经典结构,但是在自顶向下过程中深层语义信息会逐渐被稀释[15]。指出卷积神经网络的实际感受野会比理论感受野要小,尤其是在深层特征映射图上。因此整个网络的感受野不足以捕获输入图像的全局信息,导致目标容易被背景吞噬[9],本文引入全局引导模块将深层语义信息更好融入到浅层特征层中。如图3所示,全局引导模块由两个部分组成:金字塔池化模块和全局引导流。金字塔池化模块通过融合不同区域的上下文信息来捕获全局信息,图4是金字塔池化模块结构。首先对Conv_5采用平均池化得到1×1、2×2、3×3和6×6不同大小的池化特征映射图,再通过1×1的卷积核将池化特征映射图的通道数变为原来的1/4,最后通过双线性插值法将这些特征图上采样回原来大小,并与初始的Conv_5 进行拼接。为了将金字塔池化获得的全局引导信息融入到特征金字塔的不同特征层上,引入全局引导流,如图3所示,在特征金字塔模块的每一次横向连接处分别加入2倍、4倍、8倍上采样后的全局引导信息,弥补了在自顶向下过程中被稀释的深层语义信息,本文通过对引入全局引导流前后的特征进行可视化结果对比来验证其有效性,具体分析结果将在实验部分进行展示。
图4 金字塔池化模块
上一节的全局引导模块在自顶向下过程的每一个融合特征层中加入全局引导信息,增加了各层融合特征层的深层语义信息,但同时也带来了一个问题。图5为引入各模块后的特征可视化结果,其中图5(c)是在融合特征层中添加全局引导信息后的特征可视化图,可以看出由于高倍数的上采样引入了杂质,造成混叠效应。传统的特征金字塔模块对2倍上采样融合后的特征采用3×3的卷积核进行卷积,消除了上采样引起的混叠效应,但是全局引导流需要更大倍数的上采样,比如4倍和8倍,因此需要有效消除全局引导流和不同尺度特征映射图之间的差距[9]。特征整合模块如图6所示,包括4个分支,首先将融合特征通过平均池化进行2、4、8倍的下采样,然后经过3×3的卷积操作再进行对应倍数的上采样与初始的融合特征合并到一起,最后再做一个3×3的卷积。如图3所示,本文首先对Conv_5进行特征整合模块处理,之后对每一层融合的特征都进行了特征整合模块处理,不仅中和了高倍数上采样带来的混叠效应,而且特征整合模块通过在不同空间位置和不同尺度上观察局部信息,整个网络的感受野得到了扩展。
图5 引入各模块后的特征可视化结果
图6 特征整合模块
实验环境见表1,服务器包含4个GPU,每个容量为16 G,型号为Tesla P100。本文将CenterNetFF和原始的CenterNet以及其它先进的深度学习目标检测器在SHWD数据集上使用表2相同的训练参数进行训练。学习率初始化为1.25e-4,批量大小为16。总共训练200轮,由于在训练初期学习率较大,所以损失值下降速度很快,但是在训练后期模型逐渐收敛时,大的学习率会导致损失值下降的缓慢,在一个区域值内不停摆动,于是在第90轮和第120轮时对学习率进行一个衰减,这样损失值又可以进一步下降一个坡度。
表1 实验环境
表2 训练参数
本文采用的实验数据是公开的安全帽数据集SHWD以及目标检测数据集COCO。SHWD数据集被分为两类:hat(佩戴安全帽的)和person(没有佩戴安全帽的)。SHWD总共7581张图片,包括9044个佩戴安全帽的正例和11 151个没有佩戴安全帽的反例。本文将SHWD数据集按3∶1∶1的比例划分为4548张训练集、1516张验证集和1517张测试集,部分样本如图7所示。为了验证本文方法不仅仅只对安全帽数据集有很好的检测效果,本文同时使用COCO数据集对CenterNetFF进行了训练检测。COCO数据集分为10个类别,总共包含20万张图像。评价指标采用的是平均检测精度AP、平均召回率AR以及检测速度帧每秒fps。
图7 数据集样本
为了验证本文提出的每个模块的有效性,我们进行了广泛的消融实验。
4.3.1 特征金字塔的有效性
骨干网络的浅层特征映射图包含清晰的目标边缘细节,随着网络层数的不断加深,语义信息越来越丰富。但是目标的细节信息逐渐模糊,分辨率越来越低,导致识别小尺度目标困难。将深层特征融入到浅层特征中可以弥补浅层特征缺乏的语义信息,最终的融合特征映射图比原来的特征映射图具有更高的分辨率,感受野又刚好与小尺度目标相匹配。融合后的特征图不仅包含深层特征的语义信息,还包含了浅层特征的细节信息。表3的第2、6、10行展示了在不同的骨干网络下添加了特征金字塔之后的检测结果,可以看出平均检测精度AP分别提高了1.4%、1.8%、0.4%,
表3 在SHWD数据集上的测试结果对比
平均召回率AR分别提高了2.4%、4.3%、0.7%。同时,对于小尺度目标检测效果也有了很大的提升,APsmall分别提高了4.0%、3.6%、1.0%,ARsmall分别提高了4.9%、4.9%、2.0%,特征金字塔的引入明显提高了对小目标的敏感性。
4.3.2 全局引导模块的有效性
图5为引入各模块后的特征可视化结果,其中图5(b)是经过特征金字塔融合后的特征图可视化结果,图5(c)是引入全局引导模块后的特征图可视化结果。全局引导模块在每一层融合特征层中添加了全局引导信息,可以看出图5(c)的语义信息要更丰富一些,整个网络更加关注目标的完整性。表3的第3、7、11行是引入全局引导模块后的结果,平均检测精度AP和平均召回率AR较上一步又有了进一步提升,其中AP分别提高了0.4%、0.7%、0.8%,AR分别提高了0.5%、0.4%、1.0%。
4.3.3 特征整合模块的有效性
特征整合模块将融合后的特征先通过平均池化进行下采样,再用相同的倍数进行上采样整合到一起,平均了高倍数上采样而引入的杂质。在图5的特征图可视化结果图中,图5(d)是引入特征整合模块后的特征图可视化结果,可以看出减少了高倍上采样带来的混叠效应,更能准确捕捉目标的位置和细节信息。从表3的第4、8、12行可以看出经过特征整合模块处理后网络的检测平均精度AP又分别提高了1.6%、1.6%、0.8%,小尺度目标的检测平均精度APsmall分别提高了0.1%、1.1%、0.8%。最终本文的CenterNetFF算法AP达到了87.8%,AR达到了43.1%,并且对于小尺度目标的检测APsmall达到33.2%,ARsmall达到43.1%,相较于原来的CenterNet的APsmall和ARsmall分别提高了3.0%以及4.7%,检测速度可以达到21 fps,满足工地上的实时检测要求。
为了充分验证CenterNetFF的有效性,本文将CenterNetFF与原来的CenterNet在COCO数据集上进行了实验。表4是实验结果数据,在ResNet18上检测AP达到29.2%,相较于原来的CenterNet提高了1.1%,小尺度目标的检测AP提高了1.1%。在ResNet101上检测AP达到35.9%,比原来的CenterNet检测平均精度提高了1.3%。小尺度目标检测AP达到24.6%。可以看出改进后的算法不仅提高了网络整体的检测平均精度,而且极大提高了对小尺度目标的检测精度。
表4 COCO数据集上实验数据对比/%
本文将CenterNetFF与Faster R-CNN[14]、YOLOv3[12]以及SSD[13]在SHWD数据集上进行了训练对比。在相同的实验环境下,结果如图8所示,尽管Faster R-CNN[14]的检测平均精度和CenterNetFF差不多,但是检测速度只有4.92 fps,远远达不到实时的效果。由于复杂的网络结构,
图8 与目前先进的目标检测算法对比
大量的计算成本,Faster R-CNN[14]在检测速度方面不占优势。另外,YOLOv3[12]和SSD[13]检测速度快,可以达到实时的效果,但是检测精度比本文的方法低,不能满足复杂工况下安全帽佩戴检测所需要达到的精度要求。由于不需要提前预设候选框,操作麻烦并且会存在大量的冗余框。另外YOLOv3[12]使用传统的特征金字塔结构融合深层特征和浅层特征, 深层语义信息会在自顶向下过程中被稀释,不能很好与浅层特征进行融合。SSD[13]在多尺度特征图上进行预测,没有结合深层和浅层特征各自的优势,因此对于小尺度目标检测效果仍然不好。相反,本文提出的CenterNetFF既结合了深层和浅层特征各自的优势,又保证了深层语义信息不在融合过程中被稀释。最终CenterNetFF的平均检测精度达到87.8%,检测速度21 fps,满足实时性检测要求。
本文选用多张小尺度工人的图像测试CenterNetFF以及原来的CenterNet[7]。图9为在CenterNet和本文改进的方法CenterNetFF上的检测结果,图9(a)和图9(c)是原来的CenterNet检测结果,图9(b)和图9(d)是CenterNetFF检测结果。图9(a)中远离摄像头的工人没有被检测出来,但是CenterNetFF检测出这个工人佩戴了安全帽,并且检测的置信度要更高。图9(c)中有别的目标被误检成安全帽,可能是因为它的颜色和安全帽类似。CenterNetFF通过全局引导模块的全局信息使得网络更关心目标的完整性,减少了假阳性。另外我们看到图9(c)中一个被起重机遮挡的工人在改进后的算法中仍然没有被检测出来,这是本文的方法还存在的问题。
图9 CenterNet与CenterNetFF对小尺度目标的检测效果
基于以上结果,本文改进后的算法CenterNetFF不仅减少了原来的CenterNet的误检和漏检情况,还有效解决了小尺度工人的安全帽佩戴情况检测问题。
基于上述实验结果,可以发现和原来的CenterNet以及其它先进的深度学习目标检测算法相比,本文改进后的算法CenterNetFF在真实工作场景下有更好的检测性能,误检和漏检情况都有所改善,在速度方面也能达到实时效果。
本文首先介绍了CenterNet基本原理,简单、快速、精确、不需要做极大值抑制后处理。但是在复杂的工作场景下,检测小尺度工人佩戴安全帽情况仍存在不足。本文提出一种特征融合方法,在CenterNet基础上引入特征金字塔模块、全局引导模块以及特征整合模块。从实验结果可以看出,整体的平均检测精度和平均召回率都有了不同程度的提升,尤其对于小尺度工人的误检情况得到了改善,而且检测速度也基本满足实时性。但是我们可以看到被建筑物遮挡的工人检测效果不好。如何减轻遮挡的问题将是我们下一步的工作重点。