王建波,武友新
南昌大学 数学与计算机学院,南昌 330000
随着我国经济的发展和城镇化道路的建设,城市建筑行业涌入了大量的农民工人员。国家统计局2022年2月发布的统计数据显示,全国农民工总量2亿9 251万人。全年各类生产安全事故共死亡26 307人[1]。在建筑行业,规范佩戴安全帽十分重要,遇到突发情况时能有效地保护施工人员,仅靠人为方式监督工人是否规范佩戴安全帽效率低下。为此,采用机器视觉的方式去检测工人安全帽佩戴状况是具有研究意义及应用价值的。
利用机器视觉技术检测施工人员是否佩戴安全帽属于目标检测类的问题。目标检测是一种对图像或视频中的特定对象进行定位和分类的任务,在神经网络崛起之前,目标检测器都是通过人为方式来设计特征提取器,比如直方图梯度(histogram of oriented gradient,HOG)[2]、Viola-Jones检测器[3]等。这些模型速度慢,准确率低,泛化性能差,被应用得并不多。2012年,Krizhevsky等人[4]在图像识别大赛上将卷积神经网络(convolutional neural network,CNN)应用于图像领域,并取得了全面超越传统算法的性能,极大地推动了深度学习在图像领域的发展。此后很多学者以深度学习技术为基础,构建出不少优秀的目标检测算法[5-7]。
近几年有一些学者利用机器视觉技术进行安全帽识别。例如,刘晓慧等人[8]先使用肤色检测定位人脸区域,获取脸部以上区域图像,再使用SVM 进行分类,得出图像是否含有安全帽。徐守坤等人[9]使用Faster R-CNN结合多尺度训练,增强模型对不同大小目标的鲁棒性,实现安全帽检测。肖体刚等人[10]使用深度可分离卷积对YOLOv3 主干网络进行轻量化,减少模型参数量,提升安全帽检测速度。这些方法虽然都进行了算法的优化,但仍然存在着参数量大、所需算力大、检测速度慢等问题。并且采用深度可分离替换主干网络中的原始卷积的做法,会导致无法采用在大规模数据集上预训练的模型权值,进而需要从头训练整个网络。
本文提出基于改进YOLOv4-tiny 的轻量级安全帽检测算法,并针对小目标漏检过多等问题进行优化,在安全帽数据集上验证了所提方法的有效性。
YOLOv4-tiny 是YOLOv4 的轻量化模型,相比YOLOv4,虽然精度不足,但参数量仅为YOLOv4的1/10,并且计算速度是YOLOv4 的5 倍,这使得tiny 模型更加适用于计算资源有限、存储空间不够充足的边缘设备。
YOLOv4-tiny 网络结构如图1 所示,由主干网络(backbone)、特征融合网络(feature pyramid networks,FPN)、预测头(YOLO head)三部分组成。其特征提取网络是新一代目标检测骨干网CSPDarknet53 的缩减版。特征融合部分将经过特征提取网络得到的高级语义特征图进行语义融合,相比于YOLOv4,YOLOv4-tiny只使用P4、P5两个尺度的输出。因此,特征融合部分也比较简单,采用FPN网络的思想,将P5经过一次卷积后再二倍上采样,与P4 进行通道拼接,丰富P4 的语义信息。预测头部分,沿用了传统的YOLO预测算法计算分类损失与回归损失。
图1 YOLOv4-tiny结构图Fig.1 YOLOv4-tiny structure diagram
卷积神经网络中的注意力机制作为一种特征建模的手段,在本质上可以看作对特征图进行重加权,让具有不同语义信息的特征具有不同权重,从而抑制背景信息,使得网络聚焦于特定区域。由于注意力机制的便捷性和有效性,近几年对注意力机制的研究层出不穷。胡杰等人[11]在ImageNet 2017 图像分类大赛中提出SE(squeeze-and-excitation)通道注意力。SE注意力使用全局平均池化(global average pooling,GAP)将特征图压缩到通道维度,再使用全连接层计算每个通道的权重。Qin等人[12]证明了GAP是离散余弦变换(discrete cosine transform,DCT)的最低频率分量,指出仅使用GAP作为通道注意力的降维方式会造成大量语义丢失,并且提出了一种多频谱通道注意力(multi-spectral channel attention,MSCA)。MSCA 不仅使用了GAP 所含有的信息,也使用了其他频域的信息,MSCA 模块与SE 模块的具体对比如图2所示。首先,将输入X沿着通道维度平均划分成n块,记为[x0,x1,…,xn-1]。然后为每个块分配二维DCT分量,具体计算如式(1)所示:
图2 模块对比示意图Fig.2 Module comparison diagram
这里,DCTi表示xi对应的频率分量,Concat 表示按通道维度拼接,F表示全连接层,Xout表示输入X经过MSCA模块的输出。
目前对注意力机制的研究主要从通道、空间和频域三个方向开展。SE注意力仅考虑了在通道维度对输入信息进行建模得到注意力权重。MSCA 注意力虽然同时考虑了通道与频域两个维度的建模信息,但没有利用空间维度的信息,在一定程度上会丢失空间信息。为解决该问题,本文将空间维度融入MSCA 中,有效增强注意力模块捕获上下文以及空间信息的能力。MSCA 可以看作SE 通道注意力的变体,因此本文借鉴CBAM(convolutional block attention module)[13]模块的思想将空间维度融入MSCA中得到新的注意力模块MSCBAM(multi-spectral convolutional block attention module),其结构如图3所示。
图3 MSCBAM结构图Fig.3 MSCBAM structure diagram
输入的特征图向量进入MACBAM模块中,先通过MSCA模块得到通道注意力权重FC,具体运算如式(2)所示:
经过MSCA 模块后的特征图向量进入空间注意力模块得到空间注意力权重FS,具体计算如式(3)所示:
对于输入张量X∈RC×H×W,C、H、W分别代表通道数、宽以及高度,式(2)中δ表示Sigmoid非线性激活,MLP 表示全连接层操作,DCT 表示选取二维DCT 分量,式(3)中Conv 表示空间注意力中的卷积操作。AvgPool 和MaxPool 分别代表平均池化和最大池化操作。
YOLOv4-tiny 的特征融合网络使用的是自底向上的FPN,为充分利用多级特征图所蕴含的语义信息,可以将FPN替换为更加有效的融合方式。YOLOv4中的特征融合方式为路径聚合网络(path aggregation network,PAN),YOLOv5中使用的是CSP-PAN,但直接将PAN或者CSP-PAN 引入YOLOv4-tiny 中会使得网络参数大幅度上升,模型检测速度显著降低。
为此,在PAN 的基础上,本文设计了一种轻量级的特征融合网络Shuffle-PAN,在不显著增加网络参数量的条件下,实现了更加有效的特征融合。特征融合模块中,在将相邻特征图按通道维度融合之后,容易造成语义混叠,不利于网络学习,因此在特征融合操作之后需要使用卷积进行特征的重提取。这一部分在YOLOv4中采用的是五次卷积,YOLOv5 中采用的是CSP(cross stage partial)模块。本文采用的是由Shuffle卷积[14]构建的Shuffle Unit,具体结构如图4 所示。Shuffle-PAN 在相邻尺度的特征图拼接之后使用Shuffle Unit进行信息融合。表1 展示了Shuffle-PAN 与其他特征融合网络的参数量对比,可以看到为YOLOv4 这种大模型设计的PAN直接引入轻量级模型中,参数量会显著增加。而本文设计的Shuffle-PAN 模块增加的参数量是最小的,适合用在轻量级模型中。
图4 Shuffle Unit结构图Fig.4 Shuffle Unit structure diagram
表1 特征融合模块对比Table 1 Feature fusion module comparison
传统的YOLO Head 采取的都是耦合头部(coupled head),即在网络的输出端采用同一个卷积完成分类与定位的任务。文献[15-16]指出,在目标检测任务中,分类和回归任务之间是存在冲突的,采用耦合头进行分类与回归任务很可能会降低模型的性能。YOLOX算法首次将解耦头应用于YOLO 算法中,并取得了显著的成效。为此,本文用解耦头(decoupled head,DCHead)替换YOLOv4-tiny模型中的原耦合头,以缓解这种冲突的负面影响。图5 展示了耦合头与解耦头的区别。解耦的预测头先使用1×1 卷积将特征融合网络输出的P3、P4、P5 三个不同维度的特征图都映射成统一的通道数。随后再使用两个并行分支,每个分支增加了两个3×3 的卷积层分别用于分类与回归任务。这样就将两个任务解耦合了,避免了两个任务之间的不协调性。为避免参数增加过多,每个分支增加的3×3卷积采用的是深度可分离卷积。
图5 耦合头与解耦头的区别Fig.5 Difference between coupled head and decoupled head
YOLOv4-tiny 算法虽然是目前主流的轻量级目标检测算法,但是仍然存在不足之处。同时为了方便使用大规模数据集上的预训练模型权值进行迁移学习,只对网络的融合部分以及预测头部分进行改进。
具体做法为,在增加检测小物体尺度的基础上,结合前面章节所提出的模块,对YOLOv4-tiny算法进行增强,将得到的算法命名为HM-YOLO。HM-YOLO 网络结构如图6 所示,HM-YOLO 在19×19、38×38、76×76 三个不同尺度的特征图上进行目标物体预测。特征融合部分使用了第2.2 节提出的Shuffle-PAN 模块,并将第2.3 节提出的优化的注意力模块融入网络中,使网络能更好地捕获输入图像的目标区域。同时,对YOLO Head 部分进行了重构,原YOLOv4-tiny 算法在Head 部分使用一个3×3卷积和1×1卷积这种耦合的预测头,并且3×3 卷积对应的输出通道数为512,大于输入通道数。本文认为对于安全帽检测这种只有两类检测对象的任务,在Head 部分使用通道数上升的3×3 卷积是没有必要的,会产生冗余参数。因此将预测头部分替换为深度可分离卷积搭建的解耦头,在预测头的输入端利用1×1 卷积将输入通道数统一调整为128,随后使用解耦头的两个并行分支进行分类与回归任务,降低模型参数量的同时,也加强了模型的预测性能。
图6 HM-YOLO结构图Fig.6 HM-YOLO structure diagram
在安全帽佩戴检测方面,公开的数据集有SHWD(safety helmet wearing datasets)。SHWD 数据集样本分为两类“hat”和“person”,表示目标是否佩戴安全帽。但是SHWD数据集中未佩戴安全帽的图像有相当一部分来自SCUT-HEAD[17]数据集,该数据集是一个人头检测的数据集,其中的图像来源于教室场景下的监控数据,不适合作为安全帽检测任务的负样本。为此剔除了SHWD数据集中这些不合理的图像,并且补充了工地场景下正样本的数量,最终得到的数据集有6 538张图片,以8∶2 的比例划分训练集和测试集。数据集标注情况如表2 所示,其中包含佩戴安全帽的对象11 780 个,未佩戴安全帽的对象45 218个,共56 998个标注对象。
表2 数据集标注数量Table 2 Number of annotations in dataset
采用COCO数据集标准按照目标大小进行分类,各类目标数量如表3所示。可以看到,在训练集和测试集中小目标的数量均是最多的,分别占据了总目标数量的41.0%、43.4%。
表3 数据集中目标数量Table 3 Number of object in dataset
3.2.1 实验设置
训练安全帽数据集时,网络输入的图片大小固定为608×608,采用随机水平翻转和亮度调节进行实时数据增强,增加样本多样性,防止模型过拟合。选用Adam优化器,权重衰减设置为5E-4。批处理大小为8,训练时加载YOLOv4-tiny 的COCO 预训练权重以加快模型收敛,初始学习率为5E-4,学习率衰减比例为0.94。本文所有实验均在同一环境下进行,操作系统为Windows10,CPU 型号为Intel®CoreTMi5-9400 CPU@2.90 GHz,GPU 型号为NVIDIA GeForce GTX 1660Ti,显存大小为6 GB,内存大小为16 GB。模型基于Pytorch1.7.1 框架,使用cuDNN进行加速训练。
3.2.2 评价指标
为了评估算法性能,本文采用mAP、FPS 和模型参数量三个指标评价模型的精度、速度以及大小。mAP是由所有类别的平均精度(AP)取均值得到的,而每个类别的AP 是指不同召回率下精确度的平均值。AP 计算如式(5)所示,mAP 计算如式(6)所示,FPS 计算如式(7)所示。
其中,TP表示检测结果为正的正样本,FP表示检测结果为正的负样本,r表示所有召回率的可能取值,SUM表示总类别数。
其中,fn表示检测的图片总数,T表示所用的总时间。
3.2.3 实验结果与分析
对HM-YOLO 和YOLOv4-tiny 算法在测试集上的准确率与召回率进行评价,绘制P-R曲线如图7所示。
图7 两种算法的P-R曲线Fig.7 P-R curves of two algorithms
为了验证HM-YOLO的有效性,将HM-YOLO算法与主流的RFBNet、YOLOv4-tiny、MobileNetv3-YOLOv4、Ghost-YOLOv5s以及最新的YOLOX-s等通用改进模型进行对比。同时选取安全帽检测问题的研究工作[18-19],根据文献中所提的改进点搭建了改进的模型,并与本文模型进行了对比,表4 展示了各算法的性能对比结果。由表4中可以看出,与主流检测器RFBNet、YOLOv4-tiny、MobileNetv3-YOLOv4、Ghost-YOLOv5s相比,HM-YOLO算法的平均检测精度分别提升了13.45个百分点、14.20个百分点、7.2 个百分点、2.68 个百分点;与最新的单阶段检测器YOLOX-s相比,平均精度略低,但是在未规范佩戴安全帽的类别上,HM-YOLO算法的结果取得了比YOLOX-s 更高的精度。与文献[18-19]相比,佩戴安全帽类别精度略低,但是未佩戴安全帽的类别取得了最高精度。这说明了HM-YOLO 算法在检测精度上达到了现有算法的先进水平。
表4 主流算法性能对比Table 4 Performance comparison of mainstream algorithms
同时模型检测速度与模型大小也是非常重要的指标,决定了模型能否很好地应用于实际场景下。可以看到HM-YOLO算法的检测速度与表4中各算法相比,仅次于最快的YOLOv4-tiny,而相较于其他算法均有较大的提升。与YOLOv4-tiny相比,虽然速度下降了12 FPS,但是仍然满足大多数工业场景下实时性的要求。同时HM-YOLO模型参数量最少,仅为YOLOX-s、文献[18]、文献[19]的53%、67%、66%,对于部署在空间有限的边缘设备上更加友好。
3.2.4 改进过程的对比实验
本文通过消融实验验证所提各方法的有效性,具体结果如表5 所示。可以看到,YOLOv4-tiny 在增加了76×76 的检测尺度P3 后,检测精度显著提升。分析认为,这是由于安全帽数据集中含有较多的小目标,仅在19×19、38×38 两个尺度上进行预测会导致模型易忽略小目标,增加了76×76尺度的P3后,模型对小目标检测能力显著提升,能更好地完成安全帽佩戴检测任务。同时将模型预测头替换为更加轻量级的DCHead,模型参数量有了显著的降低。并将模型特征融合部分替换为Shuffle-PAN 且融入MSCBAM 注意力模块后得到HM-YOLO 算法,模型平均精度达到92.82%,在精度方面仅比YOLOX-s相差不到1个百分点。
表5 消融实验Table 5 Ablation experiments
为了验证改进后的注意力模块的有效性,本文做了一组注意力模块的横向对比实验。以引入了解耦头和轻量级特征融合模块的模型为基础模型,分别融入SE、CBAM、MSCA 与MSCBAM 在安全帽数据集上进行实验对比。从表6中可以看到,融入不同注意力均能提升模型精度,而同时利用通道频率信息与空间信息的MSCBAM 模块取得了最佳精度,充分验证了该注意力模块在安全帽检测任务中的有效性。
为了更直观地感受HM-YOLO算法的效果,选取了几张密集场景和光照欠佳等复杂场景的图片进行检测效果对比,检测结果如图8 和图9 所示。可以看到,HM-YOLO算法在密集遮挡场景下能检测出更多目标,具有更高的召回率。且在光线不好的情况下,HM-YOLO算法对物体的检测置信度均高于YOLOv4-tiny 算法。说明本文提出的HM-YOLO 算法在精度和稳定性方面都超过了原算法。
图8 HM-YOLO检测结果Fig.8 HM-YOLO test results
图9 YOLOv4-tiny检测结果Fig.9 YOLOv4-tiny test results
为了定量分析HM-YOLO在复杂场景下的性能,从测试集数据中选取了100 张复杂场景下的图片进行mAP 评估,评估结果如表7 所示。可以看到,在复杂场景下,各算法精度与整个测试集精度相比,均有所下降。其中HM-YOLO、YOLOX-s 算法在复杂场景下精度下降最少,分别只下降了0.50 个百分点、0.44 个百分点,说明模型的鲁棒性更好,能更好地应对复杂环境下的检测任务。
表7 复杂场景精度对比Table 7 Performance comparison in complex background
本文针对安全帽佩戴检测任务,使用YOLOv4-tiny模型作为基准,增加检测小目标的尺度,解决小目标丢失过多问题;将本文所提的轻量级特征融合模型与注意力模块融入YOLOv4-tiny 中,增强模型的学习能力;并将预测头解耦,缓解分类与回归任务之间的冲突,得到轻量级HM-YOLO模型。实验表明,HM-YOLO算法能较好地完成安全帽佩戴检测任务,检测mAP达92.82%,检测速度达63 FPS,且模型参数量仅为4.79×106,更加适用于资源有限的边缘设备和移动设备。
目前训练模型仍然需要大量的标注样本,在很多情况下,对大量样本进行标注是费时费力的。因此,下一步工作是研究半监督学习,通过少量标注样本达到较好的训练效果。