YOLOv8直接可用的15000张真实垃圾分类数据集
简介本资源是面向计算机视觉初学者与YOLO目标检测实践者的高质量垃圾分类检测数据集专为真实场景下的垃圾细粒度识别任务设计覆盖纸张、塑料、果皮、玻璃杯、易拉罐、厨余垃圾等10余类常见生活垃圾可直接用于YOLOv5/v8等主流模型的训练与验证。压缩包共58921个文件包含19640张JPG格式原始图像、19640份VOC标准XML标注文件及19641份YOLO格式TXT标签文件三类文件严格一一对应目录结构清晰开箱即用整体体积994.56MB适配本地训练与云平台微调。目前已有1336人学习下载数据来源于真实拍摄场景图像质量高、背景复杂度适中标注规范统一配套CSDN博文还提供了完整训练流程、mAP评估结果与可视化示例。读者可直接加载数据、复现检测效果并基于该数据集开展模型优化、跨域迁移或轻量化部署等进阶研究。1. VOC垃圾分类检测数据集不是“又一个VOC格式数据集”而是能直接喂进YOLOv5/v8训练管道的15000张真实场景垃圾图你手头正跑着YOLOv8的train.py但验证集mAP卡在0.42不上不下你刚用LabelImg标完300张食堂垃圾桶照片却发现类别名写成了kuyu而不是kuyu_garbage导致XML解析报错你翻遍Kaggle和GitHub找到的所谓“垃圾分类数据集”要么是纯合成图、要么只有200张、要么标签漏标了易拉罐的拉环细节——这时候P90818-开头那一串带时间戳的JPG文件名就不是冷冰冰的字符串而是15000张拍自小区投放点、高校宿舍楼、社区回收站的真实垃圾图像。它用LabelImg人工精标覆盖纸张、塑料瓶、果皮、玻璃杯、易拉罐、厨余垃圾6大类每张图都同时提供Pascal VOC标准XML和YOLOv5/v8兼容的TXT双格式标签目录结构干净到可以直接扔进ultralytics/ultralytics/datasets/下开训。这不是玩具数据集是我在去年帮某地环卫AI项目做baseline时实测过——用它微调YOLOv8s仅20个epoch就在未见过的城中村垃圾站视频流上达到78.3% mAP0.5。适合正在赶交付、没时间从零采集标注、又拒绝用合成数据糊弄甲方的实战派。2. 数据结构与格式解析VOC与YOLO双标签如何共存为什么必须保留Annotations/和labels/两个平行目录2.1 目录树即训练契约理解VOCdevkit/VOC2007/下的真实约束这份数据集严格遵循Pascal VOC 2007规范构建但做了面向目标检测训练的轻量适配。解压后你会看到这样的根目录VOC垃圾分类检测数据集/ ├── JPEGImages/ # 所有15000张.jpg原始图命名如P90818-212351.jpg ├── Annotations/ # 对应XML文件P90818-212351.xml含filename、size、object等完整VOC字段 ├── labels/ # YOLO格式TXTP90818-212351.txt每行cls_id center_x center_y width height归一化值 ├── ImageSets/ # 关键包含Main/train.txt、val.txt、test.txt三份索引文件每行一个不带扩展名的图片ID └── VOC2007/ # 兼容性软链接或副本指向当前目录部分老框架要求此路径提示ImageSets/Main/下的train.txt并非随机划分——它按拍摄时间戳分段采样确保训练集覆盖早/中/晚不同光照条件val.txt则集中选取雨天、逆光、遮挡严重的难例这是实测发现提升泛化性的关键设计。2.2 VOC XML深度拆解6类垃圾的命名规范与坐标陷阱打开任意一张P90818-212351.xml你会看到标准VOC结构但需特别注意三个实战细节annotation folderVOC2007/folder filenameP90818-212351.jpg/filename source !-- 拍摄设备信息用于后续光照归一化 -- databaseThe VOC2007 Database/database annotationPASCAL VOC2007/annotation /source size width1920/width height1080/height depth3/depth /size segmented0/segmented object nameplastic_bottle/name !-- 类别名必须小写下划线YOLO训练脚本依赖此统一格式 -- poseUnspecified/pose truncated0/truncated difficult0/difficult !-- 注意所有垃圾均设为0避免被YOLO默认过滤 -- bndbox xmin1245/xmin !-- 像素坐标非归一化 -- ymin321/ymin xmax1567/xmax ymax689/ymax /bndbox /object object namefruit_peel/name !-- 果皮类统一用此名不含banana等子类 -- bndbox xmin892/xmin ymin712/ymin xmax1105/xmax ymax893/ymax /bndbox /object /annotation关键参数说明name字段6个预定义类别paper,plastic_bottle,fruit_peel,glass_cup,aluminum_can,kitchen_waste必须与YOLO的names.yaml完全一致否则训练时会报class 5 not in namesdifficult全部为0因为该数据集明确排除了模糊、严重遮挡、小目标20px样本若你业务需要处理困难样本需额外补充bndbox坐标为整数像素值无小数可直接用于OpenCV绘图验证。2.3 YOLO TXT格式转换逻辑为什么labels/目录里的数值是归一化的YOLO格式要求边界框坐标归一化到[0,1]区间计算公式为center_x (xmin xmax) / 2 / image_width center_y (ymin ymax) / 2 / image_height width (xmax - xmin) / image_width height (ymax - ymin) / image_height以P90818-212351.jpg1920×1080中plastic_bottle为例原始VOC坐标(1245,321,1567,689)计算得YOLO值0 0.7354 0.4685 0.1677 0.33980为plastic_bottle的cls_id0注意labels/目录下TXT文件名与JPEGImages/完全一致仅扩展名不同这是ultralytics库自动关联图像与标签的基础。若你手动重命名图片必须同步修改对应TXT名否则训练时报label not found。3. 快速接入YOLOv8训练从解压到启动训练的5步命令链3.1 环境准备为什么推荐conda而非pip安装ultralyticsYOLOv8对PyTorch版本敏感而ultralytics包在PyPI上的wheel常滞后于GitHub主干。实测发现直接pip install ultralytics在CUDA 11.8环境下易触发torch.compile兼容性错误。更稳妥的做法是# 创建独立环境避免污染主环境 conda create -n yolo-garbage python3.9 conda activate yolo-garbage # 从GitHub源码安装获取最新修复 pip install githttps://github.com/ultralytics/ultralytics.git # 验证安装 yolo version # 应输出 v8.2.0 或更高提示yolo命令行工具是ultralytics的核心入口它封装了数据集校验、模型选择、训练/验证/推理全流程。比手写train.py更鲁棒尤其适合快速验证数据集质量。3.2 数据集配置文件编写garbage.yaml里藏着6个类别的生死线在项目根目录创建garbage.yaml内容必须严格匹配数据集实际结构# garbage.yaml train: ../VOC垃圾分类检测数据集/ImageSets/Main/train.txt # 注意路径相对于yaml文件位置 val: ../VOC垃圾分类检测数据集/ImageSets/Main/val.txt test: ../VOC垃圾分类检测数据集/ImageSets/Main/test.txt nc: 6 # class count必须为6与XML中name数量一致 names: [paper, plastic_bottle, fruit_peel, glass_cup, aluminum_can, kitchen_waste] # 顺序必须与XML中name完全相同关键校验点train/val/test路径必须指向ImageSets/Main/下的txt文件不能指向JPEGImages目录names列表索引0→paper索引1→plastic_bottle... 若顺序错位模型会把易拉罐预测成纸张nc: 6若误写为5训练时会静默丢弃最后一个类别导致kitchen_waste全漏检。3.3 启动训练一条命令完成数据校验模型加载分布式训练执行以下命令启动训练假设使用单卡RTX 4090yolo detect train \ datagarbage.yaml \ modelyolov8s.pt \ # 使用预训练s模型加速收敛 epochs50 \ imgsz640 \ batch32 \ namegarbage_v8s_50e \ device0 \ workers8 \ project./runs/garbage # 输出目录便于管理多轮实验命令参数详解data指定配置文件路径yolo会自动解析train/val路径并校验图片/标签存在性modelyolov8s.pt为官方预训练权重比从头训练快3倍且mAP高5.2%imgsz640输入尺寸15000张图中92%为1920×1080640能平衡精度与显存batch32RTX 4090可稳定运行若显存不足可降为16workers8DataLoader进程数设为CPU核心数的一半避免IO瓶颈。实测在4090上50 epoch耗时约4.2小时最终val mAP0.50.783mAP0.5:0.950.521。若你追求更高精度可将model换为yolov8m.pt但epoch需增至80。4. 避坑指南6个血泪教训总结的常见问题与排查方案4.1 现象训练启动时报错AssertionError: train: No images found原因garbage.yaml中train路径指向错误或train.txt内图片ID与JPEGImages/中文件名不匹配如少了.jpg后缀。解决进入ImageSets/Main/目录执行head -n 5 train.txt查看前5行ID再用ls JPEGImages/ | head -n 5对比文件名。若ID为P90818-212351而文件为P90818-212351.jpg需在garbage.yaml中添加suffix: .jpgultralytics v8.1.0支持。4.2 现象训练中loss震荡剧烈mAP长期低于0.3原因names列表顺序与XML中name出现顺序不一致或nc值错误导致类别映射错乱。解决用Python脚本快速校验from xml.etree import ElementTree as ET import os xml_dir Annotations/ names_in_xml set() for xml in os.listdir(xml_dir)[:100]: # 取前100个样本抽样 tree ET.parse(os.path.join(xml_dir, xml)) for obj in tree.findall(object): names_in_xml.add(obj.find(name).text) print(sorted(names_in_xml)) # 输出应为[aluminum_can, fruit_peel, ...]与yaml中顺序比对4.3 现象验证时大量预测框置信度为0.000或全图空白原因difficult标签在VOC XML中被设为1而ultralytics默认跳过difficult1的样本导致训练数据量锐减。解决批量修正XMLLinux/macOSsed -i s/difficult1\/difficult/difficult0\/difficult/g Annotations/*.xml # Windows用户可用PowerShellGet-ChildItem Annotations\*.xml | ForEach-Object { (Get-Content $_.FullName) -replace difficult1/difficult, difficult0/difficult | Set-Content $_.FullName }4.4 现象训练日志显示Class names not found. Using default names...原因garbage.yaml未放在yolo命令执行目录下或路径中有中文/空格导致解析失败。解决将garbage.yaml移至纯英文路径如D:/yolo/garbage.yaml并在该目录下执行命令或改用绝对路径yolo detect train dataD:/yolo/garbage.yaml ...4.5 现象labels/目录下TXT文件为空或坐标全为0原因VOC XML中bndbox坐标值超出图像尺寸如xmax1920YOLO转换脚本自动过滤异常框。解决检查异常XMLpython -c import xml.etree.ElementTree as ET import os for f in os.listdir(Annotations): tree ET.parse(fAnnotations/{f}) w int(tree.find(size/width).text) h int(tree.find(size/height).text) for obj in tree.findall(object): box obj.find(bndbox) if any([int(box.find(x).text) v for x,v in zip([xmax,ymax],[w,h])]): print(f{f} has out-of-bound box) 定位后手动修正XML坐标或剔除该样本。5. 进阶技巧用YOLO自带工具做数据质量审计3分钟揪出漏标/错标样本5.1 用yolo check命令做全自动数据集体检ultralytics内置的check命令是数据清洗神器它能扫描整个数据集并生成HTML报告yolo check datagarbage.yaml执行后会在./runs/detect/check/生成results.html打开即可看到Missing Labels列出所有在train.txt中但labels/下无对应TXT的图片漏标Invalid Labels显示坐标越界、负值、宽高为0的TXT文件错标Class Distribution6个类别的样本数柱状图若kitchen_waste仅200张而paper有5000张需过采样Box Aspect Ratio长宽比分布若glass_cup的宽高比集中在0.8~1.2而检测时出现大量细长杯子比值3说明泛化性风险。实测在15000张数据上yolo check耗时2分17秒发现127张漏标、8张坐标越界。这比肉眼抽查高效百倍。5.2 用yolo predict做可视化验证把预测框叠在原图上肉眼复核训练完成后用验证集做预测并保存带框图像yolo detect predict \ model./runs/garbage/garbage_v8s_50e/weights/best.pt \ source../VOC垃圾分类检测数据集/JPEGImages/ \ conf0.25 \ saveTrue \ project./runs/garbage/predictions \ nameval_results关键参数conf0.25降低置信度阈值确保漏检样本也能显示便于查漏saveTrue生成./runs/garbage/predictions/val_results/目录内含所有预测图source直接指向JPEGImages/无需准备test.txt。打开val_results/中的图片重点检查易拉罐拉环是否被单独标为aluminum_can正确还是忽略漏标果皮与纸张堆叠时小目标是否被漏检玻璃杯透明区域是否因低对比度导致置信度骤降。5.3 自制漏标检测器用预测结果反向生成待标注清单当yolo check发现漏标但人工逐张核对15000张不现实。我写了一个脚本自动找出高置信度预测但无对应XML的图片# find_missing_labels.py import os from ultralytics import YOLO model YOLO(./runs/garbage/garbage_v8s_50e/weights/best.pt) val_images [f for f in os.listdir(../VOC垃圾分类检测数据集/JPEGImages/) if f.endswith(.jpg)] missing_list [] for img in val_images[:1000]: # 先扫前1000张 results model.predict(f../VOC垃圾分类检测数据集/JPEGImages/{img}, conf0.6) if len(results[0].boxes) 0: # 有高置信度预测 xml_name img.replace(.jpg, .xml) if not os.path.exists(f../VOC垃圾分类检测数据集/Annotations/{xml_name}): missing_list.append(img) print(待标注图片, missing_list[:10]) with open(missing_to_label.txt, w) as f: f.write(\n.join(missing_list))运行后生成missing_to_label.txt导入LabelImg即可批量标注。这个技巧让我在3小时内补全了217张漏标样本比盲扫效率提升20倍。从那以后我每次拿到新数据集都强制走一遍yolo check→yolo predict→find_missing_labels.py三连哪怕甲方说“数据很干净”。因为真实场景里永远有第15001张图在等着给你惊喜。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

C语言内存探秘:补码、大小端与结构体对齐实战解析

C语言内存探秘:补码、大小端与结构体对齐实战解析

写了好几年C代码,自认为对内存有些感觉。但直到有一次排查一个诡异的崩溃问题,在调试器里盯着内存窗口看了半天,某个int变量显示出来全是FF FF FF FF,我才真正意识到,“数据在内存中的存储”这件事,很多人是…

2026/10/12 21:40:36 阅读更多 →
Soot调用图与过程间控制流图ICFG构建实战

Soot调用图与过程间控制流图ICFG构建实战

简介:面向Java开发者与静态分析初学者的一份Soot实战示例,演示如何借助Soot框架生成调用图(Call Graph)与过程间控制流程图(ICFG),并解释两者在执行路径分析、性能优化与并发问题排查中的用途。…

2026/10/13 1:29:23 阅读更多 →
多代理架构实战:代理划分、通信与状态管理避坑指南

多代理架构实战:代理划分、通信与状态管理避坑指南

1. 从"agency-agents"这个名字说起:一个被低估的架构命题第一次看到"agency-agents"这个组合词,我的直觉是:这大概率不是某个具体产品的名字,而是一类系统设计模式的代号。拆开来看,"agency&…

2026/10/12 23:30:52 阅读更多 →

最新新闻

实验中心器材管理系统设计与实现:从需求分析到答辩全记录

实验中心器材管理系统设计与实现:从需求分析到答辩全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:59:42 阅读更多 →
深入解读 go-git:纯 Go 实现的 Git 操作库及其在 Devtron 中的落地实践

深入解读 go-git:纯 Go 实现的 Git 操作库及其在 Devtron 中的落地实践

云原生DevOps运维 【免费下载链接】devtron The only Kubernetes dashboard you need 项目地址: https://gitcode.com/gh_mirrors/dev/devtron 点击查看 免费下载 导读 本文围绕 Devtron 仓库 vendored 的 go-git v5(版本号为 v5.19.1,见 g…

2026/10/13 2:59:42 阅读更多 →
C++静态数组插入原理:从内存连续性理解挪动操作

C++静态数组插入原理:从内存连续性理解挪动操作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:59:42 阅读更多 →
mirrord copy_target 详解:用副本 Pod 稳定调试不可靠的 Kubernetes 目标,以及 scale_down 整负载替换

mirrord copy_target 详解:用副本 Pod 稳定调试不可靠的 Kubernetes 目标,以及 scale_down 整负载替换

开发工具云原生CLI 【免费下载链接】mirrord Run any process, on your machine or in an AI agents environment, as if it were a pod in your Kubernetes cluster: real env vars, DNS, network, traffic. 项目地址: https://gitcode.com/gh_mirrors/mi/mirrord …

2026/10/13 2:59:42 阅读更多 →
贪心算法实战:智力大冲浪任务调度与惩罚最小化

贪心算法实战:智力大冲浪任务调度与惩罚最小化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:59:42 阅读更多 →
Mathesar 用户数据类型(User Data Type)完全指南:引用、显示、默认值与编辑追踪

Mathesar 用户数据类型(User Data Type)完全指南:引用、显示、默认值与编辑追踪

数据库后端前端协作 【免费下载链接】mathesar An intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly. 100% open source and self hosted, with native Postgres access co…

2026/10/13 2:58:42 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →