肖心远,黄 剑,孙潇鹏,吴朝荣
(广东交通职业技术学院,广州 510650)
道路运输中,人、车、路、环境是影响驾驶安全的最主要因素,而人的因素又是影响驾驶安全的最重要因素。据统计,在各类道路运输安全事故中,80%~90%的安全事故是由人为因素造成[1],疲劳驾驶又是造成安全事故的最主要原因。据统计,在交通事故中,有30%左右是因疲劳驾驶造成,每年大约有1 500 人死于疲劳驾驶引起的事故[2],因此对驾驶员的疲劳状态进行监测非常重要。本文主要是采用视觉图像处理技术对驾驶员的疲劳度进行监测,预防驾驶员疲劳驾驶。当前在图像模式识别中,由于CNN神经网络避免了对图像复杂的前期预处理,节省了很多工作,CNN成为了众多科学领域的热点研究领域,应用也越来越广泛[3]。传统的驾驶员驾驶行为检测方法是使用SIFT、HOG 或者Haar 等特征描述算子[4],并且使用人工提取特征方式进行模式识别,在现实复杂的驾驶环境下往往精度不能满足要求,其鲁棒性也有待提高。深度学习技术是一类能从大量数据中自动学习出特征进行表示的方法[5],这些年在目标检测、目标识别、目标跟踪,人脸识别、场景语义理解等领域有了快速的发展,其强大的学习能力和特征表达能力,对大部分有遮挡、光照明暗变化等外界干扰条件的场合也表现出了较强的鲁棒性[6]。因此,本文选取驾驶员身体特征,比如眼睛闭合、嘴巴张开程度等,设计使用基于深度学习算法的疲劳驾驶检测算法,来表示疲劳驾驶的特征,设计神经网络模型,检测车辆驾驶员是否疲劳并判断其疲劳程度。
本系统采用前期研发的道路车辆驾驶员监测信息的采集及处理系统[7],监测终端利用当今最流行的Android嵌入式开发系统,并在该系统的基础上,升级了系统的软硬件,之前利用ARM Cortex-A8 内核的REAL210 核心开发板[8],但速度明显慢,没有达到理想的效果,最后使用了树莓派3 作为主控板,达到了要求。目前主控处理器更新为树莓派4B,在该开发板中进行有效开发,通过对监测终端的开发,系统的外围接口模块有电源模块、5G无线模块、GPS定位模块、视频图像采集模块、温度信号采集模块、心率信号采集模块、存储器模块、LCD显示模块、ZigBee 通信模块[8]。可实现人脸识别、疲劳度监测、酒精度监测、GPS 定位监测、心率体温监测、显示和Web数据上传功能。各个模块分别作为一个线程同时执行,监测模块将采集的数据生成临时文件进行保存,显示屏模块通过对数据文件进行读取将数据进行显示,Web 数据上传模块通过对数据文件进行读取定时将数据进行上传,实现对驾驶员的实时监控。驾驶员信息采集系统原如图1 所示。
图1 驾驶员疲劳检测系统原理
本文使用基于深度学习的疲劳驾驶检测算法。首先利用深度学习CNN模型YOLOv3 算法[9]检测出常规摄像头实时采集的驾驶员人脸图像,其次,利用特征点模型实现眼睛和嘴巴区域的分割,然后通过循环神经网络(RNN)中的长短记忆网络算法训练模型,进行驾驶员疲劳度预警,疲劳度监测流程如图2 所示。
图2 疲劳度监测流程
人脸识别模块主要通过调用百度人脸识别接口实现人脸识别功能。首先在树莓派中安装百度人脸识别接口的SDK,并在百度云平台申请并生成接口的密钥,在云平台中创建人脸库,将人脸图像信息以及个人信息上传到人脸库中将会自动生成一个唯一的用户ID账号,在系统开发板中,通过已经注册的接口密钥调用SDK 的AipFace()方法创建一个客户端,再通过树莓派的USB 摄像头获得当前镜头前的图像信息,获取的人脸图像如图3 所示。
图3 人脸原始图像
将图像信息临时生成一张图片进行保存,再通过已经创建好的客户端将采集到的人脸照片以及对应的人脸库用户组名,通过网络的方式发送请求到百度云人脸识别平台进行人脸识别操作,百度人脸识别平台将会根据上传的人脸图像已经对应的人脸仓库进行比较,并将结果返回。
在使用卷积神经网络YOLOv3 算法检测出视频中的人脸后,本项目引入长短时记忆网络(LSTM)[10]获取各个时刻的图像特征之间的相互关联信息。LSTM 是循环神经网络(RNN)的一种,可以对时间进行显式建模,并且引入时间序列维度来解决帧数据间的联系。
卷积神经网络是前馈神经网络的一种,它具有丰富的人工神经元,对图像处理、图像识别、图像特征提取有非常出色的表现,它主要包括卷积层、池化层和全连接层3 层[11]。
利用深度卷积神经网络对人脸图像进行捕捉,深度学习模型如图4 所示。
图4 深度卷积神经网络模型
本文的CNN 人脸检测采用基准人脸数据集Wider Face进行训练,数据集共包含了32 203 张图像和393 703个人脸标注,自带标注好的人脸框,在下载的数据集中,每个集合中的图像数据,根据人脸检测的难易程度分为“Easy”“Medium”“Hard”3 种,其中人工标注边界框为绿色的矩形框,在尺度、遮挡、姿态、装扮、表情、光照等方面的人脸差异较大,人脸特征具有多样性[12]。针对模型训练,本文按照图像的识别难度把数据集分成为3 个子集,并把数据集中60%用作训练集,30%用作测试集,10%为验证集用于模型训练。
算法实现步骤如下。
(1)算法选择。人脸检测算法为YOLOv3。
(2)部署应用环境搭建。试验采用Tensorflow 深度学习框架[13];环境为tensorflow-gpu1.14,keras 2.1.5;Ubuntu,NVIDIA Tesla驱动程序,CUDA10 版本,cuDNN神经网络加速库7.4.2 版本。
(3)训练设置。超参数动量因子设置为0.944,权重衰减正则系数设置为0.000 6,最大迭代次数epoch 设置为100,alpha学习率为0.001 5 次迭代时,batch_size为8;每训练50 次时叠加学习率0.000 1,batch_siz为1;网络结构为CSPDarknet53 +PAnet-SPP +Yolov3 head 结构(图5)。
图5 YOLOv3 网络结构
YOLOv3 算法采用的主干网络为Darknet-53[14],其主要特征是使用了残差网络Residual,对残差卷积进行一次3*3、2 步长的卷积,再保存该卷积layer,进行一次1*1 的卷积和一次3*3 的卷积,把这个结果加上layer作为最后的结果。残差网络的优点是容易优化,它能够使用增加深度的方法来提高识别准确率。本文在YOLOv3 的基础上借鉴了CSPNet,对Darknet-53 做了网络机构的局部改进[15]。
在特征金字塔部分设计中,YOLOv3 主要使用SPPNet和PANet两种结构。模型中不同尺寸特征图进入全连接层时引发的问题主要由SPP- Net 模块解决。对CSPdarknet53 最后一个特征图进行3 次卷积,然后用4个不同尺度的池化核(13*13、9*9、5*5、1*1)进行最大值池化,最后分离出最显著的特征,PANet 是一种特征图融合方式[16],特点是对提取的特征进行多次重复利用。
YOLOv3 采用了Mosaic 数据增强方式,其原理类似CutMix,随机裁剪4 张图片,然后拼接成一张图片作为图片训练数据。这样做丰富了图片背景,增强了对常见背景之外的目标的检测精度。减少了估计均值和方差时对batch-size的要求,降低了训练成本,单GPU 也可以进行训练[17]。
本文使用YawDD数据集作为疲劳驾驶检测模型的数据集,该数据集里面包含各类驾驶车辆人员在不同条件,不同光照环境下拍摄的模拟驾驶视频,可用于驾驶员疲劳检测等算法的验证试验。YawDD 数据集有2 个视频集,包含了多个具有不同面部特征的驾驶车辆人员行为[18]。录制视频分辨率为640×480,以30 帧/s 的速率录制,采用24bit真彩色进行显式。第1 个视频集安装的摄像头在驾驶室后视镜的下方,共有322 段视频,每个驾驶员录制3~4 段视频,第2 个视频集是把摄像头安装在驾驶室仪表盘上方,每个驾驶员录制一段视频。
驾驶人员的面部特征包括:(1)驾驶员正常驾驶(不说话,设置标签为Normal);(2)驾驶员驾驶时说话或唱歌(设置标签为Talking);(3)驾驶员开车打哈欠(设置标签为Yawning);(4)驾驶员开车闭眼晴(设置标签为Sleeping)。数据样本如图6 所示。
图6 YawDD数据集示例
项目设计使用循环神经网络中的长短时记忆网络模型对数据集进行训练,选取数据集中30 s以上的视频作为测试样本,选取视频数据集中的60%作为模型的训练集,30%作为测试集,10%作为验证集进行模型训练。LSTM网络模型是一种时间递归神经网络,它解决了RNN的长期依赖与梯度消失问题[19],这种网络能够记住数据的长期依赖关系,前一时刻的网络输出被它选择性地记忆下来,给后面的网络学习提供了丰富的事件关联性[20-21]。
本文中,驾驶员监控视频被按帧按时间顺序分解成图片序列,将一帧帧图片的脸部疲劳状态参数矩阵Xt输入LSTM,LSTM模型会判断出来运动状态下的驾驶员疲劳状态。
训练部署应用如下:(1)实验平台主机电脑采用Intel(R)Core(TM)i7-1165,@2.80 GHz,内存16 GB;(2)在Windows10 操作系统下采用Tensorflow 深度学习模块;(3)优化器采用ADAM,不需GPU加速;(4)实验的数据集为YawDD 视频数据,将正常驾驶、说话状态、唱歌状态标注为非疲劳状态,将打哈欠、闭眼睛标注为疲劳状态;(5)使用上述长短记忆网络(LSTM)进行训练。
若由于摄像头没有获取到人脸的监测数据,系统则会将疲劳度文件的疲劳数据修改为-1,表示数据异常,并且将错误信息保存在错误信息文件中,显示屏将会读取错误信息并显示。
本文针对传统的特征算子检测精度较低,搭建了驾驶员疲劳检测的信息采集系统,系统采集驾驶员的人脸图像、温度、心率、GPS 定位等多种信息,并通过后台处理驾驶员疲劳状态图像。系统选取驾驶员身体特征,比如眼睛闭合、嘴巴张开程度等,设计使用基于神经网络深度学习算法的疲劳驾驶检测算法,来表示疲劳驾驶的特征,使用YawDD数据集作为疲劳驾驶检测模型的数据集,数据集中60%用作训练集,30%用作测试集,10%为验证集用于模型训练,使用循环神经网络中的长短时记忆网络模型对数据集进行训练结果表时,实验结果能满足驾驶员疲劳检测的要求。