缪泽浩 余冬华 刘新颖 刘竟成 李天乐
摘要:学生上课状态与课堂效果紧密相关,而学生疲劳状态监测是课堂管理中普遍存在,又亟待解决的问题。文章基于YOLOv5与dlib设计并实现一个课堂疲劳状态监测系统。首先,除利用相关数据集外,文章额外标注了1000张图像,加入训练集中;其次,使用merge-NMS优化多目标检测框;然后,利用dlib获取眼睛与嘴巴张合宽度,计算得到眨眼次数与打哈欠次数,结合简化的Perclos计算疲劳指数;最后,利用PySide2实现可视化,并转发监测结果给管理员。
关键词:YOLOv5;dlib;非极大值抑制NMS;疲劳指数;疲劳监测
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2023)01-0020-04
1 引言
疲劳状态检测/监测有很多应用场景,如疲劳驾驶[1]、旷工疲劳[2]等。由于现代视觉传感技术和图像处理技术的迅速发展,传统视觉检测方法已经日趋完善,并逐步发展成一个无接触式测量方法。计算机视觉监测技术的实时性、灵敏度和精确性的优势也得到了充分的表现。许小鹏等[3]使用改进的Yolov3-tiny算法利用人眼状态信息来检测疲劳驾驶。张博熠等[4]在评价疲劳驾驶中,不仅使用了眼部信息,还兼顾嘴部信息。Perclos 作为疲劳测试的一种公认的常用方法被广泛使用。Du等人[5]提出了基于心率和 Perclos 的多模态融合疲劳行驶检测方法。Chang 等人[6] 基于Perclos和面部生理信号研发了嗜睡检测系统。
课堂是一个特殊场景,相较于前述情景,只影响学习效果,所产生直接后果较弱,因而不需要像疲劳驾驶与矿工疲劳等疲劳状态检测问题中综合监测分析一些生理指标如脑电、心电、肌电、脉波、呼吸等状态。出于便捷性与实际的考虑,简化检测为摄像头视觉传感器检测学生的大致疲劳状态,这一目标在現有的技术条件情况下,是完全可行的。新冠肺炎疫情期间的网课浪潮在某种程度上为在线教育的快速发展创造了条件,线上教学难以回避的问题是在学生自制力不足的情况下学生的学习专注力不够,线上教学与课堂教学相比,学生的学习效率普遍较低,余永辉等人[7]试图在高校网课教学中寻找解决问题的方法。虽然面向驾驶活动的疲劳状态检测研究较多,而课堂方面相关的疲劳监测研究相对较少。本文基于YOLOv5的目标检测功能实现多人脸瞄框,基于dlib进行眼睛、嘴巴关键点定位,实现眨眼与哈欠次数统计计算,结合Perclos 疲劳指标判断疲劳状态,同时,利用PySide2实现可视化,并通过报警邮件转发监测结果给管理员,总体来说实现了一个比较完整的疲劳监测系统。此外,为了提升整个系统的性能,额外标注了1000张人脸面部瞄框数据,并引入非极大抑制NMS方法提高多目标实时检测时多目标的瞄框精准度。
2 疲劳状态监测系统设计
图1给出了监测系统工作流程图,后续将对各个模块进行阐述。
2.1 数据集与模型训练
数据集方面,利用百度飞浆学习社区的VOCData数据集,并用额外用YOLOv5官方标注工具labeling标注了1000张人脸面部瞄框标注数据,构建成新的训练集。
数据集处理时使用了YOLOv5的自适应灰度填充。因为存在输入的图片尺寸不一的问题,一般性的做法是将原图直接resize成统一大小,但是这样会造成目标变形。而使用灰度填充将原图的长宽等比缩放对应的统一尺寸,然后用灰色填充空白部分,尽可能地避免数据尺寸带来的变形。
数据集处理时使用了YOLOv5的矩形推理以提高效率。矩形推理能够减少推理时间。简单来说就是尽可能减少灰度填充的内容,以避免算力浪费在无效的灰度填充区域。具体过程为:求得较长边缩放到416的比例,然后对图片wh按这个比例缩放,使得较长边达到416,再对较短边进行尽量少的填充使得较短边满足32的倍数。
为了缩短网络的训练时间,并达到更好的精度,本文加载预训练权重并在构建数据集上重新训练。YOLOv5的5.0版本给项目提供了几个预训练权重,可以对应模型在不同应用场景对于速度和模型大小不同的需求选择不同版本的预训练权重,本文选择了轻量化的YOLOv5s.pt,并在所构建的数据集上重新训练。
2.2 应用非极大抑制NMS
NMS首先计算所有图片的置信度,然后将多个符合最低置信度阈值要求的框按照置信度从大到小顺序排列,取置信度最高的瞄框与其他所有瞄框计算IOU,如果IOU大于设定的重合度阈值,那么就认定这些瞄框内容相同,删除这些重复框。然后再以剩下的瞄框重复上述操作,直到没有符合最低置信度阈值的瞄框为止。
张秀再等人[8]为了规避NMS的一些缺点,设计了一种SDIOU-NMS非极大值抑制算法,对目标预测框进行处理,保留检测目标最优预测框,有效提高对于行人目标检测的精度。本项目使用改进的非极大值抑制NMS变体merge-NMS 对于多目标检测瞄框进行优化。相较于传统非极大值抑制NMS直接粗暴地将重合阈值IOU高的目标检测瞄框的置信度直接设置为0的做法,Merge-NMS先计算所有瞄框的置信度权重,将本来直接置信度设置为0的直接被放弃的瞄框置信度修改加入置信度权重的因素,使之有可能进入下一轮的迭代筛选中,以获得更平滑的效果。
这一做法在一定程度上减小2个高度重合的不同对象瞄框被错误地删除掉其中一个正确瞄框的概率。使得这一轮的筛选选中一个对象瞄框的同时,另一个因为重合率过高的正确瞄框得以保留,只是置信度有一定程度降低,下一轮筛选中存在了保留上一次筛选留存下来的正确对象瞄框的可能性,从而避免瞄框的漏检,在一定程度上提高了模型的召回率。在课堂疲劳状态检测的功能需求下,实际中更希望避免漏检的发生,虽然这会牺牲掉一部分的准确率。
2.3 YOLOv5实现单/多目标检测
YOLOv5是目前研究情况下单阶段目标检测算法中性能比较良好的算法,但存在着对目标瞄框边界回归的精确度不高的问题,难以适用对目标瞄框的交并比要求较高的场景。邱天衡等人[9]在内的多个研究团队对于这个问题做过相关研究,在学生疲劳状态检测中,不可避免地出现多个学生,也因此出现了多个待检测瞄框重合的问题,上文中提到的merge-NMS是本项目的解决方案。项目导入YOLOv5训练结果best.pt权重模型,通过多目标检测的瞄框确定有几个目标出现在屏幕,结合Merge-NMS方法,获得每个对象的唯一人脸瞄框,然后再分别将每个瞄框的人脸图像输入下一个阶段。
2.4 dlib实现图像的Hog特征实现人脸面部检测
基于shape_predictor_68_face_landmarks.dat(人脸68特征点检测)及上述人脸瞄框,获取人脸面部的眼睛、嘴巴大小。基于李运遥等人[10]的疲劳检测方法,根据P80指标的定义,设计了从提出的眼睛状态识别方法映射到P80指标的方法,并根据先验知识设计眨眼频率和哈欠频率的归一化方法。根据所得到的眼睛嘴巴上下边界中心的坐标,结合欧式距离公式计算得到眼睛与嘴巴的开合程度(长宽比)。针对人的眼睛大小不一的情况,设计标定方法寻找针对特定人眼的识别阈值,并根据闭眼的时间来识别眨眼动作或者长时间闭眼动作,利用设定的时间阈值判断眨眼次数与哈欠次数。
2.5 Perclos机制与疲劳监测
Perclos是指眼睛闭合时间占某一特定时间(一般是一定时间长度的片段统计)的百分率。Perclos通常有 P70、P80、Em 三种测量方式。P80表示在一段时间片段内人的眼皮覆盖眼球面积超过眼球面积80%所占的时间比例。根据相关调查研究,P80能够最大程度上反映疲劳程度,所以本文采用P80来作为重要的疲劳指标。图3揭示了人眼开度与时间的关系,随着时间的增加,疲劳指数上升,人眼开度降低,降低学习工作效率,进入半休息状态,此后因为一段时间的休息疲劳指数逐渐降低,人眼开度也随之上升。
因为直接计算人的眼皮覆盖眼球面积超过眼球面积有难度,所以本文简化眨眼次数,为了兼顾疲劳算法精度,考虑嘴巴张合程度判断是否打哈欠,加入了哈欠次数指标。设置眼睛与嘴巴的开合程度(长宽比)的阈值与闪烁阈值,用以判断眨眼次数与打哈欠次数,简化的近似疲劳指数计算公式如下:
Perclos=Re/R+0.2*Rm/R
其中,[Perclos]表示疲劳指数,[Re]表示闭眼帧数,[Rm]表示打哈欠次數。本文设置哈欠次数影响疲劳指数的权重为0.2。统计150帧内的平均疲劳指数,设置0.8为疲劳的阈值。也就是说如果计算得到的疲劳指数大于0.8,那么判断为疲劳状态,将会在应用界面上提示报警,此外还会发送报警邮件到指定的邮箱,或是通过微信公众号推送,以起到报警提示的效果。
3 疲劳状态监测系统实现结果
在本监测系统可视化过程中,界面开发借助了PySide2模块,展示实时监测结果与分割界面,见图4,其中 (a) 至 (c) 图中框选了眼睛与嘴巴,分割出整个人脸,并在瞄框左上方给出注意力得分,同时,在右侧展示相关监测信息,并且每过150帧就提示一次Perclos疲劳测试得分,如是否为疲劳状态、眨眼次数、哈欠次数、行为检测等,并输出一些日志信息。作为检测结果的反馈,在Perclos疲劳测试的得分大于0.8的时候,将会判定为疲劳,通过一定的方式进行预警提示,如邮件等,否则判断为清醒状态。也可对多人同时检测,匹配课堂扫描检测,如图4(c)。作为对检测结果的反馈,本系统设置,当检测到存在疲劳学生时,监测系统自动以邮件形式发送至管理员,如图4(d)。整个系统基本实现了课堂疲劳监测与反馈。
此外,为了实现多目标划定检测瞄框的问题,本系统在设计中还引入了非极大抑制NMS方法,图5给出了使用NMS前后的对比结果,从图5(a)可以看出,未使用NMS时,出现近乎重叠瞄框,当使用NMS后,见图5(b),只剩下一个唯一的瞄框,助益于疲劳判断与清晰的可视化。
4 结束语
本文围绕学生课堂疲劳状态设计并实现了一个监测与预警系统,主要应用了YOLOv5目标监测及dlib人脸面部检测框架,并引入Perclos指标进行疲劳状态判断,为了适应课堂检测,本文额外标注了1000张人脸面部瞄框数据,并引入非极大抑制NMS来提升系统性能。实验结果表明,本系统实现了课堂疲劳状态监测与预警的相关功能。
参考文献:
[1] 张佐营,叶桂荀.驾驶疲劳监测技术研究综述[J].汽车科技,2022(1):8-14.
[2] 卢才武,丁宇,江松,等.融合心电特征提取的矿工疲劳状态识别研究[J/OL].安全与环境学报.[2022-11-10]. https://kns.cnki.net/kcms2/article/abstract?v=Vy6hXme4cCL7yqnkZNXV33wZMdWI52ODFqVhDagy7WlDMbx-RA-LUPYqI8G_ciEGxVA57K0-gjG8M0waIj2nNfAc1aVenwx6x-pp0f5aecrueppx5dsANw==&uniplatform=NZKPT.
[3] 许小鹏.基于机器视觉的驾驶员疲劳检测方法研究[D].镇江:江苏科技大学,2021.
[4] 张博熠,者甜甜,赵新旭,等.基于眼嘴状态判别网络的疲劳驾驶检测[J/OL].计算机工程.[2022-08-30]. https://kns.cnki.net/kcms2/article/abstract?v=Vy6hXme4cCKwZWWRl6dj0jxeJ5 A1ywjggf_6BqOIAq7XX12k-uQyrjoNVog4MulEBsMyhSDAoX EHrQVAueBeDD3wl67R5ZYpyGp6Twf64kmyprQpSIo-eg==&uniplatform=NZKPT.
[5] Du G L,Zhang L L,Su K,et al.A multimodal fusion fatigue driving detection method based on heart rate and PERCLOS[J].IEEE Transactions on Intelligent Transportation Systems,2022,23(11):21810-21820.
[6] Chang R C H,Wang C Y,Chen W T,et al.Drowsiness detection system based on PERCLOS and facial physiological signal[J].Sensors (Basel,Switzerland),2022,22(14):5380.
[7] 余永辉.基于疫情下的高校网课教学实践探索与思考[J].内江科技,2021,42(10):157-158.
[8] 张秀再,邱野,张晨.改进YOLOv5s算法的地铁场景行人目标检测[J/OL].激光与光电子学进展. [2022-07-30].http://www.cnki.com.cn/Article/CJFDTotal-JGDJ20220713054.htm.
[9] 邱天衡,王玲,王鹏,等.基于改进YOLOv5的目标检测算法研究[J].计算机工程与应用,2022,58(13):63-73.
[10] 李运遥.基于多源面部行为融合的驾驶疲劳检测方法研究与应用[D].南京:南京财经大学,2020.
【通联编辑:谢媛媛】