一、数据集概览
| 项目 | 内容 |
|---|---|
| 标注格式 | 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 张 |
二、目录结构
datasets/
├── images/
│ ├── train/ # 训练集图片(10,319 张)
│ ├── val/ # 验证集图片(1,478 张)
│ └── test/ # 测试集图片(2,964 张)
├── labels/
│ ├── train/ # 训练集 YOLO 标注
│ ├── val/ # 验证集 YOLO 标注
│ └── test/ # 测试集 YOLO 标注
├── garbage.yaml # YOLO 训练配置文件
├── classify_rule.json # 四大类 → 44 细类的映射规则
├── train_classes.txt # 44 个细类名称列表(每行一类)
└── README.md
三、垃圾分类体系
依据国内垃圾分类标准,数据集将物品分为 4 个大类 ,共 44 个细类:
| 大类 | 细类数 | 细类列表 |
|---|---|---|
| 可回收物 | 26 | 充电宝、包、洗护用品、塑料玩具、塑料器皿、塑料衣架、玻璃器皿、金属器皿、快递纸袋、插头电线、旧衣服、易拉罐、枕头、毛绒玩具、鞋、砧板、纸盒纸箱、调料瓶、酒瓶、金属食品罐、金属厨具、锅、食用油桶、饮料瓶、书籍纸张、垃圾桶 |
| 厨余垃圾 | 7 | 剩饭剩菜、大骨头、果皮果肉、茶叶渣、菜帮菜叶、蛋壳、鱼骨 |
| 有害垃圾 | 3 | 干电池、软膏、过期药物 |
| 其他垃圾 | 8 | 一次性快餐盒、污损塑料、烟蒂、牙签、花盆、陶瓷器皿、筷子、污损用纸 |
四、YOLO 标注格式
每张图片对应一个同名 .txt 文件,每行一个目标框:
class_id x_center y_center width height
所有坐标均归一化 到 [0, 1],class_id 为 0-indexed,对应 train_classes.txt 中的行序号。
示例:
6 0.410572 0.421875 0.596188 0.337891
class_id=6 对应 train_classes.txt 第 7 行(塑料器皿),坐标为中心点 + 宽高的归一化值。
五、YOLO 训练配置(garbage.yaml)
path: datasets # 相对项目根目录的数据集路径
train: images/train
val: images/val
test: images/test
nc: 44
names:
- 一次性快餐盒
- 书籍纸张
# ... 共 44 类
注意: 训练命令须在项目根目录 下执行,
path: datasets基于当前工作目录解析。
六、快速开始训练
# 在项目根目录执行
yolo train data=datasets/garbage.yaml model=weights/yolov8n.pt epochs=100 imgsz=640 batch=16
建议将预训练权重放在 weights/ 目录下以避免重复下载:
yolov8n.pt(nano,速度最快)yolov8s.pt(small,精度更高)
训练结果保存在 runs/detect/train*/ 目录。
七、推理后类别映射
模型输出的是 44 个细类,可通过 classify_rule.json 汇总为 4 大类:
import json
with open("datasets/classify_rule.json", encoding="utf-8") as f:
rules = json.load(f)
# 构建细类 → 大类反向索引
label_to_category = {
label: cat
for cat, labels in rules.items()
for label in labels
}
# 示例:label_to_category["饮料瓶"] => "可回收物"

