基于深度学习的疲劳驾驶检测算法研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于深度学习的疲劳驾驶检测算法研究作者:***
来源:《专用汽车》2023年第12期
摘要:针对疲劳驾驶检测模型需要的实时性与轻量性,在SSD的基础上提出了SSD-MA 网络作为人脸部件检测网络。

该网络通过替换原SSD主干网络为MobileNetv3,使得模型参数量骤减,加上AFF注意力特征融合了不同尺寸的特征图,进一步提升了对人眼小目标的检测性能,并结合疲劳参数Peclos可以准确地输出被测人员的疲劳状态。

经实验验证,SSD-MA在验证集上的mAP值达到了96.9%,较原SSD-300提高了5%,网络整体体积缩减了89%。

关键词:深度学习;SSD-300;疲劳检测;MobileNetV3;多尺度特征融合
中图分类号:U472.9 收稿日期:2023-10-07
DOI:10.19999/ki.1004-0226.2023.12.026
1 前言
疲劳驾驶是指驾驶人由于长时间的连续驾驶、睡眠不足、身体疲劳等原因而导致反应迟钝、注意力不集中等症状的驾驶行为。

这种行为会增加交通事故的风险,因此被视为一种安全隐患。

王小玉等[1]首先利用灰度积分投影对人眼进行粗定位,再用自适应提升算法检测人脸,最后借助2个疲劳参数综合判断驾驶員的疲劳状态。

李昭慧等[2]提出一种基于改进YOLOv4算法的疲劳驾驶检测,在框架中的特征金字塔前后增加卷积,提高对深度特征的提取,引入空洞卷积增加感受野,在最后测试中达到了
97.29%的mAP。

张博熠等[3]首先通过单阶段人脸检测器RetinaFace进行人脸关键部位提取,再通过眼嘴特征判断网络EMSD-Net实现了对疲劳特征的分类,最后结合闭眼百分比、持续闭眼时间和持续呵欠时间判定疲劳状态。

娄平等[4]通过改进MTCNN[5]图像金字塔的固定缩小比例和用Ghost模块替换AlexNet中卷积操作大幅降低了网络的参数量实现了检测网络的轻量化。

李泰国等[6]在选择特征问题上融合了驾驶员面部和身体的特征,通过建立多组疲劳特征计算其离散程度,再将其输入LSTM网络进行分类训练达到疲劳检测目的。

综上,目前基于驾驶员面部特征的疲劳检测手段多是先由目标检测算法进行人脸特征提取,然后结合疲劳参数的计算实现疲劳状态检测。

传统机器视觉方法检测精度有限,深度学习的方法又存在训练困难、移植性差等弊端。

本文针对人脸特征提取步骤中的目标检测网络进行优化,提出了轻量型人脸部件检测网络SDD-MA。

该网络能在保证精度的前提下大幅减小模型的参数量,为基于深度学习的疲劳驾驶检测模型在移动端等边缘设备上的移植提供了可选择的方案。

2 SSD目标检测算法
SSD-300[7]作为one-stage目标检测算法的代表作,最早是在2016年的ECCV上由Wei liu 提出的,目的是为了完成通用物体检测任务。

与Two-Stage检测算法不同,SSD不需要执行先生成候选框再进行回归和分类任务这样的步骤,而是采用类似Faster-RCNN[8]中Anchor的概念,通过在主干网络提取的特征图上设置Prior Box,实现了端到端的训练。

具体来讲,原SSD选用VGG-16作为back-bone,将VGG-16最后两个全连接层FC6、FC7替换成了卷积层,并在此之后又新增了额外的4个层,分别是Conv8_2、Conv9_2、Conv10_2、Pool11,如
此进行连续的下采样。

最终,主干网络一共提取了6个不同尺寸的特征图作为Detections的输入。

SSD-300网络结构如图1所示。

3 SSD算法的改进
3.1 改进SSD-MA的总体框架
SSD-300主干网络的参数量占了总参数量的80%左右,这也是本文选择用MobileNetv3去进行替换的原因。

同时,SSD-300的多尺寸特征图与特征金字塔[9]类似,浅层特征图的分辨率高,对被测目标的局部信息敏感,特征表达相对深层来说更加简单,其中主要包括一些基础的边缘、纹理等特征。

而深层特征图可以包含更高级的语义信息,例如物体的形状、姿态和类别等。

基于这些特点,融合不同尺寸的特征图能提升对小目标的识别效果,故在MobileNetv3的第13个卷积层和第14个卷积层提取的特征图做特征融合时加入AFF结构,以求得对小目标更好的检测效果。

由此所得到的SSD-MA网络结构如图2所示。

3.2 MobileNetV3
MobileNet[10]是由Google开发的一种轻量级深度神经网络架构,旨在为移动设备和嵌入式设备等资源有限的环境提供高效的计算性能,具体网络结构如表1所示。

其中,input为输入特征图维度;Operator为当前层实行的操作模块,包括普通卷积Conv2d、瓶颈结构Bneck、池化层pool;Exp size为倒残差块第一次卷积后输出维度;#out倒残差块最后输出维度;NL 为激活函数;s为卷积步幅;NBN为不使用Batch Normalization层。

图3所示为残差结构、倒残结构、MobileNet结构和SE模块。

MobileNet是由大量的瓶颈结构堆叠而成的。

与残差网络[11]中的瓶颈结构稍有不同,MobileNet将瓶颈卷积中的3×3卷积替换成了深度可分离卷积,这样输入特征图在一个瓶颈结构中共经历了如图3a中所示的4个步骤的特征提取:
a.1×1扩张卷积层,用于将输入张量的通道数扩大,以提供更多的信息。

b.3×3深度可分离卷积层,这种分步操作可以减少计算量和参数数量,从而使模型更加轻量级。

c.跳跃连接,该连接允许信息从输入层直接传递到输出层,以保留更多的原始特征。

跳跃连接还有助于缓解梯度消失问题,从而使模型更易于训练。

d.1×1的收缩卷积层,该层用于将输出张量的通道数缩小,以减少计算量和模型大小。

MobileNetv3在深度可分离卷积后加入了图3d所示的SE注意力机制模块,通过对每个特征图的全局平均池化和全局最大池化操作,得到特征图的平均值和最大值,然后将它们连接起
来并通过一层全连接层,得到一个向量。

接下来,通过一个sigmoid函数,将向量映射到0~1之间的范围内,并乘以原特征图,得到新的加强重要特征的特征图。

深度可分离卷积(depthwise separable convolution)把一次标准卷积分解成了深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两个步骤。

展示了一个标准卷积核被深度卷积和逐点卷积替代以构成一个深度可分离卷积的过程。

具体来讲,深度卷积的计算过程可以表示为:
[Yi,j,k=p=1kq=1kc=1cinXi+p−1,j+q−1,cKp,q,c,k] (1)
式中,[Yi,j,k∈RH×W×Cout]为深度卷积的输出特征图;[i,j]分别为输出特征图的高度和宽度坐标;[k]为输出特征图的通道数。

对于每个输入通道[c],卷积核[K]在该通道上的权重参数是[Kp,q,c,k]。

逐点卷积的计算过程可以表示为:
[Yi,j,k=c=1CinXi,j,cK1,1,c,k] (2)
式中,[Yi,j,k∈RH×W×Cout]为逐点卷积的输出特征图;[i,j]分别为输出特征图的高度和宽度坐标;[k]为输出特征图的通道数。

对于每个输出通道[k],卷积核[K]在输入通道[c]上的权重参数是[K1,1,c,k]。

3.3 注意力特征融合AFF
Attention Feature Fusion[12]是一种生成权重的具体方法。

AFF首先融合了input1和input2两个输入特征,用<E:\临时\专用汽车期刊\2023年\专用汽车2023年-12期\Image\image5.pdf>表示特征的元素级别相加,然后将组合后的特征送入MS-CAM模块。

由MS-CAM 模块输出两个输入的权重参数,最后将两个输入input1和input2加权相加得到该AFF的output。

计算式如下:
[Z=M(X⊕Y)⊗X+(1−M(X⊕Y))⊗Y] (3)
式中,[Z]表示最后的output;[M(X⊕Y)]和[1−M(X⊕Y)]表示由MS-CAM模块输出的两个输入的权重系数;[X]、[Y]表示两个输入特征input1和input2。

展示一个MS-CAM模块的内部结构,可以看到从输入[X∈RC×H×W]到输出权重一共有两条路线,分别为输入的全局特征上下文[w(X)]和局部通道上下文[L(X)]。

[w(X)]的计算过程如下式:
[w(X)=σ(G(X))=σ(β(W2δ(β(W1(g(X))))))] (4)
式中,[g(X)∈iC]为全局平均池化;[W1∈RC×Cr]为逐点卷积的降维层;[β]为BN层;[W2∈RC×Cr]为升维逐点卷积层;[σ]为Sigmoid激活函数;[δ]为ReLU激活函数;r为通道衰减系数。

局部通道上下文[L(X)]的计算过程如下:
[L(X)=β(PWConv2(δ(β(PWConv1(X)))))] (5)
式中,[PWConv1]和[PWConv2]是与式(4)中[W1]和[W2]有相同作用两个逐点卷积层。

这样,我们就能得到从输入[X]到输出[X']的映射关系如下:
[X'=X⊗M(X)=X⊗σ(L(X)⊕G(X))] (6)
4 基于PERCLOS和M的疲劳检测模型
当驾驶员处于疲劳状态下,闭眼、打哈欠的持续时间和次数都会和正常状态下有明显的区别。

为了验证这一点,进一步说明眼嘴特征对于疲劳检测的意义。

以10帧为一个间隔截取1 000 s模拟疲劳驾驶视频内容,并对所得图片帧进行了标定,标签为疲劳、清醒、眼嘴的睁闭以及受否有点头等动作。

处于清醒状态下的一段时间內驾驶员的疲劳状态和面部特征之间的关系。

纵坐标的不同数字代表了不同人脸部件在某时刻下的不同状态。

需要特别说明的是,头部有三种状态,即直视前方、点头、左右环顾,分别对应数字0、1、2。

嘴巴部件则是闭嘴、呵欠、说话,对应数字0、1、2。

结果表明,在不同的驾驶状态下,人脸部件都会呈现相应的有规律的状态,清醒时,在被测时间内驾驶员眼睛几乎都是睁开的状态,嘴部除了因为说话而张开,几乎没有打呵欠的时候,头部则处于很频繁的左右环顾状态下,这是因为驾驶员需要时刻关注路况信息,头会自然的移动,而这种移动又区别于点头时的垂直方向上的摆动,是水平方向的转动。

在疲劳时驾驶员的各脸部部件又会在一种新的状态下持续。

综合人眼关键点和人脸检测分析,可以得出以下结论,眼睛的睁开和闭合状态在一段时间内所占的比例能反映大部分情况下的疲劳状态,驾驶员不太可能因为除了疲劳之外的原因,在需要精神高度集中,随时有可能处理突发情况的环境和条件下长时间紧闭双眼。

而头姿易受到拍摄角度和驾驶员座位高低导致的角度错估影响。

故本文讨论的疲劳检测模型暂时只设眼嘴状态作为检测的特征要素。

MobileNetv3在深度可分离卷积后加入了图3d所示的SE注意力机制模块,通过对每个特征图的全局平均池化和全局最大池化操作,得到特征图的平均值和最大值,然后将它们连接起来并通过一层全连接层,得到一个向量。

接下来,通过一个sigmoid函数,将向量映射到0~1之间的范围内,并乘以原特征图,得到新的加强重要特征的特征图。

深度可分离卷积(depthwise separable convolution)把一次标准卷积分解成了深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两个步骤。

展示了一个标准卷积核被深度卷积和逐点卷积替代以构成一个深度可分离卷积的过程。

具体来讲,深度卷积的计算过程可以表示为:
[Yi,j,k=p=1kq=1kc=1cinXi+p−1,j+q−1,cKp,q,c,k] (1)
式中,[Yi,j,k∈RH×W×Cout]为深度卷积的输出特征图;[i,j]分别为输出特征图的高度和宽度坐标;[k]为输出特征图的通道数。

对于每个输入通道[c],卷积核[K]在该通道上的权重参数是[Kp,q,c,k]。

逐点卷积的计算过程可以表示为:
[Yi,j,k=c=1CinXi,j,cK1,1,c,k] (2)
式中,[Yi,j,k∈RH×W×Cout]为逐点卷积的输出特征图;[i,j]分别为输出特征图的高度和宽度坐标;[k]为输出特征图的通道数。

对于每个输出通道[k],卷积核[K]在输入通道[c]上的权重参数是[K1,1,c,k]。

3.3 注意力特征融合AFF
Attention Feature Fusion[12]是一種生成权重的具体方法。

AFF首先融合了input1和input2两个输入特征,用<E:\临时\专用汽车期刊\2023年\专用汽车2023年-12期\Image\image5.pdf>表示特征的元素级别相加,然后将组合后的特征送入MS-CAM模块。

由MS-CAM 模块输出两个输入的权重参数,最后将两个输入input1和input2加权相加得到该AFF的output。

计算式如下:
[Z=M(X⊕Y)⊗X+(1−M(X⊕Y))⊗Y] (3)
式中,[Z]表示最后的output;[M(X⊕Y)]和[1−M(X⊕Y)]表示由MS-CAM模块输出的两个输入的权重系数;[X]、[Y]表示两个输入特征input1和input2。

展示一个MS-CAM模块的内部结构,可以看到从输入[X∈RC×H×W]到输出权重一共有两条路线,分别为输入的全局特征上下文[w(X)]和局部通道上下文[L(X)]。

[w(X)]的计算过程如下式:
[w(X)=σ(G(X))=σ(β(W2δ(β(W1(g(X))))))] (4)
式中,[g(X)∈iC]为全局平均池化;[W1∈RC×Cr]为逐点卷积的降维层;[β]为BN层;[W2∈RC×Cr]为升维逐点卷积层;[σ]为Sigmoid激活函数;[δ]为ReLU激活函数;r为通道衰减系数。

局部通道上下文[L(X)]的计算过程如下:
[L(X)=β(PWConv2(δ(β(PWConv1(X)))))] (5)
式中,[PWConv1]和[PWConv2]是与式(4)中[W1]和[W2]有相同作用两个逐点卷积层。

这样,我们就能得到从输入[X]到输出[X']的映射关系如下:
[X'=X⊗M(X)=X⊗σ(L(X)⊕G(X))] (6)
4 基于PERCLOS和M的疲劳检测模型
当驾驶员处于疲劳状态下,闭眼、打哈欠的持续时间和次数都会和正常状态下有明显的区别。

为了验证这一点,进一步说明眼嘴特征对于疲劳检测的意义。

以10帧为一个间隔截取1 000 s模拟疲劳驾驶视频内容,并对所得图片帧进行了标定,标签为疲劳、清醒、眼嘴的睁闭以及受否有点头等动作。

处于清醒状态下的一段时间内驾驶员的疲劳状态和面部特征之间的关系。

纵坐标的不同数字代表了不同人脸部件在某时刻下的不同状态。

需要特别说明的是,头部有三种状态,即直视前方、点头、左右环顾,分别对应数字0、1、2。

嘴巴部件则是闭嘴、呵欠、说话,对应数字0、1、2。

结果表明,在不同的驾驶状态下,人脸部件都会呈现相应的有规律的状态,清醒时,在被测时间内驾驶员眼睛几乎都是睁开的状态,嘴部除了因为说话而张开,几乎没有打呵欠的时候,头部则处于很频繁的左右环顾状态下,这是因为驾驶员需要时刻关注路况信息,头会自然的移动,而这种移动又区别于点头时的垂直方向上的摆动,是水平方向的转动。

在疲劳时驾驶员的各脸部部件又会在一种新的状态下持续。

综合人眼关键点和人脸检测分析,可以得出以下结论,眼睛的睁开和闭合状态在一段时间内所占的比例能反映大部分情况下的疲劳状态,驾驶员不太可能因为除了疲劳之外的原因,在需要精神高度集中,随时有可能处理突发情况的环境和条件下长时间紧闭双眼。

而头姿易受到拍摄角度和驾驶员座位高低导致的角度错估影响。

故本文讨论的疲劳检测模型暂时只设眼嘴状态作为检测的特征要素。

MobileNetv3在深度可分离卷积后加入了图3d所示的SE注意力机制模块,通过对每个特征图的全局平均池化和全局最大池化操作,得到特征图的平均值和最大值,然后将它们连接起来并通过一层全连接层,得到一个向量。

接下来,通过一个sigmoid函数,将向量映射到0~1之间的范围内,并乘以原特征图,得到新的加强重要特征的特征图。

深度可分离卷积(depthwise separable convolution)把一次标准卷积分解成了深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两个步骤。

展示了一个标准卷积核被深度卷积和逐点卷积替代以构成一个深度可分离卷积的过程。

具体来讲,深度卷积的计算过程可以表示为:
[Yi,j,k=p=1kq=1kc=1cinXi+p−1,j+q−1,cKp,q,c,k] (1)
式中,[Yi,j,k∈RH×W×Cout]为深度卷积的输出特征图;[i,j]分别为输出特征图的高度和宽度坐标;[k]为输出特征图的通道数。

对于每个输入通道[c],卷积核[K]在该通道上的权重参数是[Kp,q,c,k]。

逐点卷积的计算过程可以表示为:
[Yi,j,k=c=1CinXi,j,cK1,1,c,k] (2)
式中,[Yi,j,k∈RH×W×Cout]為逐点卷积的输出特征图;[i,j]分别为输出特征图的高度和宽度坐标;[k]为输出特征图的通道数。

对于每个输出通道[k],卷积核[K]在输入通道[c]上的权重参数是[K1,1,c,k]。

3.3 注意力特征融合AFF
Attention Feature Fusion[12]是一种生成权重的具体方法。

AFF首先融合了input1和input2两个输入特征,用<E:\临时\专用汽车期刊\2023年\专用汽车2023年-12期\Image\image5.pdf>表示特征的元素级别相加,然后将组合后的特征送入MS-CAM模块。

由MS-CAM 模块输出两个输入的权重参数,最后将两个输入input1和input2加权相加得到该AFF的output。

计算式如下:
[Z=M(X⊕Y)⊗X+(1−M(X⊕Y))⊗Y] (3)
式中,[Z]表示最后的output;[M(X⊕Y)]和[1−M(X⊕Y)]表示由MS-CAM模块输出的两个输入的权重系数;[X]、[Y]表示两个输入特征input1和input2。

展示一个MS-CAM模块的内部结构,可以看到从输入[X∈RC×H×W]到输出权重一共有两条路线,分别为输入的全局特征上下文[w(X)]和局部通道上下文[L(X)]。

[w(X)]的计算过程如下式:
[w(X)=σ(G(X))=σ(β(W2δ(β(W1(g(X))))))] (4)
式中,[g(X)∈iC]为全局平均池化;[W1∈RC×Cr]为逐点卷积的降维层;[β]为BN层;[W2∈RC×Cr]为升维逐点卷积层;[σ]为Sigmoid激活函数;[δ]为ReLU激活函数;r为通道衰减系数。

局部通道上下文[L(X)]的计算过程如下:
[L(X)=β(PWConv2(δ(β(PWConv1(X)))))] (5)
式中,[PWConv1]和[PWConv2]是与式(4)中[W1]和[W2]有相同作用两个逐点卷积层。

这样,我们就能得到从输入[X]到输出[X']的映射关系如下:
[X'=X⊗M(X)=X⊗σ(L(X)⊕G(X))] (6)
4 基于PERCLOS和M的疲劳检测模型
当驾驶员处于疲劳状态下,闭眼、打哈欠的持续时间和次数都会和正常状态下有明显的区别。

为了验证这一点,进一步说明眼嘴特征对于疲劳检测的意义。

以10帧为一个间隔截取1 000 s模拟疲劳驾驶视频内容,并对所得图片帧进行了标定,标签为疲劳、清醒、眼嘴的睁闭以及受否有点头等动作。

处于清醒状态下的一段时间内驾驶员的疲劳状态和面部特征之间的关系。

纵坐标的不同数字代表了不同人脸部件在某时刻下的不同状态。

需要特别说明的是,头部有三种状态,即直视前方、点头、左右环顾,分别对应数字0、1、2。

嘴巴部件则是闭嘴、呵欠、说话,对应数字0、1、2。

结果表明,在不同的驾驶状态下,人脸部件都会呈现相应的有规律的状态,清醒时,在被测时间内驾驶员眼睛几乎都是睁开的状态,嘴部除了因为说话而张开,几乎没有打呵欠的时候,头部则处于很频繁的左右环顾状态下,这是因为驾驶员需要时刻关注路况信息,头会自然的移动,而这种移动又区别于点头时的垂直方向上的摆动,是水平方向的转动。

在疲劳时驾驶员的各脸部部件又会在一种新的状态下持续。

综合人眼关键点和人脸检测分析,可以得出以下结论,眼睛的睁开和闭合状态在一段时间内所占的比例能反映大部分情况下的疲劳状态,驾驶员不太可能因为除了疲劳之外的原因,在需要精神高度集中,随时有可能处理突发情况的环境和条件下长时间紧闭双眼。

而头姿易受到拍摄角度和驾驶员座位高低导致的角度错估影响。

故本文讨论的疲劳检测模型暂时只设眼嘴状态作为检测的特征要素。

相关文档
最新文档