摘要:疲劳驾驶是道路交通事故的重要诱因之一,开发具备实时性与鲁棒性的疲劳状态识别系统对提升行车安全具有实际价值。本文围绕车载摄像头视频流,构建了一套基于深度学习的疲劳驾驶检测框架:在感知层面,系统采用轻量化目标检测与人脸关键区域定位模型,对驾驶员人脸与关键部位进行稳定跟踪;在判别层面,结合眼部闭合持续时间(PERCLOS)、眨眼频率、打哈欠特征与头部姿态变化等可解释指标,并引入时序建模网络对短时波动与长时疲劳趋势进行融合判别,从而降低单帧误检与遮挡干扰带来的不稳定性。为适配车载部署需求,系统在推理端进行模型裁剪与量化加速,支持在边缘设备上完成低延迟报警与可视化反馈;同时提供数据采集、标注与评估流程,便于在不同光照、姿态与个体差异场景下开展迁移与迭代。实验表明,该系统在多场景视频条件下能够实现较为稳定的疲劳识别与告警输出,为驾驶监控与主动安全辅助提供可落地的技术路径。
文章目录
- 1.前言综述
- [2. 数据集介绍](#2. 数据集介绍)
- [3. 模型设计与实现](#3. 模型设计与实现)
- [4. 训练策略与模型优化](#4. 训练策略与模型优化)
- [5. 实验与结果分析](#5. 实验与结果分析)
-
- [5.1 对比基线与实验结果汇总](#5.1 对比基线与实验结果汇总)
- [5.2 收敛过程与训练稳定性分析](#5.2 收敛过程与训练稳定性分析)
- [5.3 PR 曲线、混淆矩阵与误差来源](#5.3 PR 曲线、混淆矩阵与误差来源)
- 6.系统设计与实现
-
- [6.1 系统设计思路](#6.1 系统设计思路)
- [6.2 登录与账户管理 --- 流程图](#6.2 登录与账户管理 — 流程图)
- [7. 下载链接](#7. 下载链接)
- 8.参考文献
1.前言综述
疲劳驾驶的本质是驾驶员警觉性在时间维度上的持续衰减,它会同时牵连感知、决策与动作执行链路,从而使车辆控制的稳定性与突发事件处置能力显著下降。围绕这一问题,早期研究更强调可解释、可度量的生理行为指标,其中以"单位时间内眼睑遮挡瞳孔的比例"定义的 PERCLOS 被系统性验证为能够反映警觉性水平、并适合车载实时告警的关键度量之一1。随后,围绕 PERCLOS 的测量可靠性、阈值设定、场景适配与工程落地,学界与产业界积累了大量验证证据,也逐渐形成"眼部可视信号---疲劳程度---驾驶风险"的可解释映射框架2。在更宏观的研究版图中,疲劳检测方法通常被归为主观量表、车辆行为、行为视觉、生理信号与混合融合等类别,而其中视觉行为路线因非接触、成本可控、部署友好,成为车载 DMS(Driver Monitoring System)最常用的技术入口之一3。 (ROSA P)
从国内外研究现状看,疲劳检测正在从"单一症状的阈值判别"走向"多症状证据的时序融合",并进一步延伸到"疲劳发生前的预测性预警"。以综述工作为例,有研究系统比较了生理、车辆、行为等多源信号的检测与预测框架,指出跨场景泛化、标注一致性与早期疲劳识别仍是高频瓶颈4。同时,疲劳并非瞬时事件而更像累积过程,驾驶时长、昼夜节律、个体差异与环境负荷共同影响疲劳演化轨迹,因此仅追求单次检测精度往往不足以支撑可用的风险管理闭环[5]。与方法演进相伴的是数据侧的升级:近年出现的多机位、多模态、覆盖真实挑战的数据集尝试弥补"训练数据过于规整、测试场景过于理想化"的缺口,为遮挡、姿态、夜间与红外等实际工况提供更接近产业需求的评测基座[6]。 (ScienceDirect)
在公开视频数据与基准方法方面,NTHU-DDD 等数据集推动了以眼、口、头部等多线索联合建模的研究范式,典型工作通过层次化时序深度信念网络刻画多视觉症状之间的交互关系,为"局部症状---整体困倦"建模提供了早期可复现的技术路径[7]。另一方面,面向打哈欠这一"早期疲劳强指示"的公开数据建设同样关键,YawDD 作为专门的打哈欠检测数据集,强调真实光照变化与驾驶姿态差异,对口部形变的鲁棒建模提出了明确需求[8]。在深度学习方法层面,研究者开始采用"检测---表征---判别"的流水线结构:例如先用 YOLO 完成人脸区域的稳定截取,再以深度特征与时序窗口聚合进行疲劳判别,从而在准确性与实时性之间取得更可工程化的折中[9]。进一步地,除了纯视觉路线,面向真实驾驶的"多模态表示学习"逐渐兴起,研究开始将环境与行为传感信息纳入统一表征空间,以缓解单模态对光照、遮挡和个体差异的敏感性[10]。与此同时,移动端与低成本部署也在推动系统形态变化,基于智能手机前摄与 PERCLOS 的分阶段检测框架展示了"轻量硬件---可解释指标---实时告警"的可行工程形态[11]。 (Springer)
围绕关键视觉症状的精细化识别,近期工作更关注"非正面姿态下的可用性",例如面向任意头姿的视频打哈欠检测,引入头姿与面部动作耦合建模以提升跨姿态鲁棒性[12]。在国内研究中,轻量化与实时性几乎是车载落地的硬约束,围绕 YOLOv8n 的结构裁剪、感受野扩展与检测头轻量化等改造被用于降低算力需求并提升端侧吞吐[13];同时,结合关键点检测的 YOLOv8n-Pose 也被用于将"闭眼、张口"等疲劳线索转化为更稳定的几何量(如 EAR、MAR),并通过轻量注意力与共享卷积等手段兼顾精度与速度,体现了"检测与疲劳判定逻辑一体化"的设计思路[14]。与视觉路线相对应,生理信号路线也在向"可信与可解释"推进,例如采用可解释机器学习对多模态生理信号疲劳模型进行跨被试验证与阈值解释,强调鲁棒性与可辩护性是走向真实部署不可回避的评价维度[15]。 (ResearchGate)
综合来看,疲劳驾驶检测在工程上仍面临几类"硬问题":其一是场景域偏移,车内光照、夜间红外、遮挡(眼镜/手部)、相机机位差异会导致视觉特征统计分布显著变化;其二是个体差异与疲劳表现的非一致性,不同人群的眨眼基线、哈欠幅度与头部动作习惯并不相同,单一阈值策略容易产生误报与漏报;其三是标注与评价的一致性,疲劳往往是渐进过程,事件边界模糊导致"弱监督/粗标注"与模型学习目标不完全匹配;其四是端侧部署约束,模型不仅要"准",还要在功耗、延迟、存储与隐私合规下稳定运行,并能够在告警策略上做到可解释与可追溯。
基于上述背景,老思在本文(后续章节)将给出一个面向车载实时应用的深度学习疲劳驾驶检测系统实现思路:以 YOLO 系列为核心完成驾驶员人脸与关键区域的快速定位,并围绕闭眼、打哈欠与头姿变化构建时序判别与告警逻辑;在算法侧对不同 YOLO 族模型进行效果与速度对比,结合任务特征给出可复现实验;在数据侧构建并标注面向特定场景的训练集,完成预处理与划分;在系统侧以 PySide6 设计交互界面,实现多源输入、阈值调节、可视化与结果导出,形成从算法到应用的完整闭环。
主要功能演示:
登录注册部分主要面向"多用户、多配置、多结果空间"的使用场景:启动后进入登录界面,用户可选择注册新账号或使用已有账号登录;注册时完成用户名、密码与基础信息写入 SQLite,登录时对口令哈希与账户状态进行校验,通过后加载该用户的历史检测记录、最近一次模型选择与主题偏好等个性化配置,从而保证后续推理参数与导出目录在用户维度上隔离。登录成功后系统将当前会话状态写入内存状态管理器,并通过信号槽切换到主界面,确保界面跳转与数据加载不会阻塞主线程。

页面布局强调"输入---显示---控制---统计"的闭环交互:主窗口通常采用左侧控制区与右侧可视化区的双栏结构,控制区集中放置输入源选择(图片/文件夹/视频/摄像头)、阈值(Conf/IOU)调节、播放控制与导出按钮;可视化区提供原始帧与推理叠加帧的对照显示,并在底部或侧边同步输出检测列表(类别、置信度、时间戳)与统计面板(各类别计数、占比、告警状态)。界面层使用 Qt 的布局管理保证不同分辨率下的自适应,同时通过状态栏提示当前输入源、FPS、模型名称与推理耗时,便于调试与演示。

模型选择部分聚焦于"同一业务流程下的多模型可替换":系统在主界面提供模型下拉框或模型管理面板,支持在 YOLO 族不同权重之间切换(例如轻量版与高精度版),并在切换时完成权重加载、类别映射与推理后处理参数的联动更新。为避免误操作导致的推理中断,系统一般在停止当前输入流或进入安全状态后执行模型切换,再以信号通知界面刷新模型信息与默认阈值;同时在日志区记录"模型名称---版本---加载耗时---显存占用"等信息,便于复现实验与对比展示。

主题修改部分用于提升长时间使用的可读性与场景适配性:系统预置浅色/深色等主题,并允许用户对主色调、按钮样式、背景图与字体大小进行切换或微调;主题配置以 Qt 样式表(QSS)为核心实现,切换时通过统一的 ThemeManager 将样式广播到各控件层级,确保表格、标签、弹窗与图标状态一致更新。用户的主题选择会落库保存,下一次登录自动恢复,使"界面偏好"与"模型偏好、阈值设置"一样具备持久化与可迁移性。

2. 数据集介绍
本系统采用面向车内驾驶员状态分析的目标检测数据集,用于在单帧图像中同时定位并识别与疲劳相关的关键行为线索。数据集共包含 16,246 张图像,覆盖了较丰富的拍摄条件与个体差异:既包含整脸视角下的口部张合、眼部状态变化,也包含一定比例的局部近景样本(例如眼部特写),从而在尺度层面引入"整脸---局部"的多粒度监督。由标注可见,目标框在空间位置上呈现明显的中心偏置(驾驶员面部多位于画面中部),但宽高尺度跨度较大,这意味着模型既要对稳定的几何先验(面部居中)保持利用能力,又要对小目标(眼部)与大目标(口部/面部区域)具备一致的检测鲁棒性;在训练阶段引入 Mosaic 等增强有助于削弱中心偏置带来的过拟合风险,并提升对遮挡、姿态旋转与局部裁剪的适应性。

在数据划分上,数据集被划分为训练/验证/测试三部分,分别用于参数学习、超参数选择与泛化评估。为降低连续帧或同源片段造成的信息泄漏风险,工程实践中通常会尽量避免相邻样本同时落入不同集合;在此划分设置下,训练集占比约 84.45% ,验证集约 8.49% ,测试集约 7.06% ,能够在保证训练样本规模的同时,为模型选择与最终评估保留足够的独立样本。类别体系采用 4 类目标框标注,分别对应口部"打哈欠/未打哈欠"与眼部"闭眼/睁眼",并在系统侧通过类别中文映射(Yawn→打哈欠,noYawn→未打哈欠,close→闭眼,open→睁眼)实现可读性更强的界面展示与统计分析;后续疲劳判定可在检测结果的时间序列上进一步构建 PERCLOS、闭眼持续时长与哈欠频次等指标,以形成稳定的告警逻辑。

📊 数据集规格说明 (Dataset Specification)
| 维度 | 参数项 | 详细数据 |
|---|---|---|
| 基础信息 | 标注软件 | LabelImg |
| 标注格式 | YOLO TXT (Normalized) | |
| 数量统计 | 训练集 (Train) | 13,719 张 (84.45%) |
| 验证集 (Val) | 1,380 张 (8.49%) | |
| 测试集 (Test) | 1,147 张 (7.06%) | |
| 总计 (Total) | 16,246 张 | |
| 类别清单 | Class ID: 0 | Yawn(打哈欠) |
| Class ID: 1 | close(闭眼) |
|
| Class ID: 2 | noYawn(未打哈欠) |
|
| Class ID: 3 | open(睁眼) |
|
| 图像规格 | 输入尺寸 | 640 * 640 |
| 数据来源 | 车内摄像头场景图像(公开视频数据/实拍数据混合后清洗) |
3. 模型设计与实现
疲劳驾驶检测在工程上往往不是"识别一个人是否疲劳"这么抽象,而是要把疲劳的可观察线索拆解为可检测的视觉事件,并在时间维度上进行累积判别。结合本项目的数据标注形式(以目标框直接标注眼部与口部状态),老思将任务建模为单阶段目标检测:在每帧图像上同时输出四类目标框及其置信度,类别集合为 {Yawn(打哈欠), noYawn(未打哈欠), close(闭眼), open(睁眼)}。这一建模的优点是推理链路短、端侧部署友好,且检测结果天然可用于后续的 PERCLOS 统计、闭眼持续时长估计以及哈欠频次计算,便于在系统层实现"可解释告警"。
基线模型方面,本文优先选用 Ultralytics 体系下的 YOLO12n 作为默认主模型:YOLO12 在保持实时检测范式的前提下引入更强的注意力建模,核心特征包括 Area Attention、R-ELAN 以及对注意力结构的工程化优化(例如可选的 FlashAttention、弱化或移除位置编码、引入 7 × 7 7\times 7 7×7 可分离卷积以隐式编码位置信息等),以提升特征表达能力并兼顾速度与精度。 (Ultralytics Docs) 需要强调的是,Ultralytics 文档也提示 YOLO12 更偏研究与基准用途,在训练稳定性、显存占用与 CPU 侧吞吐方面可能不如 YOLO11/YOLO26 等更"生产化"的模型,因此本文系统实现上保持权重可插拔:同一套推理与后处理接口可直接切换 YOLOv5--YOLOv12 的不同权重,方便在"精度优先"和"实时优先"之间做工程权衡。 (Ultralytics Docs)
从网络结构看,YOLO 系列通常由 Backbone、Neck、Head 三部分组成:Backbone 负责逐层下采样并提取语义特征,Neck 通过 FPN/PAN 一类的多尺度路径聚合实现跨尺度融合,Head 在多个尺度上输出密集预测,从而同时覆盖小目标(眼部)与中大目标(口部/面部区域)。以 YOLOv5 为例,其结构通常被概括为 CSPDarknet53 作为骨干,Neck 侧使用 SPPF 与 PANet 进行多尺度特征融合,再由检测头输出分类与回归结果。 (Ultralytics Docs) 对疲劳检测这类"局部小目标占比高、且尺度变化显著"的任务而言,多尺度融合的价值非常直接:眼睛区域往往只占整帧很小比例,若缺少足够的高分辨率分支与有效的跨层融合,小目标召回率会快速下降。
损失函数与训练目标上,检测任务通常同时优化分类与定位两类误差。对第 i i i 个正样本(匹配到真实框的预测),可写为
L = λ box L IoU + λ dfl L DFL + λ cls L BCE , L = \lambda_{\text{box}} L_{\text{IoU}} + \lambda_{\text{dfl}} L_{\text{DFL}} + \lambda_{\text{cls}} L_{\text{BCE}}, L=λboxLIoU+λdflLDFL+λclsLBCE,
其中 L BCE L_{\text{BCE}} LBCE 对应多类分类的二元交叉熵(多标签形式或独立 Sigmoid), L IoU L_{\text{IoU}} LIoU 常用 GIoU/DIoU/CIoU 等 IoU 家族损失, L DFL L_{\text{DFL}} LDFL 为分布式回归(Distribution Focal Loss)以增强边界框回归的细粒度表达。若采用 CIoU,其形式可写为
L CIoU = 1 − IoU + ρ 2 ( b , b g t ) c 2 + α v , L_{\text{CIoU}} = 1-\text{IoU} + \frac{\rho^2(\mathbf{b},\mathbf{b}^{gt})}{c^2} + \alpha v, LCIoU=1−IoU+c2ρ2(b,bgt)+αv,
其中 ρ ( ⋅ ) \rho(\cdot) ρ(⋅) 表示预测框中心与真实框中心的欧氏距离, c c c 为两框最小外接框的对角线长度; v v v 衡量长宽比一致性,常写为
v = 4 π 2 ( arctan w g t h g t − arctan w h ) 2 , α = v ( 1 − IoU ) + v . v=\frac{4}{\pi^2}\left(\arctan\frac{w^{gt}}{h^{gt}}-\arctan\frac{w}{h}\right)^2,\quad \alpha=\frac{v}{(1-\text{IoU})+v}. v=π24(arctanhgtwgt−arctanhw)2,α=(1−IoU)+vv.
在疲劳检测场景中,闭眼与睁眼往往存在"外观相似但语义相反"的边界情形(尤其是低照度、运动模糊、眼镜反光),因此训练时通常会配合标签平滑、EMA(指数滑动平均)与适度的数据增强,以降低模型对偶然纹理的过拟合,并提升置信度输出的可用性(便于后续用阈值做稳定告警)。
实现层面,本文采用 Ultralytics 推理接口封装 Detector 模块:输入侧对图像进行 letterbox 等比例缩放到 640 × 640 640\times 640 640×640,并完成归一化与 batch 组装;推理侧输出多尺度预测张量后进入解码与 NMS,得到 ( cls , conf , x , y , w , h ) {(\text{cls},\text{conf},x,y,w,h)} (cls,conf,x,y,w,h) 检测结果集合;系统侧再将 close/open 的时间序列统计映射为 PERCLOS 与闭眼持续时长等指标,将 Yawn/noYawn 映射为哈欠事件与频次,从而把"检测"自然过渡到"疲劳判定"。为了便于 UI 端的实时展示与工程部署,权重加载、推理线程、后处理与绘制逻辑在 Detector 内部保持接口清晰:外部只需传入帧与阈值(Conf/IOU),即可得到叠加可视化图与结构化结果,降低 PySide6 界面层与算法层的耦合。
4. 训练策略与模型优化
疲劳驾驶检测的数据具有两个典型属性:其一,目标尺度差异显著,眼部目标往往呈"小目标、高频出现",口部目标则呈"中等尺度、事件性出现";其二,视觉退化因素非常集中,例如车内光照变化、夜间噪声、运动模糊、眼镜反光、遮挡与头姿旋转。这决定了训练策略不能只追求静态 mAP,而需要在"召回稳定性、置信度可用性、跨场景泛化"之间取得平衡。老思在本项目中采用 Ultralytics 训练框架进行统一实验配置,以 YOLO12n 为默认主模型,并保留权重可替换接口,保证后续能够在同一数据与同一评估协议下对 YOLOv5--YOLOv12 的轻量模型进行公平比较。
训练环境侧,建议使用 Python 3.12 与 PyTorch 2.x,GPU 选用 RTX 4090(24GB)以覆盖较高 batch 与更激进的数据增强配置。为避免 UI 与训练耦合,训练阶段独立于 PySide6 应用运行,仅在推理阶段将导出的权重接入系统。数据输入统一采用 640 × 640 640\times 640 640×640 的 letterbox 等比例缩放,并在训练端开启混合精度(AMP)以降低显存占用、提升吞吐;同时采用 EMA(指数滑动平均)稳定权重更新,使验证集指标在噪声较大的增强策略下仍能保持可比较性。EMA 的更新可写为
θ ( t ) ∗ EMA = β , θ ( t − 1 ) ∗ EMA + ( 1 − β ) , θ ( t ) , \theta^{(t)}*{\text{EMA}}=\beta,\theta^{(t-1)}*{\text{EMA}}+(1-\beta),\theta^{(t)} , θ(t)∗EMA=β,θ(t−1)∗EMA+(1−β),θ(t),
其中 β \beta β 通常取接近 1 的值,用以平滑参数序列并提升最终权重的泛化表现。
在优化器与学习率策略上,本文采用框架的自动优化器选择(optimizer=auto),其通常会在 SGD/AdamW 等候选中结合数据与模型规模给出较稳健的默认项;学习率采用预热加余弦退火的常用策略:预热阶段在前 T w T_w Tw 个 epoch 内将学习率由较小值线性提升至初始学习率 l r 0 lr_0 lr0,随后按余弦曲线衰减到 l r 0 ⋅ l r f lr_0\cdot lrf lr0⋅lrf,形式可写为
l r ( t ) = l r 0 [ l r f + 1 − l r f 2 ( 1 + cos π ( t − T w ) T − T w ) ] , t ∈ [ T w , , T ] . lr(t)=lr_0\Bigl[lrf+\frac{1-lrf}{2}\Bigl(1+\cos\frac{\pi(t-T_w)}{T-T_w}\Bigr)\Bigr],\quad t\in[T_w,,T]. lr(t)=lr0[lrf+21−lrf(1+cosT−Twπ(t−Tw))],t∈[Tw,,T].
这一策略对疲劳检测这类"难样本比例高、局部纹理敏感"的任务较友好:预热可降低初期梯度震荡,余弦退火在中后期提供更平滑的收敛轨迹,使置信度分布更稳定,便于后续在系统侧用固定阈值实现告警逻辑。
数据增强是本任务性能上限的关键约束之一。针对眼部小目标与口部形变目标并存的特点,训练阶段启用 Mosaic 以增加上下文多样性,并在训练后期(例如最后 10 个 epoch)关闭 Mosaic(close_mosaic=10),让网络在"更接近真实分布"的单图输入上完成收敛,以减少增强引入的几何伪影对定位精度的影响。与此同时,适度的颜色抖动与随机仿射能够提升对车内光照与视角变化的鲁棒性,但需要控制强度,避免将"闭眼/睁眼"的关键纹理抹平,导致类别边界变得不可分。若训练中观察到 open 与 close 的混淆集中出现(通常发生在强反光或低照噪声下),更有效的处理往往不是继续加大增强,而是通过提升输入质量(去噪、曝光均衡)或在训练集中补充同分布样本来修正数据域偏移。
考虑到类别频次常呈不均衡(例如 open 远多于 close,noYawn 远多于 Yawn),模型容易在早期形成对"常见类"的偏置,从而出现召回不足。工程上可优先采用两类手段缓解:其一是以更严格的采样与划分方式减少同源片段泄漏,确保验证与测试能真实暴露偏置;其二是在训练端通过合理的损失权重与阈值设定维持少数类梯度信号的有效性,并在评估时同步关注 per-class AP、召回率与 F1,而非只看总体 mAP。由于系统最终要服务于告警,少数类(闭眼、哈欠)的漏检通常比误检代价更高,因此在阈值选择时应结合业务偏好对 close/Yawn 的召回进行优先约束。
为了控制训练耗时并避免过拟合,本文采用早停策略:当验证集指标在连续 patience 个 epoch 内无显著提升时终止训练,并回滚到最佳权重。结合 4090 的算力,batch 通常可设为 16;若显存仍紧张,可通过梯度累积保持等效 batch,从而维持 BN 统计与优化器动量的稳定性。最终训练配置可以按下表作为默认可复现实验起点:
| 名称 | 数值 | 说明 |
|---|---|---|
| epochs | 120 | 最大训练轮数 |
| patience | 50 | 验证集早停耐心 |
| batch | 16 | 总批大小(4090 建议起点) |
| imgsz | 640 | 输入分辨率 |
| pretrained | true | 加载预训练权重进行迁移学习 |
| optimizer | auto | 框架自动选择优化器 |
| lr0 | 0.01 | 初始学习率 |
| lrf | 0.01 | 最终学习率比例(余弦底值) |
| momentum | 0.937 | 动量参数(若使用 SGD 类) |
| weight_decay | 0.0005 | 权重衰减 |
| warmup_epochs | 3.0 | 学习率预热 |
| mosaic | 1.0 | Mosaic 增强强度/概率 |
| close_mosaic | 10 | 末期关闭 Mosaic 的轮数 |
实现上,若采用 Ultralytics CLI,可用如下方式固化实验(路径与权重名按实际工程替换):
bash
yolo detect train model=yolo12n.pt data=your_dataset.yaml imgsz=640 batch=16 epochs=120 patience=50 \
lr0=0.01 lrf=0.01 warmup_epochs=3.0 weight_decay=0.0005 mosaic=1.0 close_mosaic=10 pretrained=True optimizer=auto
模型优化的落点是"训练稳定"和"部署可用"。训练稳定侧,优先通过预训练迁移、EMA、余弦退火与后期关闭 Mosaic 获得更平滑的收敛曲线;部署可用侧,则需要让输出置信度与定位误差在典型车内场景下保持一致性,避免出现"训练集很准但上车就抖"的现象。后续若要进一步压缩端侧延迟,通常可以在不改动训练协议的前提下,对导出的 ONNX/TensorRT 进行 FP16 推理,并辅以层融合与图优化;若引入 INT8 量化,则建议以闭眼与哈欠这两类关键事件的召回为约束重新校准量化尺度,防止少数类在低比特量化中被置信度压缩而漏检。
5. 实验与结果分析
本节实验的核心目标,是在同一数据集、同一训练与评估协议下,对 YOLO 系列轻量模型在疲劳驾驶关键线索检测任务上的精度与实时性进行对比。老思将任务统一建模为 4 类目标检测(Yawn / close / noYawn / open),所有模型均采用 640 × 640 640\times640 640×640 输入分辨率训练与测试,训练轮数为 120(含常规数据增强与后期关闭 Mosaic 的设置),并在同一硬件平台 NVIDIA GeForce RTX 3070 Laptop GPU(8GB) 上统计端到端推理耗时。为便于工程落地,耗时被拆分为预处理(PreTime)、推理(InfTime)与后处理(PostTime),对应 UI 侧的"取帧与缩放---模型前向---NMS 与绘制/统计"三段链路,因此该指标比单纯 FPS 更贴近实际系统体验。
评价指标方面,检测性能采用 Precision、Recall、F1、mAP@0.5 与 mAP@0.5:0.95。对任一类别,Precision 与 Recall 分别定义为 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP、 R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP,F1 为 F 1 = 2 P R P + R F1=\frac{2PR}{P+R} F1=P+R2PR;mAP@0.5 衡量 IoU 阈值为 0.5 时的平均精度,mAP@0.5:0.95 则对 IoU 从 0.5 到 0.95(步长 0.05)取均值,更严格地反映定位质量。在疲劳驾驶场景中,告警逻辑通常更敏感于"闭眼(close)与打哈欠(Yawn)"两类正向疲劳事件的漏检,因此除了总体 mAP,老思也重点结合 PR 曲线、混淆矩阵与置信度曲线分析误差来源与阈值策略。
5.1 对比基线与实验结果汇总
首先对 n 级别轻量模型(更偏实时)进行对比,结果如表所示(同一测试集评估,单位 ms 为单帧统计):
| Model | Params(M) | FLOPs(G) | PreTime | InfTime | PostTime | Precision | Recall | F1 | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 1.90 | 7.73 | 1.31 | 0.4842 | 0.7878 | 0.5998 | 0.6529 | 0.4305 |
| YOLOv6n | 4.3 | 11.1 | 2.17 | 6.78 | 1.39 | 0.4931 | 0.7784 | 0.6037 | 0.6594 | 0.4443 |
| YOLOv7-tiny | 6.2 | 13.8 | 2.28 | 14.74 | 4.06 | 0.5394 | 0.8746 | 0.6672 | 0.6551 | 0.3702 |
| YOLOv8n | 3.2 | 8.7 | 1.95 | 6.83 | 1.39 | 0.4905 | 0.7182 | 0.5829 | 0.6333 | 0.4308 |
| YOLOv9t | 2.0 | 7.7 | 1.87 | 16.51 | 1.29 | 0.4814 | 0.7784 | 0.5949 | 0.6609 | 0.4516 |
| YOLOv10n | 2.3 | 6.7 | 2.08 | 11.24 | 0.63 | 0.4917 | 0.6918 | 0.5748 | 0.6320 | 0.4319 |
| YOLOv11n | 2.6 | 6.5 | 2.11 | 9.44 | 1.42 | 0.5010 | 0.7170 | 0.5898 | 0.6759 | 0.4562 |
| YOLOv12n | 2.6 | 6.5 | 1.91 | 12.47 | 1.37 | 0.5074 | 0.7135 | 0.5930 | 0.6854 | 0.4633 |
从整体精度看,YOLOv12n 在 mAP50 与 mAP50-95 上取得该组最优(0.6854 / 0.4633),说明其在"召回---定位"的综合质量上更占优势;但它的 Recall 相对偏保守(0.7135),导致 F1 未能超过 YOLOv7-tiny。YOLOv7-tiny 虽然 F1 最高(0.6672),主要来自较高 Recall(0.8746),但其 mAP50-95 明显偏低(0.3702),提示定位精度与框质量不足,这在 UI 可视化中常表现为框偏移、尺度不稳,且在后续基于框的时序统计(如闭眼持续时长)中会引入额外噪声。实时性方面,YOLOv6n/YOLOv8n 的 InfTime 最短(约 6.8 ms),更适合对延迟极敏感的端侧部署;而 YOLOv11n 往往处在折中区间:mAP 接近最优、耗时明显低于 YOLOv12n,可作为"默认在线模型"的候选。
进一步对 s 级别模型(更偏精度)进行对比,结果如下:
| Model | Params(M) | FLOPs(G) | PreTime | InfTime | PostTime | Precision | Recall | F1 | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 2.28 | 8.45 | 1.51 | 0.4738 | 0.7832 | 0.5904 | 0.6530 | 0.4350 |
| YOLOv6s | 17.2 | 44.2 | 2.22 | 8.59 | 1.45 | 0.4924 | 0.7246 | 0.5864 | 0.6492 | 0.4505 |
| YOLOv7 | 36.9 | 104.7 | 2.44 | 23.62 | 3.46 | 0.5299 | 0.9195 | 0.6724 | 0.6923 | 0.4214 |
| YOLOv8s | 11.2 | 28.6 | 2.31 | 7.66 | 1.42 | 0.4802 | 0.7957 | 0.5989 | 0.6690 | 0.4405 |
| YOLOv9s | 7.2 | 26.7 | 2.12 | 18.66 | 1.39 | 0.5017 | 0.7194 | 0.5911 | 0.6870 | 0.4672 |
| YOLOv10s | 7.2 | 21.6 | 2.21 | 11.38 | 0.60 | 0.5147 | 0.7038 | 0.5945 | 0.6747 | 0.4572 |
| YOLOv11s | 9.4 | 21.5 | 2.37 | 9.74 | 1.36 | 0.5060 | 0.7276 | 0.5969 | 0.6864 | 0.4600 |
| YOLOv12s | 9.3 | 21.4 | 2.09 | 13.23 | 1.42 | 0.4933 | 0.7167 | 0.5844 | 0.6938 | 0.4659 |
该组中 YOLOv12s 的 mAP50 最高(0.6938),并在 mAP50-95 上保持较高水平(0.4659),体现了更稳定的综合检测质量;但其 F1 并非最优,反映出在当前默认阈值/后处理设定下,它依然偏"谨慎",召回没有拉到极致。YOLOv7 在 F1 与 Recall 上非常突出(0.6724 / 0.9195),但推理耗时显著增加(InfTime 23.62 ms),参数与 FLOPs 成倍上升,使其更适合离线评测或高算力平台。若从工程折中看,YOLOv11s 在 mAP50(0.6864)与速度(InfTime 9.74 ms)之间更均衡,属于"精度接近最优但响应更快"的候选;而 YOLOv8s 的速度优势明显(InfTime 7.66 ms),当系统需要更高帧率或同时叠加多路视频时更有吸引力。
5.2 收敛过程与训练稳定性分析
以单模型训练过程为例,训练/验证损失与 mAP 曲线如"训练过程曲线图"所示。可以看到 train 侧的 box/cls/dfl loss 单调下降,说明模型对训练集拟合充分;验证集 loss 在前期快速下降并在约 30--50 epoch 左右达到相对低谷,随后出现缓慢回升,同时 mAP50 在峰值附近略有回落,呈现典型的"轻度过拟合"形态。这一现象通常与两点有关:一是数据增强(尤其 Mosaic)在中早期提高了泛化,但后期若继续高强度增强或训练过久,模型会逐步记忆训练分布;二是 open/noYawn 这类"非事件类"边界模糊,容易在后期把置信度校准推向更极端,导致验证集指标波动。因此更贴合本任务的做法,是将最佳 epoch 附近的权重作为系统默认发布权重,并在 UI 端提供阈值可调,以对不同车内光照与个体差异进行现场校准。

训练过程曲线图(results.png)
5.3 PR 曲线、混淆矩阵与误差来源
单模型的类别 PR 曲线如"PR 曲线图(单模型)"所示,总体 mAP@0.5 为 0.694 。更关键的是类别差异非常明显:Yawn(0.974)与 close(0.920)几乎接近"强可分",这两类正向疲劳事件具备较稳定的形状与纹理线索(口部大幅张开、眼睑闭合导致的局部结构变化),因此检测器能够学习到更可靠的判别边界;相反,noYawn 的 AP 仅 0.308,说明将"未打哈欠"作为目标框类别进行学习并不占优,它更像"口部处于自然状态"的巨大集合,外观变化远大于 Yawn,且与背景/遮挡/侧脸口部的分布更容易混叠。open 的 AP 为 0.573,虽然不算极低,但在默认阈值下其有效检出并不稳定,容易出现"低置信度可检出、稍抬阈值即消失"的现象,这一点会在后续置信度分析中进一步体现。

PR 曲线图(单模型)(PR_curve.png)
混淆矩阵(归一化)进一步揭示了误差结构:如"混淆矩阵图"所示,open 类在默认阈值下大量被预测为 background(矩阵中 True=open、Pred=background 接近 0.99),意味着 开眼状态的目标框经常漏检 ;而在 True=background 列,noYawn 与 close 的占比相对更高(分别约 0.52 与 0.27),说明 背景区域更容易被误检为"未打哈欠"或"闭眼" 。这类误差对疲劳告警的危害并不对称:close 的误检会造成频繁误报,而 open 的漏检会让"闭眼占比"估计偏高或偏低,直接影响 PERCLOS 与闭眼持续时长的可靠性。因此,单纯用一个全局置信度阈值去兼顾四类目标,往往难以同时把误报与漏报压到理想范围。

混淆矩阵图(confusion_matrix_normalized.png)
置信度---F1 曲线印证了上述结论:如"F1-Confidence 曲线图"所示,总体最优点出现在 conf≈0.027 处(all classes F1≈0.57)。这意味着若沿用检测任务常见的 conf=0.25 默认值,模型会呈现更保守的输出分布,从而牺牲 Recall,特别是 open 这类"低置信度密集分布"的类别几乎会被整体压掉。更合理的工程策略是采用 分类别阈值 或 仅保留正向疲劳事件类别 :例如系统侧重点监控 close 与 Yawn,将 open/noYawn 作为辅助信息(或干脆在建模上改为"先检测眼/口 ROI,再做状态分类"的两阶段结构),通常能显著降低背景误检并提高告警逻辑的可控性。

F1-Confidence 曲线图(F1_curve.png)
综合不同模型族的平均 PR 曲线与训练过程(见"n 型平均 PR 曲线图""s 型平均 PR 曲线图""mAP50 收敛对比图"),可以观察到 YOLOv11/YOLOv12 在中高召回区间保持了更好的精度下界,这也是其 mAP 更占优的主要原因;但在本任务中,最终系统体验往往由阈值策略与误差类型主导,因此老思更倾向于给出工程化建议:若追求在线实时与稳定交互,n 级别推荐以 YOLOv11n(折中)或 YOLOv6n(速度优先) 作为默认;若追求更高 mAP 与更稳健的跨场景表现,s 级别推荐 YOLOv11s(折中)或 YOLOv12s(精度优先),并配套分类别阈值与时序平滑策略,以把误检对告警的影响降到可控范围。
6.系统设计与实现
6.1 系统设计思路
本系统面向车载疲劳驾驶检测的实时交互需求,在结构上采用"界面层---控制层---处理层"三段式分层,以降低 UI 与推理逻辑的耦合度,并为后续替换不同 YOLO 族权重、增加新功能模块预留接口。界面层由 Ui_MainWindow 负责控件布局与视觉呈现,典型包括输入源选择、阈值调节(Conf/IOU)、模型切换、主题切换、结果表格与统计面板等;控制层由 MainWindow 作为中枢调度,统一管理当前会话状态、槽函数触发、播放控制与异常处理;处理层由 Detector 封装模型加载、推理、NMS、类别映射与结构化输出,并提供可复用的"输入帧→检测结果→可视化叠加帧"接口,使上层只需关心信号事件与数据展示。

在运行机制上,系统以 Qt 信号槽完成跨层通信,并通过线程隔离保证界面响应性:视频/摄像头帧的采集与推理通常在工作线程中循环执行,Detector 将推理结果(检测框、类别、置信度、统计量与耗时)以信号形式回传主线程,由 MainWindow 触发 UI 刷新与状态栏更新,从而避免在主线程内执行耗时算子导致界面卡顿。对于交互类操作(暂停/继续、切换输入源、切换模型、修改阈值),控制层首先更新状态机并向工作线程发出控制信号,确保在安全边界(例如停止取帧或完成当前帧推理后)再切换资源,以降低显存抖动与推理中断的概率。
为支持"可追溯与可复现实验",系统引入 SQLite 进行本地持久化:用户信息、主题偏好、模型选择、阈值配置以及检测结果均可写入数据库,并以用户维度隔离其配置与历史记录空间。老思在实现中建议将"结果导出"设计为与推理解耦的独立模块:推理侧只产生结构化结果,导出侧根据用户选择将结果写入数据库或落盘(图片/视频/CSV),这样既便于后期扩展筛选分析,也能避免 UI 线程承担 I/O 压力。
图 系统流程图

图注:系统从初始化到多源输入,完成预处理、推理与界面联动,并通过交互形成闭环。
6.2 登录与账户管理 --- 流程图

登录与账户管理模块的设计目标,是让检测系统具备"多用户、可持久化、可迁移"的使用体验:用户在登录界面完成注册或登录后,系统通过 SQLite 对口令哈希与账户状态进行校验,并在通过校验后加载该用户的主题偏好、模型选择、阈值配置与历史检测记录,使主界面一进入就处于可用且个性化的会话状态;在主界面内,用户可随时修改头像与密码或调整偏好设置,这些配置会即时落库以保证下次登录自动恢复;当用户选择注销或切换账号时,控制层会清理当前会话状态并释放与用户相关的缓存与导出路径,再返回登录页重新建立新的用户上下文,从而将账户体系与检测流程自然衔接,既实现数据隔离,也避免不同用户之间的结果混用与配置污染。
7. 下载链接
若您想获得博文中涉及的实现完整全部资源文件 (包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件请见项目介绍及功能演示视频处给出:➷➷➷
详细介绍文档博客 :YOLOv5至YOLOv12升级:疲劳驾驶检测系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
8.参考文献
1 United States. Federal Motor Carrier Safety Administration. Technology Division. PERCLOS: A Valid Psychophysiological Measure of Alertness As Assessed by Psychomotor Vigilance[R]. Washington, DC: U.S. Department of Transportation, 1998. (Report No. FHWA-MCRT-98-006). DOI:10.21949/1502740.
2 ABE T. PERCLOS-based technologies for detecting drowsiness: current evidence and future directions [J]. SLEEP Advances, 2023, 4(1): zpad006. DOI:10.1093/sleepadvances/zpad006.
3 SIKANDER G, ANWAR S. Driver fatigue detection systems: A review [J]. IEEE Transactions on Intelligent Transportation Systems, 2019, 20(6): 2339-2352. DOI:10.1109/TITS.2018.2868499.
4 SHAIK M E. A systematic review on detection and prediction of driver drowsiness [J]. Transportation Research Interdisciplinary Perspectives, 2023, 21: 100864. DOI:10.1016/j.trip.2023.100864.
5\] ZHANG H, NI D, DING N, SUN Y, ZHANG Q, LI X. **Structural analysis of driver fatigue behavior: A systematic review** \[J\]. *Transportation Research Interdisciplinary Perspectives*, 2023, 21: 100865. DOI:10.1016/j.trip.2023.100865. \[6\] YANG C, YANG Z, LI W, SEE J. **FatigueView: A Multi-Camera Video Dataset for Vision-Based Drowsiness Detection** \[J\]. *IEEE Transactions on Intelligent Transportation Systems*, 2023, 24(1): 233-246. DOI:10.1109/TITS.2022.3216017. \[7\] WENG C H, LAI Y H, LAI S H. **Driver Drowsiness Detection via a Hierarchical Temporal Deep Belief Network** \[C\]//*Computer Vision -- ACCV 2016 Workshops*. Lecture Notes in Computer Science, Vol. 10118. Cham: Springer, 2017: 117-133. DOI:10.1007/978-3-319-54526-4_9. \[8\] ABTAHI S, OMIDYEGANEH M, SHIRMOHAMMADI S, HARIRI B. **YawDD: a yawning detection dataset** \[C\]//*Proceedings of the 5th ACM Multimedia Systems Conference (MMSys 2014)*. Singapore: ACM, 2014. \[9\] BEKHOUCHE S E, RUICHEK Y, DORNAIKA F. **Driver drowsiness detection in video sequences using hybrid selection of deep features** \[J\]. *Knowledge-Based Systems*, 2022, 253: 109436. DOI:10.1016/j.knosys.2022.109436. \[10\] QIAN K, KOIKE T, NAKAMURA T, SCHULLER B W, YAMAMOTO Y. **Learning multimodal representations for drowsiness detection** \[J\]. *IEEE Transactions on Intelligent Transportation Systems*, 2022, 23(8): 11539-11548. DOI:10.1109/TITS.2021.3105326. \[11\] DASGUPTA A, RAHMAN D, ROUTRAY A. **A smartphone-based drowsiness detection and warning system for automotive drivers** \[J\]. *IEEE Transactions on Intelligent Transportation Systems*, 2019, 20(11): 4045-4054. DOI:10.1109/TITS.2018.2879609. \[12\] LU Y, LIU C, CHANG F, LIU H, et al. **JHPFA-Net: Joint Head Pose and Facial Action Network for Driver Yawning Detection Across Arbitrary Poses in Videos** \[J\]. *IEEE Transactions on Intelligent Transportation Systems*, 2023 (Early Access). DOI:10.1109/TITS.2023.3285923. \[13\] 张俊辉, 杜峰, 武继权, 黄渤, 杨晨. **YOLOv8n模型在驾驶疲劳检测中的轻量化与实时性改进** \[J\]. *光电工程*, 2025: 250106. DOI:10.12086/oee.2025.250106. \[14\] 蔡忠祺, 林珊玲, 林坚普, 吕珊红, 林志贤, 郭太良. **基于改进YOLOv8n-Pose的疲劳驾驶检测** \[J\]. *液晶与显示*, 2025, 40(4): 617-629. DOI:10.37188/CJLCD.2024-0192. \[15\] HASAN M M, WATLING C N, LARUE G S. **Validation and interpretation of a multimodal drowsiness detection system using explainable machine learning** \[J\]. *Computer Methods and Programs in Biomedicine*, 2024, 243: 107925. DOI:10.1016/j.cmpb.2023.107925.