基于深度学习的疲劳驾驶检测_第1页
基于深度学习的疲劳驾驶检测_第2页
基于深度学习的疲劳驾驶检测_第3页
基于深度学习的疲劳驾驶检测_第4页
基于深度学习的疲劳驾驶检测_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于深度学习的疲劳驾驶检测内容摘要眼睛的作用对我们不光是看见世界的窗口,也是我们表情达意的一种载体。通过眼睛我们可以表现出多种状态,并且眼睛还具有传达感情、体现人的精神状态等功能。譬如人困乏的时候会频繁眨眼,人精神充足时,眼睛就会更加生动。眨眼睛的频率在一定程度上可以反映出人是否处在疲劳的状态,本文正是立足在检测眼睛睁开闭合的频度之上来判断驾驶员是否正在疲劳驾驶。在驾驶车辆的状态下,可以排除身体因素以外影响人眨眼频率的情况,所以本文采用基于深度学习的检测眼睛开闭频率的方法来进行疲劳驾驶检测。本文主要工作内容如下所示:(1) 基于深度学习的多任务卷积神经网络(MultitaskConvolutionalNeuralNetwork,后文称mtcnn)的模型修改、模型训练、人脸区域检测及眼睛区域定位。这里选择使用MTCNN,是因为它有识别率高、识别速度快的优点。它具有三层级联卷积神经网络-Pnet、Rnet、Onet,对输入的数据层层优化精选出人脸特征,实质上是特征分类和特征回归,最终可以得到人脸区域的特征以及眼睛鼻子嘴巴的特征点,再经过非极大值抑制(NMS),来获得人脸部的。本文在此基础上修改了MTCNN模型,使网络模型通过新级联的网络层输出得到的landmark_regress通过该层网络回归得到眼睛区域左上右下特征点的偏移量。(2) 通过上文提到的MTCNN进行改进得到人脸特征区域以及眼睛特征区域之后,裁剪眼睛特征区域图像,并输入疲劳判断CNN层中,来判断人员是否有疲劳的症状。该层模型主要是起分类的作用,来解决眼睛睁开与眼睛闭合的二分类问题。本文采用计算眼睛闭合再到睁开的时间与整体测试时间的百分率(PercentageofEyelidClosureOverthePupilOverTime,下文称perclos),来判断驾驶人员是否出现疲劳现象。关键词:卷积神经网络;MTCNN;PERCLOS;疲劳驾驶

绪论绪论1.1课题研究背景及意义我们的眼睛对于我们来说是非常重要的,它不光是我们用来感知世界以及获取视觉信息的人体器官,还是我们表情达意的一种媒介,我们通过眼睛来获取接受各种外界表露的信息与资讯。同时眼睛是人的各个器官中易于传达内心情感、显示精神状态的主要特征,比如人在困乏疲劳的时候眨眼睛的次数较平常会更少。由于我们生活越来越现代化,而现代化的生活中往往存在着需要驾驶车辆的情况。下图1-1是高速公路车流量和货物运输量统计数据图:為速公蹈车流星和货物运输星有车*里塁什由在m白年抑肇诸为在年有车*里塁什由在m白年抑肇诸为在年培砰*月Wt+!#注才月创5814^431110.630^1?io,104.0:01P042&二2J36C1033価1心L&lIH-1■e邛冲丄烦8ff>1OTJ呻丄*.125R1L52,W10B-.74J9-]0$!H.4H4JSUI2U询血航1J2I1171067&釦LOU11142A231429丄&5T3ica1«75,4]7LfiMlU.ti],11»期LI3J303HLI1.(16■2iJ心194.410511好t04.1心3V3t-2MTS拘心49翡1M-.A2MH侦心]4<1煎ECTJ?S.7B21.4S111156J513.411ijaS5-24/512羽网tlBd!愤27*its$d.iMi]酒HlJ2578W3»阿県V331391IOf.32284LI4J7SL2J6100.$W1PW5IQW5E土时g挽】"IfrJLi3JISHl7>m37MLlfl-J御1147l&.StJ3州IOVPws3.orLttM.3WIff?3-15.1^l对1i(n#335'111JBJ627B『4ML3suw心网:P37.1971濒997W%gC12网1皿&7.CHSIS®4K54.5222.66dLI3,-ii双2.71M网烦91.42.1IJ>_2Hri43«■.]«1UUrm豹TBJLT:招*做T§四tllJ7332i710512,S177®MJ明I*1卸形10347節嘉創心J,WtrjIfiLOZ4W|t»J0冲S14U75迎颂1004S奶1.9MEIS2#1E1"帝ttfiB単付:万栖•万将映西首看W海览丈專酉古*•*江海卧迁徳堰■□布沔牝甬客内wL5JII叫育最北天河山円祯古里上江彌宣!|日III河路演广广泻里四烏云回图1-1高速公路车流量和货物运输量从上图我们可以看出,如此巨大的车流量,就算只有1%的人疲劳驾驶发生事故,在如此大的基数下,也是令人难以想象甚至是骇人听闻的状况。2015年,我国交通事故致死率为22%,死亡人数为3.3人/万车,。道路交通安全已经成为人们广泛关注的问题。对于普通人,一旦在驾驶时存在疲劳驾驶的情况,会发生的后果是难以估计的。而对于专门从事司机行业的人来说,疲劳驾驶更是开车时的隐形杀手,出现重大事故的隐因50%是由于驾驶人员疲劳驾驶导致的。人在疲劳时,反应速度、身体协调能力等都会下降,并且由于困乏更会在不经意间闭上眼睛丢失视野。假想若是在高速路段上发生了驾驶员疲劳驾驶的情况,那所造成的伤亡及损失是非常可怕的。综上所述,疲劳驾驶检测是非常具有重要的实际意义及应用价值的事情。在学术研究中,对于疲劳驾驶检测来说,最为重要的还是人脸及眼睛的定位,这是对驾驶人员进行疲劳检测的前提。倘若人像都无法找到,何谈分析驾驶人员的疲劳程度呢?所以必须采用高效且快速的方法来检测人脸区域,进而检测出眼睛区域,从而能够进行驾驶员驾驶状态的判断。在应用中,市面上有一款名为疲劳驾驶预警系统的产品,该产品具有一套的软硬件及设备,它能够在驾驶员行驶过程中,全天对驾驶员的疲劳状态、驾驶行为等进行观测,其算法采用视觉层次上的疲劳驾驶检测。该产品会检测出司机疲劳驾驶与异常动作,然后对驾驶人员发出提醒语音等一系列措施。由此可见,对疲劳驾驶检测算法的探究是非常需要且有必要的。1.2疲劳驾驶检测国内外研究现状疲劳驾驶检测作为一项有必要并且值得深入研究的课题,历来引起国内外许多学者与公司的兴趣。疲劳驾驶的检测方法众多,文献[1]按测量参数的不同,将其分为三类:①检测驾驶员的个人体态特征(如面部特征、驾驶行为动作、驾驶姿态等)以及个人生理特征(如脑电波信号、心率信号、虹膜信号灯)②检测车辆的运动参数(如刹车距离、转弯时长、车辆速度、直线驾驶状态等)③综合法,即综合以上两种方法进行检测。驾驶员个人体态特征检测和个人生理信号检测,前者即采用图像采集设备如摄像头等进行视觉层面上的信息采集,再转换成算法需要的数据如RGB图像矩阵,再输入算法进行疲劳驾驶判断。主流的个体特征检测算法常常采用面部特征检测,大致流程为:使用摄像头检测捕捉人像->图像数据使用深度学习、机器学习等算法定位人脸、人眼->判断驾驶员面部特征是否处于疲劳时的特征->得出结果,归根结底这是属于计算机视觉处理的范畴,属于非接触式检测。对于第二个流程中眼睛定位来说,文献[2]从算法层面大概划分为下列两种:①基于图像处理的方法;②基于分类器的方法。基于图像处理的方法是利用眼睛位于人脸的轮廓区域、眼睛的性状、图像眼部区域与其他区域的对比度计算等方法。流程一般分为以下几步:眼睛区域初定位,再使用滤波算法去噪声-,然后对眼睛精确定位。眼睛初定位:使用图像腐蚀算子对图像进行腐蚀之后对人脸上半部分做积分投影,这样初步得到左眼右眼的相对横向坐标;之后对眼睛区域(除去人脸部分的眼睛区域)进行灰度化,再计算其最大灰度值。使用滤波器(如中值滤波等)再进行一遍去噪声。到精确定位再使用积分投影,采用最小邻域均值投影。文献[3]对轮廓模型ASM算法及AAM算法进行验证与改进,在其基础上添加了对眼睑的轮廓的对齐追踪。此种方法由于受外界因素(如光线、人体动作姿态、图像成像质量等)的影响,导致这种采用阈值分割的方法对于结果的判断很不理想。基于级联分类器的方法:这种方法是通过大量的训练数据及样本提取有用的特征信息,来训练一个可以对齐人脸部的分类器来定位人脸,然后采用前一种分类器裁剪出大量的人脸数据,通过这种方式再训练眼部分类器对齐眼睛。常用的特征描述有Haar特征[4]、LBP特征[5]、HOG特征[6]、Gabor特征[7],此类方法的大致流程如下:使用大量图像数据训练Haar级联分类器->使用输入设备获取图像->调用级联分类器识别眼部区域。而此类使用分类器的方法最为关键的就是训练出一个识别率高的分类器,训练步骤大致如下所示:选择大量具有需分类物体的数据集作为正样本,选择跟分类场景有关的数据集做负样本(如在疲劳驾驶检测中就需要车内场景的数据集),再生成正样本向量,使用opencv内的程序开始训练,这里可以选择是使用Haar特征还是LBT特征来训练级联分类器。假设我们需要训练一个人脸识别分类器,训练过程中使用弱分类器采用积分图算法计算Haar-like特征或者使用LBP算子提取LBP特征筛选出一部分类人脸的图像,再通过多个弱分类器提取更多的haar-like特征或LBP特征对弱分类器筛选的图像再进行筛选,然后将多个强分类器级联起来成为级联分类器再进行人脸的精确筛选。后者是通过生理信号采集器如脑电波仪、心电仪等来获取疲劳与非疲劳时驾驶员的脑电波或心率等,从而对比结果得到驾驶员是否处于疲劳中。值得借鉴的研究成果主要有:SarojK.L.Lal⑻等人研究疲劳驾驶与未疲劳驾驶的脑电波、心率等的对比中发现脑信号是最适合作为疲劳驾驶判断的生理信号。MarkA.Schier[9]实验使用记录脑电信号功率模拟驾驶过程中驾驶员的表现的方法来研究其与驾驶员的注意力的关联,结果表明脑电信号的变化随着驾驶员注意力的变化而变化。文献[10]提出一种基于心电信号的疲劳驾驶检测算法,此算法使用采样频率512HZ、10min的心电信号,并根据时间段的不同划分疲劳状态与非疲劳状态的样本。此样本属于图像数据,于是采用Inception_V3模型并使用imageNet数据集进行预训练以提取特征。而检测车辆运动参数的疲劳驾驶检测,主要是研究驾驶人员在正常情况下与疲劳的状态下的车辆行为分析与统计。文献[11]利用三轴加速度传感器、方向盘转角传感器和计算机系统构建出一种基于车辆运行轨迹的疲劳驾驶检测系统。1.3疲劳驾驶检测算法技术难点而在深度学习几十年的发展中,越来越多的学者采用深度学习算法来实现疲劳驾驶检测,其中文献[12]中验证了使用视觉特征检测是一种无接触的、实时性好的、高准确性的算法。其中原理是通过摄像头获取图像再使用深度学习算法捕捉人脸区域和眼睛区域,再对眼睛状态进行判断与预测。但是由于视觉特征存在许多误差,会导致深度学习的模型难以拟合或者缺少关键的泛化能力。使用摄像头检测时人的面部会转动,并且成像条件、质量会发生变化,有许多不可控因素,导致无法检测出驾驶员眼睛或者无法判断其疲劳状态。可以看出这是基于视觉特征的疲劳驾驶检测算法的难点及弱点。简单的疲劳检测算法在复杂的环境因素下无法达到检测驾驶员是否在疲劳驾驶的能力,所以这困扰着许多精益求精的研究人员,这成为了疲劳驾驶检测的研究领域中的难点与重点。 对于基于面部视觉特征的疲劳驾驶检测算法,首先面临的是在复杂的环境下,如何解决对面部的识别,怎样精确定位到人脸及人眼。这要求采取的算法模型具有抗干扰性强、泛化好,准确度高的优点,有比传统人脸检测算法好的长处,没有传统人脸检测算法的短项,并需要迅速对驾驶员的疲劳状态进行判定,就是得保证算法模型的高效、快捷、准确。而且面对多因素多角度的人脸姿态,提取研究想要的特征会造成许多的误差与困扰。再者传统的面部检测主要针对二维图像提取特征检测人脸与人眼,而在疲劳驾驶检测中我们面对的是三维图像,这也是传统面部特征检测人脸、人眼定位失败的原因。综上所述,基于面部特征的疲劳驾驶检测目前遇到的难点是非常具有挑战性的。1.4本文的研究内容和关键技术本文研究的主要目的是解决在复杂环境下面部特征的提取、驾驶员脸部与眼部的区域定位与疲劳驾驶检测。1)面部特征提取及定位的主要策略是使用mtcnn网络模型[13]进行人 脸定位与眼睛区域定位,本文对mtcnn模型的级联网络由三层增加到四层,既保证原mtcnn网络的准确率,又增加了提取眼部ROI的新能力。原mtcnn 模型Onet获取面部的精确定位与5个人脸关键点(眼睛、鼻子、嘴巴), 本文中根据mtcnn的Onet层针对提取眼睛特征点设计出了新的一层级联网 络enet提取面部坐标点及两个眼睛的左上、右下坐标点,来获取面部区域的ROI与眼部区域的ROI。 2)然后再通过眼睛开合分类网络得到一定时间段眼睛开合情况,疲劳驾驶判断采用cnn模型输入眼部ROI再根据在一定时间段眼睛开合情况计 算出PERCLOS指数来判断驾驶人员的架势状态,从而具体达到疲劳驾驶判断的要求。 1.5本文组织结构 本文的具体结构如下: 第一章:绪论。阐述了疲劳驾驶检测的背景与意义,并通过分析国内外 疲劳驾驶检测的研究现状来表现并描述了疲劳驾驶检测中基于面部特征的 疲劳驾驶检测所面临的困难与挑战,并阐述了本文的主要内容与框架机构。 第二章:相关技术介绍及面部特征提取。本章节讲述了本文所涉及到的 技术原理与理论,首先介绍了深度学习理论,再深度剖析了卷积神经网络的层次结构及相关算法。第三章:改进的MTCNN模型训练及提取特征。这里介绍了mtcnn的相关原理,叙说了模型训练的步骤及流程,并探究了如何使用mtcnn提取出眼部 区域,并使用在疲劳驾驶检测中。 第四章:基于深度学习的疲劳驾驶检测。本章使用前文提到的改进的 mtcnn模型来进行疲劳驾驶检测,并采用PERCLOS的EM疲劳检测法进行疲劳检测。第五章:实验结果与分析。使用改进的ntcnn模型与其他人脸检测的模 型进行对比,并将本文中基于深度学习的疲劳驾驶检测与其他疲劳驾驶检测 算法做对比。得出基于深度学习的疲劳驾驶检测具备一定的优越性的结论。第一章相关技术介绍及面部特征提取本文主要研究基于深度学习的疲劳驾驶检测算法,将通过介绍卷积神经网络的相关基础知识并简单介绍深度学习的现状与理论,为本文提出的模型夯实基础。2.1深度学习理论深度学习(DeepLearning)是机器学习(MachineLearning)的一个重要的分支与延伸,是具有多层次、多特征、多深度的神经网络。目的主要通过各种有监督、无监督的深度学习算法来达到提取深层特征、自动化学习等的,比如人工智能。2016年人工智能AlphaGO几百围棋世界冠军李在石,掀起了人工智能的热潮,深度学习这一概念也逐渐被推广应用。深度学习与机器学习的不同之处,主要是应用的目的不同,从而会导致其类算法与机器学习有巨大的差异。机器学习提取的特征数往往会少于深度学习神经网络提取的特征数,而深度学习的结构可以由浅入深,机器学习的算法不具有这种深度变化的特性。你可以根据数据的特性,合理且规范的搭建深度学习网络模型,用以提取特征或者称为规律。深度学习的原理是通过一系列算法对如图像、音频、文字等数据进行特征变换,即一种类似于归一化的特征操作,将数据从原来的样本空间变换到一个全新的更容易体现数据特征的样本空间。这个是一个复杂的过程,并且不同的深度学习网络结构也有不同的变换方法与方式,但一般简单来说,即把数据从低维样本空间映射到高维的样本空间,维度的升高会带来更多的数据特征,而深度学习网络模型就通过学习新的样本空间的规律来达到提取特征或其他的目的,比如分类、回归等。2.2卷积神经网络基础卷积神经网络,其简单层次分为输入层、隐含层、输出层,而重要的部分是隐含层。隐含层包括但不限于卷积层、激励层、池化层和全连接层,不同的卷积神经网络模型还会有其他的一些层如BN层等。顾名思义,首先我们应该谈到的是卷积操作。卷积在数学层面其实就是一个复合函数公式,其数学定义如下:h(x)=f(x)-g(x)=Jf(t)-g(x-1)d(t) (2-1)而在深度学习或一些相关领域成为卷积算子,其实现通过两个函数进行平移

翻转并计算其重叠面积的积分。卷积神经网络就是使用卷积的方法映射样本空间的前馈神经网络,其重要的一环在于卷积层。卷积层使用了卷积核(或称滤波器)的函数定义,有些资料将卷积核视为专用于对点相乘的权重矩阵,矩阵就具有尺寸这个概念,卷积核也有。卷积核的尺寸指的是每次对操作图像矩阵所运算包括的长度和宽度,一般尺寸都设为MxM(M为奇数)的形式。卷积层即是对图像使用卷积核进行卷积操作的网络层,一般使用3x3的卷积核进行操作。将图像矩阵视为方格的话,该层使用卷积核每次对图像方格进行扫描式卷积运算,卷积之后横向移动步长(卷积核卷积一次后移动的距离,人为设定)个单位直到此列卷积完成,在从下列开始直至结尾。这样的卷积层操作的原理跟图像处理中的滤波器是一样的,不一样的是卷积核与滤波器其核心函数的定义是不相同的。而关于卷积层的通道(channel),跟图像的通道数有关。RGB图像是由R、G、B三层分量叠加组成的,具体如图2T所示:图2-1RGB图片三通道对图像数据一般使用RGB颜色表示法,当读取到电脑等设备中,使用的是保存R、G、B分量的色度矩阵,其实就是一个三维矩阵,三通道就是R、G、B三分量的维度,RGB图片就是我们常说的彩色图片。对于三通道图片,卷积层的卷积操作如图2-2所示:

InputVpJmc(*padL)(7^7i3)Filter車。(3^3x3)InputVpJmc(*padL)(7^7i3)Filter車。(3^3x3)K[:J:f0] wO[:X:10]filterVI(3k3<3)Output赤1啊已〔3x3戒)icEfl-erwvtient图2-2卷积操作的计算从图1-2中上述卷积算法得出的特征图我们可以看到FilterWO再经过卷积之后出现了尺寸缩小的现象,所以提出一种在图像周围填充数值为0的元素,这样卷积出来的特征图可以保持原图大小,这就是边界填充(padding)。卷积层具有两个特性,一个称为权值共享,一个称为局部连接。比如输入一张图片,给网络设置的滤波器尺寸与偏置等就称为权重,图像被多个卷积核扫描,而卷积核的大小尺寸是相同的,所以卷积出来提取的featuremap也是一样的,这就被叫做权值共享。局部连接是指卷积神经网络每一个神经元与输入神经元的部分区域相连接,这部分区域叫做感受野。激励层主要是对卷积层的输入进行一个非线性映射,因为见基层的计算还是一种线性计算,若没有激励层,会导致enn模型对于非线性数据的拟合程度达不到要求。激励层具体是采用激励函数,对卷积层提取的图像特征进行变换,常用的激励函数有sigmoid、relu>tanh、prelu等等。对于线性模型XW+b,输入xl、x2、x3....,对于任意输入采用模型核心算法Swx+b计算后,对每次输入的数据使用激活函数f&)计算,得到下一层输入的特征,而且激励层常常与卷积层合在一起并称卷积层。池化层即是对上一层输入的图像特征进行池化的网络层,池化又称下采样,目的是在能够的到主要特征的前提下减少筛选出的图像特征尺寸,主要作用是通过减少网络参数来减小计算量,并且能在一定程度上控制过拟合。

其实笼统来说,就是在保持平移不变性(translationinvariance)的前提下,进行特征降维。众所周知,模型的参数量过大是非常容易引起过拟合的情况,所以池化层削减部分的不必要特征并且保留重要特征的方式使得模型泛化能力得到提高又不会丧失拟合的性能。池化常用的方法有最大池化(Maxpooling)和平均池化(Averagepooling),这里具体讲述一下较为常用的最大池化的方法,如图2-3所示:Singledepthslicemaxpoolwith2x2filtersandstride2maxpoolwith2x2filtersandstride2图2-3池化操作从图2-3可以看到,8*8的featuremap池化尺寸为2*2,每次在池化区域内保留最大的特征或者色度,再移动步长2个单位,最终得到2*2的featuremapo由于这里采用池化的目的就是为了降维,所以这里没有零填充来保持featuremap原形状。对于全连接层的作用,抽象的理解在整个卷积神经网络的隐含层的末尾起分类器的作用。在实际使用中,可以将该层操作视为进行了一次类卷积运算,但是实质不是卷积。也有概念将该层进行的操作成为扁平化(Flatten),即将多维特征矩阵变换为1*1*M(M是人为设置的超参数)的特征矩阵。归根结底,在这层中,对所有特征矩阵进行了加权,对经过卷积或池化后的每一个特征矩阵的数据x,加上了设置的权重W,从而得到了新的多个改变了维度的特征矩阵,计算式如下:y=Wxo在这一层中,进行筛选的是多个具有需要提取的特征在整个特征空间中的部分,再经过输出层的激活函数激活筛选出来的神经元,得到整个图像在每个分类(label)的置信度(即图像在每一个分类中的概率),再输出置信度最高的分类。2.3本章小结本章简单介绍了深度学习理论,深入剖析卷积神经网络,为本文采用的多任务卷积神经网络模型提供理论支撑。使用深度学习与神经网络是本文的关键,介绍相关知识是为了更好的理解基于深度学习的多任务神经网络。第三章改进的MTCNN模型及训练3.1MTCNN模型详述在无条件约束的环境下人脸检测和对齐是非常具有挑战性的,因为你要考虑不同的姿势,光线的遮挡等。在这种情况下,文献[]提出了MTCNN模型来进行人脸检测和对齐。Mtcnn其全称是多任务级联卷积神经网络,顾名思义它的本质就是使用級联的方式串行一起的卷积神经网络。Mtcnn的结构如图3-1所示:图3-1mtcnn流程图mtcnn模型有三层结构Pnet、Rnet、Onet,每一层都是有多个layer组成。Rnet将图像金字塔生成的图像进行多次人脸定位并返回许多带有人脸的图像,再经过Rnet定位到人脸,然后再通过Onet精确定位人脸及眼鼻口五个特征点。具体流程如下:1、生成图像金字塔:输入图像数据,会设置一个缩放因子,将图片按照这个缩放因子p缩小,图像尺寸每次乘以p倍,最后得到的最小图像最短

的一边要大于等于12。2、将图片输入Pnet,Pnet是一个全卷积网络,该层网络不需要传统卷积神经网络的全连接层,最后需要使用卷积层使用激活函数来进行分类和回归的工作,并需要reshape。结构如图3-2所示:P-NciConv:3x1Conv:3x3Cunv:3x3 |产|毎配MF"2x2 (classdkatioi]inputsize12x12x35x5x10匸色<6P-NciConv:3x1Conv:3x3Cunv:3x3 |产|毎配MF"2x2 (classdkatioi]inputsize12x12x35x5x10匸色<61x1x2boundingboxrcure^sion1x1x4、3x3x161x1x32laciallartdmark■localization图3-2Pnet 最后一层输入两个特征图谱,一个是是否为积极图片的标签,一个边界框回归(boundingbox_regress)。前一个featuremap用于前后景分类,即所需的图像与没有人脸的图像,此处的featuremap两个通道分别对应提取图像部分的感受野的分类概率,即是人脸与不是人脸的概率。。后一个featuremap用于边界框回归,其具有四个通道,四个通道对应的是原始图像中有人脸区域的坐标值的偏移量。这一层的分类使用交叉熵损失函数,计算式3-1:TOC\o"1-5"\h\zLdet,-(ydetlog(pi)+(1-ydet)(1-log(pi))) (3-1)同时关于bbox_regression对每一个样本,计算其欧氏距离,计算式如3-2:Tbox_||yboxybox\\2 (3LiT|yiyih2 (3-2)3、 利用输出的两个特征谱生成一些可能的proposal人脸框,然后通过非极大值抑制(NMS)过滤掉重叠的预测人脸框。4、 将Pnet返回的图片再resize到24*24的尺寸输入到Rnet里,Rnet最后一层是两个全连接层分支,一个输出为人脸概率预测分类概率,即是人脸和不是人脸的概率,是对proposal的再次筛选,另一个输出为原始图像有人脸的区域的坐标值偏移量,是对Pnet人脸框坐标的再次调整。具体结构如图3-3所示:

R-NctCorn:2\2Inciallandmarklocalizniitinhoundingboxregression 1R-NctCorn:2\2Inciallandmarklocalizniitinhoundingboxregression 1taucclassttlcation图3-3Rnet5、将Rnet返回的坐标从原图中抠出再送入Onet再次调整oQnet与Rnet结构类似,不同之处在于Qnet在最后使用三个全连接层分别输出人脸概率、人脸坐标点的偏移量以及人的眼睛、鼻子、嘴巴的中心坐标点的偏移量,前两个都是对人脸的再次筛选和调整,第三个是检测出人脸框的5个landmark的10个坐标。人脸特征点采用的回归算法计算如-式_ylandmark

i(3-3)Alandmark^landmark_||y-_ylandmark

i(3-3)该层卷积连接网络结构如图「丝心图3-4QnetKaiiialbrtdmarklotaiijatirnJJJ Jliiily该层卷积连接网络结构如图「丝心图3-4QnetKaiiialbrtdmarklotaiijatirnJJJ Jliiilytontiett (KNetCtinv:3\5MR3.2MTCNN模型训练为了训练mtcnn模型,这里使用celebA数据集口。Mtcnn模型需要positives、negatives、partfaces、landmarks四种,positives是有整张人脸的图片,negative是没有人脸的图片,partfaces是有部分人脸的图片,landmarks是关键点。Mtcnn使用了IQU(重叠边框区域面积比例)计算边界框精度。置信度大于0.65的为positives,小于0.3的是negatives,0.4到0.65为partfaces。Landmarks的人脸框位置可由前两个网络得出或由landmark的坐标位置拟合出来。下面是计算IQU算法的实现:输入两个边框坐标数组boxl,box2计算boxl、box2的坐标系计算两个坐标系的交集面积计算boxl、box2两个边框的面积计算两个边框并集的面积,计算方法是box1-交集面积、box2面积-交集面积IOU二交集面积/并集面积返回IOU 网络中还有一个叫做非极大值抑制的算法,抑制不是极大值的元素,可以理解为局部最大搜索。在计算机视觉领域许多地方都使用NMS进行图像的抑制,如图像腐蚀算子中就有使用NMS。它的原理其实很简单,对所有输入的边界框计算它的IOU,保留IOU大于设定的阈值的概率最大的框,去除其他非极大的框。由于三层网络的训练过程比较类似,这里仅详细举例Pnet的训练过程,简单叙述Rnet及Onet的训练。这里使用keras训练,流程如下:读取数据集使用IOU算法,筛选出positives、negatives和partfaces并resize成12*12再分别保存在”roi.imdb”文件中,将他们的标签保存在“cls.imdb"文件中。从两个文件中读取图片及标签,将标签实行独热编码转换。将所有图片转化为numpy数组,准备训练。搭建训练模型。开始训练。训练完成保存权重。Rnet训练使用24*24的图片,与Pnet不同的是在后面使用两个全连接层做回归提取类别的特征谱和bbox特征谱。Onet训练使用48*48的图片,与Rnet类似,不过多使用了一个全连接层做landmark的回归。3.3改进的MTCNN模型训练及提取特征本文通过在三层网络之后再级联一层眼睛landmark网络(下文称为Enet)来获取眼部ROI,结构网络如Onet,本文通过使用大量样本训练,采用了keras封装的ReduceLROnPlateau,EarlyStopping技术以及dropout等正则化策略防止出现梯度爆炸和过拟合,使得Enet训练及预测准确率达到99%以上,经过试验后达到使用要求。将四层网络级联后得到的识别效果如

下图3-5所示:下图3-5所示:图3-5识别效果前三层Pnet、Rnet、Onet层模型上文讲述了训练方法,这里详细叙述关于Enet层的训练。数据集准备:需要准备具有眼部区域的图片及eye_bbox标注文件(本文采用人工标注celebA数据集)。本文采用前三层级联网络获取人脸ROL再通过人工标注或深度学习网络标注的方法标注人眼landmark,将裁剪下的图片作为训练数据,经过归一化的landmark作为标签,将两种数据保存为.Imdb二进制文件。从两个二进制文件中读取图片及标签。将所有图片进行shuffle并转化为numpy数组,准备训练。搭建如Onet层的模型,开始训练并保存权重。训练Enet网络层如下图3-6:LapsrOutputF込mmHlnpu.t_7 J4£.4&3?]ucanvlCCcovEJi)CtfanjBj院.蛤32>游6CWnrWa虻・46,S2>u23,23,22>iiccieW(CccwZD)CNone.21,21.64)eL®(E<wL£l:i31,21.心Ums*c_paialin■:Ed_LD ingIQLQ,64)n(Cctjw^ED)CBTainjSi,,9.£t.&1I郭能8mLEiReLUjCWona?击8,64:lnl:ng氓口心皿4,dI,&i|ucanv4(CcovED]Cfkinab击3GL2B)閃叫自mLg(KcLJJ;!QN口ififiL□u国12B>uperimjLie_3CPeruidtCKorwh3,3>fi■fl fnm11(TfaruBj1152)H£[>stx=c-1《丽皿.,此】29EH3Srfllu5(ReLnjCNohjb?W詞neam'fi(C>wtj=c-120E6图3-6Enet本文在mtcnn模型后再级联一个眼部区域提取网络Enet,通过此网络结构得到眼部区域的坐标点。此层网络可以得到左右眼的左上、右下坐标,更方便使用与显示。在前三层网络得到人脸区域和眼睛中心点的坐标,再加上此层网络提取的眼部区域坐标点。该层网络模型类似于Onet,采用相同输入输出,同样的卷积-池化-全连接的结构,提取出1x1x8的landmark_eye,这个特征谱代表的是眼部区域的偏移量。该层网络的关键在就是通过提取回归特征谱后并进行眼部特征点的解析得到眼部区域的坐标点。由于本文无需Onet得到的五个1andmark,所以没有显示。对于Enet的算法,假设mtcnn网络计算得到的眼睛关键点偏移量是b,输入Enet的图像为x,Enet网络0为E,Enet回归目标函数可以写成如下式3-1:arcminIIB-(b0-E(x,b0))II2 (3-4)其中B表示landmark_eye真实位置向量。公式(3-1)作用是训练出最优的Enet,来矫正并得到最为真实的眼睛landmark。3.4本章小结本章详细解释了有关mtcnn的原理与研究,叙说了mtcnn的三层网络结构及其特点,以及谈到了其中用到的比较关键的算法过程,并从实际上讲了mtcnn模型的训练方法,并在此基础上提出增加一层眼睛区域回归Enet层,这样会使mtcnn具有更广阔的应用与拓展,使得改进后的mtcnn模型具有框出眼部区域的能力。并讲述了如何训练Enet,级联了Enet会大大拓深mtcnn的优势,并弥补mtcnn无法提取眼睛区域的的缺点。第四章基于深度学习的疲劳驾驶检测4.1PERCLOS疲劳检测方法4.1.1PERCLOS方法原理及背景PERCLOS是通过计算眼睛闭合时间在单位时间内所占的比值并转化为百分比率,原理如图4-1所示:图4-1眼睛开度与时间f代表眼睛闭合时间的百分比率,即PERCLOS值;t1代表眼睛完全张开再到眼睛闭合80%用时;t2代表眼睛80%闭合到20%闭合用时;t3是眼睛20%闭合到20%睁开用时;t4是眼睛20%睁开用时。PERCLOS的值计算方法如式4-1所示:TOC\o"1-5"\h\z一12f, x100% (4-1)-1180年代到90年代的研究表明发现PERCLOS是最具有潜力的判定疲劳测定方法之一。4.1.2本文使用的PERCLOS方法文献[14]提供了三种PERCLOS检测方法,分别是p70(以眼睛至少闭合70%的时间占特定时间的百分比为评价指标),p80(以眼睛至少闭合80%的时间占特定时间的百分比为评价指标),EM(眼睛闭合时间占特定时间百分比的平均值)。图4-2是三种检测方法准确率对比图:人员编号PERCLOSE廚电图算法(EEG)头位置測置法(HFM眨眼检测法(EBM)F7Q⑴P30EM法1法2CE)怯!(6)法2(7)註1<E)法2⑶10.890,92爪990,830.82丄1020.330.S30.溟0.4G0.71爪2030.缶0.07爪950.010.850.釦40.840.330.83一a540.200_540.7750.940.970.950.&460.95G.830,940.570,950.100.5470.92。一940.SE0.36Q.310.930.32图4-2PERCLOS方法对比 本文采用PERCLOS方法中的EM方法,EM方法的计算式如式4-2:(4-2)FCtotal(4-2)Ftotal 其中f为PERCLOS指数,Ftotal表示单位时间内的视频图像帧数;FCtotal表示该段时间段中被认为是眼睛闭合状态的视频图像帧数。4.2疲劳驾驶检测流程 本文中使用基于深度学习的疲劳驾驶检测来进行驾驶状态检测。首先使用改进的mtcnn模型提取面部及眼部区域特征,并将其坐标与关键点标记出来,之后再通过分类网络层clsnet判断眼部是处于睁开还是闭合的状态。 从而计算驾驶员眼睛开合时间使用PERCLOS中的EM方法进行疲劳估计。这 里选择检测区间时间为3秒,每隔3秒对摄像头拍摄的视频逐帧检测,先判 断眼部ROI的开合状态,在3秒内超过阈值则判断为处于疲劳状态。具体检测流程如下: 1、 使用opencv打开摄像头,这里由于摄像头帧率固定为30帧,无法提高帧率增加视频流畅度,显示摄像帧率。 2、 对该帧图像使用高斯滤波,防止高斯噪点干扰识别与判断,调用模型的detect方法,得到视频流每帧人脸部与眼部ROI。 3、 使用cv2.rectangle方法绘制人脸部与眼部ROI,并裁剪出眼部区域的图片。4、 调用模型的predict方法,重新设置尺寸,24x24,并reshape为[-1,24,24,3]的数组,使用clsnet对数组进行分类预测,得到 对本文进行数百次实验来选择进行评估疲劳的PERCLOS指数,这里显 示前20次测试,如图4-3所示:

.-■:k 疲劳程度是否披劳图4-3疲劳指数根据上述实验方法选择的疲劳程度阈值为0.8,当疲劳值小于0.8判定为未疲劳,疲劳值超过或等于0.8则判定为疲劳。判断为疲劳后可以在视频显示窗口上进行提示,并会发出报警音提示人员注意安全。具体展示效果如下图4-4所示:图4-4展示效果4.3mtcnn模型与基于级联分类器的模型对比Mtcnn对比传统视觉疲劳驾驶检测算法,具有保证检测准确率高的前提下又使得检测速度达到要求等优势,为了凸显mtcnn模型的优势,这里与基于級联分类器的模型进行比较。这里自行设计一个简单的检测办法,采用FDDB数据集400张,使用两种模型对其进行人脸对齐,计算识别数,通过识别数与数据集总数的比值来进行比较,识别率越高检测效果越好。而检测速度通过计算整个算法运行时间来比较,计算方式为完成时间-开始时间,时间差越小运行速度越快。通过上述方法,得到实验测试结果如图4-5所示:史验模电灿数.总好逝打•时间运行时间并值1miciiTi40341796M鹏96.1778.7址ar特肝级底分資器5641713,例17.47FDDBm.tcnn4G341796一硕S3.18%98.2890.44陥M特征皱联分發器5641713,愤343uncnn40341796.m99.883.34膈紅特征魏联分奖器56417L3.42ffi16.461mtcnn351938379.7:%107)281048.55折ar特征皺朕分类器2S38370.60^22.12300Tmtcrin35193B3791.71%91.11%LOW.741038.03*眦特征饭联分类器233837o.eo%22.二3mlennB51&SSS79]71%1065.681042.13话ar擀政联分类聘2338370.60%蛤55图4-5实验结果4.4本章总结本章主要是阐述基于深度学习的疲劳驾驶检测在实际场景中的应用。通过疲劳驾驶检测可以正确分析驾驶人员的状态,当超过疲劳检测阈值时,本套检测方法会自动提示,这在实际生活应用中有很大的作用。本章介绍了PERCLOS疲劳检测方法,阐明了如何检测疲劳驾驶,并成功应用于本文疲劳驾驶检测中,验证了该疲劳驾驶检测的有效性。第五章实验结果与分析5.1实验环境本文所实现的基于深度学习的疲劳驾驶检测算法的计算机系统硬件主机处理器为IntelCorei7-7500U,核心为八核,内存大小为8G内存,GPU为NvidiaGeforce940mx;开发系统环境:Windwos1064位操作系统;采用keras以tensorflow-gpu做后台的深度学习框架,使用NVIDIA加速工具:CUDNN-10.0.0,CUDAT0.0.0;开发语言:python。5.2实验主要数据库本文基于深度学习,针对传统视觉疲劳驾驶检测面对光线、姿态等影响下无法识别提出一种基于mtcnn的疲劳驾驶检测。本文训练眼部ROI网络(Enet)采用了CelebA数据集。对于本章测试采用LFW数据库测试集,总共249张图片,图片来源于网络,包括各种名人、网络热图、画像等随机图像,部分图像集如图5-1所示:图5-1并随机选取300W-3d数据库3837张图像进行测试,包括多种姿态、遮挡的人脸,随机选取FDDB数据集417张图像进行测试。5.3算法实验结果分析本文通过使用三个数据集LFW、300w、FDDB进行测试与验证,测试结果如下图5-2所示:数据集图像总数识别数 腌部识别率眼部识别率LFWtest24922691%91%300V383了326286%86%FDDB41737990.80%90.80%图5-2测试结果实验结果表明,本文采用的基于深度学习的疲劳驾驶检测方法具有比较好的检测率,对于近5000张测试图片准确率达到85%以上。本文借助opencv,通过实验对整个驾驶人员疲劳检测算法进行验证和分析,找出算法的缺陷和不足,为以后算法优化和研究提供方法,以便促进疲劳驾驶检测的多种方法、方式的出现。为更好的检查本文中使用的疲劳驾驶检测方法,这里使用网络下载并经过裁剪的视频,来评估模型对于视频流的检测,看此方法能否对摄像头监控起到非常良好的效果。该段视频共821帧,通过多次实验得到有人脸的帧总数为789帧,其中识别出700帧具有人脸与眼睛的图像,识别率达到88%,与上文对图像检测脸部与眼部的相差无几。经过实验得出,每帧图像处理时间为0.16秒,平均每秒可处理6帧图像。为探究该算法能否对疲劳状态做出判断,这里使用控制变量法,利用相同的笔记本摄像头采集视频,保持光线、人脸姿态等变量不变,对脸部与摄像头的距离影响提出研究与探索。研究流程如下:1、 保持良好的光线、脸部姿态、无遮挡2、 计算脸部与摄像头的距离并记录下来,这里选定距离为50cm3、 开启摄像头,调用检测算法,选定视频时间为10so4、 要求实验人员做出疲劳的姿态按间隔30s为时间周期分别表现疲劳和非疲劳状态。记录出现提示疲劳与非疲劳的时间段。开始疲劳与提示疲劳时长不超过5s则视为判断成功。5、 进行30次检测,记录结果。6、 进行5组实验这里采用判断实验人员疲劳成功的次数与总共实验次数平均比值进行评估。评估结果如下图5-3所示:实验编号检测结果状态识别率1疲劳疲劳93%O朮疲劳未疲労100%3疲劳疲劳90%4未疲劳未疲劳96%5疲劳疲劳96%6朮疲芬未疲劳100%1疲劳疲劳100%8未虹;未疲劳100%9疲劳疲劳100%10朮疲芬未疲步—100%

图5-3测试结果为验证本疲劳驾驶检测算法的实际应用是否具有可靠性,本文选择直接在驾驶车辆内进行疲劳驾驶检测。实验分为两步:首先进行人脸对齐的检测,令实验人员调整脸部姿态与角度,分别进行测试的转动角度从-45。变化到45°(将脸部正对平视摄像头的角度视为0°,向左转动角度为负值,向右为正值)。通过不同的转动角度来测试模型是否能成功对齐人脸。再进行人员疲劳检测,由实验人员多次表现出疲劳的状态,整个系统做出判断疲劳的反应视为成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论