游 峰 梁昭德
(华南理工大学土木与交通学院 广州 510006)
疲劳驾驶是道路交通事故的主要诱因之一.根据美国国家高速交通安全委员会(NHTSA)的研究,有22%~24%的交通事故和驾驶人的精神状态有关;在我国,每年因疲劳驾驶而引起的交通事故占总起数的20%,占特大交通事故的40%以上.因此,研究基于驾驶人疲劳状态的事故预警系统,对减少交通事故、保障驾驶人的人身安全有重大意义.
目前,驾驶人疲劳检测方法主要有基于心电图( ECG)、脑电图( EEG)等生理数据的特征检测方法、基于方向盘转角[1]和车辆行驶轨迹等驾驶行为数据的特征检测方法,以及基于图像的眼睛、嘴巴开度等面部特征[2]的检测方法三种.其中,基于图像的驾驶人面部特征的检测方法具有非接触、低成本等优点,日益成为研究的热点.贾小云[3]运用AdaBoost级联分类器进行人脸特征检测,结合Haar提取人脸特征,LBP特征检测眼部和嘴角,最后用PERCLOS原理统计眼睛闭合频率完成疲劳状态判别.唐广发等[4]用灰度投影法和灰度变换标准差对人眼进行定位,再提取眼睛上下眼睑点获取眼睛开度的大小.杨非等先通过ASM算法对人脸特征进行定位,再应用灰度积分投影法,对瞳孔中心进行定位,增加准确度.牛耕田等[5]用Gabor小波提取图像特征,再用PCA方法进行特征降维完成识别.为提高驾驶人眼睛特征的准确率,刘志强[6]使用眼镜式眼动仪采集眼部注视点等特征参数训练SVM模型.除此之外,还有基于Tensor PCA[7]、隐马尔科夫模型[8]等技术的疲劳检测研究.
上述研究方法多在人脸检测和人眼检测的基础上研究驾驶人疲劳状态.但在车辆行驶的过程中,驾驶人面部成像干扰诸多,如光线入射角度变化、光照强弱变化、驾驶人面部受树荫叠加等.此外,为完成复杂驾驶任务,如并线、会车、超车等,驾驶人常调整视野朝向,头部姿态变化剧烈,这部分干扰常使人眼的定位和跟踪性能下降,甚至失效.
近年来,使用卷积神经网络提取图像特征的方法引起国内外的广泛关注,此类方法能够在训练迭代的过程中自动更新目标特征,不依赖于人工参与,并能挖掘目标的深层信息,从而比传统的模式识别方法更具鲁棒性.卷积神经网络的这些特性,为提升疲劳检测算法的鲁棒性提供新的解决方案,本文提出一个基于卷积神经网络的驾驶人疲劳检测系统,预处理阶段应用方向梯度直方图(HOG)、特征点检测、旋转变换三个算法解决头部姿态变化的问题,特征检测阶段应用卷积神经网络算法检测人脸特征,对抗驾驶人面部光照,树荫干扰等问题.疲劳检测阶段在前述算法的基础上,根据PERCLOS原则综合一段时间内驾驶人疲劳的帧数判断驾驶人精神状态,完成预警.
采用方向梯度直方图(HOG)算法从复杂背景中定位人脸.首先将采集的原始图像转为灰度图,再利用Gamma公式进行颜色空间的标准化,即
I(x,y)=I(x,y)gamma
(1)
然后,计算图像每个像素方向梯度的幅值和方向:
Gx(x,y)=H(x+1,y)-H(x-1,y)
(2)
Gy(x,y)=H(x,y+1)-H(x,y-1)
(3)
(4)
(5)
式中:H(x,y)为像素值;Gx(x,y)为水平梯度;Gy(x,y)为垂直梯度;G(x,y)为梯度幅值;α(x,y)为梯度方向.
将图像分成若干个单元格,一定数量的单元格组合成区间,对区间内单元格的梯度向量进行归一化,生成全局的特征描述向量.最后,使用SVM分类器在原图中寻找人脸的疑似区域.
在1.1的基础上,应用Conditional Local Neural Fields (CLNF)算法定位人脸特征点,特征点包括包括下巴的顶部、眼睛外部轮廓、眉毛的内部轮廓等.在人脸的疑似区域,CLNF定位方法通过将人脸特征点分布的先验知识与图像的局部差异作对比,得到可信的特征点分布.图1为标准的特征点示意图.
图1 标准特征点模板
为确保变换后人脸的眼睛和嘴唇与标准样本位置相同,提取人脸特征点对原人脸图片进行旋转变换,旋转的θ角由人脸特征点的检测值和标准值之间的夹角求得,变换矩阵见式(6).
*xT
(6)
卷积神经网络的核心结构是卷积层,卷积层常用作网络的输入层和中间层.该结构主要进行卷积计算,使用的卷积核与前一层的输入维数相同[9].卷积核的参数在训练时根据反向传播算法不断调整,以最小化误差.卷积计算表达式为
(7)
卷积层的输出直接与激活函数相连,激活函数的作用是给神经网络引入非线性,目前研究人员普遍采用ReLU激活函数,即
f(x)=max(0,x)
(8)
卷积层之间要通过池化层对上一层的特征输出进行降维以简少计算量,池化的原理是对一个区域内的所有元素进行运算,最终输出一个元素值代替这个区域内的所有输出,通常采用的方法有均值池化、高斯池化和最大值池化几种.文中网络采用最大值池化,使用一个区域内所有元素中的最大值作为该区域的输出.
网络的末端通常是全连接层和输出层,全连接层把上一层的输入压缩成一维的特征向量,供输出层进行分类,全连接层的表达式为
f(x)=W*X+B
(9)
输出层根据网络的实际需要设计损失函数,对于通常的多分类网络,采用Softmax函数,表达式为
(10)
包含以上基本结构的卷积神经网络(CNN)见图2.
图2 卷积神经网络(CNN)基本结构图
通常一个性能较好的神经网络需要使用大量的样本进行训练,每次处理相似任务都重头设计和训练网络将耗费大量的时间和资源,使用Finetune技巧可以复用已经设计好的原型网络,简化算法开发的流程.本文使用OpenFace卷积网络作为Finetune的原型网络,修改其网络结构,构建特定的驾驶人疲劳样本库并对该网络进行训练,实现疲劳判别.
OpenFace网络[10]是一个有代表性的开源的人脸特征提取网络,该由谷歌研究人员开发,使用LFW人脸数据集及YouTube Faces DB数据集训练及测试,分别取得了99.63% 和95.12%的正确率,能满足本文人脸特征提取算法的需要.该网络的原始结构见表1.
表1 卷积网络结构表
由表1可知,Openface网络最终输出一个128维的特征向量,该向量是人脸高级特征的抽象,包含有用于疲劳分类所需的信息,但不能直接用于本文的疲劳分类,因此在Finetune开始前必须对网络的结构进行更改,并对各层的学习率进行重新设定,主要步骤如下.
步骤1准备好疲劳驾驶的训练样本和测试样本.
步骤2计算疲劳驾驶数据集的均值文件,因为特定领域的图像均值文件会跟原始网络训练时使用的均值文件参数不一样.
步骤3修改网络结构参数,在网络的最后再增加一个输出层,损失函数使用Softmax,如式10所示,输出分类类别为2,训练开始时随机初始化该层权值.
步骤4设置网络训练参数,由于新的数据库较小,不适合进行全局finetune,故网络训练时仅对最后两层的权值进行更新.最后一层是全新的初始化权值,故学习率略微提高,最终网络训练参数表2.
步骤5加载原始网络的权值参数,启动训练.
为验证算法的鲁棒性和有效性,使用Ubuntu系统完成了疲劳检测网络的训练和测试,实验数据包括从132名志愿者中采集的5 160幅人脸图像,男女比例约为1∶1.每幅图像中人脸朝向,眼睛开度,嘴巴开度,是否佩戴眼睛等表情状态都略有不同,图像在不同光照条件下采集,包含实验室和室外采集的图像数据.数据库中的图像均经过预处理步骤,即人脸检测,特征点定位与仿射变换.处理过的图像随后被人工标注成正负两类,分别是疲劳人脸和非疲劳人脸,正样本数为3 360,负样本数为3 470,正负样本比约为1∶1.
表2 网络训练参数表
训练时将数据库分为样本集和测试集:5 830幅图像用于训练,1 000幅图像用于测试.训练输出曲线见图3,经过120批次迭代,网络的正确率稳定不再变化,表示特征提取模型完成.
图3 Finetune误差下降曲线
使用PERCLOS原则判断一段时间内驾驶人是否疲劳, PERCLOS可以简单表示为一段连续时间内驾驶人疲劳的图像帧数与总帧数取值,即
(11)
在清醒状态下0≤P≤0.15,在疲劳状态下P≥0.4.本文使用卷积神经网络算法代替传统的特征检测算法逐帧判断驾驶人状态,再计算P的取值判断驾驶人是否疲劳,因此,算法的精度取决于卷积神经网络对单帧图像疲劳判别的正确率.
实验准备阶段,在室内和实车环境下录制视频并分解为图像帧,使用本文算法逐帧进行检测,并将检测结果和人工标注结果进行对比,计算其敏感度TP/(TP+FP)和特异度TN/(TN+FN),这两个值分别表示该网络检测疲劳样本的准确率和非疲劳样本的准确率.
最终结果见表3,在测试中发现,室内环境下的疲劳检测的敏感度为97%,特异度为95%,,接近openface原始网络提取人脸特征的敏感度(99%)和特异度(95%).这表明openface网络提取出的人脸特征经过Finetune后确实可以用于疲劳分类,验证了本文算法的有效性.测试中还发现,进行实车测试时,网络的敏感度和特异度分别下降为88%和85%.造成这两项指标下降的原因是多方面的,最主要的原因可能是户外驾驶的过程中驾驶人头部会大幅摇动,这种干扰影响了HOG算法和CLNF算法的精度,使人脸歪斜地进入神经网络,从而使网络得出错误的结果,降低了准确率.
表3 室内和实车识别结果
为了说明本文算法对传统特征检测算法的优势,将本文方法与文献[9-12]等所提出方法的识别率进行对比,结果见表4.进行室内检测实验时,文中方法与基于Adaboost和小波的方法较为接近,准确度均大于95%,比基于瞳孔定位的准确度略高.进行实车检测实验时,与文献[13-15]的方法进行对比,该方法采用混合样本(室内加室外)测试,正确率为85%,而本文室外检测精度综合为87%,比之略高.综上,基于卷积神经网络的疲劳特征检测方法比传统的特征识别方法具有一定优势[16-19].
表4 文献数据对比 %
本文以驾驶人疲劳为切入点,在传统计算机视觉方法的基础上引入了卷积神经网络(CNN)方法进行特征提取和分类.与传统的基于瞳孔状态等单一视觉特征的检测方法相比,卷积神经网络能收集驾驶人脸部的所有信息,有效对抗户外恶劣环境的干扰,提高算法的鲁棒性.实验结果显示,该算法正确率高,鲁棒性好.
本系统也有一些不足,如无法在夜间进行工作,模型数据量大,不适合小型设备使用等.后期的研究工作将努力解决这些问题.
参考文献
[1] 金立生.基于转向盘操作的疲劳驾驶检测方法[J].交通信息与安全,2014(5):103-107.
[2] 杨非,庞玉,刘宗强.驾驶员疲劳检测中眼睛特征提取算法研究[J].机电一体化,2017(7):23-28.
[3] 贾小云.面部特征融合的电力作业头疲劳检测方法研究[J].电网与清洁能源,2016(9):17-21+28.
[4] 唐广发,张会林.人眼疲劳预测技术的研究[J].计算机工程与应用,2016(9):213-218.
[5] 牛耕田,王昌明,孟红波.基于多尺度稀疏表示的面部疲劳识别[J].计算机科学,2016(8):282-285+291.
[6] 刘志强.基于眼部特征的疲劳驾驶辨识方法研究[J].重庆理工大学学报(自然科学),2016(10):11-15+33.
[7] WU J,TRIVEDI M M. Simultaneous eye tracking and blink detection with interactive particle filters[J]. 2008(1):1-17.
[8] WANG J, XU W, GONG Y. Real-time driving danger-level prediction[J]. Engineering Applications of Artificial Intelligence, 2010,23(8):1247-1254.
[9] LE C Y, BENGIO Y, HINTON G. Deep learning[J]. Nature, 2015(2):436-444.
[10] 李东,彭亦功,一种基于HSV和LBP特征融合的眼疲劳诊断方法[J].自动化仪表,2016(10):77-82.
[11] 廖建国.基于眼动特征的驾驶员疲劳驾驶检测技术研究[J].湖南科技大学学报,2016(1):70-73.
[12] 赵雪鹏.基于级联卷积神经网络的疲劳检测[J].光电子·激光,2017(5):497-502.
[13] ZHANG R H,HE Z C,WANG H W,et al.Study on self-tuning tyre friction control for developing main-servo loop integrated chassis control system[J]. IEEE Access, 2017(5):664-670.
[14] YOU F,ZHANG R H,GUO L,et al.Trajectory planning and tracking control for autonomous lane change maneuver based on the cooperative vehicle infrastructure system[J].Expert Systems with Application, 2015,42(14):1593-1596.
[15] ZHANG R H,MA Y B,YOU F,et al. Exploring to direct the reaction pathway for hydrogenation of levulinic acid into gvalerolactone for future Clean-Energy Vehicles over a magnetic Cu-Ni catalyst[J].International Journal of Hydrogen Energy, 2017,42(4):185-194.
[16] 陈东伟,张喆,韩娜,等.多算法融合的疲劳驾驶监测算法设计与实现[J].太原理工大学学报,2016,47(4):518-522.
[17] 肖赛,雷叶维.驾驶疲劳致因及监测研究进展[J].交通科技与经济,2017,19(4):14-19.
[18] 蔡羽,徐朝阳.疲劳驾驶检测模块设计及仿真验证[J].电子设计工程,2018,26(1):183-188.
[19] 李岩,石柏军,张兆元,等.基于行车数据的长途客车驾驶员驾驶行为识别方法研究[J].机械设计与制造工程,2017,46(12):105-108.