李泰国,张天策,李超,周星宏
(1.兰州交通大学,自动化与电气工程学院,兰州 730070;2.陕西省康复医院,运动疗法一科,西安 710065)
疲劳驾驶会降低驾驶员的控制和判断能力,是导致交通事故的主要原因之一。数据表明,疲劳驾驶引起的交通事故占所有车辆事故的20%~30%,是对道路安全的巨大威胁。因此,准确高效地检测驾驶员的疲劳状态对保障道路安全具有重要意义。
在驾驶员疲劳检测方法中,脑电图(EEG)是一种可靠性较高的侵入式疲劳检测方法[1]。除此之外,还有基于眼电图(EOG)、心电图(ECG)及心率变异性(HRV)等生理信号的疲劳检测方法[2],在识别驾驶员疲劳时均有较好的效果。然而,这类检测方式要求驾驶员佩戴相应的检测设备,长时间使用会干扰驾驶员的正常驾驶,具有一定的安全隐患。基于车辆信息的疲劳检测方法主要通过采集安装在汽车相关零部件的传感器相关参数,例如,速度、加速度和转向角[3],与疲劳检测中认定为疲劳状态的阈值对比,进而判断驾驶员的疲劳状态,这种方式在检测驾驶员疲劳时存在效率较低的情况。
通过计算机视觉的方式分析驾驶员面部特征[4],例如,眼睑闭合时间、打呵欠、头部姿势、眼睑运动和面部表情等,以此检测驾驶员是否发生疲劳驾驶[5],此类方法不需要与驾驶员直接接触,因此,不会干扰正常驾驶,更容易被驾驶员所接受[6]。目前,基于面部状态的疲劳检测方法主要依据眼睛开合、嘴巴哈欠及困倦点头等典型症状,结合PERCLOS(Percentage of Eyelid Closure over the Pupil over Time)进行疲劳检测[7]。实际情况是,当驾驶员发生疲劳时,各关键部位之间存在密切的联系,单独分析面部特征而忽略各部位之间的空间关联性或各视频帧之间的时间关联性将会影响疲劳检测模型的准确率和鲁棒性。
基于此,本文为研究疲劳状态下头部与面部的信息之间空间联系,提取面部信息,结合倒立摆的概念建立驾驶员面部倒立摆模型,将倒立摆模型的动能与势能以及头部欧拉角作为疲劳特征,可以将头部与面部信息更为细化的结合,充分挖掘各面部特征与驾驶员疲劳之间的联系。利用信息熵统计疲劳特征的混乱程度,表示随着驾驶员疲劳状态的不同引起的疲劳特征的变化,利用卷积神经网络(CNN)的特征提取能力与长短期记忆网络(LSTM)的时序特征挖掘能力,以及CNN-LSTM 模型对长时间序列的建模优势建立多帧疲劳特征信息熵之间在时间上的联系,实现驾驶员疲劳状态预测。
当驾驶员出现疲劳情况时,其头部姿态与面部信息会表现出与非疲劳驾驶状态不同的行为,随着驾驶员疲劳程度的加深,打哈欠、点头及眨眼等表现疲劳症状的动作也会随之频繁。与非疲劳驾驶时的状态相比,疲劳驾驶时,驾驶员的面部及头部信息在一定时间内变化更大。基于两种状态下驾驶员展现出的不同特点,将面部及头部信息相结合构造疲劳特征是非常必要的。本文通过提取可以表征头部姿态信息的欧拉角以及依据力学设计面部倒立摆模型建立驾驶员疲劳状态的特征表示。本文所提出的驾驶员疲劳检测方案框图如图1所示。
图1 疲劳检测方案框图Fig.1 Block diagram of fatigue detection scheme
在检测方案中,首先,采用PFLD 模型识别驾驶员人脸图像[8],并提取面部关键点坐标,以此构建特征模型;通过关键点坐标建立倒立摆模型,计算头部的动能与势能,并结合头部欧拉角设计本方案的疲劳特征;最后,依据疲劳特征计算每个特征的信息熵,将其输入CNN-LSTM 进行分类训练后预测驾驶员的疲劳状态。
在基于面部信息的驾驶员疲劳检测相关研究中,面部关键点定位是非常重要的环节。PFLD(Practical Facial Landmark Detector)算法是一个集简单、快速、超高精度和实用性于一体的人脸关键点检测方法,各评估指标在同一数据集上均能达到最佳,保持高精度的同时,很大程度上降低了模型的复杂度[9]。基于PFLD提取出的驾驶员面部关键点定位如图2所示。
图2 驾驶员面部关键点Fig.2 Coordinates on driver's face
在驾驶员疲劳驾驶过程中,头部姿态在疲劳状态下的变化会反映驾驶员的精神状态和注意力等关键信息。因此,提取到的驾驶员头部姿态是判断疲劳状态的重要特征之一。本文获得的头部姿态信息用3 个欧拉角(Pitch,Yaw,Roll)表示脸部朝向的角度信息。头部姿态识别如图3所示。
图3 头部姿态识别Fig.3 Schematic diagram of head pose
倒立摆模型广泛用于机器人运动平衡和稳定性研究,模型不仅可以有效地反映运动姿态的变化,而且可以将面部信息与头部变化结合,避免由于多个关键点的异质性和随机性而干扰姿态分析[10]。本文在提取驾驶员面部关键点后,以关键点坐标为输入建立面部倒立摆模型,分析驾驶员面部运动的不稳定性,作为判断驾驶员疲劳状态的主要依据之一。在每个视频帧内提取驾驶员的面部关键点信息,确定4点与相应2点之间的连接关系,建立连杆系统,倒立摆模型建立过程如图4所示。
图4 “倒立摆”模型建立过程Fig.4 Modeling process of inverted pendulum
内聚是从功能角度度量模块内的联系,描述的是模块内的联系;耦合是结构中各模块之间相互连接的度量。在提取的面部关键点中,通过分析驾驶员疲劳表现与面部关键点变化的相互关联情况,依据“高内聚、低耦合”的原则选取与左右眼部、鼻子及嘴部相关的关键点,按图4(a)所述,将其拟合为倒立摆模型的特定关键点,其中,左右眼部各包含10个关键点(xli,yli),(xri,yri),鼻子8个关键点(xni,yni),嘴部20个关键点(xmi,ymi),每个模块内的所有关键点均参与质点坐标计算,而模块之间的质点坐标计算相互独立,互不影响。通过以上方式最终确定倒立摆模型的4个质点,各质点坐标的计算式为
式中:(Xi,Yi)分别为图4(a)中左眼、右眼、鼻子及嘴部计算出的倒立摆模型中心质点坐标,i=[L,R,N,M] ;图4(b)中各质点间连线为倒立摆的连杆;图4(c)为倒立摆模型在驾驶员面部的具体位置细节。
驾驶员的面部动作会引起连杆系统各质点的变化,其变化的幅度与驾驶员当前的疲劳状态相关。因此,计算倒立摆模型中质点的动能与质点之间连杆的势能表示头部姿态与面部信息稳定程度的变化情况,形成能够反映出疲劳驾驶与非疲劳驾驶之间差异的物理量。
提取面部关键点,并计算图4(a)中质点L,R,N,M的2D平面坐标点,驾驶员头部移动情况与倒立摆物理量建模的对应关系如图5所示。
图5 动能势能示意Fig.5 Schematic diagram of kinetic energy and potential energy
首先,取两帧之间的坐标变化情况,计算两个质点的移动速度vi为
式中:mk为质点的质量,由于本文选用的为2D 平面坐标系下的坐标点,故质点的mk=1。
动力学中,重力是势能的来源。求解连杆势能时,首先要结合两个质点构建连杆,计算出连杆的重力位置变化hj,即
基于重力位置hj,j=[1,2,3],可计算连杆的势能Ep,即
式中:g为重力加速度。
为体现驾驶员在不同疲劳状态的运动不稳定性,需建立一个尽可能简单,充分描述运动姿势的描述模型,即倒立摆模型。该模型不仅可以有效地反映运动姿势的变化,而且可以相对简化驾驶员面部的结构,避免由于多个关键点的不同性质和随机性而干扰疲劳特征的分析。基于倒立摆模型提取的动能与势能可以表示驾驶员不同疲劳状态下驾驶行为稳定性的变化,将其与头部欧拉角共同作为疲劳特征,可以将头部与面部信息细化的结合,充分反映疲劳时的整体行为变化。
非疲劳驾驶状态的面部动作在频率与幅度上在一定范围内随机波动,而疲劳驾驶时,面部与头部动作会随着驾驶员的疲劳发生变化,伴随着打哈欠、点头及眨眼等动作的增加,导致一段时间内疲劳特征的混乱程度发生较大变化。为将不同状态下的混乱程度变化差异性融入疲劳检测的方法,本文在分类实验前结合疲劳特征并取一定长度的序列构建对应关系,用信息熵的方法将头部姿态欧拉角、倒立摆模型动能以及倒立摆模型连杆势能进行混乱程度统计,可以表述一段时间内驾驶员疲劳特征的变化情况。
在计算疲劳特征信息熵的过程中,通过多次对比实验后,选取实验中最佳的窗口长度(N=50),计算疲劳特征的信息熵用以区分疲劳与非疲劳的特征离散程度,在每组疲劳特征中,求均值μ与标准差σ′,从而可计算间隔n,即
将n作为区段值对D的个数划分,分别统计在区间(0,n),(Δ,n+Δ),…,(nmax-500,nmax) 中各个D的个数ni,最终的信息熵结果为
卷积神经网络由于其卷积运算操作的优势,能够更高层次地表达原始数据,CNN 一般包含卷积层、池化层和全连接层,其中,卷积层是其核心,主要用于输入数据的特征提取和映射输入数据与不同的卷积核进行卷积计算,得到包含输入数据的不同特征的映射矩阵,即
式中:Xm+1,Xm为该层和下一层的输入;Wm为权重矩阵;Bm为偏置;σ为激活函数。
借助CNN 优越的特征提取能力,对计算的信息熵数据进行二次特征提取,得到更深层次的代表驾驶员疲劳状态变化的特征信息。
LSTM 是一种改进的递归神经网络(RNN)[11],通过在隐藏单元中加入自连通“门”解决梯度消失问题。如图6 所示,LSTM 网络的计算节点包括输入门、输出门、遗忘门和记忆细胞Cell,核心思想在于两条黑色水平线所代表的信息流,以及当前时间(Xt)的输入与之前时间(ht-1)的输出的组合。图中,tanh为双正切激活函数。
图6 LSTM网络结构Fig.6 LSTM structure
本文通过使用卷积神经网络CNN 与LSTM 网络结合的方法预测驾驶员的疲劳状态,由于卷积神经网络的局部特征学习能力可以有效对信息熵数据进行二次特征提取;长短时记忆网络是循环神经网络(Recurrent Neural Net-work,RNN)的改进学习算法,在处理与时间相关的序列中有良好的应用效果,能够学习时序数据的长期依赖关系,因此,两者的结合增强了与驾驶员疲劳相关特征的提取能力。使分类预测的结果结合时间特性。
本实验的训练和检测任务硬件配置为4.0 GHz AMD CPU,NVIDIA GTX 1650 GPU 上实现的,软件环境与深度学习框架为Python3.7 和paddlepaddle。基于NTHU-DDD(National TsingHua University Drowsy Driver Detection)驾驶员疲劳检测视数据集进行训练与预测[12]。整个数据集包含36名不同种族的受试者,每个受试者在5种不同场景下进行模拟驾驶,并录制640 pixel×480 pixel 的视频,场景包括:白天戴眼镜、戴太阳镜和不戴眼镜,夜晚戴眼镜和夜晚不戴眼镜。数据集视频的每个帧包含了二分类的标签,即疲劳或非疲劳,实验中的训练数据集由18 名受试者的360 个视频剪辑(722223 帧)组成。验证数据集由4 名受试者的20个视频片段(40133帧)组成,测试数据集由3名受试人的15个片段(30111帧)组成。数据集的部分示例如图7所示。
图7 数据集示例Fig.7 Dataset example
为验证使用疲劳特征信息熵对疲劳检测的有效性,提取驾驶员面部倒立摆模型生成的动能与势能,并结合头部姿态欧拉角方法进行对比实验。其中,对部分数据集生成的疲劳特征数据对比如图8所示,对比结果选取的特征为头部姿态的pitch角、鼻子部位动能及鼻部与嘴部连杆势能这三者的信息熵结果。
图8 疲劳特征输出对比Fig.8 Comparison of fatigue features output
在图8 中,星型点代表疲劳状态,球形点代表非疲劳状态,观察疲劳和非疲劳状态分布情况可以发现,提取的驾驶员疲劳特征会随着驾驶员的动作波动,当其非疲劳驾驶时,动作波动范围相对固定,此时,疲劳特征的大小也会在固定的范围内波动,即图8中的球形散点部分。但在驾驶员疲劳时,会产生较多与疲劳相关的动作,造成疲劳特征的大小产生偏离正常范围,即图8中的星型部分。疲劳特征数据的大小波动可以体现出驾驶员不同状态下的驾驶情况,利用信息熵可以表示出这种混乱程度,能够体现出驾驶员的疲劳情况。
在考虑疲劳特征时间特性的基础上,结合滑动窗口的方式计算疲劳特征的信息熵,表示驾驶时各疲劳特征的变化程度。由于数据集包含的多种场景以及输出疲劳特征的多样性,因此,分类实验前,本文详细对比分析了疲劳特征信息熵,同一场景下不同特征的信息熵如图9所示,即白天不戴眼镜的情况下,动能、势能和欧拉角生成的信息熵对比;此处,选取同一个受试者信息熵对比作为示例,在N大于200时,驾驶员的驾驶状态标签由非疲劳转化为疲劳。
图9 同一场景下不同特征的信息熵Fig.9 Information entropy of different features in same scene
如图9 所示,在一个滑动窗口内,信息熵的大小主要受窗口内数据混乱程度的影响,相比较非疲劳情况下的疲劳特征,疲劳状态会由于打哈欠等动作的增加产生更多偏离巨大的数值,这些偏离值会造成信息熵高于其他情况。在同一场景下,不同的特征在驾驶员相同的状态下,波动趋势相似。同样的,实验选取其中一个特征在不同场景下的信息熵变化,如图10所示。
图10 同一特征不同场景下的信息熵Fig.10 Comparison of fatigue features output
通过图10 可以看出,当N大于200 后,信息熵的输出结果由于疲劳状态时疲劳特征的波动而变得更大,而驾驶员在非疲劳状态下驾驶时,头部与面部的波动范围有限,虽然信息熵也处在不停波动的状态,但变化幅度较小。此外,非疲劳驾驶时也会存在头部偏移较大的情况,会造成这种状态下疲劳特征的信息熵也处于较大的数值,但由于持续时间短,因此,在最后的疲劳判定中,基本不会影响疲劳的分类预测。
疲劳特征信息熵是对疲劳特征混乱程度的一种表示,为更好地验证信息熵在疲劳检测中的鲁棒性,本文在分类实验中选取其他可以表示离散程度的方法加入对比实验中,即均方误差(MSE)和标准差(SD)。
为进一步探讨提取的疲劳特征信息熵对疲劳检测的有效性,本文对比分析多种不同分类器对驾驶员疲劳状态的分类性能,CNN-LSTM网络,SVM模型和混合高斯模型(Gaussian mixture model,GMM)。分别对每种分类模型进行训练和预测。基于数据集生成的信息熵进行训练和测试,在本文中,使用F1进行分类性能评估,即
Rprecision和Rrecall用来评价疲劳的分类结果;RF1值为Rprecision和Rrecall的调和平均数,综合两个指标用来评估反映整体的指标。对生成的疲劳特征信息熵进行训练,生成的训练模型用于分类预测,使用不同分类方法对不同信息(SD标准差、MSE均方误差、H(X)信息熵)的疲劳检测结果如表1所示,分类结果在各分类方法中进行了多次实验以及参数优化,以使其达到该方法下的最佳分类模型。
表1 不同场景下分类结果F1值对比Table 1 Comparison of classification results in different scenarios F1 values (%)
在表1中,通过不同的分类方法对不同离散程度的疲劳预测结果可以看出,基于CNN-LSTM 对驾驶员的疲劳预测效果最好,其中,使用疲劳特征信息熵的分类方法在输出结果中达到最优;面对不同场景下提取到的疲劳特征,在分类实验中存在着一定差异,在多种分类实验中,晚上戴眼镜的F1均低于其他情况,说明本文基于计算机视觉在提取驾驶员头部与面部信息时会受到光照强度的影响,但最终结果显示,其准确率仍可以很好地完成驾驶员疲劳检测的任务。
优化后的SVM 模型同样取得了良好的效果,但与CNN-LSTM 分类模型相比,后者在各种场景下的效果都优于SVM 模型,这是由于CNN-LSTM对于特征有着更深层次的处理,并且基于时序特性的分类方式符合疲劳发生的过程,在分类时,是将一段时间的疲劳特征信息熵输入分类网络进行分类预测。在GMM的分类方法中,使用疲劳特征信息熵的预测结果低于疲劳特征的标准差。
在CNN-LSTM的分类网络中,LSTM层数和神经元数对预测精度的影响最大,因此,确定其在实验中的最佳取值会极大地提高疲劳状态预测的结果。为确定两者的最优取值,将模型的具体实验数据通过试验对比,结果如表2所示。
表2 基于CNN-LSTM的不同分类方法比较Table 2 Comparison of different classification methods based on CNN-LSTM
NTHU-DDD数据集对视频的每帧均进行了标注(疲劳或非疲劳状态),本文基于CNN-LSTM网络通过不同的改进方式对驾驶员的疲劳状态进行分类检测。表2中的分类结果显示,当改变网络层数和神经元数,会对驾驶员的疲劳检测结果产生影响,并且随着层数和神经元数的增加,对驾驶员疲劳的预测结果明显变差。这是由于输入的信息熵为低维数据,此时,用于分类的CNN-LSTM模型结构不宜过于复杂。
此外实验结果显示,非疲劳状态的分类结果低于疲劳状态。这是因为非疲劳时,驾驶员由于观察周围路况也会存在头部偏移较大的情况,会造成小部分误判,但整体准确率仍处于较高状态,可以有效检测驾驶员的疲劳状态。
表1和表2统计了多种情况下提出疲劳检测方法的预测结果。所提出的疲劳特征信息熵在CNNLSTM分类模型中获得最高的预测精度,进一步表明,CNN 的特征挖掘能力与LSTM 网络的结合,能够有效地集成多个信息源中提取的时间信息和特征信息,并建立时间和特征信息之间的关系。通过综合疲劳特征的时间信息和疲劳特征之间的关系,所提出的方法可以更准确地识别疲劳,用于驾驶员疲劳检测。
为验证本文所提方法的有效性,将本文与其他采用不同特征的疲劳检测方法的实验结果进行对比分析,对比方法选取的疲劳特征包括:基于面部表情、头部姿态欧拉角与眼嘴部开合度。具体结果如表3所示。
表3 本文方法与现有检测方法的比较Table 3 Comparison between this method and existing detection methods
通过表3 的对比结果发现,虽然文献[13]使用了多特征融合的方法,但由于疲劳特征的设计相对简单以及分类方法未考虑疲劳特征在时间上的关联性,最终的检测结果为87.84%。文献[14]也是基于面部特征进行驾驶员的疲劳状态检测,选用VGG-FaceNet模型并进行轻量化地微调,选取驾驶员面部表情作为疲劳特征的检测结果为87.09%。这种方法虽然独特且可以检测驾驶员疲劳状态变化,但其准确率仍需进一步提升。本文提出的方案基于面部与头部特征融合后进行疲劳状态的检测,通过建立敏感反应驾驶员精神状态的疲劳特征,使整个检测过程具有较高的稳定性和准确率,最后,本文通过使用CNN-LSTM分类方式充分利用数据的时序性。通过对比发现,本文提出模型的F1 值为95.04%,满足了驾驶员疲劳检测的需求。
本文提出一种基于倒立摆模型和信息熵的驾驶员疲劳检测方法,主要创新有以下两点:
(1)利用驾驶员在不同状态下面部与头部的稳定性不同的特性,将倒立摆模型平衡控制的概念引入疲劳特征的设计,提取驾驶员面部关键点后,以“高内聚、低耦合”的原则确定倒立摆模型的4个质点,并以此计算可以反映驾驶员疲劳状态变化的倒立摆模型动能与势能。
(2)针对驾驶员疲劳状态随时间变化特点,将倒立摆模型动能、势能以及头部欧拉角的状态值结合滑动窗口计算疲劳特征信息熵值,以此反映驾驶员疲劳状态随时间变化的趋势,并将信息熵值作为分类网络的输入,实现疲劳状态预测。
本文结合卷积神经网络局部特征学习能力以及LSTM 处理时间序列数据的良好性能,基于CNN-LSTM 驾驶员疲劳状态分类模型,增强驾驶员疲劳相关特征提取能力,同时,使分类预测符合疲劳发生的过程。实验表明,本文方法的预测准确率达到95.04%,能够很好地预测驾驶员的疲劳状态。