1. 引言
近年来,随着社会不断发展,汽车的普及、网约车不断增加,夜间疲劳驾驶成为交通事故的主要原因之一。夜间驾驶由于光照强度低,驾驶员更容易出现疲劳现象,而检测司机是否疲劳进而做出提示可以有效保障人们的出行安全。针对疲劳驾驶的检测,目前主要依据驾驶员机体状态和汽车行驶状态特征两种方式判断。其中,以驾驶员机体状态特征为判据的检测方法又分为基于驾驶员生理状态和表观状态的检测方法。依据驾驶员的面部特征,即长时间闭眼、瞌睡、打哈欠等各种指标来判断驾驶员是否疲劳。而计算机视觉和深度学习技术作为疲劳驾驶检测方法逐渐兴起并成为研究热点[1]。
疲劳驾驶检测在深度学习的推动下取得了突破性进展。基于深度学习的目标检测方法通常可以分为单阶段和两阶段两种类型以及卷积神经网络(CNN)方法。YOLO (you only look once)是代表性的单阶段目标检测算法。YOLO算法将目标检测问题转化为一个回归问题,通过将图像划分为网格单元并在每个单元中预测边界框的类别和位置。单阶段目标检测算法的优点为速度快,适用于实时应用,算法结构相对简单,易于理解和实现[2]。在夜间环境下,由于光照强度较低,传统的疲劳检测算法难以有效准确进行检测。Yolov8算法凭借其强大的泛化能力、快速的检测速度和高准确度能有效解决这一问题。并且,Yolov8模型结合机器视觉技术,在疲劳驾驶检测与预警系统研究中展现出巨大的潜力。这对于提高交通安全、减少交通事故具有重要的实际意义。随着技术的不断进步,该领域的研究和应用前景将更加广阔。
2. Yolov8算法
Yolo (you only look once)算法最早由华盛顿大学的Joseph Redmon和Ali Farhadi于2015年开发的流行目标检测和图像分割模型,并随后进行了多次改进和迭代,产生了一系列不同版本的Yolo模型。Yolov8作为一种SOTA (State-of-the-Art)模型,构建在Yolo系列的基础之上,融合了先前经验,同时引入了创新性的特性和改进,以进一步提高其性能和灵活性,使其成为目标检测、图像分割、姿态估计等多项任务的首选。
2.1. Yolov8n网络模型结构
Yolov8n网络结构分为三部分:Backbone主干网络,用于特征提取;Neck进行特征融合网络;Head检测头,进行解码。其中,特征提取网络采用的是CSP-Darknet53,它包括一系列卷积层和残差块,可以从输入图像中提取出高层次的特征。特征融合网络包括一些卷积层和上采样层,用于将不同分辨率的特征图进行融合,以便更好地适应不同尺度的目标。最后,检测头包括一系列卷积层和最终的输出层,用于对检测框的位置和类别进行预测[2]。Yolov8的网络结构延用了Yolov5的网络结构思想,包括基于CSP (紧凑和分离)的骨干网络(backbone)和Neck部分的设计,以及对于不同尺度模型的考虑。其结构如图1所示:
Figure 1. Yolov8n network structure model [3]
图1. Yolov8n网络结构模型[3]
2.2. 损失函数
Yolov8的损失函数由多个部分组成,包括分类损失(VFL Loss)、回归损失为CIoU Loss + DFL的形式。对损失函数进行改进[4],增加MPDIoU提升边界框回归精度。预测框
和真实框
的边界框坐标。
,输入图像的宽度w和高度h,对于预测框
,确保
和
。
(1)
(2)
计算
的面积:
(3)
计算
的面积:
(4)
计算
和
之间的交集I:
,
(5)
,
(6)
(7)
计算交并比:
,改进的交并比:
(8)
IoU损失:
,MPDIoU损失:
(9)
3. 图像数据采集和标注
在本次实验中,采集夜间人脸疲劳包括闭眼、打哈欠、低头和正常状态的数据集800张。比例按照9:1随机划分为训练集、验证集两部分,分别为720幅、80幅,使用Labelimg对数据集进行标注,并从测试集随机挑选10张进行模型测试。
4. 实验
4.1. 实验环境和方法
本次实验训练配置及参数设定:处理器为英特尔酷睿TM i7,GPU为NVIDA GeForce RTX 4060,显存为8.0 GB,操作系统为Windows 10,使用Python版本为3.8.10,CUDA版本为11.7,使用Pytorch框架进行训练,torch版本为1.13.1,迭代次数Epoch设为100 [5],批次大小设为16,图像输入尺寸为640像素 × 640像素。
4.2. 实验结果
如图2指标变化图,训练和验证过程中的边界框回归、分类、分布式交点损失变化,模型的精度、召回率(recall)和平均精度(mAP)等指标随迭代次数增加变化的曲线图。
Figure 2. Indicator trend chart
图2. 指标变化图
当迭代次数趋于100次时,模式的各类损失值逐渐减小并趋于稳定,说明训练迭代过程中,模型的性能在不断改善。根据metrics/precision(B)观测模型正确预测的正样本占所有预测为正样本的比例为82%,显示出较高的精确度。此外,由metrics/mAP50(B)观测在IoU阈值为0.5时的平均精度为0.62。表明模型在该特定条件下能够较好地区分目标与非目标。由metrics/mAP50-95(B)观测在IoU阈值从0.5到0.95 (步长为0.05)的平均精度为0.28。Yolov8在夜间疲劳驾驶检测中虽然会降低检测准确度,但在调整损失函数后,Yolov8模型趋于稳定,可应用在夜间疲劳驾驶检测。
Figure 3. Precision-recall curve
图3. Precision-recall曲线图
Figure 4. F1-confidence curve
图4. F1-confidence曲线图
通过图3 Precision-Recall曲线图分析,所有类别在IoU阈值为0.5时平均精度为0.614,模型表现性能良好。对于ceye-fatigue、omouth-fatigue、normal类别检测中,模型性能较好,其平均精度AP值为0.867、0.740、0.843,在识别ceye-fatigue、omouth-fatigue、normal类别时具有较高的准确性和召回率。在bhead-fatigue和cmouth-fatige类别识别中性能表现中规中矩。而对于teye-fatigue类别的模型性能表现较差,其AP值较低仅为0.028,表明在识别teye-fatigue类别时存在一定难度,需要进一步优化或训练更多数据来提高性能。通过进一步分析图4的F1-Confidence曲线图,可以观测到不同类别在不同置信度阈值下的F1分数表现。所有类别的平均F1分数为0.56,对应的最佳置信度阈值为0.287。表明当置信度阈值设置为0.287时,所有类别的平均F1分数达到最高。因此,在实际应用决策中,可依据这个平衡点,使得模型在保持较高准确性的同时,也能减少误判。
Figure 5. Detection effect diagram
图5. 检测效果图
通过图5检测效果图分析,眼睛疲劳(eye-fatigue)的检测结果,置信度得分从0.29到0.73,当分数越高时,表明模型检测眼睛处于疲劳状态的置信度高。嘴巴疲劳(mouth-fatigue)检测结果置信度得分从0.96到0.97,表明模型对嘴巴疲劳状态的置信度非常高。对于正常状态监测(normal),依据眼睛的检测结果,得分分别为0.66和0.67,表明模型对正常状态的检测置信度较高。依据上述分析,模型对疲劳状态的置信度范围从0.29到0.97,而对正常状态的置信度在0.66到0.67之间。这表明模型在检测疲劳状态时具有较高的准确性,尤其是在眼睛和嘴巴疲劳的检测上。
5. 结语
本文应用Yolov8算法验证夜间疲劳驾驶检测效果,训练模型在ceye-fatigue、omouth-fatigue、normal类别检测中表现性能较好。由于夜间光照条件差,模型在teye-fatigue类别中检测性能一般。实验表明Yolov8算法可以应用在夜间疲劳驾驶中检测场景下,而在未来可通过改进的图像增强技术、优化的网络结构设计或特定的损失函数,进一步优化、改进模型,以提高在低光照条件下的检测性能。因此,Yolov8算法模型具备用于实际场景中进行全天候疲劳驾驶监测方面的潜力,通过精确地检测和分类驾驶员的疲劳状态,可以实时提醒驾驶员疲劳状态,从而降低因疲劳驾驶导致的事故风险。此外,该模型还可以与其他交通安全技术相结合,如自动驾驶系统、车辆碰撞预警等,共同构建一个更加安全的道路交通环境。
基金项目
云南工商学院本科生研究基金:YGSBKSKY2023034。
NOTES
*通讯作者。