朱玉斌,延向军,申旭奇,卢兆林
(1.中国矿业大学 信息与控制工程学院,江苏 徐州 221116;2.山西潞安集团余吾煤业有限责任公司 自动化科,山西 长治 046199;3.山西潞安环能股份有限公司 常村煤矿,山西 长治 046102)
疲劳检测技术分为3类:基于生理特征的方法[1],这类方法检测结果准确,但会干扰司机驾驶;基于车辆特征的方法[2],这类方法具有非侵入性,但司机的驾驶习惯会影响检测的准确性;基于视觉特征的方法[3],这类方法对司机的干扰小,准确率高。周云鹏等[4]用LBP算子表征人眼并采用SVM区分睁眼和闭眼,然后结合嘴巴与头部的状态综合分析驾驶员的状态。此类方法采用人工特征训练分类器判断驾驶员的状态,特征的选择对结果的影响较大。白中浩等[5]用人脸关键点计算眼睛和嘴巴宽高比判断司机状态。该方法降低了算法复杂性,但结果易受光照变化和遮挡的影响。近期,基于CNN的疲劳检测成为研究的热点。赵雪鹏等[6]用眼部关键点计算眼睛宽高比判断司机的状态。Fang Zhang等[7]用人脸关键点提取眼部图像,然后用CNN判断眼部状态。这类方法利用CNN自动提取特征具有更好的表达能力,但需要较大量的数据且训练过程复杂耗时,上述基于CNN的方法均采用单一的疲劳参数,不能够准确地描述司机的状态。
宽度学习[8]在中小数据集上的识别准确率与深度学习相当,但训练和测试时间比深度学习短。本文采用宽度学习系统判断司机的眼睛和嘴部状态,然后把眼睛、嘴部和头部状态序列作为二级BLS网络的输入,检测司机的疲劳状态。
图像的质量是影响疲劳检测精度的重要因素之一,但在车辆行驶过程中,复杂的光照条件以及眼镜的遮挡都使疲劳检测的准确率下降。红外光能够弥补夜间光照不足并且可以透过眼镜采集到人眼图像,所以,采用红外摄像头作为图像采集设备。非正脸的头部姿态会导致人脸检测算法的准确度降低,进而使关键点定位不准,不能准确地提取出感兴趣区域。针对该问题,通过渐进校准网络(PCN)[9]检测人脸。
PCN级联3个CNN网络由粗到细的预测人脸框[10]和人脸角度值。如图1所示,PCN-1在预测人脸标记框的同时对人脸角度执行二分类任务,把[-180°,180°]的人脸翻转到[-90°,90°]。同理,PCN-2对人脸角度进行三分类,把人脸的角度范围限制到[-45°,45°]。PCN-3使用角度偏差回归预测出精准的角度。如式(1)所示,3个网络预测的角度之和为最终的人脸偏移角度
θRIP=θ1+θ2+θ3
(1)
图1 PCN人脸检测
(2)
用训练好的模型对测试集进行关键点检测,将预测的人脸关键点坐标标记在图像上,如图3所示。
图3 关键点定位
面部五官的比例一般符合“三庭五眼”的标准[13]。如图4所示,本文根据人脸关键点和五官比例的特点提取双眼和嘴巴。眼部和嘴巴的提取方式如式(3)和式(4)所示。
图4 感兴趣区域定位
(3)
(4)
式(3)中的x1为特征点检测网络定位到的左眼中心的横坐标。同理,x2为右眼中心的横坐标。眼部区域的宽和高由左右眼中心横坐标的差乘以相应的系数得到。式(4)中的x4和x5分别为左侧和右侧嘴角的横坐标,嘴巴区域的宽和高由二者的差乘以相应的系数得到,把二者的中心点作为嘴巴区域的中心。
相比于传统的机器学习算法,深度网络的分类与回归效果都有极大提升,但深层结构的超参数过多,导致模型的收敛时间很长。为了减少模型的训练时间,提高完成任务的效率,陈俊龙提出宽度学习系统,宽度学习系统结构如图5所示。BLS处理数据的流程如下:首先,用原始的数据生成映射特征。然后,用随机权重处理映射特征生成增强特征。最后,串联映射特征与增强特征作为单层感知器的输入。
图5 宽度学习系统结构
(5)
Hj=j(ZiWhj+βhj),j=1,…,m
(6)
生成第i组映射特征Zi的方法如式(5)所示。其中,X表示原始输入数据,Wei表示呈高斯分布的随机权重矩阵,βei表示偏置常量,φi表示稀疏化和正则化处理函数。生成第j组增强特征Hj的方法如式(6)所示。其中,Zi=[Z1,…,Zi] 为所有的映射特征,Whj是经过正交规范化后的随机矩阵,βhj为偏置常量,j为非线性函数。BLS的表达式如式(7)所示。其中,Hj=[H1,…,Hj] 为所有的增强特征,Wm为连接权重,Y为网络的输出。在进行建模时,可以通过改变i和j的值来应对不同复杂度的任务
Y=[Z1,…,Zi|(ZiWh1+βh1),…,(ZiWhj+βhj)]Wm=
[Z1,…,Zn|H1,…,Hj]Wm=
[Zi|Hj]Wm
(7)
在生成映射节点的过程中,BLS对原始数据进行高斯滤波和稀疏表示,降低原始数据的噪声和线性相关度。在生成增强节点的过程中,BLS用正交矩阵把数据映射到高维子空间,使数据在高维上线性可分,并进一步用非线性函数处理数据,增加网络模型的非线性。
图像作为网络输入的处理方式如式(8)所示。其中,I(n,n) 为位置 (n,n) 的像素值,X为网络的输入。标记每幅眼睛和嘴巴图像的状态作为输出标签Y, 其中,睁眼或张嘴标记为0,闭眼或闭嘴标记为1[14]。
设XZH=[Z1,Z2,…,Zn,H1,H2,…,Hm], 则网络连接权重的求解如式(9)所示。相比于多层神经网络通过反向传播的求解方式,BLS通过伪逆的求解方法,极大地缩短了网络的训练时间。此外,BLS还支持3种增量学习方法,包括增强节点增量,特征节点增量和输入数据增量。增量学习的方式,只要计算新加入节点的伪逆,就能完成对网络参数的更新,使网络的训练时间进一步缩短
X=[I(1,1),…,I(1,n),I(2,1),…,I(n,n)]
(8)
Wm=(XZHTXZH+αI)-1XZHTY
(9)
如图6所示,头部姿态由3种基本姿态(pitch,yaw,roll)叠加而成。当司机处于疲劳状态时,头部会向下转动。头部绕y轴小幅度转动可以认为司机在观察视镜,当幅度过大时表明司机在违规查看路径。
图6 头部姿态
利用非线性最小二乘法建立人脸姿态模型,如式(10)所示。采用POSIT[15]计算基本头部姿态角度。 (α,β,γ) 分别为人脸在3个方向上的旋转角度,n为构建模型的人脸特征点个数,qi为进行人脸估计图像的面部特征点,pi为三维通用标准模型的特征点,R为旋转矩阵,t为空间偏移量,C为伸缩因子
(10)
R=Rx(α)Ry(β)Rz(γ)
(11)
(12)
(13)
(14)
当司机低头超过30度即pitch<-30°或左右转头超过30度即|Yaw|>30°时头部状态Sh设置为1否则为0,如式(15)所示
(15)
驾驶员进入疲劳状态的表现有,闭眼时间增长,打哈欠以及头部俯仰角度变大,并且眼睛状态,嘴巴状态和头部俯仰的变化在时序上存在着上下文关联性。因此,构建面部状态时序序列表征人脸的状态,如式(16)所示。其中,Sen,Smn,Shn分别表示眼睛,嘴部和头部在第n帧的状态
(16)
将疲劳和正常状态下的面部状态时序序列S分别标记为1和0。用S及其标签训练一个BLS疲劳检测网络。疲劳检测的流程如图7所示。
图7 疲劳检测流程
实验平台处理器为Intel(R) Core(TM) i5-4460,主频3.2 GHZ,内存8 GB。kaggle人脸关键点数据集包含7000张标记有15个人脸关键点的96×96人脸灰度图像。选取其中3000张图像并在水平和铅直方向旋转,将数据扩充到9000张,用6750张图片作为训练数据,2250张作为测试数据。测试集的均方误差为1.95,表明单个关键点在图像上的平均偏移误差值为1.4(图像大小96×96),能够满足感兴趣区域提取任务的精度要求。由于缺少疲劳检测相关的数据库,采用自建的面部疲劳视频数据(MT-F)验证算法的有效性。采集9名志愿者各9分钟在不同光照条件下佩戴透镜,太阳镜和裸眼3种情况下的疲劳和正常状态下的视频,部分数据如图8所示。从视频中截取睁眼和闭眼图像各2000张,3000张用于训练,1000张用于测试,同时,截取张嘴和闭嘴图像做训练。从各类视频中间选取连续的60帧(帧率为20 fps)图像为一组并对每张图像处理得到面部时序状态序列S的集合,将该集合分成3:1分别作为疲劳检测网络的训练和测试集。
图8 数据样本
宽度学习网络通过交替改变不同种类节点数量的方式调整网络结构。眼睛状态识别网络的结构调整过程如表1所示。首先,保持网络中映射节点的个数不变,逐步设置更多的增强节点,网络的识别准确率上升。当网络的增强节点过多时,网络过拟合,识别准确率降低。此时,将增强节点的数量恢复到上一次的值并保持不变,然后逐步设置更多的映射节点,网络的识别准确率上升,直至网络的识别准确率下降时,停止网络的调整。最后,采用识别准确率最高的网络作为结果。嘴巴状态识别网络包含100个映射节点和2500个增强节点。疲劳检测网络包含50个映射节点和600个增强节点。BLS眼睛状态识别网络的平均单次训练时间为1.6 s。
表1 BLS眼睛状态识别网络调参过程
DROWSY[16]数据库包含14个测试者每人3段在不同疲劳程度下的视频,不包含戴墨镜的情况。表2展示了在MT-F和DROWSY数据库上人眼状态识别的结果。由于MT-F有更复杂的光照条件和墨镜遮挡,在MT-F上的识别准确率要低于在DROWSY上的识别准确率。嘴部状态的识别准确率为98.3%。
表2 眼睛和嘴部状态识别结果
用视频(每段包含60帧图像)对算法做测试,结果见表3。为了验证多参数融合的效果,分别使用眼睛状态序列训练的疲劳检测网络和使用面部状态序列训练的网络对视频进行检测。实验结果表明,多参数融合网络的检测准确率更高。
为验证提出的算法的优越性,分别从检测准确率和检测时间两个方面与其它疲劳检测算法进行对比,结果如表4
表3 疲劳检测结果
所示。提出的算法的检测准确率高于CNN+PERCLOS,这是因为多参数融合提升了检测的准确率。与传统方法相比,基于BLS和CNN的方法的检测时间变长,这是因为网络中的参数较多。在使用多参数的情况下,提出的算法的检测时间仍比基于CNN的方法少6.18 ms。
表4 算法性能对比
本文利用红外摄像头采集图像,减少因光照变化和戴眼镜对检测结果产生的影响,采用CNN回归网络检测人脸关键点,基于此提取感兴趣区域并用宽度学习系统对面部器官状态进行判别,最后,通过二级宽度学习网络融合眼睛,嘴部和头部状态序列推断司机状态。检测结果表明,本算法的检测准确率为94.9%,单帧检测时间为52.43 ms,能够满足疲劳检测系统实时性与准确性的要求。