APP下载

基于深度学习的疲劳驾驶检测方法

2020-12-18沈英超

桂林电子科技大学学报 2020年3期
关键词:人脸驾驶员卷积

黄 新, 沈英超

(桂林电子科技大学 电子工程与自动化学院,广西 桂林 541004)

汽车数量的日益增加致使城市交通拥堵问题越来越严重,交通事故发生率也随之上升,其中,因疲劳驾驶导致的交通事故高达42%以上[1]。因此,如何有效地检测和预防疲劳驾驶具有十分重要的现实意义。

现有的疲劳驾驶检测方法大致分为主观法和客观法两类。主观法主要有Person疲劳量表、Cooper-Harper评估问卷、斯坦福睡眠量表等,该类方法易受驾驶员主观思维的影响,具有较大的局限性。客观法主要分为基于驾驶员生理特征检测[2-3]、基于车辆信息检测[4-6]、基于视觉特征检测[7-9]三类。基于驾驶员生理特征的方法是通过检测驾驶员的生理指标如脑电图、心电图、肌电图等特征来判断疲劳,虽然检测精确度较高,但存在设备昂贵、佩戴不方便等问题。基于车辆信息的方法是通过检测车辆参数如速度、加速度、方向盘转角等来判断疲劳,易受车型、道路状况以及驾驶员习惯等因素影响。基于视觉特征的方法是根据驾驶员的眨眼频率、头部偏移状态以及嘴巴张合度等分析疲劳状态,具有直接检测疲劳特征、非接触式等优点,但检测结果易受光照、遮挡等复杂环境的影响。

随着近年来深度学习[10-12]在目标检测领域的巨大成功,深度学习技术也推动了疲劳驾驶检测的研究。Zhou等[13]提出一种基于深度学习的疲劳状态识别算法,通过引入深信度网络来模拟数据分布以及自适应调整网络学习率,从而提高个性化疲劳特征的适应性。文献[14]提出一种基于卷积神经网络(CNN)的计算PERCLOS和眨眼频率的疲劳驾驶检测方法,采用红外视频检测提高了驾驶员佩戴太阳镜情况下的准确率。大量研究表明,相较于人工提取的特征,通过深度学习直接从图像中学习的视觉特征表示能够应对光照、姿势等变化,具有更好的鲁棒性,检测精度显著提高。为此,提出一种基于深度学习的疲劳检测新方法,该方法使用MTCNN和FEL网络来实现人脸检测和人眼定位,采用OC-Net网络实现眼睛状态判别,同时结合PERCLOS疲劳判断准则和眨眼频率来判断疲劳状态。实验结果表明,基于深度学习的疲劳检测方法是有效的。

1 CNN

CNN是深度学习中最具代表性的模型,使用CNN对高维度和大数据量的图像处理时具有较高的效率和准确率。CNN的网络结构主要包括卷积层、池化层和FC层。

1.1 卷积层(convolution layer)

卷积层主要负责特征提取,将输入的数据或特征图通过过滤器进行卷积操作,再经过非激活函数作用后输出特征图。卷积过程表达式为

(1)

其中:wi为权值;bi为偏置。

1.2 池化层(pooling layer)

池化层的池化策略主要有最大池化(max pooling)、平均池化(average pooling)和随机池化(stochastic pooling)。池化层能够降低待处理数据量,从而加快计算和防止网络过拟合。池化表达式为

(2)

1.3 全连接层(fully connected layer)

全连接层主要负责将多次卷积和池化操作提取的高阶抽象特征表示映射到样本标记空间,其表达式为

hw,b(x)=f(wTx+b)。

(3)

卷积神经网络的训练采用的是误差逆传播算法[15],将真实输出和计算输出的误差逆向逐级传播,通过梯度下降法对各网络层损失函数(Loss)的权值和偏置进行优化处理,从而使得误差达到最小。损失函数定义为

(4)

其中:n为训练样本数;y为输出真实值。L(w,b)值越小,则网络训练所得的权值和偏置的值越好,模型的性能也越好。

2 基于深度学习的疲劳驾驶检测算法

疲劳驾驶检测算法分为4步:

1)通过MTCNN网络模型检测出摄像头实时获取的画面中的人脸图像;

2)根据FEL网络精确定位出眼睛区域;

3)将定位出的眼睛区域图像输入OC-Net网络判断眼睛的开闭状态;

4)根据PERCLOS算法求出单位时间内眼睛闭合状态所占比例,同时结合眨眼频率实现疲劳驾驶检测机制。

疲劳驾驶检测算法流程图如图1所示。

图1 疲劳驾驶检测算法流程图

2.1 人脸检测

MTCNN[16]算法是基于深度学习联合检测人脸边界框和特征点,主要包含P-Net、R-Net、O-Net三个级联网络结构。

1)P-Net(proposal network):通过全卷积网络获得候选窗和边界框回归向量,并用边界框回归向量对候选窗进行校准,用非极大值抑制(NMS)算法合并重叠窗体。

2)R-Net(refine network):将P-Net得到的候选窗作进一步筛选,同样通过边界框回归向量校准和NMS算法得到更精确的人脸候选区域。

3)O-Net(output network):其功能和R-Net类似,主要是对候选区域进行筛选,获得最终人脸位置,同时定位双眼、鼻子、嘴角两侧5个人脸特征点。

2.2 人眼精定位

MTCNN网络模型的主要任务是人脸检测,只有通过第3层O-Net才能得到人脸特征点位置,且眼睛定位的准确性受遮挡和头部姿势变化等因素的影响。因此设计FEL网络,以多任务学习(MTL)来提高眼睛定位的稳健性。

传统的MTL旨在通过共同学习来提高多个相关任务的泛化能力,且所有任务都具有相似的学习难度和收敛率。假设共有T个任务,其损失函数可表示为

φ(wt)。

(5)

传统的MTL主要是为了最大化所有任务的性能。本研究在优化主要任务的同时,还需优化其他辅助任务。因此,式(5)可重新定义为

(6)

其中:r为主要任务;a为辅助任务。因眼睛定位为回归问题,是否遮挡和头部姿势变化为分类问题。因此,分别用最小二乘法和交叉熵计算主要任务和辅助任务的损失函数:

(7)

其中:第1项中f(xi;wr)=(wr)Txi为线性函数;第2项为Softmax函数,且

第3项为正则化项,主要用于控制权值比例,且w={wr,{wa}}。

尽管所有任务共享面部图像作为输入,但它们的输出空间和决策边界不同。因此,不同的任务具有不同的收敛速度。为了适应不同学习能力和收敛速度的相关任务,通过使用“early stop”标准[17]来促进学习收敛,即随着网络的不断训练,某些辅助任务在达到其最高性能时不再对主要任务有利,因此结束其学习过程。early stop标准为

(8)

FEL网络结构如图2所示,输入为40像素×40像素的灰度人脸图像,特征提取阶段包含4个卷积层、3个池化层和1个FC层。每个卷积层包含产生多特征图的过滤器组,意味着在输入映射中的每个位置应用不同的过滤器集。选择绝对切线函数为激活函数。

图2 FEL网络结构

2.3 眼睛状态识别

LeNet-5[18]模型是第一个成功应用于数字识别问题的卷积神经网络,在MNIST数据集上可以达到99.2%的准确率。本研究所使用的眼睛状态识别网络(OC-Net)模型是LeNet-5的变体,其网络结构如图3所示。

图3 OC-Net网络结构

2.4 疲劳状态判定

PERCLOS[19]疲劳判定原理是通过计算单位时间内眼睛处于闭合状态的时间来判定驾驶员的疲劳状态,其计算公式为

(9)

其中:n为闭眼状态的图片帧数;N为视频中连续若干帧获取的眼睛图片总帧数。R值可以很好地量化驾驶员闭眼的程度,当其超过某一阈值(文献[19]中给定为R2=0.075和R1=0.150)时,则初步认为驾驶员进入疲劳状态。为了进一步提高疲劳判定的准确率,将其与眨眼频率相结合来判断疲劳状态,且眨眼频率阈值设置为t1=10。因此,若R满足R>R1和R2

3 实验结果与分析

3.1 数据集

FEL网络训练和测试所使用的AFLW数据集为13 466张人脸图像,其中5 590张来自于LFW[20],剩余的7 876张来自于网络。随机选取其中的10 000张作为训练集,剩余的作为验证集。由于数据集中图片标签额外包括鼻子和嘴角两侧的注释,需手动修改数据集标注,且辅助任务的基本事实也需要手动标记,最后通过平移、旋转等方法进一步增强训练集。

OC-Net网络训练和测试的数据集分为ZJU数据集(图4)和DDR数据集(图5)两部分。ZJU数据集是Song等[21]通过提取自然光环境下采集的20位测试人员的眼部图像,并经旋转、对比度修改以及添加高斯噪声后扩展的原始眼睛图像数据集。DDR数据集是Zhao等[22]从实际行驶环境中采集的疲劳驾驶数据集。

图4 ZJU数据集

图5 DDR数据集

3.2 实验结果分析

针对FEL网络和OC-Net网络进行相关实验。其网络训练以及结果测试均基于Python3.6和Tensorflow2.0。

3.2.1 FEL网络

图6 模型对比结果

为了检验相关辅助任务的影响,对FEL网络模型进行变体,变体模型分别为FEL+pose、FEL+glasses、FEL+all。根据平均误差评估其性能,平均误差表示估计的眼睛位置与实际眼睛位置之间的距离,并相对于眼间距离进行归一化。各网络模型对比结果如图6所示。从图6可看出,利用相关任务方法可以优化FEL网络,特别是FEL+all的表现远超过FEL。为了表明FEL网络模型相较于级联CNN可以获得更好的检测精度,用FEL+all和级联CNN的公开二进制代码进行比较,并采用AFLW图像进行评估,结果如图7所示。从图7可看出,相较于级联CNN,FEL网络不仅可以获得更好的检测精度,而且还显著降低了计算成本。级联CNN与FEL网络的性能比较如表1所示。

图7 CNN、级联CNN、FEL测试结果

表1 级联CNN、FEL性能

图8 OC-Net训练的眼睛状态识别准确率

3.2.2 OC-Net网络

通过ZJU和DDR数据集训练OC-Net网络,眼睛状态识别准确率如图8所示。从图8可看出,随着迭代次数的增加,网络权值项和偏置项不断优化,识别准确率不断提高。当迭代次数达到一定数值后,识别准确率呈缓慢上升状态。使用网络迭代104次后产生的model.ckpt文件对ZJU与DDR测试集进行测试,结果如表2所示。

表2 网络迭代104次后对ZJU和DDR测试集的测试结果

从表2可看出,对于不同环境下的眼睛状态,OC-Net网络模型都有较高的识别准确率。使用Gabor、LBP、HOG[22]三种手工制作的人眼特征描述符,并用SVM对特征进行分类,将OC-Net与基于特征分析的方法进行对比,结果如表3所示。从表3可看出,OC-Net优于其他基于手工制作特征的方法。

表3 不同特征识别方法下的AVE、AUC %

为了验证本方法的有效性,将3个测试中视频人工统计疲劳次数与本方法检测的次数进行对比,结果如表4所示。从表4可看出,疲劳检测方法的平均准确率为97.18%,可以较好地实现驾驶员疲劳检测。

表4 疲劳检测结果

4 结束语

设计了一种基于深度学习的疲劳驾驶检测方法。通过MTCNN网络对驾驶员进行人脸检测提取出面部图像,将其送入FEL网络进行人眼精定位,确定眼睛位置并截取眼睛图像,将眼睛图片送入OC-Net网络实现状态判定,通过PERCLOS算法和眨眼频率来判定驾驶员疲劳状态。实验结果表明,本方法具有较高的检测准确率,可以达到实时检测的效果,且对复杂环境具有较强的鲁棒性。

猜你喜欢

人脸驾驶员卷积
基于高速公路的驾驶员换道意图识别
基于眼动的驾驶员危险认知
驾驶员安全带识别方法综述
基于3D-Winograd的快速卷积算法设计及FPGA实现
有特点的人脸
一起学画人脸
卷积神经网络的分析与设计
从滤波器理解卷积
三国漫——人脸解锁
基于傅里叶域卷积表示的目标跟踪算法