基于边缘计算的疲劳驾驶检测方法
2021-07-26胡辑伟严俊伟
娄 平,杨 欣,胡辑伟,萧 筝,严俊伟
(1.武汉理工大学信息工程学院,武汉430070;2.宽带无线通信和传感器网络湖北省重点实验室,武汉430070;3.武汉理工大学机电工程学院,武汉430070)
0 概述
随着汽车行业和道路交通网的不断发展,越来越多的人选择机动车出行,道路交通事故频繁发生。交通事故给人们的生命财产安全带来巨大的损失,与酒驾、超速等行为相比,疲劳驾驶的预防及治理更为困难。疲劳是指对体力劳动或者脑力劳动进行长时间重复作业形成的一种生理阻碍[1],疲劳会使驾驶人的驾驶操作水平下降,据相关数据统计,约有20%~30%的交通事故是由疲劳驾驶所引起的[2]。在交通事故发生前,若驾驶人可提前0.5 s 做出反应,可避免60%的交通事故。在多数情况下,驾驶人很难意识到自身处于疲劳驾驶状态,且据调查显示,多数驾驶人在感知到疲劳时仍继续驾驶[3]。因此,针对疲劳驾驶检测的研究,在驾驶人疲劳驾驶时及时对其发出告警,对降低交通事故的发生率及保障人们安全出行具有重要意义。
目前,已有的疲劳检测方法主要分为基于驾驶人生理特征、车辆行为特征、驾驶人面部特征等3 类参数。基于驾驶人生理特征参数的疲劳检测方法需要在驾驶人身上放置传感器,以得到其脑电(Electroencephalogram,EEG)、心电(Electrocardiograms,ECG)、肌电(Electromyogram,EMG)信号等生理参数,然后对其进行处理分析,判断驾驶人是否疲劳[4]。这类方法检测精度高,但其高昂的成本和侵入式的检测方式限制了其应用和发展。基于车辆行为特征的疲劳检测方法通过检测车辆方向盘的角速度、车辆行驶状态的改变等特征,判断驾驶人是否疲劳[5]。这类方法容易受车辆型号和实际道路情况的影响,准确率较低。基于驾驶人面部特征的疲劳检测方法通过检测驾驶人是否存在闭眼时间长、打哈欠等疲劳特征进行疲劳判断[6],相比于其他方法,该方法在保障准确率的同时具有成本低及非接触的优点,因此成为疲劳检测研究领域的主流方法。
李照等[7]设计一个基于数字信号处理(Digital Signal Processing,DSP)的嵌入式车载疲劳驾驶检测系统,该系统利用AdaBoost 算法检测人脸并定位驾驶人眼睛区域,通过计算人眼闭合程度,并结合PERCLOS 算法进行疲劳判断。徐明[8]利用ARM 开发板设计了一套疲劳驾驶检测系统,该系统首先利用AdaBoost 级联分类器依次定位驾驶人面部及眼部区域,接着采用积分投影算法定位嘴部区域,并根据眼部及嘴部的宽高比确定开闭状态,最后结合PERCLOS 算法及打哈欠分析完成疲劳检测。这类方法可在车载嵌入式设备上独立完成疲劳检测,但基于手工提取的特征,准确率会受到个体差异、拍摄距离及角度的影响,鲁棒性较差。
由于深度学习技术在计算机视觉领域表现出优异的性能,因此研究人员对此进行了大量研究。郑伟成等[9]利用多任务卷积神经网络(Multi-Task Convolutional Neural Network,MTCNN)定位人脸,并利用PFLD 深度学习模型进行人脸关键点检测,从而定位眼部、嘴部以及头部的位置,最后提取眨眼频率、张嘴程度、点头频率等特征进行疲劳检测。DU等[10]提出一种多模式融合的递归神经网络(Multimode Fusion Recurrent Neural Network,MFRNN),将眼睛和嘴巴的开合度以及心率作为疲劳特征,利用递归神经网络(Recurrent Neural Network,RNN)提取时间特征,提高了疲劳驾驶检测的准确率。这类方法相比基于手工特征的疲劳检测方法具有更强的鲁棒性,但是需要庞大的计算资源。若检测过程在计算资源丰富的云端进行,则需要边缘设备采集驾驶人视频数据并上传至云端服务器进行检测,再由服务器返回检测结果。然而,在车辆的行驶过程中,网络覆盖、响应速度等因素会造成检测实时性差,甚至无法完成检测。若检测过程在车载边缘端完成,则需要具有强大计算资源的检测设备,若每辆车上均安装此类设备,则成本过于高昂。
本文提出一种基于边缘计算的疲劳驾驶检测方法,通过识别驾驶人的眼部及嘴部的开闭状态,结合PERCLOS 及PMOT 指标值进行疲劳检测,并且由于采用了轻量化的检测模型,因此可在车载嵌入式设备上独立完成疲劳检测。
1 疲劳驾驶检测模型
通过驾驶人的面部特征进行疲劳驾驶检测通常需要确定人脸与眼嘴的部位,并检测眼嘴的开合状态。为实现以上功能,本文利用改进的MTCNN 完成人脸检测及关键点定位,并根据人脸三庭五眼比例关系进行眼部及嘴部图像的截取,接着利用改进的AlexNet 识别眼部和嘴部的开闭状态,最后根据PERCLOS 和PMOT 参数进行疲劳判别。疲劳驾驶检测流程如图1所示。
图1 疲劳驾驶检测流程Fig.1 Procedure of fatigue driving detection
1.1 基于改进MTCNN 的关键点定位
MTCNN 是一种基于深度学习的人脸检测与对齐算法,利用图像金字塔检测各个尺度的人脸[11],不同于多目标人脸检测,在疲劳驾驶检测中只需精准定位驾驶人面部区域。因此,对MTCNN 网络的图像金字塔部分进行改进,使其快速且准确地完成人脸检测及关键点定位,并在定位关键点后,利用人脸的三庭五眼比例关系获取驾驶人的眼部及嘴部区域。
1.1.1 人脸检测与关键点定位
MTCNN 由P-Net(Proposal Network)、R-Net(Refine Network)和O-Net(Output Network)组成,采用候选框加分类器的思想,快速高效地进行人脸检测。MTCNN 模型如图2所示。
图2 MTCNN 模型Fig.2 MTCNN model
MTCNN 为检测到不同尺度的人脸,将原图缩小为不同尺寸以生成图像金字塔。将原图按照一定比例进行压缩,使用固定尺寸为12 像素×12 像素的候选框遍历图片,循环往复,直到缩小后的图片长或宽小于候选框的边长时停止。此时得到尺寸为12 像素×12 像素、通道数为3 的图片作为P-Net 的输入,P-Net 利用大小为3×3 的卷积核通过卷积操作(Conv)提取图像特征,采用最大池化操作(MP)去除冗余,通过人脸分类器(face classification)判断该区域是否为人脸,并使用边框回归(bounding box regression)及一个面部关键点的定位器(facial landmark localization)初步定位人脸区域,并将这些区域输入R-Net。R-Net 将重复P-Net 的操作,滤除大部分干扰、保留较为可靠的人脸区域并将其输入到O-Net。对比P-Net 利用全卷积输出尺寸为1 像素×1 像素、通道数为32 的特征,R-Net 在最后一个卷积层后使用一个128 维的全连接层(FC),保留了更多的图像特征。O-Net 进行更精细的人脸判别、边框回归及关键点定位,最终输出人脸区域的坐标与5 个特征点,其中5 个特征点分别为左眼中点、右眼中点、鼻尖点、左嘴角点和右嘴角点。实验室环境内采集的多人脸图像MTCNN 人脸检测及关键点定位示例,如图3所示。
图3 MTCNN 人脸检测Fig.3 Face detection using the MTCNN
MTCNN 网络构建的图像金字塔包含大量图像,将其送入网络检测出图像中的所有人脸区域会花费大量时间。在疲劳驾驶检测场景中,由于需要排除多余人脸的干扰,精确定位驾驶人面部,因此对MTCNN 网络生成图像金字塔的方式进行改进。考虑到驾驶人面部区域在视频帧中所占像素比例较大,本文根据驾驶人面部在图像中的比例对MTCNN 网络中最小人脸尺寸进行放大,降低固定缩小比例,并略过第一次缩小与遍历过程,使得改进的MTCNN 网络在准确定位出驾驶人面部区域的同时,能滤除背景中无关的人脸,并大幅缩减人脸检测时间。
1.1.2 眼部与嘴部区域提取
利用驾驶人的眼睛及嘴巴的状态变化特征进行疲劳判别,需要在人脸检测和关键点定位的基础上将驾驶人的眼部和嘴部区域进行截取。根据三庭五眼的人脸比例关系[12],人脸横向可分为三等份:前额发际线到眉骨,眉骨到鼻底,鼻底到下巴,即三庭;人脸纵向可分为五等份:左侧发际线到左眼外侧,左眼外侧到左眼内侧,左眼内侧到右眼内侧,右眼内侧到右眼外侧,右眼外侧到右侧发际线,即五眼。
假设通过MTCNN 获取驾驶人的左眼坐标为m1(x1,y1),右眼坐标为m2(x2,y2),根据三庭五眼的人脸比例关系提取驾驶人眼部区域,其对应关系为:
其中:d1为双眼间的距离;w1为眼部区域的宽度;h1为眼部区域的高度。
假设通过MTCNN 获取驾驶人的左右嘴角坐标分别为n1(α1,β1)和n2(α2,β2),根据三庭五眼的人脸比例关系提取驾驶人嘴部区域,其对应关系为:
其中:d2为左右嘴角间的距离;w2为嘴部感兴趣区域(Region of Interest,ROI)的宽度;h2为嘴部区域的高度。
对NTHU-DDD 数据集[13]中示例进行关键点定位,并根据三庭五眼比例关系得到眼部及嘴部感兴趣区域,如图4所示。
图4 眼部与嘴部ROI 定位Fig.4 ROI location of eyes and mouth
1.2 基于改进AlexNet 的眼部与嘴部状态识别
通过计算眼睛和嘴巴的宽高比、眼部黑白像素比例等基于手工提取特征的眼部和嘴部状态识别方法受拍摄角度、拍摄距离以及个体差异的影响,鲁棒性较差。本文利用改进的AlexNet 对眼部及嘴部的开闭状态进行识别,避免了对图像的复杂预处理操作,且具有较强的鲁棒性。
1.2.1 Ghost 模块
Ghost 模块[14]是一种轻量化神经网络单元,为了使疲劳驾驶检测模型能在边缘端获得更好的实时性,本文使用Ghost 模块替换AlexNet 中的所有卷积操作。传统卷积和Ghost 模块示意图如图5所示。
图5 传统卷积与Ghost 模块示意图Fig.5 Schematic diagram of traditional convolution and Ghost module
由于深度卷积神经网络所输出的特征图存在冗余,这些相似的特征图使得卷积神经网络的特征提取能力变强,因此Ghost 模块利用简单的线性操作Фk来获得更多的相似特征图,以提高CNN 性能。Ghost 模块首先采用少量常规卷积得到本征特征图,然后对得到的本征特征图通过depthwise 卷积这种简单的线性操作生成Ghost 特征图,最后将本征特征图与Ghost 特征图进行拼接得到最终的输出。相比直接使用常规卷积,Ghost 模块在保障准确率的同时,大幅度降低了计算量。
1.2.2 轻量化AlexNet 结构
AlexNet[15]基于8 层网络结构在图像分类上表现出优异的效果。本文对AlexNet 进行改进,用于眼睛及嘴巴的开闭状态分类。由于眼睛和嘴巴图像所占的像素点较少,将AlexNet 的输入尺寸由224 像素×224 像素、通道数为3 压缩至24 像素×24 像素、通道数为3,将11×11 和5×5 的卷积核修改为3×3 的卷积核,并优化最大池化操作的步长stride 以避免特征图的尺寸过小。由于AlexNet 仅用于眼嘴状态4 分类,不同于AlexNet 的1 000 分类,模型仅保留AlexNet中的第1 个全连接层,并将全连接层的输出维度由2 048 修改为128。最终利用Softmax 回归函数输出样本属于眼嘴开闭状态的概率。模型保留第1 层传统卷积用来全面提取图像特征,其余的卷积操作均由Ghost 模块替代,使网络轻量化。改进的AlexNet结构如图6所示。
图6 改进的AlexNet 结构Fig.6 Improved AlexNet structure
1.3 基于PERCLOS 与PMOT 参数的疲劳驾驶检测
当驾驶人处于疲劳状态时会产生一系列的生理反应,例如闭眼时间长、打哈欠等。改进的AlexNet识别眼嘴状态后,模型通过计算连续视频帧的PERCLOS 及PMOT 参数,并结合阈值对驾驶人的疲劳状态进行判断。
1.3.1 PERCLOS 参数
PERCLOS 是卡内基梅隆研究所提出的度量疲劳的物理量。美国联邦公路管理局在驾驶情景下对PERCLOS 参数、眨眼频率、打哈欠参数等9 种疲劳参数进行相关性分析,得出PERCLOS 参数与疲劳驾驶状态相关性最高[16]。PERCLOS 参数表示在单位时间内闭眼时长所占百分比,计算公式为:
其中:N为单位时间内的视频总帧数;fi为闭眼帧数;为单位时间内闭眼的总帧数。在正常的驾驶过程中,驾驶人的PERCLOS 参数值较小。当驾驶人处于疲劳状态时,闭眼帧数增多,PERCLOS 参数值增大。
1.3.2 PMOT 参数
PMOT 参数类似于PERCLOS 参数,代表单位时间内张嘴时长所占百分比,计算公式为:
其中:N为单位时间内的视频总帧数;fi为张嘴帧数;为单位时间内张嘴的总帧数。在正常驾驶过程中,驾驶人的PMOT 参数值较小。当驾驶人打哈欠时,张嘴帧数增多,PMOT 参数值增大。
2 实验验证
实验平台为1 台配置为Intel®CoreTMi7-8750H CPU 处理器、2.2 GHz 主频、8 GB 内存、显卡为GTX1060 的PC 机以及1 块内存为8 GB 的树莓派4B开发板。使用PC 机对网络进行训练,并将训练好的模型下载到树莓派开发板上进行疲劳检测。
2.1 数据集
实验利用YawDD 数据集[17]制作人脸检测数据集与眼嘴状态识别数据集,并在NTHU-DDD 数据集上测试疲劳驾驶检测方法的准确率。YawDD 数据集包含了不同性别、种族的驾驶人在不同光照条件下的真实驾驶视频。对该数据集进行帧采样,得到人脸检测数据集,用于人脸检测实验,YawDD 数据集示例如图7所示。
图7 YawDD 数据集示例Fig.7 Examples of YawDD dataset
在帧采样后截取出眼睛及嘴巴区域,制作眼嘴数据集,用于训练眼嘴状态分类网络。眼嘴数据集分为眼睛闭合、眼睛张开、嘴巴闭合、嘴巴张开等4 类。眼嘴数据集示例如图8所示。
图8 眼嘴数据集示例Fig.8 Examples of eyes and mouth dataset
NTHU-DDD 数据集包括36 位不同种族的受试者在模拟驾驶场景下的视频数据,总时长约为9.5 h,包含不同光照条件下正常驾驶、打哈欠、说话、缓慢眨眼、频繁点头等状态。NTHU-DDD 数据集示例如图9所示。
图9 NTHU-DDD 数据集示例Fig.9 Examples of NTHU-DDD dataset
疲劳驾驶时所产生的打哈欠、缓慢眨眼等动作是一个持续的过程,其持续时间约为8 s,根据NTHU-DDD 数据集的帧标注文件将视频数据进行裁剪,并将存在上述疲劳特征的视频标注为疲劳状态,不存在疲劳特征的视频标注为正常状态。裁剪后的数据集共包含600 个视频,其中正常状态和疲劳状态的视频分别有300 个。
2.2 实验结果
2.2.1 人脸检测结果
驾驶人面部区域在图像中所占比例为1/16~1/3,为了滤除背景中乘客面部的干扰,精确定位出驾驶人面部区域并加速检测过程,对MTCNN 网络的图像金字塔进行改进,将视频帧短边的1/4 作为最小人脸尺寸,将固定缩小比例减小为0.659,并直接从第2 次缩小和遍历图片过程开始进行图像金字塔操作。实验将图片尺寸从640 像素×480 像素缩小至160 像素×120 像素进行检测,在确保正常检出人脸的情况下,缩短了检测时间。MTCNN 及改进的MTCNN 对实验室中模拟驾驶环境采集的图像进行人脸检测,示例如图10所示。
图10 人脸检测示例Fig.10 Examples of face detection
从图10 可以看出,改进的MTCNN 模型有效地滤除了背景人脸,在疲劳驾驶检测中能精确定位出驾驶人面部区域。为了进一步验证改进模型的有效性,实验利用从YawDD 数据集中获取到的2 000 张人脸图片进行人脸检测实验,计算改进前后MTCNN 模型的检测准确率以及树莓派开发板上的平均检测时间。人脸检测结果如表1所示。可以看出,改进的MTCNN 模型在保障较高准确率的同时,平均检测时间下降至原来的53.9%,提高了疲劳驾驶检测的实时性。
表1 人脸检测结果Table 1 Results of face detection
2.2.2 眼部与嘴部状态识别结果
由YawDD 数据集所得到的眼嘴数据集共15 000 张图片,包括4 551 张睁眼图片、3 912 张闭眼图片、2 904 张张嘴图片和3 633 张闭嘴图片,其中睁眼和闭眼图片均包含佩戴眼镜及未佩戴眼镜2 种情况。实验在PC 机上对原AlexNet、调节参数的AlexNet 以及调参并采用Ghost 模块替换传统卷积的AlexNet 这3 种网络模型进行训练,按照6∶4 的比例划分训练集和测试集,其中测试图片共6 000 张,训练时将图像大小归一化为24 像素×24 像素,每次批处理32 张图片,迭代次数为1 000 次。模型训练完成后,将其下载到树莓派开发板上,测试平均识别时间。眼嘴状态识别结果如表2所示。可以看出,改进的轻量化AlexNet 模型不仅保持了眼嘴状态识别的准确率,并且模型大小减小至原有AlexNet 模型的3.9%,平均识别时间下降至原有AlexNet 模型的15.5%。
表2 眼嘴状态识别结果Table 2 Results of eyes and mouth state recognition
将改进的AlexNet 与其他网络模型在眼嘴状态识别数据集上进行测试对比,结果如表3所示。可以看出,调参+Ghost模块的AlexNet网络模型在保障准确率的同时,模型大小仅为其他模型的0.8%~9.6%,平均识别时间仅为其他模型的0.8%~3.1%。
表3 基于4 种网络模型的眼嘴状态识别结果对比Table 3 Results comparison of eyes and mouth state recognition based on four network models
2.2.3 PERCLOS 与PMOT 参数阈值
现有研究表明:当PERCLOS 参数值达到0.15、0.25、0.40 时,驾驶人会出现疲劳状态。由于不同的眼部及嘴部状态判别方法中所得到的眼睛和嘴巴的闭合程度存在差异,因此PERCLOS 及PMOT 参数阈值与研究方法相关,可从实验中获得。本文设定帧率为5 frame/s、时长为8 s,采集30 位驾驶人在正常及不同程度疲劳状态下的视频,并计算对应的PERCLOS 和PMOT 参数值,如图11、图12所示。
图11 PERCLOS 参数阈值实验结果Fig.11 Experimental results of PERCLOS parameter threshold
图12 PMOT 参数阈值实验结果Fig.12 Experimental results of PMOT parameter threshold
在图11 和图12 中,以虚线表示正常和疲劳状态的分界线,当PERCLOS 参数值达到0.35、PMOT 参数值达到0.25 时,驾驶人出现疲劳状态,因此本文分别将0.35 和0.25 作为PERCLOS 和PMOT 参数阈值。
2.2.4 疲劳驾驶检测结果
由NHTU-DDD 数据集得到600 个时长为8 s 的视频,其中正常状态和疲劳状态分别有300 个。在树莓派4B 开发板上以5 frame/s 的速率进行帧采样,并将图片分辨率由640 像素×480 像素缩小至160 像素×120 像素,计算视频帧序列对应的PERCLOS 以及PMOT 参数值,结合阈值进行疲劳判断。疲劳驾驶检测示例如图13所示。
图13 疲劳驾驶检测示例Fig.13 Examples of fatigue driving detection
实验测得模型在树莓派开发板上的单帧平均检测时间为180 ms,可满足疲劳驾驶检测的实时性要求。疲劳检测结果如表4所示。本文方法与基于脑电信号[18]、基于方向盘操作特征[19]和基于人眼特征[20]的疲劳驾驶检测方法的对比结果如表5所示。相比其他疲劳驾驶检测方法,本文方法具有非接触式、精度及鲁棒性高且能在低成本的硬件设备上完成检测的优点。
表4 疲劳检测结果Table 4 Results of fatigue detection
表5 不同疲劳驾驶检测方法对比Table 5 Comparison of different fatigue driving detection methods
3 结束语
为在成本低廉的车载嵌入式设备上对驾驶人疲劳状态进行准确预警,本文提出一种基于边缘计算的疲劳驾驶检测方法。采用改进的MTCNN 网络获取人脸关键点,根据人脸的三庭五眼比例关系获取驾驶人的眼部及嘴部区域,同时利用基于Ghost 模块的改进AlexNet 对眼睛和嘴巴的状态进行分类,计算出PERCLOS 和PMOT 参数并结合阈值进行疲劳判断。实验结果表明,该方法在NHTU-DDD 数据集上获得了良好的检测性能。后续将结合驾驶人的头部姿态特征,进一步提高疲劳驾驶检测算法的准确率及鲁棒性。