YOLO多版本垃圾检测项目详解:源码结构、技术路线、训练指标与PyQt5功能
2026/9/12 21:08:45 网站建设 项目流程

YOLO多版本垃圾检测项目详解:源码结构、技术路线、训练指标与PyQt5功能

大家好,我是孔一学长。

这篇文章完整拆解一套YOLO多版本垃圾检测识别项目。项目包含YOLOv8、YOLO11、YOLO26、YOLO11+CBAM四个版本,训练目标为37类生活垃圾与常见废弃物,并使用PyQt5实现单图、批量图片、视频、摄像头检测以及CSV结果保存。

先看运行效果

鸡蛋壳测试中,左侧具体类别为“鸡蛋壳”,垃圾类别为“厨余垃圾”,下方两条记录也都带有厨余垃圾字段。

换成香蕉皮后,两处显示会一起更新。先看这两张图,可以直接确认细分类、垃圾大类和表格记录已经同步,而不只是检测框能正常绘制。

完整运行演示:

https://www.bilibili.com/video/BV1n3YM6CEVo/

视频使用YOLO11界面,展示单图、批量、视频、摄像头、四分类字段和结果保存。YOLOv8、YOLO26、YOLO11+CBAM保留同样的主要界面流程,各自加载对应权重。

这组结果来自37类检测之后新增的厨余、有害、可回收、其他垃圾映射。下面再展开项目功能、源码文件、技术路线、数据训练、验证指标和版本边界;四分类是本次重点,但不是全文唯一主题。

1. 项目概览与系统功能

完整处理链路是:输入图片、文件夹、视频或摄像头画面,完成预处理与YOLO推理,输出目标框、具体类别、置信度和坐标,再把类别ID映射为垃圾大类,最后同步写入结果栏、明细表与CSV。

四个模型版本使用相同的数据划分和主要界面流程,但各自保留代码、权重、训练记录与独立验证指标。这样既可以直接运行某个版本,也能做多版本比较或注意力机制改进分析。

2. 技术路线先定义两层分类的边界

模型的类别空间仍是37类细分类。四分类属于业务层,不能直接覆盖模型输出,否则会丢失目标的具体名称。

层级数据来源示例写入位置
细分类模型类别ID与名称鸡蛋壳、香蕉皮、温度计检测框、结果栏、表格
垃圾大类waste_category.py映射厨余、有害、可回收、其他结果栏、表格、CSV

映射表以类别ID为键,查询函数先把输入转换为整数;转换失败或键不存在时,回退为“其他垃圾”。核心形式如下:

CLASS_TO_WASTE_CATEGORY={1:"厨余垃圾",# 鸡蛋壳12:"有害垃圾",# 温度计17:"可回收物",# 报纸36:"其他垃圾",# 口罩}defget_waste_category(class_id):try:normalized_id=int(class_id)except(TypeError,ValueError):return"其他垃圾"returnCLASS_TO_WASTE_CATEGORY.get(normalized_id,"其他垃圾")

实际文件保存了37个类别的完整映射,这里只保留四个代表项说明结构。

3. 在结果记录生成时加入垃圾大类

main.py导入统一函数:

fromwaste_categoryimportget_waste_category

程序解析每个检测框时,结果记录由“序号、文件路径、识别结果、置信度、坐标”扩展为:

[序号, 文件路径, 识别结果, 垃圾类别, 置信度, 坐标位置]

其中垃圾类别直接由get_waste_category(cl)计算。这个位置很关键:单图、批量图片、视频和摄像头最终都汇总到同一种记录结构,所以只需要维护一套映射逻辑。

数据流图中可以重点观察“模型解析”与“界面展示”之间的分类转换。它不改变权重,也不改变模型的37类输出。

4. PyQt5功能怎样与结果记录同步

仅在结果卡片上增加一个Label还不够。用户点击表格中的历史记录时,结果栏也要恢复该行对应的垃圾类别。因此界面改造包含两部分:

self.tableWidget.setHorizontalHeaderLabels(["序号","文件路径","识别结果","垃圾类别","置信度","坐标位置"])

一部分是ui.py新增label_waste_category_titlelabel_waste_category;另一部分是main.py在清空、写入当前检测、点击表格行时同步维护这个字段。CSV直接导出同一份表格数据,不需要额外从字符串二次推断。

这里的关键不是单独增加一个显示控件,而是让四种输入路径、表格回看和CSV保存都复用同一份结果记录,避免不同功能分支出现字段不一致。

5. 运行效果与功能验证

我会分三层验证。

第一层检查映射覆盖:从厨余、有害、可回收、其他垃圾各取至少一个类别ID,确认函数返回值正确,同时测试非法ID的回退。

第二层检查状态同步:打开图片后查看结果栏和表格;点击不同表格行,确认垃圾类别随当前行变化;清空结果后,新增字段也必须被清空。

第三层检查四类输入路径:单图和批量图片先验证离散结果,再测试视频和摄像头连续帧,避免某个分支仍在构造旧长度的记录列表。

验证点预期结果
鸡蛋壳、香蕉皮厨余垃圾
温度计、灯泡、药有害垃圾
水杯、报纸、易拉罐可回收物
口罩、餐巾纸其他垃圾
点击表格行结果栏垃圾类别与当前行一致
保存CSV独立保留“识别结果”和“垃圾类别”两列

6. 数据集、训练参数与四版本指标

四分类改造发生在业务层,因此没有拿界面功能替代模型验证。项目仍保留37类数据、训练记录和四版最佳权重的独立结果。

训练端从myvoc.yaml读取类别和数据路径,图像进入模型前完成缩放、Letterbox补边、颜色转换与归一化;训练集还使用翻转、颜色扰动等增强扩展场景变化。YOLO主干与检测头负责提取和融合特征,train.py完成训练,val.pyruns中的结果文件负责独立验证,之后才由main.py加载权重进入PyQt5推理链路。

清洗后原始图像为3462张,增强后为4720张,划分为4024张训练图、348张验证图、348张测试图。输入尺寸640,batch 16,优化器SGD,初始学习率0.01,四个版本都完成100轮训练。

版本PrecisionRecallmAP50mAP50-95
YOLOv80.92970.88730.93480.6773
YOLO110.89000.90230.92540.6927
YOLO260.90030.90460.93250.7151
YOLO11+CBAM0.88710.89220.94190.7046

YOLO26的mAP50-95最高,YOLO11+CBAM的mAP50最高,YOLOv8的Precision最高。CBAM版相对YOLO11的mAP50-95增加约0.01191,参数量增加610。上述差异只针对当前数据与训练配置。

7. 项目文件、运行入口与适用边界

理解四分类功能建议先看waste_category.pymain.pyui.py;复核训练则看myvoc.yamltrain.pyval.pyruns

conda create-ngarbage-yolopython=3.11-yconda activate garbage-yolo pipinstall-rrequirements.txt python main.py

加载现成权重可在普通电脑演示,重新训练更适合使用NVIDIA GPU。若新增或重排模型类别,必须同步检查类别ID与四分类映射,不能只改中文名称。

项目代码获取

当前项目已整理四个版本的源码、4720张增强后数据、训练权重、完整runs、PyQt5界面、测试素材和使用说明。项目资料入口:

https://smallerkong.com/s/cs-yolo-garbage-416814

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询