1. 引言
随着人们生活水平的逐渐提高以及各大城市道路交通系统的不断完善,我国的汽车保有总量也在不断增加,这在为人们的出行带来便捷的同时,也导致了交通事故的频频发生,疲劳驾驶 [1] 已然成为行车事故的主要原因之一,每年在众多交通事故中有超过20%是因疲劳驾驶引发的事故 [2] 。
根据我国交通部门相关调查信息显示:当今导致我国交通事故频发的三大主要因素分别为酒后驾驶、超速驾驶和疲劳驾驶 [3] 。其中,现如今我国针对超速驾驶和酒后驾驶已经进行了严格的管控,不仅定制了严格的法律条例,而且在人为监测方面也进行了极大的加强,但至今仍缺乏对疲劳驾驶方面有效的预防和处理措施。
在车辆行驶的过程中,若驾驶者是在疲劳状态下驾驶车辆的话,则会导致其对于特殊情况的反应时间以及处理能力都会严重影响 [4] ,甚至如果驾驶员在驾驶的途中因困意随时可能会进入短暂的休眠状态 [5] ,从而会导致其失去对车辆的控制,对路上行驶的车辆以及行人的安全造成严重的威胁。
针对上述问题,本文提出一种基于加入注意力机制的Yolov5算法的驾驶员疲劳检测技术 [6] ,通过对车辆驾驶员驾驶过程中眨眼次数以及驾驶员嘴巴的张开幅度来判断驾驶员当前的疲劳状况 [7] ,从而实现对疲劳驾驶的有效监控,减少因疲劳驾驶而产生的事故发生概率,从而达到保护驾驶人和行人的安全。
2. Yolov5算法原理概述
Yolov5是一种单阶段目标检测算法,该算法在Yolov4的基础上进行了一些新的改进 [8] ,使得算法的检测速度与检测精度都得到了极大的提升,更加符合本实验所需的检测要求以及标准。图1展示了Yolov5目标检测算法的整体框图。
对于Yolov5算法,我们可以将其划分为四个部分,分别为:输入端、基准网络、Neck网络和输出端。
输入端:Yolov5算法相对于前面的Yolov4算法在模型训练阶段进行了一些新的改进,提出了一种自适应锚框计算的方式,针对所选取训练数据集的不同,会自动设定初始锚框的长宽值,再根据所需的长宽值自动地调整需要的数值,将原始的数据集统一根据需求缩放到一个这定好的尺寸,再送入检测网络中,从而使得对图片特征的提取更加容易。
基准网络:基准网络通常是一些性能优异的分类器种的网络,该模块用来提取一些通用的特征表示。Yolov5中不仅使用了Focus结构作为基准网络 [9] ,而且使用了CSP Darknet53结构。
Neck网络:Neck网络通常位于基准网络与Head模块之间,且Neck网络可以进一步提升从数据源中提取的特征的多样性及鲁棒性。Yolov5在Neck部分变动较大,首先将SPP换成了SPPF。在Yolov4中,Neck的PAN结构是没有引入CSP结构的,但在Yolov5中在PAN结构中加入了CSP。
Head输出端:Head模块是用来将检测结果进行输出的模块。

Figure 1. Overall framework of Yolov5 algorithm
图1. Yolov5算法整体框架
3. 激活函数
在多层神经网络中,神经元上层输出和下层输入之间由激活函数(Activation Function)相连接 [10] ,激活函数是用来提高神经网络对模型的表达能力而存在的函数,可以用来解决一些线性模型解决不了的问题。而Yolov5模型相比于Yolov4模型在激活函数方面也做了改动,在Yolov5中,中间/隐藏层使用了Leaky ReLU激活函数,如图2,最后的检测层则使用了Sigmoid激活函数,如图3。

Figure 2. LeakyReLU activates the function
图2. LeakyReLU激活函数

Figure 3. Sigmoid activates the function
图3. Sigmoid 激活函数
3.1. Leaky ReLU激活函数
Leaky ReLU是在ReLU的基础上进行改进,两者的差别仅仅在输入部分小于0时才能体现出来,Leaky ReLU函数在输入的值小于0时其值通常都为负,而ReLU函数在输入值小于0时其值通常都为0。相比于ReLU激活函数来说,Leaky ReLU激活函数在反向传播的过程中,对于输入的值小于0的部分,也可以计算得到梯度,而ReLU激活函数则值为0,这样就可以有效地避免输入的值为负时梯度消失的问题。通常情况下Leaky ReLU的α取值一般为0.01,表达式为:
(1)
3.2. Sigmoid激活函数
Sigmoid函数在我们的网络模型中比较常用,是一种常见的S型函数,也称为S型生长曲线。由于其单增以及反函数单增等性质,常被用作神经网络的阈值函数,作为二分类任务的输出层,函数的输出范围为(0, 1),表达式为:
(2)
4. 引入CA注意力机制
注意力机制(Attention Mechanism)源于对人类视觉的研究 [11] 。引入注意力机制,就是在所提供的众多数据中拿到对于当前任务所需要的信息,过滤掉其他不重要的信息或者是干扰信息,降低对于那些不重要信息的关注度,就可以有效地解决由于特征提取过多带来的过拟合问题,提高在检测过程中对于目标提取的效率以及准确性。比如要识别一张动物图片中是什么动物时,我们让机器也存在这样的一个注意力侧重,最重要该关注的地方就是图片中动物的面部特征,包括耳朵、眼睛、鼻子、嘴巴,而不用太关注背景的一些信息,核心的目的就在于希望机器能在很多的信息中注意到对当前任务更关键的信息,而对于其他的非关键信息就不需要太多的注意力侧重。
最新研究成果表明,通道注意力 [12] (例如,SE注意力)会给模型带来比较显著的性能提升,但是通道注意力通常会忽略对生成空间选择性注意力图非常重要的位置信息。因此,在本文中,将使用移动网络注意力机制“Coordinate Attention”,简称CA注意力机制 [13] 来代替传统的通道注意力机制,如图4。
全局池通常用于通道注意力以全局编码空间信息,但它将全局空间信息压缩到通道描述符中,因此难以保存位置信息,这对于在视觉任务中捕获空间结构至关重要。为了鼓励注意力块用精确的位置信息在空间上捕捉长距离的交互,我们将全局池分解为等式。
首先使用池化核分别沿着水平坐标和垂直坐标对每个通道进行编码,且对其大小也进行了规定,尺寸为(H, 1)或(1, W),并且分别沿着水平和垂直的这两个空间方向进行池化,得到C*H*1和C*1*W的特征图,公式如下所示。
(3)
(4)
级联zh和zw这两个生成的特征图,然后使用一个共享的1 × 1的卷积核将生成的特征图放入F1的变换函数中,得到特征图f。如公式5所示,其中δ是非线性激活函数。
(5)
接着沿着水平和垂直方向的空间维度将f分成fh和fw,然后将fh和fw经过激活函数后就会得到在高度方向的注意力权重gh和在宽度方向的注意力权重gw。从而得到:
(6)
(7)
最后在原始特征图上通过乘法加权计算,将得到最终在宽度和高度方向上带有注意力权重的特征图,公式如下所示。
(8)
加入注意力机制后的Yolov5算法和传统的Yolov5相比,在检测性能上有显著的提升,由此可见,改进后的算法对于疲劳驾驶检测的效果比传统的Yolov5算法更加优秀,不仅检测速度更快,而且检测的mAP值更高。对比实验结果如表1所示。

Table 1. Comparison of detection results of fatigue driving
表1. 疲劳驾驶检测结果对比
5. 实验结果及分析
5.1. 数据集采集
本实验选用的数据集主要来自网络图片以及本人自己采集的图片,图片的大小统一设置为640 × 480。一共1347张图片,将图片分为训练集以及测试集,其中训练集包括1077张图片,测试集包括270张图片。并且设置了四个特征分别为open_eye、open_mouth、close_eye和close_mouth。
5.2. 实验结果
驾驶员在驾驶车辆的过程中通过放置在驾驶员前方的低成本摄像头且在不遮挡驾驶员视线的情况下,实时地获取当前时间驾驶员的面部状态,从而判断当前驾驶员的疲劳状况,实验结果如图5所示。




Figure 5. Eye and mouth status recognition
图5. 眼部和嘴部状态识别
通过对驾驶员在驾驶过程中的实时监测,获取每一时段驾驶员的眼部以及嘴部状态,首先,对驾驶员的眼部状态进行判断,通过已经训练好的Yolov5模型对当前驾驶员眼部状态进行特征提取,通过设置阈值,若当前驾驶员眨眼的可能性大于当前阈值则认定为一次眨眼。其次,通过相同的方式对驾驶员嘴部状态进行判断,本文所使用算法流程图如图6所示。

Figure 6. Flow chart of fatigue detection in this paper
图6. 本文疲劳检测流程图
将提取到的眼部状态与嘴部状态进行特征融合,通过判断在3 min内驾驶员的闭眼次数以及打哈欠的次数情况来判断驾驶员的疲劳状态。
当在3 min内驾驶员眨眼次数以及打哈欠次数超过规定值时会对驾驶员进行疲劳驾驶警告,从而可以有效地检测驾驶员是否在疲劳状态下,若判定为疲劳驾驶则对其进行警告,提醒驾驶员进行休息,以达到减少因疲劳驾驶导致的交通事故的概率,从而保障过往行人以及车辆的安全。
6. 模型评估
本文所介绍的疲劳检测算法采用Precision (准确率)和Recall (召回率)作为最终实验检测结论的评判标准之一。其中,Precision主要是针对当前实验的预测结果而言的,它表示的是当前实验中预测结果为正的样本中为真的概率是多少,如式9。召回率(Recall)则是根据当前实验中原有的样本的预测成功数量而言的,它表示的是在当前实验原有的样本中原本为正确的样本并且也被预测正确的样本的概率为多少,如式10。从图7可以看出,Precision值和Recall值都趋近于1,说明该模型用于疲劳驾驶检测效果较好。
(9)
(10)

Figure 7. Comparison chart of Precision and Recall
图7. Precision和Recall对比图
7. 结论
本文提出的疲劳检测算法是在原有的Yolov5算法的基础上引入了注意力机制,提高了特征提取的准确性。且实验结果表明,本算法满足了在驾驶车辆行驶时对驾驶人员的实时监测,并且可以保证检测的准确性在99%以上,能够在较高识别准确率的同时,占用较少的存储空间,在实时检测方面具有一定的可行性。
参考文献