分析戴诗琪同学的《基于深度学习的疲劳驾驶检测算法》

关键词:HOG算子;特征点模型;深度学习;CNN;疲劳检测算法
Question:查看作者的相关思路;查看作者是否有相关的数据支撑

  • 摘要:针对现有疲劳驾驶检测算法,实用性差或者准确率低的问题,本文提出了一种基于深度学习的疲劳驾驶检测算法。
  • 首先,使用HOG(Histogram of Oriented Gradient)特征算子检测人脸的存在;其次,利用特征点模型实现人脸的对齐,同时实现眼睛、嘴巴的分割。
  • 最后,通过深度卷积神经网络提取驾驶员的眼部疲劳特征,并融合驾驶员嘴部的疲劳特征进行疲劳预警。
  • 大量的实验表明,该方法在疲劳驾驶检测的准确率、实时性等方面都取得明显的性能提升。
  1. 本文说,使用深度网络直接从图像中学习学习视觉特征表示,相较于手工设计的特征,对光照、姿势等条件变化,具有更好的鲁棒性。以上的疲劳驾驶检测算法都取得了一定的效果与进展,但仍然存在很大的局限性:基于行为特征的检测算法不需要驾驶人直接接触检测装置,并且在汽车现有装置的基础上对设备需求较低,实用性很强,易于推广,但会受到驾驶人个人习惯、路面条件和车辆型号的限制,所以效果不是很好。
  2. 但是,本文所说的,利用深度学习方法提取眼睛部位的视觉特征,建立视觉模型,以提升视觉特征的辨别能力,然后采用PERCLOS算法结合打哈欠的频率,判断驾驶员是否疲劳,减少单一特征的误检率。实验结果表明,本文提出的基于深度学习的疲劳驾驶检测方法是有效的

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

本文设计的算法分为4步:

  • 首先利用HOG特征模型检测初摄像头实时获取的画面中的驾驶员的人脸图像,
  • 然后根据面部标识算法,定位出人眼和嘴部区域
  • 接着将定位出的眼睛区域图像输入深度卷积神经网络提取眼睛的视觉特征并分别判断眼睛和嘴巴的开闭程度,
  • 最后根据PERCLOS算法求出单位时间内眼睛闭和状态所占的百分比,同时结合打哈欠的频率完成疲劳驾驶预警机制。

基于HOG的人脸检测

HOG特征具有较好的光学不变性与集合不变性,尤其适用于目标检测。主要步骤如下:
(1)、归一化
(2)、遍历图像,计算梯度值和梯度方向
(3)、得到梯度方向直方图
(4)、合并后得到特征向量并归一化
(5)、得到最终的HOG特征向量,描述整个图像。

本文选用的单元区域大小为88像素,单位块的大小为16像素,滑动步长L为8。输入图像大小为128128时,则生成的HOG特征向量为8100维。最后通过提取大量的已标定人脸样本的HOG特征,并使用SVM对其进行训练生成人来鸟检测器。具体训练算法如表 算法一 所示。<>

人脸特征点定位

本文使用2014年Kazemi和Sullivan提出的面部标志估算算法检测人脸特征点并对齐人脸。
首先选取人脸的68个特殊标志点模型,从眉毛外沿至下颌底部,包括眼睛轮廓和嘴部轮廓等。利用该算法提出的基于梯度增强的框架,通过优化损失函数和误差的总和来学习回归树集合(Ensemble of Regression Trees,ERT),检测出脸部图像中的68个关键点,最后对齐人脸,并根据关键点序号定位出所需要的眼部、嘴部图像。

卷积神经网络识别眼部状态

在定位眼睛和嘴部区域后,分割上述局部区域,然后建立眼睛的诗句特征模型。
传统的基于深度学习的目标识别方法,主要针对单张的静态图片,使用CNN网络提取特征,将某一中间层作为特征描述然后利用softmax等分类器对其分类,中间层的特征描述通常位数较高。
而在疲劳驾驶检测过程中需要对视频监控的连续多幅图像进行处理,包含了更多的光照、遮挡等条件变化信息。本文没有采用传统的损失函数而是采用基于三元组损失函数的深度卷积神经网络学习眼睛特征。传统的损失函数,主要是计算最小化预测标记与真实标记之间的误差,它虽然可以保障类间分离,但不能实现类内聚集。
三元组损失函数,计算最大化不同类对象之间的欧式距离与同类对象之间的欧式距离的差值,这可以保障类间距离最大化,类内距离最小化,实现深度学习网络类内聚集、类间原理,提高了深度网络的分类能力。区分睁眼和闭眼两个状态集合,将独立的样本分类任务转换为样本间的距离度量学习任务,保留了更多的数据内部的关联性信息,直接通过两幅图像特征的欧式距离来判断两幅图像世博来同一类别,去除使用中间层作为特征描述的间接性实现端到端的学习,啊降低计算量,提高系统的实时性,网络结构如图5所示。

如图,CNN结构的输入尺寸大小为4848,输出层为2维向量,表示2个类别(眼睛闭合和眼睛睁开),中间包含四个阶段的卷积层、归一化层、池化层的操作。第一阶段的卷积核大小分别为33和11,池化层以33的大小平均池化对比归一化的特征图,后续阶段的相应操作与第一阶段类似。

而一个三元组,包含3个样本:一个随机选择的眼睛样本Anchor,一个与随机样本相似的样本Positive,一个与随机样本不相似的样本Negative,核心思想为通过学习是的随机样本与相似样本间的距离相差最小,与不相似样本间的距离相差最大。也可以得到其损失函数。三元组分类损失对三个样本特征的梯度,可以得到。最后,我们使用随机梯度下降算法训练上面描述的基于三元组损失深度卷积神经网络模型,具体u想你连算法如下图。【伪代码】

利用深度卷积神经网络判别单帧图像的眼部开闭状态后,根据PRECCLOS定义计算单位时间内闭合状态所占时间的百分比。

嘴部状态识别

在驾驶过程中,驾驶员的嘴部通常由闭合、说话或唱歌、打哈欠三种状态,打哈欠的状态下,嘴部的张开程度将明显并持续大于前两种状态,因此在嘴部定位精确的情况下,可直接根据嘴部图像的宽高比判断嘴巴的行开程度,快速区分这三种状态,减少计算量。具体步骤如下:

  • 宽高比小于某一个阈值T时,可判断当前图像帧为打哈欠
  • 当打哈欠的视频帧连续达到K帧时,记作打哈欠一次。
  • 分别判断眼部和嘴部的疲劳状态后,融合眼睛的疲劳参数与嘴部的疲劳参数,分别赋予一定的权重,可以得到最终的疲劳值。

实验结果与分析

数据集与网络训练

本文采用了ZJU眨眼视频数据集和CEW眼睛数据集,ZJU包含20个人的80个avi剪辑视频,每个人包含四类片段:【正面视图未带眼睛、正面视图薄边框眼睛、正面视图黑框眼镜、向上视角未戴眼镜】在眨眼过程中,手动选择眼睛睁开、半开半闭、闭合的眼睛图像,并将左右眼分开存储,共产生7334幅图像(1574张闭眼样本和5770张睁眼样本);CEW包含2423幅人脸图像,同样上述操作。

将所有样本图像归一化为48*48,分别合并睁眼、闭眼样本集(不区分左右眼),然后分别从中划分20%的样本作为测试机,其余为训练集。使用随机选择策略在训练集中生成1000组三元组用于网络迭代训练,【本实验Ubuntu环境下使用touch框架实现】。

实验结果

眼睛状态识别测试

  • 睁眼和闭眼的正确数目及识别准确率。
  • 利用传统的CNN方法,在相同测试集上的测试结果
  • 本文方法和CNN方法,眼睛状态识别的对比(测试项目如下:准确率,人脸检测时间,嘴部眼睛定位时间,眼部识别时间)

疲劳状态识别测试

训练集:采用的YawDD的数据集,包含了不同性别、种族、光照环境。
测试集:3个测试者(男性,女性,带眼镜男性)

总结

疲劳特征的选择是疲劳驾驶检测的关键, 本文提
出了一种基于深度学习的疲劳驾驶检测方法. 该方法
首先利用 HOG 特征检测视频中的人脸图像, 然后利用
特征点模型实现人脸器官的定位和分割, 接着使用深
度卷积神经网络学习眼睛区域的特征并实现眼睛闭合
状态的识别, 最后融合眼睛闭合状态与嘴部闭合状态
实现疲劳驾驶检测预警. 与其它的疲劳驾驶检测方法
相比, 该方法无需接触驾驶员, 能够自主提取更有判别
力的眼部特征, 并且具有良好的实时性, 特征的融合也
进一步提高了准确性. 在 ZJU、CEW 和 YawDD 数据
集上与 CNN 的视觉特征的检测方法的对比试验和分
析结果表明, 该方法具有更好的检测性能.

0%