基于人脸表情识别的驾驶状态分析
2024-05-03党鑫,许华
党 鑫,许 华
(1 天津工业大学计算机科学与技术学院 天津 300387)
(2 天津工业大学软件学院 天津 300387)
0 引言
随着我国经济的不断发展,人们对于出行质量的要求也越来越高,而越来越多的居民选择机动车出行。根据国家统计局的中国统计年鉴数据显示[1],在2020 年,全国总共发生了244 674 次交通事故,由交通事故造成的直接财产损失高达131 360.6 万元。究其原因,主要是因为驾驶本身是一项极具压力的活动,在复杂的路况中,驾驶员需要快速、同步完成多项决策任务。因此每位驾驶员应当时刻保持良好的生理和心理状态,然而随着私家车普及,驾驶员因疾病、衰老或心理等问题导致情绪状态变化,此时发生不当驾驶行为的概率将会大大增加,尽管辅助驾驶技术在发展,但仍无法把控驾驶人状态这一最重要的因素,所以在交通安全技术研究中,对驾驶员的驾驶状态进行分析具有较高的研究价值和实用意义,不但会减少交通给人们带来的生命和财产的威胁,还能降低交通事故的发生率,保证道路及公共交通的安全和稳定运行。
1 研究现状
近年来基于人脸识别情绪进行驾驶员状态分析逐渐成为一个研究热点。在驾驶过程中,驾驶员的情绪与驾驶状态高度相关:当表现出高兴的情绪时,驾驶员将与外部环境进行良好的正向反应;当表现出惊讶、害怕、生气、厌恶情绪时,驾驶员将对外部刺激产生过激的可能性,需进行及时的提醒与记录;当表现出悲伤状态时,驾驶员将减少与外部环境交互,可能对驾驶产生一定影响,需要进行安全驾驶提醒;此外,当驾驶员长期处于无表情等中性状态时,则表明其陷入一定程度的疲劳状态,可对驾驶员进行相应提示。这些状态对应关系,使基于AI 算法的驾驶员状态分析成为可能。
然而,在驾驶位这类特定场景下的人脸表情识别技术实际上依然面临诸多挑战[2],特征提取需最大程度消除抖动、光照等干扰信息;分类器不但需要考虑不同类别表情间特征变化不明显等影响,还需考虑对摄像角度、人脸差异等因素的泛化能力。此外,由于车载算法的低负载和实时计算需求,算法需尽可能缩小网络规模,减少分类所需的时间[3-4]。
为了解决上述挑战,需要在准确率、轻量化上达到一个更好的平衡状态,本文将使用引入注意力机制改进后的YOLOv5 作为人脸定位器,YOLOv5 对输入图片进行人脸定位和裁剪工作,然后将定位裁剪后的图片输入到ConvNeXt的卷积神经网络中进行分类工作,从而分类出不同的驾驶员表情[5]。本模型增强了对人像脸部特征的感知能力,实现通过驾驶员表情识别判断分析驾驶员状态的目的。
2 驾驶员人脸表情识别算法
2.1 改进后的YOLOv5 网络模型
基于YOLOv5 深度学习的目标检测算法包含YOLOv5s、YOLOv5m、YOLOv5l 和YOLOv5x 4 个版本[6],其中YOLOv5s 权重最小。综合考虑模型的权重文件大小、识别精度和检测速度,选择检测速度最快、识别精度相对较高的YOLOv5s 展开研究。YOLOv5s 网络主要包含3 个部分,即骨干网络(Backbone)、特征检测模块层(Neck)和回归预测部分(Head),网络结构如图1 所示。
图1 YOLOv5s 网络结构
本文模型首先在输入端采用了Mosaic 数据增强,Mosaic 数据增强由原来的两张图像提高到四张图像进行拼接,并对图像进行随机缩放、随机裁剪和随机排列。使用数据增强可以改善数据集中小、中、大目标数据不均衡的问题。从而实现丰富数据集、提高网络的鲁棒性的目的,同时通过对识别物体的裁剪,使模型根据局部特征识别物体,有助于被遮挡物体的检测,从而提升了模型的检测能力。
首先,算法基于骨干网络对输入的图片进行特征提取。骨干网络中的SPPF(spatial pyramid pooling-fast)使用3 个5×5 的最大池化,代替原来的5×5、9×9、13×13 最大池化,多个小尺寸池化核级联代替SPP 模块中单个大尺寸池化核,从而在保留原有功能,即融合不同感受野的特征图,丰富特征图的表达能力的情况下,进一步提高了运行速度。随后,提取到的特征将被输入到特征检测层Neck 模块[7],PANet 结构在FPN 的基础上又引入了一个自底向上(Bottom-up)的路径。经过自顶向下(Top-down)的特征融合后,再进行自底向上(Bottom-up)的特征融合,将输出三组不同分辨率的融合特征。最后,三组融合特征被输送到Head 部分中进行卷积输出最终的检测结果,从而实现人脸区域的定位检测。
2.2 注意力机制
为了增强人脸图像特征提取,在减少网络权重参数数量和模型体积的前提下,保证检测精度,实现改进的人脸定位检测模型。在原特征提取网络的Bottleneck 结构后引入卷积注意力机制(convolutional block attention module,CBAM)模块,CBAM[8]是轻量级的卷积注意力模块,它结合了通道注意力模块(channel attention module, CAM)和空间的注意力模块(spatial attention module, SAM)。
2.2.1 CAM 模块
该模块关注输入图片中有意义的信息(分类任务就关注因为什么分成了不同类别)。分别进行通道和空间上的Attention,其通道维度不变,压缩空间维度。通道注意力公式如式(1)所示:
2.2.2 SAM 模块
该模块关注的是目标的位置信息,空间维度不变,压缩通道维度。将通道注意力模块的输出结果通过最大池化和平均池化得到两个1×H×W 的特征图,然后经过Concat 操作对两个特征图进行拼接,通过7×7 卷积变为1通道的特征图(实验证明7×7 效果比3×3 好),再经过一个sigmoid 得到空间注意力(spatial attention)的特征图,最后将输出结果乘原图变回C×H×W 大小。
空间注意力公式如式(2)所示:
包含空间注意力和通道注意力算法,不仅能够更好地提取人脸的特征信息,提高模型表征能力,而且节约参数和计算力,同时新增参数的计算量对模型复杂度不会造成太大的影响。
2.3 基于ConvNeXt 的情绪分类
为了实现相对轻量化的计算,并且可以将模型在移动端上实现部署,就要求网络结构的算法计算效率要更高,模型参数少。因此本文采用ConvNeXt 构造了情绪分类模型。ConvNeXt 是来自KAIST、Meta、纽约大学的研究者Liu[9]等提出的卷积神经网络模型。这个模型以ResNet[10]为基础, 引用 Vision Transformer[11]、 Swin Transformer[12]、ResNeXt[13]等神经网络设计思路,通过改变阶段计算模块数量、简化网络输入层、使用深度可分离卷积、采用倒置Bottleneck 模块结构和大卷积核结构实现计算量的减少和准确率的提升。
ConvNeXt 改变了传统的ResNeXt 的结构设计比例,将stage1 到stage4 堆叠block 的次数由(3,4,6,3)调整成(3,3,9,3),在保证精度的同时最大程度减少了所需要的参数量。并且block 更改下采样模块为一个卷积核大小为4×4以及stride 为4 的卷积层构成patchify,最大化通道维度的信息。同时还使用了深度分离卷积(depthwise convolution),只是对空间维度进行混合,将通道数从64 提升到96,实现深度可分离卷积,实现有效减少计算量的目的。
ConvNeXt 将depthwise conv 模块上移,原来是1×1 conv →depthwise conv →1×1 conv 现在变成depthwise conv→1×1 conv→1x1 conv,还将depthwise conv 的卷积核大小由3×3 改成了7×7,然后聚焦到一些更细小的差异,比如激活函数以及Normalization。将激活函数ReLU 替换成 GELU, 使用更少的激活函数, 使用更少的Normalization,将BN 替换成LN,采用2×2,stride=2 卷积进行下采样。通过一系列对模型细节的调整,ConvNeXt 在相同FLOPs 下准确率已经超过了Swin Transformer。
为了提高模型识别效率和准确率,本文将使用引入注意力机制改进后的YOLOv5 作为人脸定位器,将定位裁剪后的图片输入到ConvNeXt 的卷积神经网络中进行分类的驾驶员状态分析。本文提出的总体模型如图2 所示。
图2 驾驶员状态分析模型结构图
3 实验与分析
3.1 实验数据集
为了评估本文提出的算法,本节将在两个公开的面部表情数据集上进行实验,这两个数据集分别是FER2013人脸表情数据集与KMU-FED 数据集。
FER2013(Facial Expression Recognition 2013)[14]数据集是用于面部表情识别的一个公开数据集。该数据集由私人公司Affectiva 创建,包含35 887 张灰度图像,分为7个不同的表情类别:愤怒、厌恶、恐惧、开心、中性、悲伤和惊讶。每个图像的尺寸为48×48 像素。图3 是FER2013数据集样例图片。
图3 FER2013 数据集样例图片
KMU-FED 数据集[15]用于实际驾驶环境中的表情识别。为了构建数据集,我们使用近红外相机在真实的车辆驾驶环境中捕获了基准数据集序列。KMU-FED 数据库包含来自12 个对象的55 个图像序列,包括各种照明变化(前、左、右和后光)和头发或太阳镜引起的部分遮挡。非常有效地模拟了驾驶环境中驾驶员的表情。图4 是KMUFED 数据库样例图片。
图4 KMU-FED 数据库样例图片
3.2 实验环境
实验所需的相关环境如下:GPU 为NVIDIA Tesla T4,以Python3.8 编程语言环境、PyTorch 2.1.0 作为深度学习框架搭建模型,并使用CUDA11.3 进行实验加速,训练过程中使用交叉熵损失函数,并采用AdamW 优化器优化模型。
3.3 实验结果及分析
3.3.1 FER2013 数据集上实验结果及分析
将本文模型在FER2013 数据集上进行训练和测试,在训练过程中载入预训练权重,批量大小为8,迭代次数为300 次,初始学习率为0.005,先采用warmup 的方法进行学习率预热,然后再采用余弦退火来更新学习率的方法。AdamW 优化器即在Adam 基础上加入了weight decay正则化。模型训练过程中将FER2013 数据集分为训练集(27 327 幅)进行训练,在测试集(6 828 幅)上进行测试。在训练数据集上进行参数训练前,对样本进行随机翻转等预处理。本文模型在FER2013 数据集上的混淆矩阵如图5 所示。
图5 Fer2013 数据集上的混淆矩阵
由图5 可知,ConvNeXt 模型对FER2013 数据集的7种类别达到了73.65%的总体识别准确率。其中高兴、厌恶、惊喜类别的识别率分别达到了90.21%、82.80%和79.34%,而愤怒、恐惧、伤心、中性类别的识别率稍低,分别为68.07%、61.88%、65.26%和68.53%,可能因为这4种表情特征的区分性稍差,此外,FER2013 数据集中的错误标签对模型的准确率也有一定影响。
3.3.2 KMU-FED 数据集上实验结果及分析
将本文模型在KMU-FED 数据集上进行训练和测试,因为数据集较小,迭代次数为80 次,其他训练参数与FER2013 数据集上一致。本实验将KMU-FED 数据集分为训练集(898 幅)和测试集(221 幅)。在训练数据集上进行参数训练前,对样本进行随机翻转等预处理。本文模型在KMU-FED 数据集上的混淆矩阵如图6 所示。
图6 KMU-FED 数据集上的混淆矩阵
由图6 可知,在KMU-FED 数据集上总体正确识别率达到了97.73%,并且对愤怒、恐惧、快乐、伤心和惊喜这5种表情的识别率达到了100%,但由于厌恶表情与愤怒表情某些特征相似,导致网络模型对其识别率较低,仅有81.48%。证明本文模型在模拟真实驾驶员驾驶环境下,对驾驶员的人脸表情识别达到了一定的准确率,但是在区分厌恶与愤怒这种更细腻的表情时还有进步的空间,并且因为数据集较小的情况存在,所以在区分细腻差别时,模型还有调整进步的空间。
3.4 消融实验
为了验证本文所提出方法的有效性,为证明改进算法的有效性和合理性,在ConvNeXt 的基础上依次加入YOLOv5 、CBAM-YOLOv5 改进策略,在两个数据集上分别对每个模型进行训练及测试。然后记录准确率。结果见表1。可以看出,本文模型在ConvNeXt 模型基础上针对驾驶员人脸表情识别的场景相较基础模型有所提高。由于FER2013 数据集本身图像就很小,采用YOLOv5 对数据集图像进行人脸识别定位的精度提升不明显,但是在KMUFED 数据集上,因为采集图像较大,对脸部进行定位裁剪后的方式对准确率有一个相对更加明显的提升,并且添加了注意力机制后可以帮助整个网络更加专注于表情分类的效果从而对准确率也有一定的提升。
表1 消融对比实验
4 结语
本文使用引入注意力机制改进后的YOLOv5 作为人脸定位器,将定位裁剪后的图片输入到ConvNeXt 的卷积神经网络中进行分类的驾驶员状态分析模型。其中YOLOv5 引入了卷积注意力机制,增强了网络对复杂背景中目标区域的感知能力,处理后的图片实现了减少网络参数量和计算复杂度的目标,ConvNeXt 的卷积神经网络改进了模型性能,提高了模型特征提取能力,提高了模型预测的准确率。在FER2013 数据集上可达到73.65%的准确率,在KMU-FED 数据集上准确率达到了97.73%,展现了本文模型具有较好的识别效果,能够很好地完成在模拟驾驶员真实环境场景下的人脸表情识别,从而可以对驾驶员的驾驶状态实现更好的辅助分析工作。