基于改进YOLOv5s 的多特征疲劳检测算法

2024-03-28 05:53索会恒杨腾胜
信息记录材料 2024年2期
关键词:关键点人脸注意力

饶 睿,吴 剑,索会恒,胡 强,杨腾胜

(南昌航空大学信息工程学院 江西 南昌 330038)

0 引言

现存的疲劳检测有主观检测方法和客观检测方法[1]。主观检测法由被测者主观判断自己的身体状态并记录实验数据。 客观检测法采用实验设备提取被测者相关的特征数据,并对获取的数据建立模型从而对疲劳程度进行评价。

传统算法一般将方向梯度直方图(histogram of oriented gradient, HOG)特征用于特征描述,使用支持向量机(support vector machine, SVM)分类器进行分类[2],也有将神经网络如Fast-RNN,SSD 等用于目标检测[3]。 本文选择目标检测算法YOLOv5s,对算法的部分网络结构进行修改用于识别人脸,对检测到的人脸部各个特征综合判断,受主观影响较小,因此效果更加可靠,识别率也更高。

1 人脸检测

1.1 YOLOv5s 算法介绍

YOLOv5s 有4 个模块,分别是输入模块、主干模块、颈部模块和输出模块。

输入模块:用于数据的准备工作。 模块负责接收输入图像,并进行必要的预处理,例如尺寸调整、归一化和通道转换等,以使其适应网络的输入要求。

主干模块:整个网络的核心部分,负责将输入的图像逐层进行卷积和池化等操作,以实现对不同尺度特征的提取。

颈部模块:用于进一步增强和丰富网络提取到的特征。 颈部通过引入额外的卷积层、上采样和下采样操作或者特征金字塔等方法来提升网络对多尺度特征的感知能力和目标检测性能。

输出模块:负责对经过主干和颈部处理后的特征图进行目标检测,通常由一系列卷积层和全连接层组成,用于生成目标检测所需的边界框、类别置信度以及其他相关信息。

1.2 增加CA 注意力机制

CA(coordinate attention)注意力机制关注空间特征层的空间信息和通道信息,实现原理如图1 所示,可以看作是两个并行阶段的组合。 左边求取的是高方向的注意力情况,右边是宽方向上的注意力情况。 通过平均池化获得高和宽两个方向的特征层,将高宽特征合并到一起进行堆叠,利用卷积标准化获得特征。 然后,再分开分别用卷积调整通道数,取sigmoid 后就可以获得高宽这两个维度的注意力情况。 最后,乘上原来特征,这就是CA 注意力机制的过程。

图1 CA 注意力机制

将CA 注意力机制应用于YOLOv5,一个常见的做法是将其集成到YOLOv5 的主干网络中,以增强网络的表示能力。 具体来说,可以在主干网络的某些模块之间添加CA 注意力模块或者替换一些现有的模块。 本文在主干传入颈部的P4 层和颈部传入输出的P14 层放置CA 注意力机制,改进后的YOLOv5s 网络结构如图2 所示。

图2 改进的YOLOv5s网络

1.3 替换损失函数

SIoU(scylla intersection over union)是对回归框有强大学习能力的损失函数,由4 个损失函数组成,即角度损失(angle cost,Ω)、距离损失(distance cost,Δ)、形状损失(shape cost) 和IoU 损失(IoU loss),该损失函数将角度考虑进来,表达式如式(1)所示:

2 特征判定

2.1 人脸关键点定位

Kazemi 等[4]提出基于回归树集合(ensemble of regression trees, ERT)的人脸关键点定位算法。 将68 个点的映射对于面部坐标,每个点用线性索引表示,各个部位可以用固定的取值区间表示,分别为:嘴巴[48,67]、右眉毛[17,21]、左眉毛[22,26] 、右眼[36,41]、左眼[42,47],鼻子[27,35]和下巴[0,16]。 各个点位的位置如图3 所示。

图3 人脸关键点状态图

2.2 眼部和嘴巴特征

人眼状态可以由眼睛长宽比(eye aspect ratio, EAR)判断,睁开和闭合状态的眼睛长宽比是不同的。 通过设定某个值与EAR 比较可以判断出当前眼睛状态。 同理可得嘴巴长宽比(mouth aspect ratio, MAR)。

已知眼部的关键点位置后可以利用欧式距离计算EAR。 欧式距离的计算公式如式(2)所示,P为点(x2,y2)与(x1,y1)之间的欧式距离。

对应于图3 的关键点位置,眼部标注点可以通过式(3)计算左眼EARl,通过式(4)计算右眼EARr,二者取平均得到EAR,如式(5)所示。

同样,可以利用欧式距离计算嘴巴的长宽比MAR,如式(6)所示。

2.3 头部特征

头部特征可以通过计算头部的欧拉角来确定,包括俯仰角(pitch)、滚转角(roll)和偏航角(yaw)。 视频中的每一帧图像都是二维的,通过图像可以获取人脸二维的特征点位置,然后经矩阵变换可得到三维数据,由此可以对当前图像中的人体头部状态进行姿态估计。

2.4 疲劳判定

PERCLOS(percentage of eyelid closure over the pupil over time)是疲劳判定的重要指标,原理是通过计算一段时间的眼睛闭合时间所占比例判断疲劳状态,眼睛闭合程度分别超过50%、70%、80%时判定人眼为闭合状态,P80标准被证明与疲劳程度的相关性最好,因此选择P80 标准判断被测者是否疲劳。

由图4 可得到PERCLOS 值的计算公式,如式(7)所示。

图4 人眼睁开程度示意图

通过计算一段连续视频中的闭眼状态的单帧图像数K与有效图像的总帧数N计算PERCLOS 值,计算公式如式(8)所示。

3 实验与结论

3.1 人脸检测效果

人脸检测选择WIDERFACE 数据集[5]作为基准数据集。 该数据集每张图像平均包含24.45 张人脸,包括不同的光照条件、姿态变化、遮挡等。 为了满足实际更多场景的需求,本文利用标注工具LabelImg 自制了数据集,通过使用这两个数据集进行实验能够更真实地评估人脸检测器的性能。

实验结果如表1 所示。 经过训练,YOLOv5s 算法的平均精确度(mAP)达到了72.6%。 对网络进行改进后,虽然实时检测的Fps 略有降低,但是模型的mAP 提升了3.1%。 通过改进网络架构、优化算法或采用更有效的训练策略,可以提高模型在目标检测任务上的性能。 网络改进使得模型在mAP 上获得了显著的提升,通过权衡准确度和速度,可以选择适合具体应用场景的模型版本。

表1 算法测试结果

3.2 疲劳检测效果

分析每一帧图像,获取人脸关键点数据并用于EAR、MAR 的计算和头部姿态检测。 一段检测结束后统计PERCLOS 值、眨眼次数、哈欠次数、点头次数以及各自持续的时间。 人疲劳时眼部特征最为明显,所以先根据PERCLOS 值进行疲劳判断。 当PERCLOS 值>0.3 时,判定为疲劳状态并发出警告。 哈欠以及点头作为辅助的判断依据。 在一段检测过程中,当动作次数或持续时间超过设定的阈值后,判定为重度疲劳状态并产生警告。 若检测结果通过了判定条件则判定当前为清醒状态,重复判定过程直到视频输入结束。 算法检测效果如图5 所示(图片中人脸是本文作者饶睿参与实验所得)。

图5 疲劳检测效果

将YawDD 数据集[6]用于测试算法模型。 数据集给出的表格列出了不同视频中的被测者状态。 通过这个数据集可以有效测试算法准确率,评估算法性能。 将数据集中的50 段视频用于算法准确性测试,测试结果如表2 所示,对于疲劳状态的30 个视频中28 个判定正确,准确率达到了93.3%,对于清醒状态的20 个视频中19 个判定正确,准确率达到了95.0%。 清醒状态下的检测准确率较低是因为误把被测者说话的状态判定为哈欠,算法总体准确率达到了94.0%。

表2 算法测试结果

4 结语

本文实现了基于特征融合的疲劳检测算法。 首先,使用改进的YOLOV5s 算法检测人脸。 然后,利用回归树算法对齐人脸的68 个关键点,提取人脸关键点位置信息,并通过横纵比判断眼部和嘴部特征状态。 同时,将二维坐标的关键点信息与真实世界的坐标相对应,计算头部运动的欧拉角以判断头部姿态。 将这3 种状态特征融合起来,判断被测者疲劳状态。 算法在测试集上的准确率达到94%。需要注意的是,算法首先要实现人脸检测,只有检测到人脸之后才能进行下一步的疲劳判定。 因此,在人脸检测阶段需要有较高的准确性。 未来的改进方向可以包括提高人脸检测的准确率或者改进算法的疲劳判定条件。

猜你喜欢
关键点人脸注意力
让注意力“飞”回来
聚焦金属关键点
肉兔育肥抓好七个关键点
有特点的人脸
三国漫——人脸解锁
“扬眼”APP:让注意力“变现”
A Beautiful Way Of Looking At Things
马面部与人脸相似度惊人
医联体要把握三个关键点
长得象人脸的十种动物