APP下载

改进多任务级联卷积神经网络的驾驶员疲劳检测

2024-12-31刘星文良华成奎陈波杰张宇杰于剑桥

宜宾学院学报 2024年12期
关键词:树莓派深度学习

关键词:深度学习;疲劳检测;MTCNN;树莓派

长期行车造成司机大脑和体力过分劳累所形成的心理和生理异常的现象称为疲劳驾驶.准确有效的疲劳检测已成为一个迫切需要解决的问题.

通过对现有的疲劳检测场景和疲劳特征的分析,判断人体属于疲劳或者非疲劳状态的方法有主观检测法和客观检测法[1].主观检测法受被试者和检测者主观影响较大,且在实时检测方面具有很大局限性[2].例如基于驾驶员车辆驾驶的特征进行比较判断,通过采集车辆的运行状态数据,利用随机森林算法来对疲劳状态的识别[3];或基于驾驶员的生理特征(如驾驶员的脑电信号、心电信号等[4])进行直接判断.客观检测法和主观检测法的区别在于能够避免人为干预,主要采用外部设备收集驾驶员行车过程中的面部和头部等特征信息.这种方法具有不接触、不干扰等优点,因此成为大量学者研究疲劳检测的主流方法.

随着深度学习技术的不断进步,被广泛应用于各个领域,并取得了出色效果.文献[5]建立了一套基于人脸检测、眼部检测、眨眼检测等模块的公交车驾驶员疲劳检测系统,采用一种基于光谱回归的持续睁眼程度估计方法,但易导致睁眼程度估计的准确性和稳定性不足.Zhao等人使用多任务级联卷积神经网络(Multi-taskCascadedConvolutionalNet⁃works,MTCNN)进行人脸检测和特征点定位,再用EM-CNN卷积神经网络对ROI区域进行眼部和嘴部的状态识别,从而判断驾驶员是否疲劳[6].该方法在一定程度上能提高检测准确度,但是其检测速度较慢,而疲劳检测对实时性要求较高.

MTCNN是目前在人脸检测及人脸关键点定位任务上效果最佳的算法之一,由于其结构采用了3个级联网络,在一些低算力的移动边缘设备上,检测耗时过长,这对于高效地检测驾驶员的人脸区域构成了挑战.本文采用MTCNN作为驾驶员人脸检测以及特征定位的理论基础,并对网络的参数进行优化.通过采用多特征融合检测方法,拟解决单一特征疲劳判断方法存在的局限性和准确率低的问题,同时降低系统模型的参数计算量,减少在低算力移动设备上的检测延时,从而更易于实际部署.

1 MTCNN人脸检测算法

在基于面部特征的驾驶员疲劳状态检测中,一般采用卷积神经网络完成特征点提取的工作[7],其中比较具有代表性的是MTCNN.MTCNN算法是一个由三个神经网络组成的级联结构,由P-Net、R-Net和O-Net构成[8].

P-Net是MTCNN算法的子网络,专门用于在12×12×3的RGB图像上快速生成人脸区域的候选框和特征点坐标[9].其设计目标是提供粗略的人脸区域过滤,为后续的精细过滤和人脸对齐提供基础.图1为P-Net网络结构.

R-Net是MTCNN算法中的第二个子网络,它利用复杂的卷积神经网络结构和全连接层来进一步优化和筛选P-Net生成人脸候选框.使得人脸检测能够更加精确和可靠.图2为R-Net网络结构.

O-Net是MTCNN算法的第三个子网络(图3),它在上层网络的基础上进一步拓宽输入图像尺寸和增加卷积层来提高对人脸区域的捕捉和抑制错误窗口的能力,并提供更准确的面部五特征点坐标,这些特征点包括左眼、右眼、鼻子、左嘴角和右嘴角,从而提高人脸检测的准确率和面部特征的分析效果[10].

1.1 数据样本预处理

人脸检测训练采用了两种不同的数据集进行人脸检测与特征点定位.其中,人脸检测部分使用了WIDERFACE数据集,该数据集涉及了61个事件类型,其中包含了不同尺寸、姿势等方面的复杂变化,共包含32203张图片[11].而在人脸特征点定位方面,则使用LFW(LabeledFacesintheWild)数据集,该数据集包括5749人共13233人脸图像,每张照片都标注有人脸bbox标注框、5个特征点坐标等信息[12].

根据训练任务的不同,将数据集按照3∶1∶1∶2的比例分为负样本、正样本、部分样本以及人脸关键点位样本四部分进行训练.

1.2 R-Net网络参数优化结果分析

为提升MTCNN网络在有限的硬件开发平台部署,本文针对R-Net子网络进行网络参数调整.因平均池化可以减少参数量,所以将全连接层FC用均值池化GAP替换,将末尾卷积层改为192.R-Net网络改进前、后的具体参数如表1所示.

改进前的总参数量为101203,改进后为53075.改进后的参数量相比改进前减少了47.5%.证明了实验优化的有效性.

改进的R-Net子网络优化前后的MTCNN模型准确率如图4所示.实验结果表明,经过参数优化后,准确率由96.7%提升到97.8%,增长了1.1%,可见本次优化进一步提升了MTCNN网络的人脸检测以及人脸关键点定位能力.图5为在不同场景下人脸检测及特征点测试实验,在多张人脸以及遮挡情况下取得较好的识别效果.

2 面部特征关键点检测

面部关键点检测任务需要标定人脸图像中的关键点,这些关键点的坐标可以用于判断司机是否疲劳[13].采用Dlib人脸关键点检测模型定位面部的关键点,测试效果如图6所示,左图为模型68个关键点结果,右图为对关键点进行了标序,将坐标向量输入到疲劳检测模块中,便于后续进行面部特征提取.

2.1 眼部疲劳特征的提取方法

2017年Soukupová等人提出了一种基于眼睛纵横比EAR(EyeAspectRatio,REAR)的方法来评估驾驶员的眼睛状态,用于疲劳驾驶的判断.

获取EAR是进行眼部特征提取的关键步骤,为后续分析驾驶员是否疲劳提供了重要的基础.左、右眼睛计算公式分别如式(1)、(2)所示.其中P表示关键点坐标.

在不同的人和不同的环境条件下,个体的眼睛特征可能存在差异,通过使用左右眼EAR的平均值,可以在一定程度上减少这种个体差异对检测系统性能的影响.计算公式如(3)所示:

当眼睛从一种状态转换到另一种状态时,即发生了常见的眨眼动作.在这个过程中,EAR会随时间发生变化.因此,为了准确判断眼睛是否闭合,需要设定一个EAR阈值.当EAR低于这个阈值时,可以认为眼睛处于闭合状态.来监测和评估眼睛的状态.

在一段模拟驾驶视频中选取了几次正常驾驶过程中的眨眼事件,并对其中两次进行了分析,实验结果如图7所示.

经过实验分析,在单位时间序列中,当驾驶员处于正常睁眼状态时,EAR值的范围在0.25至0.32之间.本文设定了一个特定的阈值为0.25来判断眼睛的状态,并检测眨眼行为.在模型检测到连续两帧的实时EAR值小于该阈值时,认为驾驶员进行了一次眨眼动作.

2.2 嘴部疲劳特征的提取方法

哈欠可以被视为在身体疲劳状态下产生的条件反射[14].通过观察和统计哈欠的频率,可以直接评估当前的疲劳水平.

通过分析嘴巴的张开程度和哈欠的帧数占比来判断驾驶员是否处于疲劳驾驶状态.利用嘴部特征点的位置计算出嘴部的纵横比值MAR(MouthAs⁃pectRatio,RMAR),然后根据MAR值来判断嘴部所处的状态.

根据公式(4)使用标记的嘴部形状来计算嘴部纵横比检测嘴部张开.

为了确定MAR阈值,收集了驾驶员的视频数据,并对嘴巴状态进行分析.通过计算MAR的数值,并观察驾驶员是否进行打哈欠的动作,根据实验结果设定一个合适的阈值.实验结果如图8所示.

根据实验结果图,可以观察到:嘴巴正常闭合时,MAR值基本保持在0.3左右;当驾驶员开口说话时,嘴巴纵横比值会有一定的浮动,但通常保持在0.4至0.5之间;而在模拟打哈欠动作时,嘴巴纵横比值会急剧增加,峰值超过0.6,并且维持相当的时间.基于以上观察,设定一个阈值,用于判断驾驶员是否处于疲劳状态.当嘴巴纵横比值超过0.6,并且持续一段时间时,可以认定驾驶员正在打哈欠.

2.3 头部疲劳特征的提取方法

头部姿态指头部相对于全局坐标系的方向,如图9所示.普通人的头部活动方向受限于俯仰角(Pitch)、滚动角(Roll)和偏航角(Yaw)这三个自由度.俯仰角指头部在前后方向上的旋转,滚动角指头部在左右方向上的旋转,偏航角指头部在垂直于地面的平面内旋转.

在头部姿态旋转中的欧拉旋转角度中,俯仰角(Pitch)和滚动角(Roll)与疲劳导致的点头动作最为相关.因此,可以通过这两个角度的变化来判断是否出现了疲劳动作.据相关资料显示,在正常驾驶姿态下,俯仰角的变化范围大致为5°至7°[15],而滚动角几乎没有什么变化.

因此,根据设定,当俯仰角的绝对值大于等于20°或者滚动角的绝对值大于等于15°时,则可以认为发生了一次低头事件,从而计算出单位时间内的低头帧率占比,根据相关研究所得结果,将其的阈值设定为0.3.

3 实验结果与分析

实验硬件选用树莓派4B(8G)作为实验设备,采用了Linux操作系统,其中配备了系统设计所需要的软件包,硬件结构为ARM架构体系的Cortex-A72架构,GPU为VideoCoreVI,性能较之前的版本有所提升.软件环境采用的开发平台为PyCharm,深度学习框架为PyTorch,此外还使用到了OpenCV、Dlib、Numpy等机器学习库.系统框架结构如图10所示.

3.1 疲劳驾驶数据集

考虑到安全性,无法在实际驾驶环境中完成测试,于是选择使用YawDD(AYawningDetectionData⁃set)数据集对疲劳特征检测准确率进行测试.该数据集里面包含有不同性别、年龄的志愿者模拟实际驾驶场景的视频,其中包含有模拟疲劳驾驶的视频.

3.2 算法性能测试

使用YawDD测试集并截取60s为一个样本,共计60个样本,将数据集实际真实的检测结果与算法检测结果进行对比分析.表2为对三种疲劳特征的准确率及帧率的统计.

在三种疲劳特征中,眼睛特征的准确率最低,而嘴巴特征的准确率最高,初步推测是因为眼睛的特征相对较小,特征更难捕捉,个体之间的差异对检测准确率影响较大.相比之下,嘴巴与头部姿态疲劳特征相对容易提取,且在判定时差异相对较小,因此准确率相对较高.系统测试部分效果如图11所示.

4 结语

本文通过对驾驶员面部特征的研究,确定了基于眼睛、嘴巴和头部姿态三个疲劳特征融合检测,为进一步优化MTCNN网络在有限硬件开发平台上的部署,针对R-Net子网络进行网络参数调整,经过参数优化后,准确率由96.7%提升到97.8%,增长了1.1%,参数量减少了47.5%,进一步提升了MTCNN网络的人脸检测以及人脸关键点定位能力.最后通过YawDD(AYawningDetectionDataset)疲劳数据集,在资源受限的树莓派4B设备上实现了高效的疲劳检测,帧率达到13fps.有效解决单一特征疲劳判断方法存在的局限性和准确率低的问题,同时降低了系统模型的参数计算量,减少了在低算力移动设备上的检测延时,从而更易于实际部署.

猜你喜欢

树莓派深度学习
基于微信端的智能家居监控系统的设计与实现
有体验的学习才是有意义的学习
电子商务中基于深度学习的虚假交易识别研究
MOOC与翻转课堂融合的深度学习场域建构
大数据技术在反恐怖主义中的应用展望
智能安全防盗探测小车
一种基于树莓派的门禁系统快速构建方法
深度学习算法应用于岩石图像处理的可行性研究
基于深度卷积网络的人脸年龄分析算法与实现
烟草物流中心工业无线网络安全监测系统设计