基于人体关键点和YOLOv4的吸烟行为检测
2022-06-07姜晓凤王保栋夏英杰李金屏
姜晓凤,王保栋,夏英杰,李金屏
(济南大学 信息科学与工程学院,山东 济南 250022;山东省网络环境智能计算技术重点实验室(济南大学), 山东 济南 250022;山东省“十三五”高校信息处理与认知计算重点实验室(济南大学),山东 济南 250022)
吸烟对自己和他人的身体健康会造成很大危害,同时吸烟也会污染环境,稍有不慎还会引发火灾。因此,吸烟行为检测得到学者越来越多的重视。公共场所吸烟行为检测的方法主要分为基于传感器和基于视觉的吸烟行为检测。基于传感器的吸烟行为检测方法主要通过烟雾传感器、可穿戴传感器[1]等。但是,由于香烟烟雾易扩散,容易受到环境的干扰,烟雾传感器很难适用于公共场所吸烟行为检测,而可穿戴传感器一般只适用于主动戒烟人群。因此,基于计算机视觉的吸烟行为检测得到越来越多的关注,主要方法分为基于传统算法和基于深度学习的吸烟行为检测。
传统算法的吸烟行为检测主要从香烟烟雾方面考虑,利用烟雾的颜色特征和变化特征进行分析,如汪祖云等利用香烟烟雾在HSV颜色空间下特有的颜色特征实现对疑似烟雾区域的定位,分析烟雾的面积变化速率特征和质心相对角度正弦变化特征,对烟雾进行检测[2]。但在实际场景中,颜色很容易受到环境的影响,此方法只能针对特定场景下的吸烟行为检测。
近年来,深度学习已经广泛应用到各学科领域[3-5],因此部分学者利用深度学习来检测人体吸烟行为。一些学者发现吸烟行为从点燃烟到吸入烟再到呼出烟的过程中,手部到嘴部的距离是有节奏、有规律的,一段时间内的这种过程可以认定为一个吸烟周期,将人体吸烟行为检测转化为基于深度学习的人体姿态估计问题来解决。刘婧等利用人体关节点信息,关注关节点的运动轨迹,检测运动轨迹是否符合周期性规律进行吸烟动作识别[6]。由于吸烟行为和其他行为(如吃饭、打电话)存在一定的相似性,因此当图像中的手部动作不清晰或不完整时,很难准确地检测出吸烟行为。也有一些学者将吸烟行为检测转化为基于深度学习的烟头目标检测问题来解决。其中,一类方法是首先找到图片中人脸区域,在人脸区域找到烟头,判断是否存在吸烟行为,如李倩等将检测到的人脸图片作为烟支检测区域,利用Faster R-CNN算法对初步判断可能存在烟支的图像进行烟支目标检测并判断是否存在吸烟行为[7-8];另一类方法是直接目标定位嘴部,检测嘴部区域是否存在香烟烟头,判断是否存在吸烟行为,如马晓菲通过神经网络算法和回归树方法快速定位嘴部区域,采用残差网络对感兴趣区(region of interest,ROI)内目标进行检测和状态识别进而判断出吸烟行为[9]。但是,目标检测算法检测烟头极易识别出错,并不能很好地检测出吸烟行为,如图1所示,图中手持为粉笔错误检测为香烟。
图1 目标检测烟头误报示例
因此,本文提出了一种基于人体关键点和YOLOv4的吸烟行为检测方法,在利用深度学习对烟头进行目标检测的基础上,加入人体关键点检测,通过计算距离、角度、时间周期判断吸烟动作是否发生。
1 算法设计
由于烟头目标较小,用目标检测算法检测香烟识别准确率不高。通过对吸烟行为的大量观察,发现人在吸烟时,手部运动轨迹存在一定的周期性,因此本文在利用深度学习对烟头进行目标检测的基础上,加入人体动作信息综合判断是否存在吸烟行为。
本文方法首先获取视频每帧图像中的人体和人脸关键点;其次基于每个人的关键点位置找到手部的位置,计算出手部到嘴部的距离、手-肘-肩膀之间的角度、吸烟的时间周期,建立吸烟行为检测判别模型,判断是否有吸烟动作;然后利用YOLOv4检测图像中是否存在香烟烟头;最后结合以上两方面,当人们的行为满足吸烟动作规则和图像中存在香烟烟头时,判断人们存在吸烟行为。本文方法流程图如图2所示。
图2 吸烟检测整体流程图
1.1 关键点检测
人体的日常行为通常以人体某个点为基础带动动作发生,因此找到人体各个部位的关键点是检测吸烟动作的前提。通过对现有姿态估计方法的研究发现,在人体关键点检测方面,AlphaPose采用自顶向下的方法能及时准确地检测到人体关键点;在人脸关键点检测方面,RetinaFace采用MobilenetV1-0.25和Resnet两种网络作为主干特征提取网络,其中MobilenetV1-0.25可以在CPU上实现实时检测,Resnet可以实现更高的精度。基于上述分析,本文利用AlphaPose获得14个人体关键点的位置信息,主要利用的关键点有右(左)手腕、右(左)手肘、右(左)脚、右(左)肩膀,如图3a所示。由于手与手腕、肘的斜率相同,调查发现吸烟时手弯曲的长度占胳膊长度的0.4,按照0.4的比例计算得到右(左)手坐标值。利用RetinaFace检测出图像中人脸5个关键点,分别是左眼、右眼、鼻子、左嘴角、右嘴角,如图3b所示。将AlphaPose和RetinaFace两个模型进行结合,得到每一帧图像中人体人脸关键点,如图3c所示。
图3 关键点显示
1.2 基于人体关键点的吸烟行为检测
通过日常对吸烟行为的大量观察发现,吸烟动作存在一定规律。在一个人吸烟行为的开始阶段,其手部慢慢靠近嘴部,手部与嘴部的距离越来越近;在吸烟行为的过程阶段,其手部会在嘴部停留片刻,手部与嘴部的距离保持不变;在吸烟行为的结束阶段,其手部慢慢远离嘴部,手部与嘴部的距离越来越远。在吸烟过程中,吸烟动作反复呈现上述规律直到停止吸烟,因此选择手部与嘴部的距离作为吸烟行为的基本特征之一。
利用AlphaPose和RetinaFace获得人体关键点的位置信息,通过手部与嘴部位置坐标,计算手部与嘴部中心之间的距离,即
(1)
式中:(x1,y1)表示手部位置坐标;(x2,y2)表示嘴部位置坐标。
由于不同人的行为习惯不同,拿香烟的惯用手选择也会不同,故并行判断左(右)手与嘴部的位置关系。
在不同场景中,整个人体在图像中的大小不同,手部与嘴部之间的距离会随着人体在图像中的大小而有所不同,因此对手部与嘴部之间的距离d用比值的方法进行归一化处理,
(2)
式中:e表示手部与嘴部之间的距离归一化后的数值;d表示手部与嘴部之间的距离;h表示人体的高度。
此外,吸烟动作在角度特征上也存在一定的规律性。在一个人吸烟行为的开始阶段,其手部慢慢靠近嘴部,手-肘-肩膀之间的角度会越来越小;在吸烟行为的过程阶段,其手部会在嘴部停留片刻,手-肘-肩膀之间的角度保持不变;在吸烟行为的结束阶段,其手部慢慢远离嘴部,手-肘-肩膀之间的角度越来越大。在吸烟过程中,吸烟动作反复呈现上述规律直到停止吸烟,因此选择手-肘-肩膀之间的角度作为吸烟行为的基本特征之一。
手-肘-肩膀的角度示意图如图4所示,根据获得的手、肘、肩膀的位置坐标信息计算手-肘-肩膀之间的角度,即
图4 角度示意图
(3)
式中:θ表示手-肘-肩膀之间的角度;a表示肘与肩膀之间的距离;b表示手与肩膀之间的距离;c表示手与肘之间的距离。考虑到吸烟者的惯用手不同,故并行判断 左(右)手、左(右)肘与左(右)肩膀的位置关系。
利用提取的距离与角度信息,建立分类模型来判断是否存在吸烟行为。通过对数据集的大量观察,设置条件:e<0.26;θ<60°。当满足上述条件时,记录此时的时间t;当上述条件不满足时,t为0。若满足条件持续的时间f≥3 s且1 min内次数s≥3次时,认为手部存在吸烟动作。
1.3 基于YOLOv4的烟头检测
YOLOv4算法在YOLOv3的基础上,从数据处理、主干网络、激活函数、损失函数等方面进行优化,使得模型在检测精度和速度上有了进一步提升。YOLOv4将CSPDarknet53作为骨干网络,将SPP和PANet结构作为加强特征提取网络,使用CLOU作为回归LOSS,使用Mish作为激活函数,用来提取目标特征。此外,YOLOv4在结构上具有多尺度的特点,通过上采样把高层特征的语义信息传播到低层网络然后与底层特征的高分辨率信息相融合,提高了对小目标检测物体的检测效果。结合YOLOv4检测精度高、速度快且适用于小目标物体检测等特点,本文采用YOLOv4模型对视频中每一帧图像进行香烟烟头检测,来判断视频中是否存在香烟。
首先,利用网络爬虫创建香烟烟头检测数据集,共包含5 000张图像;然后,利用labelimg对3 000张图像进行标注,标注时将香烟用矩形框标出,并设置标签为smoke;最后,使用YOLOv4算法进行训练,设置学习率为0.001,批量大小为8,训练60轮,最终得到烟头检测模型。
2 实验设计与分析
为了验证本文方法的有效性,在Inter Xeon W-2133 CPU,RTX2080Ti GPU,16 GiB RAM,CUDA 10.1的计算机上进行实验;在室内室外多种场景下录制近距离单人全身视频300个。视频分为2类:一类是吸烟视频200个;另一类是其他行为如喝水、打电话等视频100个。YOLOv4检测香烟烟头的测试集由采集的300个视频和香烟烟头检测数据集中随机选择的2 000张图像构成。
2.1 吸烟行为检测结果分析
对本文自制的数据集从距离、角度、时间周期进行观察分析,对每一类出现的规律随机选用一个视频的效果图展示。
2.1.1 距离分析
从手部与嘴部之间的距离分析吸烟行为,实验结果如图5所示。
图5 吸烟与非吸烟者手部与嘴部的距离归一化对比
图5a为吸烟者手部与嘴部的距离变化过程,图5b为非吸烟者手部与嘴部的距离变化过程。可以发现,吸烟时人的手部与嘴部之间的距离呈现一定的周期性。当吸烟行为正在发生时,手部与嘴部之间的距离最近,吸烟需持续一段时间,即图中波谷状态,e≈0.245;一次吸烟行为结束呼出烟雾的过程中,手部逐渐远离嘴部直至最远,即图中波峰状态,e≈0.285;如此反复,直至吸烟结束。在吸烟的过程中,会出现手部的抖动等现象,故图中波谷处会有上下波动。
2.1.2 角度分析
从手-肘-肩膀之间的角度分析吸烟行为,实验结果如图6所示。图6a为吸烟者手-肘-肩膀之间的角度变化过程,图6b为非吸烟者手-肘-肩膀之间的角度变化过程。可以发现,吸烟时人的手-肘-肩膀之间的角度呈现一定的周期性。当吸烟行为正在发生时,手-肘-肩膀之间构成的角度最小,即图中波谷处,θ≈40°;吸烟行为结束呼出烟雾的过程中,手慢慢远离嘴部,手-肘-肩膀之间构成的角度逐渐变大至最大即图中波峰处,θ≈140°;如此反复,直至吸烟结束。
图6 吸烟与非吸烟者手-肘-肩膀之间的角度对比
2.1.3 时间周期分析
分析吸烟行为时,从手部与嘴部之间的距离和手-肘-肩膀之间的角度出发进行多个视频测试,发现人在吸烟时,e≈0.26,θ≈60°。因此,设置阈值:当e<0.26,θ<60°时,认为人可能有吸烟动作,记录此时的时间;当不满足条件时,设置此时的时间为0。实验结果如图7所示,图7a为吸烟者时间变化曲线,图7b为非吸烟者时间变化曲线。可以发现,吸烟者的吸烟时间呈现一定的规律性。
图7 吸烟与非吸烟者时间对比
调查发现,不同人虽然吸烟时的习惯不同,但是吸一次烟的时间一般在20 s左右,因此若每次吸烟的时间t≥3 s且一分钟内次数s≥3次时,认为有吸烟动作,并画出人体的ROI区域,如图8a所示;若没有吸烟行为,则不画,如图8b所示。
图8 吸烟行为检测
为了验证基于人体关键点的吸烟行为检测方法的准确性,本文采用准确率Ac、召回率Rc指标对该方法进行评价。
(4)
(5)
式中:TP表示检测到吸烟者吸烟,实际上存在吸烟者吸烟;TN表示未检测到吸烟者吸烟,实际不存在吸烟者吸烟;FP检测到吸烟者吸烟,实际上不存在吸烟者吸烟;FN表示未检测到吸烟者吸烟,实际上存在吸烟者吸烟。通过计算,Ac=90.1%,Rc=91.2%。
2.2 基于YOLOv4的烟头检测结果分析
利用创建的测试集测试烟头检测模型,测试效果如图9所示。对于存在烟头的图像(如图9a所示),使用了红色方框进行标注,添加smoke字样,并给出置信度数值。对于未检测到烟头的图像(如图9b所示),没有任何的显示。对于完全露出的香烟,本模型给出了正确的检测结果;但对于被遮挡的香烟,本模型的识别能力较弱。最终得出,Ac=91.8%,Rc=92.3%。
图9 香烟烟头检测结果
2.3 实验结果分析
本文方法将基于人体关键点的吸烟行为检测方法与基于YOLOv4的烟头检测方法相结合。当行为检测判定人体存在吸烟动作且YOLOv4检测出烟头时,认定人体一定存在吸烟行为;当行为检测判定人体不存在吸烟动作但YOLOv4检测出烟头时,认定人体较大可能存在吸烟行为;当行为检测判定人体存在吸烟动作但YOLOv4为检测出烟头时,认定人体可能存在吸烟行为;当行为检测判定人体不存在吸烟动作且YOLOv4未检测出烟头时,认定人体一定不存在吸烟行为。实验结果见图10。通过计算,本文方法的Ac=95.0%,Rc=94.1%。
图10 实验结果
在本文自建的数据集上,使用基于人体关键点的吸烟行为检测方法、基于YOLOv4检测香烟方法以及本文算法进行了实验。可以看到,本文提出检测方法的准确率和召回率要高于其他方法(如表1所示),表明本文方法优于之前只从吸烟动作或香烟方面检测吸烟行为的方法[10-17]。
表1 不同方法在本文数据集上的检测结果
为了检测本文算法的普适性和实用性,将本文方法分别与其他吸烟行为检测方法进行对比:基于深度学习的实时吸烟检测算法[1],即使用卷积神经网络对摄像头所拍摄的视频进行处理,经过图像特征提取、特征融合、目标分类以及目标定位等过程,定位烟头的位置,进而判断出吸烟行为;基于人体关节点的多人吸烟动作识别算法[6],即利用人体关节点信息,检测关节点的运动轨迹是否符合周期性规律从而实现吸烟动作识别。比较结果如表2所示,基于深度学习的实时吸烟检测算法[1]与基于人体关节点的多人吸烟动作识别算法[6]的准确率相对较低。由于香烟目标较小,所以基于深度学习的实时吸烟检测算法[1]检测烟头时,易识别出错,并不能很好地检测出吸烟行为;基于人体关节点的多人吸烟动作识别算法[6]只是从吸烟行为的周期性进行判断,不能很好地区分一些类似行为如喝水、打电话等,具有一定的片面性。对比结果显示,本文方法的准确率较高,具有较好的效果。
表2 不同方法检测吸烟行为的结果对比
3 结语
针对仅使用目标检测检测公共场所下的吸烟行为准确率不高的问题,本文提出了一种基于人体关键点和YOLOv4的吸烟行为检测方法。首先,在传入视频的每一帧图像中获得人体和人脸的关键点,将这些关键点进行个人匹配;其次,基于每个人的关键点位置找到手部的位置,计算出手部到嘴部的距离、手-肘-肩膀之间的角度、吸烟的时间周期,设置吸烟行为规则,判断是否有吸烟动作;然后,检测图像中是否存在香烟烟头;最后,结合以上两方面,当满足吸烟动作规则且图像中存在烟头时,判断人们存在吸烟行为。实验结果表明,在自采集的吸烟数据中,该方法能够及时有效地检测出吸烟行为。
但是,本文提出的方法还存在一定的局限性。例如,当人们距离监控较远时,图像不清晰无法检测到人体关键点或将物体误测成人体。不同场景下人的姿势也不同,人之间会出现遮挡问题,不能得出很好的检测结果。本文提出的方法主要针对单人吸烟行为进行检测,检测多人吸烟行为仍需进一步探究。