基于 YOLOv8 目标检测模型 + PyQt6 桌面端应用的垃圾分类识别系统,覆盖数据集构建、模型训练调优、系统集成开发的完整深度学习工程流程。

@作者:Jay
@定制联系vx:Jay8059
@开发日期:2026年


目录

  1. 项目概述
  2. 数据集说明
  3. 深度学习开发流程
  4. 训练参数
  5. 训练指标与结果
  6. 可视化图表说明
  7. 系统功能
  8. 技术栈
  9. 项目结构
  10. 启动教程
  11. 作者信息

项目概述

本项目针对城市生活垃圾分类场景,构建了一套端到端的 AI 识别系统:

  • 目标检测模型:基于 YOLOv8n 预训练权重进行迁移学习,识别 44 种常见垃圾细类
  • 分类规则引擎:将 44 个细类自动映射到「可回收物 / 厨余垃圾 / 有害垃圾 / 其他垃圾」四大类
  • 桌面端应用:PyQt6 多功能检测界面,支持图片、视频、摄像头三种输入源实时检测

数据集说明

基本信息

项目 内容
标注格式 YOLO TXT(由 Pascal VOC XML 转换)
图像总数 14,761 张(有效图像;原始 14,964 张去除无图样本)
大类数量 4 类(可回收物、厨余垃圾、有害垃圾、其他垃圾)
细类数量 44 类
图像格式 JPEG(.jpg)
数据集划分 train / val / test = 7 : 1 : 2

子集分布

子集 图片数量 用途
train 10,319 张 模型训练
val 1,478 张 训练过程中的验证评估
test 2,964 张 最终性能测试

垃圾分类体系

大类 细类数 代表细类
可回收物 26 类 饮料瓶、易拉罐、纸盒纸箱、玻璃器皿、旧衣服、充电宝…
厨余垃圾 7 类 剩饭剩菜、果皮果肉、菜帮菜叶、鱼骨、蛋壳…
有害垃圾 3 类 干电池、过期药物、软膏
其他垃圾 8 类 一次性快餐盒、烟蒂、陶瓷器皿、污损塑料…

标注格式示例

每张图片对应一个同名 .txt 文件,每行一个目标框,坐标均归一化到 [0, 1]

class_id  x_center  y_center  width  height
6  0.4106  0.4219  0.5962  0.3379

深度学习开发流程

第一阶段:数据集构建与处理

  1. 原始数据收集:整合公开垃圾分类数据集,原始标注格式为 Pascal VOC XML
  2. 格式转换:将 XML 标注批量转换为 YOLO TXT 格式(class_id x_center y_center w h 归一化坐标)
  3. 数据清洗:剔除无有效标注框的样本(14,964 → 14,761 张)
  4. 数据集划分:按 7:1:2 比例随机划分训练/验证/测试集,确保类别分布均衡
  5. 分类规则构建:编写 classify_rule.json,建立细类 → 大类的映射规则,支持推理后的大类归并

第二阶段:模型训练与调优

  1. 模型选型:选择 YOLOv8n(Nano 版本)作为基础架构,参数量小、推理速度快,适合桌面端部署
  2. 迁移学习:加载 COCO 预训练权重 yolov8n.pt,在垃圾数据集上进行微调,加速收敛
  3. 数据增强:启用 Mosaic 拼接(mosaic=1.0)、随机水平翻转(fliplr=0.5)、HSV 色彩扰动、随机缩放等多种增强策略
  4. 训练策略
    • 前 3 个 epoch 进行学习率 Warmup,逐步从 warmup_bias_lr=0.1 过渡到 lr0=0.01
    • 后期采用余弦退火式线性衰减(lrf=0.01),避免学习率过高导致振荡
    • 最后 10 个 epoch 关闭 Mosaic 增强(close_mosaic=10),提升模型对真实样本的拟合能力
  5. 混合精度训练:启用 AMP(amp=True),降低显存占用,提升训练吞吐
  6. 结果保存:自动保存最优权重 best.pt 和最终权重 last.pt,并记录完整训练日志 results.csv

第三阶段:系统集成与功能开发

  1. 检测器封装:将 Ultralytics YOLO 推理接口封装为 Detector 类,统一管理模型加载、参数配置和推理调用
  2. 多线程架构:视频和摄像头检测采用 QThread 异步处理,检测线程与 UI 线程分离,保证界面流畅
  3. 历史记录持久化:使用 SQLite 存储每次检测的结果,支持按类型筛选和关键词搜索
  4. 训练结果可视化:读取 results.csv,使用 Matplotlib 绘制多维度分析图表,嵌入 PyQt6 界面

训练参数

参数 说明
基础模型 yolov8n.pt COCO 预训练 Nano 版本
训练轮次 100 epochs
批次大小 16
输入尺寸 640×640
初始学习率 0.01 lr0
最终学习率 0.01 × lrf = 0.0001 线性衰减至 lr0×lrf
Warmup 轮次 3.0
优化器 auto(SGD)
动量 0.937
权重衰减 0.0005
Box Loss 权重 7.5
Cls Loss 权重 0.5
DFL Loss 权重 1.5
IoU 阈值(NMS) 0.7
混合精度 AMP 开启
Mosaic 增强 1.0(后 10 epoch 关闭)
水平翻转 0.5
HSV 色调扰动 0.015
HSV 饱和度扰动 0.7
随机缩放 0.5
自动增强 randaugment
随机擦除 0.4
总训练时长 ≈ 2.54 小时 9,161 秒

训练指标与结果

核心指标(基于验证集)

指标 最优值(Best Epoch) 最终值(Epoch 100)
mAP@0.5 0.6991(Epoch 81) 0.6971
mAP@0.5:0.95 0.5954(Epoch 89) 0.5981
Precision 0.7997(Epoch 53) 0.7564
Recall 0.6455(Epoch 66) 0.6270
F1 Score ≈ 0.714 ≈ 0.681

损失曲线趋势

损失项 初始值(Epoch 1) 最终值(Epoch 100) 说明
train/box_loss 0.760 0.419 边界框回归损失,下降 ≈ 45%
train/cls_loss 3.871 0.562 分类损失,下降 ≈ 85.5%
train/dfl_loss 1.294 1.032 分布焦点损失
val/box_loss 0.893 0.599 验证集边界框损失
val/cls_loss 2.717 1.090 验证集分类损失

训练集与验证集损失同步下降,无明显过拟合现象,模型具备良好的泛化能力。


可视化图表说明

系统内置两套可视化工具:

指标展示页内置图表

图表名称 含义
训练/验证 Box Loss 模型预测边界框与真实框之间的位置偏差,值越低说明定位越准确
训练/验证 Cls Loss 类别分类的交叉熵损失,值越低说明分类越准确
训练/验证 DFL Loss 分布焦点损失,辅助边界框精细化回归
mAP@0.5 曲线 IoU 阈值为 0.5 时的平均精度均值,衡量整体检测性能
mAP@0.5:0.95 曲线 在多个 IoU 阈值(0.5~0.95)下的综合性能,要求更严格
Precision 曲线 精确率 = 正确检测数 / 总预测数,反映误报率
Recall 曲线 召回率 = 正确检测数 / 真实目标数,反映漏报率
F1 分数曲线 Precision 与 Recall 的调和平均,综合衡量两者均衡性
学习率衰减曲线 展示 Warmup → 线性衰减的学习率变化过程
综合性能雷达图 将 mAP、Precision、Recall、F1、损失收敛度等多维指标以雷达形式可视化
各指标对比柱状图 汇总最优 epoch 的四项核心指标便于横向比较

独立可视化脚本(plot_results.py

运行 python plot_results.py 后,自动为每个训练指标生成独立 PNG 图片,保存至 runs/detect/train/charts/,包含最优值标注。


系统功能

🔐 登录注册

  • 用户名 + 密码登录,支持注册新账号
  • 账号信息持久化存储于 users.json

🖼️ 图片识别

  • 支持点击打开或拖拽导入图片(JPG / PNG / BMP / WebP)
  • 一键开始检测,实时展示标注结果图
  • 统计摘要:总检测数、类别数、平均 / 最高置信度
  • 类别分布表、详细检测数据表(坐标 + 置信度)
  • 置信度直方图分布
  • 支持导出标注图片、导出 CSV 结果文件

🎬 视频识别

  • 打开本地视频文件,按帧间隔检测
  • 实时展示带标注的视频帧
  • 当前帧 / 累计检测统计
  • 可随时停止检测

📷 摄像头识别

  • 支持多路摄像头切换(索引 0~10)
  • 检测开关分离,可仅预览不检测
  • 实时统计目标数量、类别、置信度
  • 一键截图保存,会话结果写入历史

📋 检测历史

  • 图片 / 视频 / 摄像头检测记录自动入库(SQLite)
  • 支持按检测类型筛选、关键词搜索
  • 点击记录查看完整详情
  • 支持导出历史 CSV、一键清空

⚙️ 模型管理

  • 自动加载默认权重 runs/detect/train/weights/best.pt
  • 支持手动浏览指定任意 .pt / .onnx 模型文件
  • 可视化调节置信度阈值、IoU 阈值、最大检测数
  • 展示模型信息与 44 类别说明

📊 指标展示

  • 训练曲线:损失、mAP、Precision、Recall 全程变化
  • 指标汇总:核心指标大字展示 + 柱状对比图
  • 综合分析:7 维雷达图 + 学习率曲线 + P/R/F1 三线对比

技术栈

类别 技术 / 库
深度学习框架 PyTorch
目标检测 Ultralytics YOLOv8
图像处理 OpenCV(cv2)
数值计算 NumPy
可视化 Matplotlib(QtAgg 后端)
桌面 UI PyQt6
数据库 SQLite3(Python 内置)
开发语言 Python 3.9

项目结构

垃圾分类检测/
├── main.py                    # 程序入口
├── plot_results.py            # 独立指标可视化脚本
├── requirements.txt           # 依赖清单
├── users.json                 # 用户账号(自动生成)
├── detection_history.db       # 检测历史数据库(自动生成)
│
├── datasets/                  # 数据集
│   ├── images/
│   │   ├── train/             # 训练图片(10,319 张)
│   │   ├── val/               # 验证图片(1,478 张)
│   │   └── test/              # 测试图片(2,964 张)
│   ├── labels/
│   │   ├── train/             # 训练标注(YOLO TXT)
│   │   ├── val/
│   │   └── test/
│   ├── garbage.yaml           # YOLO 训练配置
│   ├── classify_rule.json     # 细类 → 大类映射规则
│   ├── train_classes.txt      # 44 类名称列表
│   └── README.md              # 数据集说明
│
├── runs/
│   └── detect/
│       └── train/
│           ├── weights/
│           │   ├── best.pt    # 最优模型权重(系统默认加载)
│           │   └── last.pt    # 最终轮次权重
│           ├── results.csv    # 训练指标日志(100 轮)
│           ├── args.yaml      # 训练参数记录
│           └── charts/        # plot_results.py 输出图表
│
├── utils/                     # 工具层
│   ├── styles.py              # 全局 QSS 样式
│   ├── db.py                  # SQLite 历史数据库操作
│   └── detector.py            # YOLO 检测器封装
│
└── ui/                        # 界面层
    ├── widgets.py             # 共享组件(卡片、统计块、标题)
    ├── login_window.py        # 登录 / 注册窗口
    ├── main_window.py         # 主窗口(顶部导航栏)
    └── pages/
        ├── image_page.py      # 图片识别页
        ├── video_page.py      # 视频识别页
        ├── camera_page.py     # 摄像头识别页
        ├── history_page.py    # 检测历史页
        ├── model_page.py      # 模型管理页
        └── metrics_page.py    # 指标展示页

启动教程

环境准备

Python 版本要求: Python 3.9

安装所有依赖:

pip install -r requirements.txt

如需 GPU 加速推理,请提前安装与 CUDA 版本匹配的 PyTorch,详见 pytorch.org

准备模型权重

将训练好的模型权重放置于:

runs/detect/train/weights/best.pt

系统启动时将自动加载该路径的权重。也可以在运行后于「模型管理」页面手动指定其他权重文件。

启动系统

在项目根目录执行:

python main.py

登录界面默认账号:

账号 密码
admin admin123

重新训练模型(可选)

如需在自有数据集上重新训练,在项目根目录执行:

yolo train data=datasets/garbage.yaml model=yolov8n.pt epochs=100 imgsz=640 batch=16

训练完成后,将新权重路径在「模型管理」页面重新加载即可。

生成独立指标图表

python plot_results.py

图表将保存至 runs/detect/train/charts/,每个指标对应一张 PNG 文件。


作者信息

项目 内容
作者 Jay
定制联系 vx:Jay8059
开发日期 2026 年

如需定制数据集扩充、模型微调、UI 二次开发或部署方案,欢迎联系作者。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐