基于 YOLOv8 的口罩佩戴检测系统(全套源码+数据集)

@开发日期:2026年


项目简介

本项目以深度学习目标检测为核心,完整覆盖「数据集构建与处理 → 模型训练与调优 → 系统集成与功能开发」的全流程,最终交付一套可直接部署使用的口罩佩戴检测系统。系统基于 YOLOv8 实现实时口罩状态识别,支持图片、视频、摄像头三种输入来源,并提供美观的 PyQt6 图形界面。


目录

  1. 数据集说明
  2. 模型训练与调优
  3. 训练指标说明
  4. 可视化图含义
  5. 系统功能介绍
  6. 技术栈
  7. 项目结构
  8. 启动教程

一、数据集说明

1.1 数据集概览

项目 数值
总图片数 577 张
有效标注图片 479 张
无目标图片(负样本) 98 张
总标注框数 1259 个
数据集大小 约 61.4 MB

1.2 类别定义

class_id 类别名称 含义 标注数 占比
0 with_mask 已佩戴口罩 529 42.0%
1 without_mask 未佩戴口罩 730 58.0%

类别轻微不均衡(未戴口罩略多),训练时通过数据增强与样本权重策略缓解。

1.3 标注格式

采用标准 YOLO 格式,每行一个目标框:

<class_id>  <x_center>  <y_center>  <width>  <height>

所有坐标均为相对图片尺寸的归一化值(0~1),图片与标注文件同名配对。

1.4 数据集特点

  • 场景多样:室内外、不同光照、人群密度均有覆盖
  • 目标尺度差异大:单人特写到多人群体,单张最多含 41 个标注框
  • 含负样本:约 17% 的图片为纯背景,有效降低误检率
  • 平均密度:有效图片平均每张含 2.63 个目标

1.5 数据集划分

训练前将原始数据集按 8 : 1 : 1 比例划分,固定随机种子保证可复现:

子集 比例 数量(约)
训练集 (train) 80% 461 张
验证集 (val) 10% 58 张
测试集 (test) 10% 58 张

划分结果自动保存至 train_result/data/,并生成 data.yaml 配置文件。


二、模型训练与调优

2.1 深度学习开发流程

原始数据集
    ↓  数据清洗 & 格式验证
标注文件审查(过滤空标注、异常框)
    ↓  数据集划分(8:1:1)
train / val / test 子集
    ↓  生成 data.yaml
YOLOv8 训练配置
    ↓  预训练权重迁移学习
模型训练(88 Epoch)
    ↓  指标监控 & 早停
最优权重 best.pt
    ↓  系统集成
PyQt6 图形化检测应用

2.2 基础模型

采用 YOLOv8n(Nano 轻量级版本)作为基础网络,在 ImageNet 预训练权重基础上进行迁移学习,针对口罩检测二分类任务进行微调。YOLOv8 采用无锚点(Anchor-Free)设计,解耦检测头提升分类与定位精度。

2.3 训练超参数

参数 说明
预训练权重 yolov8n.pt ImageNet 预训练,迁移学习
输入分辨率 640 × 640 标准输入尺寸
训练轮数 100(实际 88 轮早停) 早停耐心值 20
批次大小 16 适配 12GB 显存
优化器 AdamW 自适应学习率 + 权重衰减
初始学习率 0.01
学习率调度 余弦退火(Cosine LR) 平滑收敛
预热轮数 3 Warmup 阶段
权重衰减 0.0005 L2 正则化
混合精度训练 FP16(AMP) 加速训练、节省显存
训练设备 NVIDIA RTX 3060 12GB

2.4 训练过程描述

  1. Warmup 阶段(Epoch 1-3):学习率从极小值线性增大至初始值,防止梯度爆炸
  2. 快速收敛阶段(Epoch 4-30):损失快速下降,mAP 从接近 0 提升至 0.67+
  3. 稳定优化阶段(Epoch 30-68):模型精细调整,mAP50 持续提升至 0.86+
  4. 早停触发(Epoch 88):验证集 mAP 连续 20 轮无显著提升,训练自动停止

三、训练指标说明

3.1 最终性能指标

指标 最优值 达到轮次
mAP@0.5 0.8684 Epoch 82
mAP@0.5:0.95 0.4960 Epoch 68
Precision(精确率) 0.8824 Epoch 74
Recall(召回率) 0.8840 Epoch 81

3.2 指标含义

指标 含义
Precision(精确率) 预测为某类别的结果中,真正正确的比例。精确率高表示误检少
Recall(召回率) 所有真实目标中,被成功检测出的比例。召回率高表示漏检少
mAP@0.5 在 IoU 阈值 = 0.5 时的平均精度均值,是目标检测的核心指标
mAP@0.5:0.95 在 IoU 阈值从 0.5 到 0.95(步长 0.05)取平均,评估定位精度更严格
Box Loss 边界框回归损失,衡量预测框与真实框的位置偏差
Cls Loss 分类损失,衡量类别预测的误差
DFL Loss Distribution Focal Loss,YOLOv8 特有的分布式焦点损失,提升边界框定位精度

四、可视化图含义

4.1 独立图表(visualize.py 生成)

训练结束后,运行 python visualize.py 可在 train_result/train/charts/ 生成以下 8 张图表:

文件名 内容 解读要点
loss_box.png Box Loss(训练集 vs 验证集) 两条线持续下降且趋势接近,说明模型定位能力稳定提升,无过拟合
loss_cls.png Classification Loss(训练集 vs 验证集) 验证集分类损失下降并趋于平稳,表明模型对两类口罩状态的区分能力良好
loss_dfl.png DFL Loss(训练集 vs 验证集) YOLOv8 特有损失,反映分布式边界框精度,收敛说明定位分布预测趋于准确
metric_precision.png Precision 变化曲线 精确率从低到高逐渐提升并趋于稳定,最终达到 0.882
metric_recall.png Recall 变化曲线 召回率随训练增大,最终达到 0.884,说明漏检率持续降低
metric_mAP50.png mAP@0.5 变化曲线 目标检测核心指标,最终收敛至 0.868,是评估模型综合性能的主要依据
metric_mAP50_95.png mAP@0.5:0.95 变化曲线 严格精度指标,最终达到 0.496,反映模型对精确定位的能力
lr_schedule.png 学习率调度曲线 展示余弦退火策略:Warmup 预热后从峰值逐步平滑衰减至接近 0,有助于模型后期精细收敛

各图均标注最优点位,并展示原始曲线与平滑曲线,便于排除随机噪声干扰、观察真实趋势。

4.2 系统内嵌可视化(指标展示页)

系统界面的「指标展示」页内嵌三个可交互的可视化 Tab,无需额外运行脚本,启动系统后即可查看:

Tab 图表类型 内容说明
📈 训练曲线 四联子图(折线) 训练损失、验证损失(带平滑)、mAP 双线、Precision/Recall 双线,完整还原训练全过程
📊 指标汇总 统计卡片 + 柱状图 4 个大卡片展示最优 mAP@0.5mAP@0.5:0.95、Precision、Recall,下方柱状图直观对比四项指标
🎯 性能雷达 雷达图 + 面积折线图 左侧:以 Precision、Recall、mAP@0.5、F1 Score、mAP@0.5:0.95 五个维度绘制综合性能雷达图,多层发光填充直观反映模型综合水平;右侧:四条指标进化曲线(含面积填充与原始噪声线),展示各指标随训练轮次的动态演变,最优点以高亮圆点标注

五、系统功能介绍

5.1 登录 / 注册模块

  • 渐变深色背景登录界面,支持账号注册与密码验证
  • 用户信息以 JSON 文件本地持久化,默认账号 admin / admin123

5.2 图片识别

  • 支持 JPG / PNG / BMP / WebP 等格式图片的本地导入
  • 运行 YOLOv8 推理,在图片上绘制检测框与置信度标签
  • 展示统计摘要(总检测数、类别数、平均/最高置信度)
  • 提供置信度分布直方图
  • 支持导出标注结果图片与 CSV 明细

5.3 视频识别

  • 支持 MP4 / AVI / MOV / MKV 等格式视频文件
  • 多线程逐帧检测,可设置「每 N 帧检测一次」降低计算压力
  • 实时显示标注画面与当前帧统计,累计统计各类别目标数
  • 支持导出当前帧截图

5.4 摄像头识别

  • 支持选择本地摄像头设备(索引 0~10)
  • 实时采集画面并叠加检测结果,检测功能可随时开关
  • 支持截图保存(自动保存至 train_result/screenshots/
  • 会话结束后可一键将统计数据归档至检测历史

5.5 检测历史

  • 所有检测结果自动以 SQLite 数据库持久化
  • 支持按类型(图片 / 视频 / 摄像头)筛选与关键词搜索
  • 点击记录查看完整详情,支持导出 CSV 与一键清空

5.6 模型管理

  • 默认加载训练产物 train_result/train/weights/best.pt
  • 支持手动选择任意 .pt / .onnx 模型文件
  • 可调节置信度阈值(Conf)、IoU 阈值、最大检测数
  • 模型加载状态实时反馈,展示类别列表与模型信息

5.7 指标展示

  • 自动读取 train_result/train/results.csv,支持随时重新加载
  • 训练曲线:4 个子图(训练损失、验证损失平滑、mAP 双线、Precision/Recall)
  • 指标汇总:4 个大卡片展示最优指标 + 柱状图四项对比
  • 性能雷达:左侧五维雷达图综合评估模型性能;右侧指标进化面积曲线展示各指标随训练轮次的动态演变,最优点高亮标注


六、技术栈

层次 技术 用途
深度学习框架 ultralytics(YOLOv8) 目标检测模型训练与推理
UI 框架 PyQt6 图形界面开发
计算机视觉 opencv-python 图像/视频读写、绘制检测框
数值计算 numpy 数组运算、图像数据处理
数据分析 pandas 训练日志读取与指标统计
可视化 matplotlib 训练曲线图表、置信度直方图
数据存储 SQLite(内置) 检测历史持久化
配置文件 PyYAML 数据集配置文件生成与读取
开发语言 Python 3.9 全项目统一语言

七、项目结构

口罩检测/
│
├── main.py                    # 程序入口,启动登录窗口
├── login_window.py            # 登录 / 注册窗口
├── main_window.py             # 主窗口(侧边栏 + 页面路由)
├── train.py                   # 模型训练脚本
├── visualize.py               # 训练结果可视化脚本
│
├── pages/                     # 各功能页面模块
│   ├── image_page.py          # 图片识别页
│   ├── video_page.py          # 视频识别页
│   ├── camera_page.py         # 摄像头识别页
│   ├── history_page.py        # 检测历史页
│   ├── model_page.py          # 模型管理页
│   └── metrics_page.py        # 指标展示页
│
├── utils/                     # 工具模块
│   ├── styles.py              # QSS 全局样式表
│   ├── detector.py            # YOLOv8 检测引擎封装
│   ├── db.py                  # SQLite 历史数据库管理
│   ├── data_prepare.py        # 数据集划分与 YAML 生成
│   └── users.json             # 用户账号存储(自动生成)
│
├── datasets/                  # 原始数据集(图片 + YOLO 标注)
│   ├── 0.jpg / 0.txt
│   ├── 1.jpg / 1.txt
│   └── ...(577 组)
│
├── yolov8n.pt                 # YOLOv8 预训练权重
│
├── train_result/              # 训练产物(自动生成)
│   ├── data/                  # 划分后的数据集
│   │   ├── train/images|labels
│   │   ├── val/images|labels
│   │   ├── test/images|labels
│   │   └── data.yaml
│   ├── train/                 # 训练输出
│   │   ├── weights/
│   │   │   ├── best.pt        ← 最优权重(系统默认加载)
│   │   │   └── last.pt
│   │   ├── results.csv        ← 训练日志
│   │   ├── charts/            ← 可视化图表(8 张)
│   │   └── ...(混淆矩阵、PR 曲线等)
│   ├── screenshots/           # 摄像头截图(自动生成)
│   └── detection_history.db   # SQLite 历史数据库(自动生成)
│
├── 数据集说明.md              # 数据集详细说明文档
├── README.md                  # 本文件
└── requirements.txt           # 依赖列表

八、启动教程

8.1 环境要求

  • Python 3.9
  • CUDA 兼容 GPU(推荐显存 ≥ 8GB,本项目使用 RTX 3060 12GB)
  • Windows 10 / 11

8.2 安装依赖

pip install -r requirements.txt

8.3 一键训练(可选,已提供训练权重)

若需自行训练,运行:

python train.py

训练完成后所有产物保存至 train_result/ 目录,最优权重为 train_result/train/weights/best.pt

8.4 生成可视化图表(可选)

python visualize.py

图表保存至 train_result/train/charts/

8.5 启动系统

python main.py
  • 默认账号:admin,密码:admin123
  • 首次登录后系统自动加载 best.pt 模型,即可开始使用

本项目为个人原创,结构清晰,功能完整,适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。

作者原创项目地址:michael-jay.pages.dev/projects.html

posted on 2026-08-03 16:18  Jay8059  阅读(1)  评论(0)    收藏  举报

导航