当前位置: 首页 > news >正文

基于 YOLOv8 的垃圾分类识别系统(全套源码+数据集)

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

@开发日期:2026年


目录

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

项目概述

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

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

数据集说明

基本信息

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

子集分布

子集图片数量用途
train10,319 张模型训练
val1,478 张训练过程中的验证评估
test2,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.ptCOCO 预训练 Nano 版本
训练轮次100 epochs
批次大小16
输入尺寸640×640
初始学习率0.01lr0
最终学习率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.50.6991(Epoch 81)0.6971
mAP@0.5:0.950.5954(Epoch 89)0.5981
Precision0.7997(Epoch 53)0.7564
Recall0.6455(Epoch 66)0.6270
F1 Score≈ 0.714≈ 0.681

损失曲线趋势

损失项初始值(Epoch 1)最终值(Epoch 100)说明
train/box_loss0.7600.419边界框回归损失,下降 ≈ 45%
train/cls_loss3.8710.562分类损失,下降 ≈ 85.5%
train/dfl_loss1.2941.032分布焦点损失
val/box_loss0.8930.599验证集边界框损失
val/cls_loss2.7171.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 后端)
桌面 UIPyQt6
数据库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

安装所有依赖:

pipinstall-rrequirements.txt

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

准备模型权重

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

runs/detect/train/weights/best.pt

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

启动系统

在项目根目录执行:

python main.py

登录界面默认账号:

账号密码
adminadmin123

重新训练模型(可选)

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

yolo traindata=datasets/garbage.yamlmodel=yolov8n.ptepochs=100imgsz=640batch=16

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

生成独立指标图表

python plot_results.py

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


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

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

http://www.jsqmd.com/news/1325373/

相关文章:

  • 高品质胶带哪家专业? - 中媒介
  • 如何快速上手阿里云OSS Browser桌面客户端?终极云存储管理工具指南
  • 终极指南:5分钟掌握XUnity游戏自动翻译插件,告别语言障碍
  • 基于本地大模型与WorkBuddy的智能邮件自动化处理实战
  • 好奇心驱动优化:从稀疏奖励到主动探索的强化学习实战
  • 2026年钢板路桥抛丸机直销工厂优选指南:如何选择高性价比设备? - geo交流
  • 无需账号安装,通过 SSH 就能在 200×60 画布上作画,每 15 秒可绘一次!
  • 2026年滨州304不锈钢分集水器供货商怎么选?3个对比维度帮你找到优选 - geo交流
  • 哪家智慧食堂能自动预警后厨温度失控吗?比如冷藏库温度升高了马上预警 - 中媒介
  • 安卓APP数据库修改实战:从图标替换到深度定制
  • PHP header()函数详解:从HTTP基础到高级应用
  • QCustomPlot使用例子
  • COMSOL光子晶体能带计算原理与工程实践
  • SMUDebugTool终极指南:AMD Ryzen平台硬件调试与性能优化完全教程
  • 洛阳涮牛肚哪家专业? - 中媒介
  • Gradio.Net 开发指南 -- 在 Blocks 中管理状态
  • 王慧文家族办公室AI投资布局:覆盖产业链多环节,折射行业早期探索状态
  • 从散装脚本到智能体操作系统:AgentOS架构设计与工程实践
  • 智识未来,眼见为实:2026武汉机器视觉展会开启感知技术新纪元
  • 2026年北京代理记账报税机构怎么选?资深财务顾问的6个判断维度 - 优质品牌商家
  • 润滑油价格哪个合理? - 中媒介
  • Unity开发核心:向量运算与坐标系转换实战指南
  • R语言mice包处理数据缺失值的原理与实践
  • 汽车零部件降尘试验箱 整车电子沙尘可靠性测试
  • 2026年全国公寓组合床厂家推荐选购相关知识科普 - 李lixpi
  • 从BI到AI:企业数据底座的演进与重构
  • Kimi K3 开放权重后,我更确定:AI 编程的瓶颈已经不是模型
  • 全国售后服务响应快的包灌装设备服务商哪家? - 中媒介
  • Windows安卓子系统(WSA)开发指南:让安卓应用在Windows 11上完美运行
  • 2024下半年必装的AI搜索工具清单:仅剩最后47个免费API额度,速领技术人专属通道