原创项目合集 基于 YOLOv8 的口罩佩戴检测系统

基于 YOLOv8 的口罩佩戴检测系统

一、项目简介

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

二、数据集说明

基于 YOLOv8 的口罩佩戴检测系统项目截图1 基于 YOLOv8 的口罩佩戴检测系统项目截图1

1.1 数据集概览

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

1.2 类别定义

class_id类别名称含义标注数占比
0with_mask已佩戴口罩52942.0%
1without_mask未佩戴口罩73058.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.ptImageNet 预训练,迁移学习
输入分辨率640 × 640标准输入尺寸
训练轮数100(实际 88 轮早停)早停耐心值 20
批次大小16适配 12GB 显存
优化器AdamW自适应学习率 + 权重衰减
初始学习率0.01
学习率调度余弦退火(Cosine LR)平滑收敛
预热轮数3Warmup 阶段
权重衰减0.0005L2 正则化
混合精度训练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.50.8684Epoch 82
mAP@0.5:0.950.4960Epoch 68
Precision(精确率)0.8824Epoch 74
Recall(召回率)0.8840Epoch 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 LossDistribution Focal Loss,YOLOv8 特有的分布式焦点损失,提升边界框定位精度

五、可视化图含义

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

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

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

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

基于 YOLOv8 的口罩佩戴检测系统项目截图1 基于 YOLOv8 的口罩佩戴检测系统项目截图2 基于 YOLOv8 的口罩佩戴检测系统项目截图3 基于 YOLOv8 的口罩佩戴检测系统项目截图4 基于 YOLOv8 的口罩佩戴检测系统项目截图5 基于 YOLOv8 的口罩佩戴检测系统项目截图6 基于 YOLOv8 的口罩佩戴检测系统项目截图7 基于 YOLOv8 的口罩佩戴检测系统项目截图8

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

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

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

六、系统功能介绍

5.1 登录 / 注册模块

  • 渐变深色背景登录界面,支持账号注册与密码验证
  • 用户信息以 JSON 文件本地持久化,默认账号 admin / admin123
基于 YOLOv8 的口罩佩戴检测系统项目截图1

5.2 图片识别

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

5.3 视频识别

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

5.4 摄像头识别

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

5.5 检测历史

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

5.6 模型管理

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

5.7 指标展示

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

七、技术栈

层次技术用途
深度学习框架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 模型,即可开始使用

本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。

微信二维码
Jay 微信二维码