基于卷积专家神经网络的疲劳驾驶检测
2020-11-03董超俊林庚华吴承鑫黄尚安
董超俊,林庚华,吴承鑫,黄尚安
(五邑大学 智能制造学部,广东 江门 529000)
0 引 言
目前疲劳驾驶检测研究主要为3个方向:基于人体生理信号、基于计算机视觉、基于车辆运行状况的疲劳驾驶检测,基于计算机视觉的非接触性检测目前是研究的热门[1]。在文献[2]中,作者提出一种基于实时增强局部约束模型的多信息疲劳检测方法,该方法能够克服光照和位姿变化的影响,实现对驾驶员的实时疲劳驾驶检测,具有较强的鲁棒性。在文献[3]中,作者进行疲劳驾驶中的人脸检测研究,该算法针对使用ASM(active shape model)算法实现人脸194关键点检测,并通过定位眼睛位置,计算眼睛闭合度而判断驾驶员疲劳状态。由于眼睛的闭合在疲劳驾驶检测中占据极其重要的分量,文献[4]通过眼白分割,实现了高精度的眼睛检测与定位,从而实现准确率较高的疲劳检测。以上方法关键都在于人脸、人眼的提取,并且疲劳状态判断过分依赖于眼睛的闭合度。
针对以上问题,通过多任务级联卷积神经网络对人脸进行粗提取后,使用一种自适应核相关滤波器进行人脸跟踪,替换逐帧检测人脸,以提高其鲁棒性,降低漏检概率。通过计算CE-CLM所检测到的人脸68个关键特征点的像素位置,得出一定时间内眨眼次数、平均眨眼速度、PERCLOS(percentage of eye closure over the pupil over time)、打哈欠次数、打哈欠帧数占比、低头次数以及低头帧数占比,实现高精度的疲劳检测参数提取,最终通过SVM进行多特征融合分类,实验结果表明本文方法具有较高的准确率。
1 KCF目标跟踪算法
(1)
(2)
(3)
其中,H表示共轭转置。对上式两边同时傅里叶变换,其表达式如下
(4)
(5)
通过核矩阵傅里叶变换,可以将式(5)对角化,并且使其在新的空间线性可分,其表达式如下
(6)
其中,kxx表示核矩阵K=C(kxx)的第一行,采用高斯核可以得到下式
(7)
由于传统KCF算法无法自适应目标尺寸变化,而驾驶员在驾驶位上操作时,人脸尺寸变化范围较小,其尺寸倍数为0.4至1.6,所以为人脸建立小幅度图像金字塔,从而获得目标不同的尺度值的尺寸集。人脸通过核相关滤波器之后得到响应值,将输出的响应进行比较,综合判断并筛选其最佳尺度值作为输出,为下一帧目标更新尺度值再进行跟踪,解决了KCF跟踪器无法自适应目标尺寸变化的问题[6,7],如图1所示。
图1 改进的核相关滤波器
2 CE-CLM人脸关键点检测
人脸关键点检测使用CE-CLM,该模型主要由两个部分组成:响应图的计算和形状参数更新,前者由卷积专家网络实现,后者由点分布模型实现[8,9]。在迭代过程中,所有标记点的位置更新是互相影响的,并使用下式进行优化目标函数
(8)
卷积专家网络为局部分类器,首先采用卷积神经网络计算响应图,通过评估各个像素位置的标记点对齐概率,对标记点进行准确定位。它采用以标记点为中心的n×n像素区域作为输入,输出为每个像素位置评估标记点校准概率的响应图。在卷积专家网络中(如图2所示),首先作为输入的ROI在规格为500×11×11的对比度归一化卷积层进行Z-score归一化,然后计算输入与内核之间的相关性,将输出作为输入传送到200×1×1的卷积层进行卷积操作。
图2 卷积专家神经网络结构
卷积专家网络最重要的连接层为混合专家层,能通过专家组合对不同标记点外观原型进行建模,建立最终对准概率模型。该层是以sigmoid作为激活函数的100×1×1的卷积层。由每个独立的专家对对齐概率的投票,将所得到的概率用sigmoid激活函数激活,与最后一层的非负权重结合得出响应图。为了确保计算效率,ME层中不包含池化层,因为池化层将会降低检测的精度。
式(8)的迭代过程可以简述为将图片的ROI作为输入,输出为评估单个标记点对齐的概率响应图,通过式(9)将标记点i拟合到位置xi
(9)
3 结合KCF与CE-CLM的疲劳参数检测算法
3.1 结合KCF与CE-CLM算法
本文结合KCF人脸跟踪算法和CE-CLM人脸关键点检测算法如图3所示,通过相机进行人脸粗定位,再用KCF算法取代逐帧检测人脸,降低漏检、误检的概率,再使用CE-CLM算法进行人脸关键点检测,结果如图4所示。根据关键点的像素位置以及3.2节、3.3节所阐述的算法检测眨眼次数、PERCLOS、眨眼速度、哈欠次数、哈欠帧数占比、低头次数及低头帧数占比,其中PERCLOS为眼睛闭合度大于80%所占帧数比例,平均眨眼速度为上下眼睑之间的距离与每次眨眼的耗时之比,上下眼睑的距离为亚洲人的平均距离7.54 mm。
图3 结合KCF与CE-CLM算法疲劳参数检测
图4 结合KCF与CE-CLM的面部关键点检测
3.2 眼睛闭合度及嘴巴开度的检测算法
基于计算机视觉的疲劳驾驶检测,人眼的睁开、闭合检测起到至关重要的作用,并且直接影响到疲劳状态的判定。目前比较流行的眼睛闭合度检测算法为EAR(eye aspect ratio),先通过人眼检测、定位,再运用EAR算法计算眼睛长度和宽度的比值来确定眼睛的闭合程度,并且适用于嘴巴张开程度的计算,即MAR(mouth aspect rariop),如图5(a) 所示。
图5 眼睛闭合度算法
通过计算眼睛的6个关键点P2(X2,Y2)和P6(X6,Y6)、P3(X3,Y3)和P5(X5,Y5)以及P1(X1,Y1)和P4(X4,Y4) 之间的欧式距离可以得到EAR值,其表式如式(10)所示
(10)
由于EAR算法依赖于人眼6个关键点检测的精确度,当其中某个点产生检测误差,会在一定程度影响眼睛闭合的检测,针对于此,本文提出一种以角度计算眼睛闭合度的算法,称为角度检测法(tangle detect,TD)。通过眼睛的上眼睑与眼睛两侧之间的夹角来判断眼睛是否闭合。如图5(b)所示。P(X,Y)可以由P2(X2,Y2)和P3(X3,Y3)计算得出,α的表达式如式(11)所示
(11)
通过计算嘴巴的张开度以检测驾驶员的打哈欠行为,如图6所示,由于在交流、微笑等情况下嘴巴形状变化较大,通过EAR算法计算显然会出现误差,所以本文采取分别计算点P33(X33,Y33)与点P62(X62,Y62)和点P66(X66,Y66)之间的欧式距离,由式(12)计算得到嘴巴张开度H,该算法称为“H”,从而判断驾驶员是否打哈欠
(12)
图6 嘴巴张开度计算
3.3 头部姿态估计
在计算机视觉中,物体的姿态是指相对于相机的相对取向和位置。文献[10]中给定5个关键点,采用PNP算法计算投影关系从而估计头部姿态,取得了不错的效果。本文同样采用PNP算法,选取眼睛、鼻子和嘴巴的7个特征点形成姿态估计面。如图7所示,其中头部模型引自文献[11]并自行标点。
图7 头部姿态估计
相机坐标、世界坐标以及图像平面的关系如图8所示。通过世界坐标系可以计算出P点在相机坐标系的位置
(13)
其中,R、T为头部姿态估计参数,p点在成像平面坐标系中可知,若相机不存在径向畸变,令图像中心为光学中心并且令焦距近似为像素宽度。如式(14)所示
(14)
其中,q为投影比例,通过求解R、T矩阵获取头部姿态信息。
图8 世界坐标、相机坐标与成像平面坐标关系
4 实验结果及分析
本文实验主要在数据集“YAWDD[12]”及自制数据集上进行。“YAWDD”数据集主要由349个视频组成,包括男性、女性在驾驶位上的正常状态、交流状态以及眨眼、打哈欠状态;自制数据集包含多个实验人员进行眨眼、打哈欠、低头动作的视频序列,称为“Fatigue”。
4.1 眼部参数检测分析
根据本文所提出的眼睛闭合度检测算法TD与EAR算法。如表1所示,在YAWDD数据集和Fatigue数据集中检测出的数据中,KCF算法能够克服脸部部分遮挡,从而降低由于部分遮挡导致无法检测到人脸所带来的误差,结合KCF和CE-CLM的算法,使用本文所提出的“TD”算法能够提高眨眼的检测精确率,达到了93.36%与95.24%,比EAR算法提高了6.85%与1.65%,并降低误检率,鲁棒性更强。
表1 眨眼检测精确率数据
4.2 嘴巴参数检测分析
如图9所示,在“YAWDD”数据集中选取同个人的不同状态的3段视频,分别为正常状态、交谈状态、打哈欠状态,在普通状态下MO(嘴巴张开度)值曲线趋近于一条直线,而交谈状态波动较小,打哈欠时幅值较大且维持帧数较长。由此通过设置阈值与低于阈值持续帧数,判断驾驶员是否打哈欠。
图9 不同状态下MO值曲线
如表2所示,在YAWDD数据集和Fatigue数据集中检测出的数据中,结合KCF和CE-CLM的算法,使用本文所提出的“H”算法能够提高眨眼的检测精确率,达到了91.67%与98.83%,比MAR算法分别提高了3.67%与1.64%,并降低误检率,鲁棒性更强。
表2 哈欠检测精确率数据
4.3 头部参数检测分析
经过头部姿态估计,可以计算出人脸的3个Euler(欧拉)角:yaw(偏航角)、pitch(俯仰角)、roll(翻滚角),当头部姿态发生变化时,各个角的角度值也会发生变化,低头动作主要取决于俯仰角,当Pitch值达到一定值时便视为点头,而通过俯仰角计算头部是否进行了点头动作。
由于YAWDD数据集中缺少低头动作的数据,本文在“Fatigue”数据集上进行实验,12个视频分为3组进行检测,其中部分视频的Pitch值曲线如图10所示,当发生点头动作时,Pitch的幅值较大,通过设置阈值判断是否有低头动作,其精确率分别达到了94.34%、94.00%、93.33%,见表3。
图10 Pitch值变化曲线
表3 低头检测精确率数据
4.4 疲劳状态检测
通过本文所提出算法,获取驾驶员在一分钟内眨眼次数、PERCLOS、平均眨眼速度、打哈欠次数、打哈欠帧数占比、低头次数、低头帧数占比7项疲劳判断参数,使用SVM算法进行多特征融合分类。本次实验召集12名实验人员,获取2000组数据,其中通过主观判断和数据对比进行人工贴标签,分类为“疲劳”、“清醒”,训练集设置为1600组,测试集设置为400组,正确分类382组,准确率达到了95.5%,与文献[1,3,13]所使用的算法对比,本文算法准确率较高(表4)。
表4 疲劳状态识别方法比较
5 结束语
本文结合自适应KCF算法和CE-CLM算法,并提出基于角度的眼睛闭合度计算、嘴巴开度计算,在实测中取得了不错的效果,希望在接下来的研究中能克服光线问题,实现光线条件恶劣的情况下准确检测。经研究单纯的眼睛闭合检测无法准确识别疲劳驾驶员的疲劳状态,本文精确的多参数提取,能够计算眨眼次数、PERCLOS、平均眨眼速度、打哈欠次数、打哈欠帧数占比、低头次数及低头帧数占比并进行多特征融合分类,希望接下来的工作能实现多类别疲劳状态判断,如清醒、轻度疲劳、中度疲劳、严重疲劳、极度疲劳。