基于改进的HOG算法结合CNN-SVM的疲劳检测
2022-04-22王爽
王 爽
(西安工程大学电子信息学院,西安 710600)
0引言
近年来,因疲劳驾驶导致的交通事故屡见不鲜,对个人的生命财产造成损失,也对国家道路的稳定性造成破坏。为了保障人民群众的出行安全,针对驾驶员疲劳检测的研究已经成为交通安全领域的研究重点方向。现有的相关研究中,主要有三种检测疲劳的方法,分别是基于生理信号的疲劳检测方法、基于行为特征的疲劳检测方法、基于计算机视觉的疲劳检测方法。
基于驾驶员的生理信号检测主要是让驾驶员在行车途中佩戴专业的检测设备,通过分析正常状态和疲劳状态下的生理数据差异来进行疲劳判断。这种方式影响驾驶的舒适度,而且成本相对昂贵,不利于实际应用推广。
基于驾驶员行为特征的疲劳检测方法一般是通过车辆行驶过程中的参数进行判断,如车速、方向盘角度、加速状态等,这种方法受限于行车车道、不同驾驶员行车的迥异度,以及路面状况等,很难应用于复杂的实际场景中。
基于机计算机视觉的疲劳检测方法根据驾驶员的眼睛、嘴部闭合程度头部姿势变化等疲劳特征进行判断。通过摄像头采集驾驶员的面部信息,结合数字图像处理技术对关键部位进行识别并判断疲劳状态。深度学习技术的兴起推动了计算机视觉领域的飞速发展,Geng L等提出了一种基于Haar特征的AdaBoost级联分类算法,该算法首先对人脸进行检测,然后利用卷积神经网络识别眼部状态并进行疲劳检测。Dwivedi K等通过计算机视觉提取特征,利用构建的深度卷积神经网络的方法对驾驶员的疲劳状态进行判别。基于计算机视觉的方法具有非接触、移植性强等优势,但仍然存在很大的局限性。在实际驾驶过程中,光照的强弱变化及驾驶员姿态等因素都会影响设备获取图像的质量,导致对人脸的识别和关键点的定位会存在误差,从而使得后续的眼部特征检测的准确率受到影响。
综合以上因素,本文提出一种改进HOG算法与CNN-SVM结合的人脸疲劳检测方法。首先,改进了HOG特征提取的过程,传统特征提取图像的灰度梯度值只统计了垂直和水平像素,本文加入了对角线梯度信息,使得获取的图像边缘信息更加丰富,从而提高人脸的检测率。其次,使用级联回归实现面部特征点标定,对眼部图片进行提取。接着使用CNN-SVM网络进行眼部特征训练。最后,结合PERCLOS等参数对疲劳状态进行判别。通过实验表明,本文提出的方法对驾驶员进行疲劳检测有较高的准确率。
1 改进的HOG算法进行人脸检测
1.1 HOG的特征提取
HOG是一种通过计算图像灰度梯度值来提取特征信息的特征提取算法,具有速度较快,准确率较高等特点,被用于目标识别、人脸识别、表情识别等领域。本文使用HOG计算灰度图像中的梯度特征来完成人脸检测任务。
首先对输入的图片进行归一化操作和Gamma校正处理,通过调节图像对比度,使光照或阴影对图片的影响降低,公式如下:
遍历整个图像,计算每个像素点在水平方向和垂直方向的梯度,对像素点(,)处的梯度值和梯度方向进行计算:
其中,G(,)、G(,)分别代表像素(,)水平方向的梯度和像素垂直方向的梯度。接着计算梯度幅值(,)和方向值(,)。
最后为每个cell构建梯度方向直方图,把cell组合成大的block,对block内的直方图进行归一化,归一化能够对光照、阴影和边缘进行压缩。最后收集HOG特征,即把提取的HOG特征输入到SVM分类器中供分类使用。
传统的HOG算法在计算梯度方向的过程中,只是计算单个元素水平和垂直元素的灰度变化信息,导致图像边缘信息的丢失。本文对HOG算法进行改进,在原有的HOG信息上,加入了对角线像素的梯度方向和幅值信息,从而更好的提取人脸边缘特征。最后连接原HOG向量及对角线元素计算得到的HOG特征向量,如图1所示。
图1 改进的HOG信息直方图
计算改进的HOG的过程中,把像素的梯度方向和幅值定义如下:
可以看到HOG信息直方图和对角线HOG信息直方图信息有部分差别,因此将二者融合起来可以弥补很多丢失的图像边缘信息,提高后续人脸的检测率。
1.2 人脸检测
采用改进的HOG算法进行人脸检测,检测结果如表1所示,可以看出本文改进的算法相对于传统HOG特征提取算法检测人脸,取得了更好的效果。
表1 两种算法比较
2 人脸关键点定位
在人脸关键点检测技术中,使用Kazemi等提出的回归树算法对人脸特征点定位。首先选取人脸的68个特殊标志点模型,包括对眉毛、眼睛、鼻子、嘴巴等特征点的标定。然后利用该算法提出的基于梯度增强的框架,通过优化损失函数和误差的总和来学习回归树集合,检测出脸部图像中的68个关键点,并进行人脸对齐操作,分割局部区域。
3 CNN-SVM识别眼部状态
3.1 CNN模型训练
CNN常用于图像领域,是一种带有深度学习结构的前馈神经网络,CNN的网络结构包括卷积层、池化层和全连接层,CNN以二维图像作为输入并自动学习图像特征,避免了对图像进行复杂的预处理。本文对驾驶员眼部状态的特征提取主要有两种状态模式:眼睛闭合和眼睛睁开,表2为基于CNN的驾驶员眼部状态提取模型的网络结构参数。
表2 驾驶员眼部状态提取卷积神经网络构
网络结构采用三个卷积层、两个池化层,最后加上两个全连接层。在S2池化层和F1全连接层中加入L2正则化和Dropout技术,将弃权的概率设置为0.4。采用的优化算法是随机梯度下降算法,加入损失函数,选择的激活函数是ReLU函数。设置训练的学习率为0.01,训练的batches为64。经过200次的迭代过程,使误差变动幅度保持稳定,模型基本达到训练要求。
本文使用数据集主要有:CEW数据集以及自采数据集,自采数据包括5名男性和5名女性在正常光、稍暗光下眼睛睁开、闭合的图像。为了在自采集数据集中达到增大训练样本的效果,同时也为了解决道路颠簸晃动带来的图像抖动等问题,对部分图像进行反转、角度旋转。
选取7000张图片作为本实验的训练集,正样本为睁眼图片,负样本为闭眼图片,分别为4000张和3000张,图片尺寸归一化处理为24×20。使用1000张测试样本进行测试,测试结果如表3所示,在光照较亮的情况下,眼部状态的睁眼准确率达到95.6%,闭眼准确率达到96.2%,平均识别识别率为95.9%。
表3 模型训练准确率
3.2 加入SVM分类器进行检测
本文使用CNN作为特征提取器,当提取图像的特征信息后对眼部状态进行分类预测,但存在执行分类任务时计算量过大,且准确率还需提更高。针对此问题加入SVM当作特征分类器,即将CNN和SVM两者结合并用于实现眼部状态识别。
对比测试结果如表4所示,测试集同样选取上面1000张测试样本进行测试,可以看到使用单一CNN进行识别的平均准确率为95.9%,而加入了SVM的识别准确率为97.3%,实验证实了该方法的准确性。
表4 CNN与CNN+SVM的识别率比较
4 疲劳参数
4.1 眨眼频率参数
眼部从睁开到闭合再到睁开的一个完整过程认定为一次眨眼过程。眨眼频率是指单位时间内眨眼的总次数。医学上表明,人体正常清醒状态下每分钟眨眼次数在15~30次,每次眨眼持续时间为0.2~0.3 s。相比正常状态,处于疲劳状态时眨眼频率会有所降低。
4.2 PERCLOS参数
PERCLOS是通过计算一段时间的眼睛闭和时间所占的比例进行疲劳判断,PERCLOS的计算公式如下:
5 实验结果与分析
5.1 实验数据集
疲劳检测的数据集使用YawDD数据集。YawDD是由Abtahi等制作的视频数据集,通过车内摄像头采集驾驶员模拟行车的图像,该数据集包含不同性别、不同年龄的驾驶员在正常状态和疲劳状态下的视频。
实验的硬件采用Intel i5-9400F处理器,显卡为GTX1650,内存使用16 G,实验操作系统为Windows 10环境,基于Python 3.7语言的Ten⁃sorflow框架实现。
5.2 实验结果
使用YawDD测试集分别截取5名测试者2分钟模拟驾驶的视频,为验证模型准确率,实验检测并统计了测试样本的眨眼次数和PERCLOS值,记录结果如表5所示。
表5 疲劳驾驶检测结果
根据上表可统计本次测试人员的PERCLOS值和眨眼次数的波动范围,样本越多,范围越准,本次PERCLOS值的波动范围在0.0712到0.3107之间。眨眼次数波动范围在18~46之间。
可以看出,当驾驶人员在疲劳驾驶时,PERCLOS值有所增加,眨眼次数有所降低。在样本2中,由于驾驶员处于较傍晚的环境下拍摄,并且驾驶员因个体原因产生了表情的变化,导致眼部疲劳特征的提取过程受到部分干扰,眨眼准确率有所降低。总体来看,本算法对眼部状态识别准确率相对较高,平均准确率达到94.9%。
在状态判定参数上,将PERCLOS阈值设置为0.18,总眨眼数的阈值设置为22,即当PERCLOS值大于0.17或眨眼次数小于22次判定为疲劳,实验表明,疲劳状态判定均未出现误判的情况。
通过检测结果可以看出,本文提出的基于改进的HOG算法与CNN-SVM的疲劳检测方法对疲劳状态检测是十分有效的。
6 结语
本文以疲劳驾驶检测为研究对象,提出了基于改进的HOG算法与CNN-SVM的人脸疲劳检测方法,该方法首先对传统HOG加以改进,加入对角线像素梯度信息,提升了图像的边缘信息,使检测人脸准确率更高。然后使用特征点模型对人脸定位和分割。最后以CNN作为特征提取器,SVM作为分类器的网络模型进行眼部状态判别,并结合PERCLOS等参数进行疲劳驾驶检测判断。相较于其他疲劳检测方法,本文方法不直接接触驾驶员,移植性强,判断准确度高,在交通安全领域拥有较好的前景。