秦 嘉,曹雪虹,焦良葆
(南京工程学院信息与通信工程学院,江苏 南京 211100)
安全帽作为有效的头部防护工具目前已被广泛使用于各类施工现场,但由于施工现场安全管理疏忽、施工人员安全防护意识薄弱等原因,一些因未佩戴安全帽而引发的伤亡事故也频繁发生。因此,实现施工现场安全帽佩戴识别以及对未佩戴安全帽人员进行实时的检测跟踪,对于施工现场的安全防护管理以及智能信息化管理具有重要意义。
近年来,目标检测[1-3]和目标跟踪[4-6]算法已经成为计算机视觉研究领域重要的研究热点之一。其中基于深度学习的目标检测方法有2类,一类是基于候选区域的R-CNN系算法,需要先产生候选区域,然后再在候选区域上做分类与回归;另一类是YOLO(You Only Look Once)和SSD[7]算法,其仅仅使用一个CNN网络直接预测不同目标的类别与位置。相比于第一类算法,第二类算法的检测速度可达到实时检测,但是准确性要低一些。因此为了提高YOLO的准确度,Redmon等[8]在改进YOLO后相继提出了YOLOv2和YOLOv3,在保持速度优势的前提下,提升了预测精度,尤其加强了对小物体的识别能力。
因此本文利用YOLOv3的高精确率和高检测速度的优势,对施工现场的安全帽佩戴情况进行实时检测,并在未佩戴安全帽时输出语音警报:请佩戴安全帽。
如今,目标跟踪算法随着目标检测精度和速度的提高,使得基于目标检测结果的目标跟踪(Tracking By Detection, TBD)方法大热。马永杰等[9]基于YOLOv2的检测结果利用核相关滤波器[10](KCF)对目标进行跟踪;胡超超等[11]采用改进YOLOv2与卡尔曼滤波结合的方法实现多目标跟踪。李晶等[12]采用YOLOv3检测模型提取候选目标的同时结合目标颜色直方特征和局部二值模式直方特征进行目标筛选,实现目标跟踪。
但是由于施工现场环境复杂,施工人员遮挡严重,上述与YOLO目标检测相结合的目标跟踪算法会出现目标ID多次切换的问题,这违背了目标跟踪的目的,出现未佩戴安全帽施工人员重复计数的情况。因此为了解决目标ID切换的问题,本文在卡尔曼滤波跟踪算法[13]的基础上增加KM算法[14]实现前后帧的关联匹配,可以对短时间遮挡的目标进行跟踪。
YOLOv3是目前最先进的目标检测方法之一,它的快速检测满足安全帽佩戴情况检测需要实时检测视频帧的需求,此外,借助了特征金字塔网络(FPN)[15]的多尺度特征融合思想,将3种不同尺度的特征图融合之后单独输出,分别进行目标检测,加强了算法对小目标检测的精确度,因此对于安全帽这种尺寸中等偏小的物体有非常高的精确率。
YOLOv3的整体网络框架主要包括2大部分,如图1所示,第一部分为Darkent-53特征提取网络,第二部分为以Darknet-53为基础的3次采样输出。
YOLOv3以Darknet-53特征提取网络作为基础网络,在YOLOv2的基础上借鉴了Resnet的残差块结构,用以解决随着卷积神经网络层数的增加出现的训练退化现象。Darknet-53网络由DBL模块和RES残差模块组成,DBL是YOLOv3网络的最小组成单元,包括卷积层、归一化层(BN层)和激活函数层。
安全帽佩戴情况检测是基于视频检测的,所以施工人员距离摄像头的距离是多变的,这样造成安全帽在视频帧中的大小不一,为了解决这一问题,YOLOv3吸取了FPN网络中的思想,如图1所示,分别在13×13、26×26和52×52这3种尺度下进行特征图融合与预测,得到3个不同尺度的输出结果Y1、Y2和Y3。
图1 YOLOv3网络结构图
YOLOv3以目标框与聚类中心的交并比作为距离指标,使用K-means聚类算法[16]计算出训练集的anchor box值,用来对预测框的位置进行确定。但是K-means聚类算法中K个初始聚类中心点是随机给定的,不同的初始聚类中心可能导致完全不同的聚类结果,为了使anchor box值覆盖数据集,需要设定合适的初始值。因此本文采用更加稳定的K-means++聚类算法[17]解决这一问题,保证初始聚类中心之间的距离尽可能地远,以提升anchor box值分布的合理性。K个初始聚类中心的给定步骤如下:
1)从数据集X中任选一个节点作为第一个聚类中心。
2)对数据集中的每个点x,计算x到所有已有聚类中心点的距离D(x),基于D(x)采用线性概率公式(1)选择最大概率对应的样本点作为下一个聚类中心。
(1)
3)重复步骤2直到找到K个聚类中心点。
因为本文利用视频帧检测安全帽佩戴情况,随着施工人员与摄像头之间的距离变化,安全帽的大小不一,因此为了提高数据集的覆盖率,本文设置的K值为9,最终获得的anchor box值为:(7,15)、(10,20)、(14,35)、(23,55)、(15,98)、(59,40)、(34,130)、(35,218)、(140,144),聚类结果散点图如图2所示。
图2 聚类结果散点图
FPN与anchor box值之间的关系如表1所示,特征图尺度越大,感受野越小,则分配的先验框越小。
表1 特征图与先验框
YOLOv3利用损失函数[18](Loss function)来评估模型的预测框与真实框之间的差距,通过不断地训练减少这个差距提高模型的性能。主要包括目标的中心点及长宽误差、目标的置信度误差和目标的预测类别误差,如公式(2)所示:
Loss=lxy+lwh+lcls+lconf
(2)
其中,目标的中心点和长宽依旧如YOLOv2一样采用误差平方和损失函数,而置信度误差和预测类别误差采用二元交叉熵损失函数,如公式(3)、公式(4)所示。
(3)
(4)
针对在线视频安全帽佩戴检测中未佩戴安全帽的施工人员跟踪问题,本文采用一种基于TBD的方法,根据YOLOv3的检测结果,结合卡尔曼滤波(Kalman filtering)和KM匹配算法实现多目标跟踪。
卡尔曼滤波是一种高效的自回归滤波器,能在存在诸多不确定性情况的组合信息中估计动态系统的状态。首先预测出当前状态,然后利用误差协方差矩阵计算出当前状态的观测值,再按照公式(5)对该预测值进行校正,得到的校正结果即为当前帧的真实状态。
(5)
选取未佩戴安全帽的标签作为跟踪对象,以其对应的检测框中心点坐标作为跟踪的特征点。具体步骤如下:
1)视频帧经过YOLOv3检测器得到3种目标类别的检测框,根据标签分类获得未佩戴安全帽的检测框。
2)计算出检测框的中心点位置坐标(u,v)、纵横比γ、高度h以及各自在图像坐标中的速度。
3)卡尔曼滤波器把获得的坐标(u,v,γ,h)作为物体状态的直接观测,按照公式计算给出预测目标位置。
4)卡尔曼滤波器更新,进入下一次的目标跟踪。
数据关联部分采用KM算法进行逐帧关联,以目标检测框与目标在当前帧的预测框的IoU值作为KM算法的权重。当IoU[20]小于一定数值时,不认为是同一个目标,本文选取的阈值为0.3。如图3所示,左边为第N帧检测框,右边为第N+1帧预测框,中间连接线为相连检测框的IoU值,左边顶点赋值为相连边的最大权重,右边顶点赋值为0。匹配原则为只和权重与左边顶点赋值相同的边进行匹配,当出现无边匹配或匹配冲突时,对此条路径的所有左边顶点赋值减d,所有右边顶点赋值加d,本文参数d取值为0.1。图中实线即为匹配成功。
图3 数据关联匹配
检测框与预测框的IoU如图4所示,Test box为未佩戴安全帽人员的检测框,Predict box为卡尔曼滤波器给出预测框,检测框与预测框的IoU值由式(6)表示,其中S表示面积,IoU值越接近1表明检测框与预测框的重叠度越高,相关性越强。
(6)
图4 IoU交并比示意图
本文的样本数据由某施工现场监控视频数据和自制视频数据组合而成。一方面为了满足在施工现场下安全帽佩戴检测的适应性,另一方面为了满足外来人员进入施工现场时安全帽佩戴检测的泛化性。如图5所示,首先将采集的视频数据整合后以每10帧提取一幅图片,形成图片数据集;然后由于施工现场采集的视频数据中存在大量无样本时间段,因此本文采用HOG+SVM[21]对图片数据集进行预处理,将无样本的背景图片删除;接着本文通过对挑选出的图片进行旋转处理的手段扩增数据集,用来解决施工人员姿态多变造成的样本数据不足的问题。
图5 训练集制作示意图
将获得的训练集,通过LabelImg软件在样本中标注3类目标,如图6标记操作界面所示,分别是人(person(0)),佩戴安全帽(wear(1))和未佩戴安全帽(nowear(2))。LabelImg软件1.7.0版本以上标注信息保存格式有2种,分别是像素值标注(.xml)和比例标注(.txt)。本文采用.xml格式将标注信息保存在样本文件夹下。
图6 标记操作界面
本文的实验环境为:AMD Ryzen Threadripper 2970WX CPU,NVIDIA TITAN RTX×2 GPU, Ubuntu 18.04 LTS, Keras/Tensorflow深度学习框架。网络模型训练参数部分设定为:动量参数(momentum)为0.9,学习率(Learning_rate)为0.001,权值衰减系数(decay)设置为0.0005,迭代次数为10200次,每迭代一次训练的样本数为32,分4次传递给2个GPU(0,1)单元处理。其中迭代次数如图7损失值收敛曲线所示,从图7可以看出,训练初期损失下降较快,随着迭代次数的增加,在迭代4000次之后损失基本趋于平稳,最后的损失值为0.2左右。
图7 损失曲线
为了使得模型的查准率(precision)和查全率(recall)[22-23]都能达到相对较高的水平,本文通过(0-1)设置不同阈值参数进行模型测试,根据模型测试结果选择出最为合适的参数。图8为未佩戴安全帽的P-R曲线,可以看出模型随着查准率的下降,查全率不断提高,通过不断测试找到彼此的平衡点。查准率和查全率的计算公式如式(7)所示,其中,TP为被正确地划分为正例的个数,FP为被错误地划分为正例的个数,FN为被错误地划分为负例的个数。
(7)
图8 未佩戴安全帽的PR曲线
在应用到施工现场进行实时目标检测前,为了验证本文安全帽佩戴检测模型的性能,首先在同样的实验环境下利用相同的训练样本数据重新训练了SSD、YOLOv2和YOLOv3原网络,得到相应的检测模型,然后在相同测试视频数据上,将其他模型的检测结果与本文模型的检测结果进行对比。
首先从当前施工现场监控视频中挑出各种情况的视频,然后通过视频剪辑软件制作测试视频,接着采用视频分帧方法得到图片测试集,测试集各样本数量如表2所示。
表2 测试集各样本数量
图9 ROC曲线
然后将图片测试集输入各个检测模型,比较检测效果。本文以模型检测的平均精确率(mAP)、检测速度(FPS)以及未佩戴安全帽对应的AUC值作为检测效果的评价指标,结果如表3所示。其中AUC值即为ROC曲线下的面积,本文算法模型针对未佩戴安全帽数据绘制的ROC曲线如图9所示,横坐标为FPR,纵坐标为TPR,计算公式如式(8),其中,TP、FP、FN与上述意思相同,TN即为被正确划分为负例的个数。
(8)
从表3可以看出,YOLOv3算法要比SSD和YOLOv2算法的检测精确度高,但是YOLOv3的anchor box值由K-means聚类算法获得,无法使初始聚类中心合理分布,影响安全帽佩戴检测效果,因此本文算法采用K-means++算法有效地解决了这一问题,选取合适的anchor box值,进一步提高了模型检测效果。
表3 各模型检测结果
利用本文算法训练得到的安全帽佩戴检测模型对施工现场视频数据进行测试的结果如图10所示,从图10可以看出,每个检测框的上方都显示着该检测框对应的名称以及置信度。从检测结果图可以看出,无论是远距离、近距离还是遮挡情况下,本文模型都有很好的检测效果。
(a) 远距离多目标检测
(b) 遮挡情况多目标检测
本文在目标跟踪的同时绘制跟踪轨迹,主要步骤如下:
1)采用对不同的未佩戴安全帽的检测框分配不同跟踪轨迹的方法区分多个跟踪目标。
2)获得未佩戴安全帽检测框,将相应检测框的中心点作为轨迹点组合为跟踪轨迹。
3)对于长时间未检测到追踪目标的情况,设置超过30帧没有识别到该检测目标时放弃该目标并删除轨迹。
图11所示为目标跟踪结果图。图中检测出本文要求的3类目标,并对未佩戴安全帽的人员进行跟踪的同时绘制跟踪轨迹,从图中可看出,手上拿着的安全帽并未成为本文训练模型的干扰项。
图11 目标跟踪结果图
本文提出了一种基于深度学习的安全帽佩戴检测与跟踪方法,数据集由施工现场视频数据与自制视频数据组合而成,YOLOv3网络结构由以Tensorflow为后端的Keras深度学习框架搭建而成,并通过K-means++维度聚类对初始候选框进行改进。实验结果表明,网络模型的检测速度可达45 fps,平均精确度为93%,且未佩戴安全帽的查准率和查全率分别为97%和95%。无论是距离远近、光线强弱和分辨率高低,基于深度学习的目标检测模型与卡尔曼滤波算法以及KM算法结合的安全帽实时检测与跟踪系统都能准确高效地对未佩戴安全帽的施工人员实现定位与跟踪。下一步的工作是研究在实时检测系统中加入人脸检测,当出现未佩戴安全帽情况时,显示相应施工人员的工号与姓名。