面向小目标的YOLOv5安全帽检测算法

2023-07-03 14:12吕宗喆王唯鉴
计算机应用 2023年6期
关键词:安全帽置信度切片

吕宗喆,徐 慧,杨 骁,王 勇,王唯鉴

(1.北京机械工业自动化研究所,北京 100120;2.北自所(北京)科技发展股份有限公司,北京 100120)

0 引言

在建筑业施工、制造业生产过程中,时常存在不同程度的安全隐患威胁着工作人员的人身安全。近5 年来,我国因受物体打击或高处坠落导致的重大安全生产事故占总事故量的近三成[1]。安全帽的主要作用是使工作人员的头部减轻或免受坠落物等外物的伤害,在关键时刻可以拯救工人的生命[2],因此安全帽的佩戴作为保障高危工作人群人身安全的一项重要措施,意义重大。目前,对于厂区安全帽佩戴检测的方法主要有以下几类:人工判定法、基于传感器反馈的方法、基于图像识别处理的方法和基于目标检测的方法[3]。

在图像处理技术没有广泛应用的时期,安全帽的检测主要依靠传感技术实现。Kelm 等[4]设计了一种安装移动射频识别闸门,检测经过闸门工人的个人防护设备的佩戴情况;Dong 等[5]通过安装在安全帽内侧的压力传感器检测工人是否佩戴安全帽,并通过蓝牙传输检测结果,但是蓝牙模块需要定期充电,操作较为繁琐。这些方法对硬件要求较高,穿戴和检测较复杂,同时考虑到工人的健康和隐私,这些技术没有得到推广。

随着图像处理技术的发展,Birchfield[6]使用椭圆形对佩戴安全帽的头部轮廓建模,并在状态空间中搜索是否存在与该形状匹配的区域,可以很好地检测出正面的头部图像,但对于倾斜的头部不能有效检测;刘晓慧等[7]通过肤色检测粗定位佩戴安全帽的头部区域,提取安全帽的Hu 矩阵特征向量并使用支持向量机进行分类;Chiverton[8]在行人检测的基础上,采用方向梯度直方图(Histogram of Oriented Gradient,HOG)、尺度不变特征变换(Scale-Invariant Feature Transform,SIFT)等算法提取行人头部特征,通过手动选取特征进行分类检测。这些方法均需要提取图像特征,对图像清晰度要求较高且计算量庞大,识别精度不高,不适合在复杂的工厂施工环境中使用。

近几年,使用深度学习的目标检测方法在工业领域掀起了热潮。小目标检测一直以来是目标检测技术中的重难点,针对安全帽的目标检测通常使用工业现场采集的低分辨率照片(640×480),目标密集、易出现遮挡且像素点少,属于小目标的范畴。DOIR(Detection,Observation,Identification and Recognition )将大小低于图像高度10%的检测目标或大小低于图像高度的20%的识别目标定义为两类小目标[9]。MSCOCO(MicroSoft Common Objects in COntext)数据集[10]则将像素绝对值小于32×32 的目标定义为小目标。小目标具有特征表达不充分、分辨率低和图像覆盖面积小等特点,检测难度更高。Rawat 等[11]使用红外补丁图像方法,在背景补丁图像中引入总方差正则化项抑制复杂背景;Zhang 等[12]将双向特征金字塔结构引入RetinaNet,利用残余连通的膨胀卷积块充分提取图像低特征层的高分辨率特征。这些方法都是为了保留小目标特征,增强特征表达。

对于小目标安全帽的目标检测算法分为以YOLO(You Only Look Once)系列为代表的单阶段算法和以R-CNN(Region-based Convolutional Neural Network)系列为代表的两阶段算法[13]。王慧[14]在Faster R-CNN 的基础上,使用加性融合函数保留小目标特征,通过在线困难样本挖掘机制挖掘数据集中损失较大的样本,并分批次训练,显著地降低了对安全帽的误检和漏检率,但相较于单阶段算法,检测速度较低。

YOLO 和单点多盒检测器(Single Shot multibox Detector,SSD)是典型的单阶段目标检测算法。李明山等[15]将特征融合的分支网络引入SSD算法,通过可变参数调节先验框大小,提升了安全帽检测的速率和实时性。为了进一步提高检测的准确性,肖体刚等[16]基于YOLOv3 网络,通过增大输入图像的尺度,使用深度可分离卷积的方法减少图像特征的丢失,并使用K-Means 优化先验框,显著地提升了安全帽佩戴检测的准确性。王玲敏等[17]在YOLOv5 基础上引入坐标注意力机制,改善原有的特征金字塔模型,使双向跨尺度连接与加权特征融合更加高效,将小目标的平均检测精度提高到95.9%。

相较于SSD 与YOLOv3 算法,YOLOv5 在检测速度和精确率上均更胜一筹,因此本文采用YOLOv5 作为基础的算法框架。为了对实际场景中小目标安全帽的独特性检测,需要对YOLOv5 的网络结构和微调推理部分进行相应的调整和改进,提高所提算法在复杂密集的场景中对小目标的检测精度。

1 改进的YOLOv5安全帽检测算法

1.1 YOLOv5的网络结构

本文采用的YOLOv5 网络由主干网络Backbone、颈部路径聚合网络(Path Aggregation Network,PANet)和输出Output/Head 这3 个部分组成,网络结构如图1[18]所示。主干网络利用卷积神经网络使不同的图像在细粒度上聚合形成图像特征;颈部网络采用了自顶向下与自底向上联合的特征融合方式,将一系列的图像特征混合并重新组合,再将特征传递到输出层,更好地融合了主干网络提取的多尺度特征[19];输出层根据传递的图像特征预测边界框和类别,通过非极大值抑制(Non-Maximum Suppression,NMS)消除冗余预测框,最终输出置信度最高的预测类别并返回边框坐标。

图1 YOLOv5的网络结构Fig.1 Network structure of YOLOv5

图1 中,Focus 是代码中一个类的名称,它的意思就是集中,这个类的作用是下采样,将宽度和高度信息集中到通道空间中;Conv 是卷积神经网络的一个常用模块;C3 由3 个Conv 模块构成,用来增大网络深度和感受野,提高特征提取能力;空间金字塔池化(Spatial Pyramid Pooling,SPP)用来拼接不同的池化结果,避免图像因裁剪、缩放造成的失真问题;Concat 用来增加特征图的通道数;Upsample 是上采样,用于将图像放大;Conv2d 是二维情况下卷积神经网络的模块;na是预测框数,nc是待预测的类数,均为在算法中定义的变量。

1.2 损失函数的改进

YOLOv5m(You Only Look Once version 5 medium)算法中损失函数由边界框回归损失(bounding box regression loss)、类别预测损失(class prediction loss)和置信度预测损失(confidence prediction loss)这3 个部分组成,其中使用广义交并比损 失(Generalized Intersection over Union Loss,GIoU Loss)函数计算边界框得分(Bounding box score),使用类别预测损失(class prediction loss)计算类别概率得分(Class probability score),使用置信度预测损失函数(confidence prediction loss)计算客观性得分(Objectness score)。

1.2.1 边界框回归损失函数改进

边界框回归损失函数GIoU Loss 计算公式与计算过程中预测框和真实框的关系公式如下:

其中:x、y、w、h表示预测框中心点坐标和预测框的宽度及高度;xgt、ygt、wgt、hgt表示真实框中心点坐标和真实框的宽度及高度。

结合图2 与式(1)~(3),B表示图2 中灰色预测框的大小和位置,Bgt表示图2 中黑色真实框的大小和位置,C表示无论B与Bgt是否相交,同时包含预测框和真实框的最小区域的对角线长度,d表示预测框和真实框中心点连线的长度。B与Bgt之间的距离越远,C值越大[20]。

图2 预测框和真实框的关系Fig.2 Relationship between prediction box and ground truth box

GIoU 虽然解决了在计算交并比(Intersection over Union,IoU)时,若预测框和真实框无重叠梯度消失的问题,但对IoU原本的封闭框十分依赖,需要更多的迭代,所以有时GIoU Loss 不能很好地收敛。如图3 所示,当预测框出现在真实框的内部时且预测框大小一样时,GIou 退化为IoU,导致检测结果不准确[21]。

图3 GIoU退化为IoUFig.3 GIoU degrading into IoU

图4 切片辅助微调的原理Fig.4 Principle of slicing aided fine-tuning

本文参考文献[22]采用完全交并比损失(Complete Intersection over Union Loss,CIoU Loss)代替GIoU Loss 计算边界框的回归损失。CIoU Loss 考虑了边界框横纵比一致性的情况,公式如下:

其中:ρ(·)表示预测框和目标框中心点的欧氏距离,c表示包含两个框的对角线长度,b和bgt表示预测框和真实框的中心点,α是一个正权衡参数,υ用于衡量预测框和目标框横纵比的一致性,wgt/hgt和w/h表示真实框和预测框的宽高比。CIoU使重叠面积因子在回归中具有较高的优先级,可以使预测框有更好的回归效果。

1.2.2 置信度预测损失函数改进

YOLOv5 用于计算置信度预测损失的函数CrossEntropy Loss 包含式(7)中两类损失函数:

该损失函数的输出为(batch,D),batch是样本数,D是类别数,对每个batch所对应的D求Softmax,其中Softmax 的值符合概率分布,它可以确保最终输出的概率总和为1,并且各类别之间是互斥且相互关联的[23-24]。该损失函数一般用于多类别分类问题。

由于本文研究的安全帽检测属于二分类问题,所以CrossEntropy Loss 不再适用。而BCEWithLogitsLoss 则是用于解决单标签二分类或多标签二分类问题的损失函数,更符合本文算法需求,故使用式(8)计算置信度预测损失,它包含两类损失函数:

对每个batch所对应的D值求LSigmoid,两类检测结果中batch所对应的D相互独立。

2 切片辅助微调和切片辅助推理

为了充分表达小目标特征,提高改进后YOLOv5 算法的检测精度,本文在推理与微调过程中,对输入网络的图像进行重叠切片。相较于直接输入网络的图像,这种方法可以使图像中的小目标对象产生较大的像素区域,尽可能地保留小目标的特征,避免因原图像中小目标像素点过少导致特征丢失,同时保留对图像中大目标的检测精度。

2.1 切片辅助微调

微调(fine-tuning)是神经网络应用中最流行的迁移学习策略之一[25]。在深度学习的实践中,由于数据集较小,很少从头开始训练网络。常见的做法是使用预训练的网络重新微调网络参数。

微调就是利用已知的网络结构和训练参数,调整输出层前若干层的参数,达到初始化网络的目的。这个过程有效利用了深度神经网络强大的泛化能力,又免去了复杂的模型设计和耗时良久的训练,所以微调是当数据量较少时的一个比较合适的选择[26]。

当前广泛使用的检测对象框架,如Detectron2(https://github.com/facebookresearch/detectron2)、MMDetection[27]和YOLOv5,均使用大型数据集ImageNet 或MSCOCO 进行预训练,并提供预训练权重,因此本文在训练自己的网络时只需要构建较小的数据集,花费更短的训练周期,在预训练的基础上微调网络权重,不需要重新使用大型的数据集进行训练,同时使用切片的方式辅助这一过程。

切片辅助微调随着切片尺寸(patch size)的减小,使切片无法覆盖大目标的图像区域,这可能导致对大物体的检测性能变差;因此,采用切片辅助推理(Slicing Aided Hyper Inference,SAHI)的方法解决微调过程中出现的问题。

2.2 切片辅助推理

如图5 所示,将原始输入图像I分割为l个p×q的重叠切片(上标I 表示推理(Inference)),在保持宽高比不变的基础上调整patch 的大小,单独对每个重叠切片应用目标检测的正向传递对小目标进行推理;同时使用原始图像的可选全推理(Full Inference,FI)检测大目标,最终使用NMS 将两类预测结果合并为原始图像。在NMS 的过程中,通过遍历所有的检测框,计算各检测框与当前置信度最高的检测框之间的交并比,把交并比值大于一定阈值Tm或置信度低于一定阈值Td的检测框都剔除,最终得到目标预测框。Tm是交并比的最大阈值,Td是置信度的最低阈值。

图5 切片辅助推理的原理Fig.5 Principle of slicing aided hyper inference

3 安全帽检测算法的网络训练

3.1 数据集选用

本文使用的是安全帽佩戴检测数据集Safety Helmet Wearing-Dataset(https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset)。该数据集包含7 581 张图像,其中有9 044 个佩戴安全帽的对象(positive)和111 514 个未佩戴安全帽的对象(negative)。本文将该数据集标注文件的VOC格式通过编写脚本的方式批量转化为YOLO 格式,方便训练YOLOv5 算法。标注文件的内容包括类别序号0、1 和目标位置的边框坐标,其中0 代表hat,即佩戴安全帽;1 代表person,即未佩戴安全帽。同时编写脚本,按7∶2∶1 随机将该数据集划分为训练集、测试集和验证集,训练集包含5 457 张图像,测试集包含1 517 张,验证集包含607 张。

3.2 实验设置

本次实验在Windows 10 操作系统上进行,CPU 为12th Gen Intel Core i9-12900KF 3.19 GHz,GPU 为12 GB显存的NVIDIA GeForce RTX 3080Ti,深度学习框架选择PyTorch1.9.0。

为了有更好的检测效果,本文实验预训练权重选择YOLOv5m,由于使用VOC2028 数据集,实验超参文件为hyp.finetune.yaml。实验使用YOLOv5 中自带的Mosaic 数据增强方法,实验的关键超参数如表1 所示。

表1 实验关键超参数Tab.1 Key hyperparameters in experiments

3.3 实验衡量指标

实验中对真实情况和预测情况的分类如表2 所示,其中真正例TP(True Positive)代表真实情况与预测情况均为正例,假正例FP(Flase Positive)代表真实为反例而预测为正例,假反例FN(Flase Negative)代表真实情况为正例而预测为反例,真反例TN(True Negative)代表真实情况与预测情况均为反例。

表2 真实情况和预测情况的分类Tab.2 Classification of real and prediction situations

本文实验采用的衡量指标包括精确率(Precision,P)、召回率(Recall,R)和平均精确率均值(mean Average Precision,mAP)。P 是预测出的真正正例在预测出的所有正例中所占比例;召回率R 是指预测出的真正正例在所有真实正例中所占比例;平均精确率(Average Precision,AP)是对精确率-召回率曲线(PR 曲线)和坐标轴之间所包围的面积上的Precision 值求平均值,一般使用积分法计算,mAP 则是对每一个检测的类别计算出的AP 值求平均值,一般以IoU=0.5计算mAP 的值,即mAP_0.5。以上指标的计算公式如下:

其中:S为检测的类别数,本文实验的S为2;(VAP)i代表第i个类别的精确率。

3.4 训练结果

实验中将修改损失函数后的算法与原始YOLOv5m 算法在相同的实验条件下分别训练300 轮,数据集分析效果如图6 所示。图6(a)表明数据集中包含的hat 类别与person 类别的数量,图6(b)表明训练的图片中标注出的hat 与person锚框的宽度与高度,图6(c)表明训练的图片中标注出的hat与person 锚框中心点的坐标。

图6 数据集分析效果Fig.6 Dataset analysis rendering

改进后的算法在制作好的训练集上训练300 轮后的效果如图7 所示。图7(a)是IoU 阈值为0.5 时平均精确率曲线,图7(b)是IoU 阈值从0.50~0.95,步长为0.05 时的平均精确率曲线。可以观察到,在训练前65 轮过程中模型迅速收敛,100 轮之后mAP 值趋于稳定,且模型没有出现欠拟合和过拟合现象,训练效果比较理想。

图7 改进损失函数后算法训练效果Fig.7 Algorithm training performance after improving loss function

3.5 消融实验

为了进一步验证改进后算法的训练效果,设计如下消融实验。原始YOLOv5m 使用的是组合1(CrossEntropyLoss+GIoULoss)对Bounding box score 和Objectness score 进行计算,本文以此为基础分别改进两类损失函数,设计组合2(CrossEntroyLoss+CIoULoss)、组 合3(BCEWithLogitsLoss+GIoULoss)和组合4(BCEWithLogitsLoss+CIoULoss)这3 组消融实验。在相同训练集下训练网络,以精确率(P)、召回率(R)和平均精确率(mAP)作为评估指标,实验结果如表3所示。

表3 消融实验结果对比 单位:%Tab.3 Comparison of ablation experimental results unit:%

从表3 中可以看出,相较于原始YOLOv5m,分别引入两类损失函数之后,算法的精确率和召回率都有一定的提升,将两种损失函数同时融入后,精确率提升了0.26 个百分点,召回率提升了0.38 个百分点,平均精确率提升了0.46 个百分点,表明将两种损失函数融合后得到了最佳的优化算法模型。

3.6 不同算法性能对比

为了进一步验证本文算法改进的有效性,现将本文算法与引入特征融合的SSD 算法[15]、使用深度可分离卷积的YOLOv3 算法[16]、增加浅层特征图的YOLOv5 算法[20]和原始YOLOv5 算法在同一测试集下进行测试,各项性能指标对比结果如表4 所示。其中文献[20]中使用防毒面具数据集训练了网络,对于防毒面具的检测结果会更高,但对本文检测安全帽的结果上并不比原始YOLOv5 算法好。从表4 中可以看出,本文算法对小目标安全帽的检测性能更好,hat 与person 的AP 值相较于其他4 种算法均有一定提升,mAP 达到95.77%,相较于对比算法提高了0.46~13.27 个百分点,训练结果比较理想,说明了本文算法的可行性。

表4 不同算法性能对比 单位:%Tab.4 Performance comparison of different algorithms unit:%

4 算法检测结果与对比分析

使用上文中修改了两种损失函数(BCEWithLogitsLoss+CIoULoss)后训练的算法模型和在原有YOLOv5m 权重上进行训练的算法模型分别对图像进行检测,之后在进行切片辅助推理及微调的基础上再次对这些图像进行检测。

为了检验优化后的算法在不同场景下的检测效果,根据距离越远检测难度越大的特点,本实验将检测图像分为近距离聚集小目标、中距离聚集小目标和中远距离小目标三类。

4.1 仅修改损失函数的检测效果

实验在安全帽数据集上的检测结果如图8 所示。其中在未进行切片辅助推理及微调前,对比检测结果如图8(a)和图8(b)。可以看出,相较于图8(a),图8(b)中目标的检测结果均有所提升,置信度更高。其中图8(b)在近距离聚集小目标的检测上纠正了误检的结果,最左侧的保安头戴鸭舌帽,在原检测结果中会被误检为佩戴安全帽的目标,而优化后的算法则可以将它与佩戴安全帽的目标进行区分;对于检测难度较大的中距离聚集目标,图8(b)的检测结果说明优化后的算法仍然具有很好的识别能力,且识别结果更加精确;但对于检测难度最大的中远距离小目标,虽然图8(b)在精度上有所提升,但仍然存在漏检的情况,且检测结果中出现了低于0.5 的置信度,检测结果不完全可靠。。

4.2 使用切片辅助推理及微调

为了更进一步提高算法对小目标的检测精度,改善漏检的问题,本节在修改损失函数的基础上,通过切片辅助推理及微调对相同的测试图像进行检测,检测结果如图8(c)所示。图8(c)为修改两类损失函数的同时进行切片辅助推理及微调后对三种不同距离目标的检测效果。相较于图8(a)(b),图8(c)中对于小目标的检测精确率再次提高。其中图8(c)中对于近距离和中距离小目标的检测置信度明显提升,检测难度最大的中远距离小目标中检测出了7 个小目标,相较于图8(a)(b)中只检测出的5 个以下小目标,进一步减少了远距离小像素目标的漏检情况,置信度也更高。以上实验结果表明,相较于原始YOLOv5m 算法,修改两类损失函数可以改善安全帽检测中误检的问题,使近距离和中距离密集小目标的检测结果更加精确;使用切片辅助推理及微调可以改善安全帽检测中漏检的问题,即对于远距离小目标的识别更加精确。将两类优化方法结合后的算法,在3 种检测场景下的检测精度、误检和漏检的情况均有一定改善,表明本文设计的目标检测器在密集小目标和远距离小目标的检测场景下泛化能力更强。

5 结语

针对工地场景下安全帽检测过程中,密集小像素目标存在漏检误检的情况,本文基于YOLOv5m 算法,通过修改计算边界框回归、置信度预测损失函数和使用切片辅助微调及推理,与原始算法相比,提升了训练过程的平均精确度和检测过程的置信度,减少了误检漏检的情况,提高了密集小目标场景下的泛化能力。改进后的算法能够集成到一个完整的安全检查框架中,可广泛部署于各类生产现场,具有较强的应用推广价值。接下来将进一步整理本文算法结构,使它能够安全可靠地应用在实际工厂场景的安全帽检测工作中。

猜你喜欢
安全帽置信度切片
小小安全帽,生命保护伞
硼铝复合材料硼含量置信度临界安全分析研究
爆笑四格
正负关联规则两级置信度阈值设置方法
基于SDN与NFV的网络切片架构
肾穿刺组织冷冻切片技术的改进方法
置信度条件下轴承寿命的可靠度分析
冰冻切片、快速石蜡切片在中枢神经系统肿瘤诊断中的应用价值比较
肤色检测和Hu矩在安全帽识别中的应用
班长的“安全帽”