厨余垃圾检测数据集 14964张 4类
yolo格式
【垃圾四类检测YOLO数据集】共【14964】张,按照8比2划分为训练集和验证集,其中训练集【11971】张,验证集【2993】张,模型分为【4】类,分类为:【‘可回收垃圾’, ‘其他垃圾’, ‘厨余垃圾’, ‘有害垃圾’】
每个类别的图片数量和标注框数量如下:
可回收垃圾: 图片数【7183】,标注框数【9229】
其他垃圾: 图片数【5527】,标注框数【9121】
厨余垃圾: 图片数【3449】,标注框数【5257】
有害垃圾: 图片数【1538】,标注框数【1983】
1
以下是厨余垃圾检测数据集(实为四类生活垃圾检测数据集)的详细信息汇总表,采用清晰结构化表格呈现,便于用于项目文档、模型训练说明或技术报告:
🗑️ 四类生活垃圾检测数据集信息表(YOLO 格式)
| 项目 | 内容 |
|---|---|
| 数据集名称 | 生活垃圾四分类目标检测数据集(YOLO格式) |
| 总图像数量 | 14,964 张 JPG 图像 |
| 标注格式 | YOLO.txt(每张图对应一个标签文件,坐标归一化) |
| 类别数量 | 4 类 |
| 数据划分比例 | 训练集 : 验证集 =8 : 2 |
| 训练集数量 | 11,971 张 |
| 验证集数量 | 2,993 张 |
| 测试集 | 未单独提供(可从验证集中划分或自行预留) |
📊 各类别分布统计表
| 类别(中文) | 类别索引(YOLO class_id) | 图片数量(含该类的图像数) | 标注框总数(实例数) | 占总图像比例 |
|---|---|---|---|---|
| 可回收垃圾 | 0 | 7,183 | 9,229 | ≈48.0% |
| 其他垃圾 | 1 | 5,527 | 9,121 | ≈36.9% |
| 厨余垃圾 | 2 | 3,449 | 5,257 | ≈23.1% |
| 有害垃圾 | 3 | 1,538 | 1,983 | ≈10.3% |
⚠️ 注:
- 图片数量 ≠ 总图像数之和(因单张图像可能包含多个类别,存在重叠)
- 总图像数为14,964,但各类别图片数之和为7,183 + 5,527 + 3,449 + 1,538 = 17,697,表明约2,733 张图像包含多类垃圾
📁 推荐目录结构
garbage_detection_dataset/ ├── images/ │ ├── train/# 11,971 张 .jpg│ └── val/# 2,993 张 .jpg├── labels/ │ ├── train/# 11,971 个 .txt│ └── val/# 2,993 个 .txt└── dataset.yaml# YOLO 配置文件📄dataset.yaml示例
# dataset.yamltrain:./images/trainval:./images/valnc:4names:['可回收垃圾','其他垃圾','厨余垃圾','有害垃圾']💡 注意:Ultralytics YOLO 支持中文类别名,但建议在部署时使用英文(如
recyclable,residual,organic,hazardous)以避免编码问题。
🔍 数据集特点与挑战
| 特点 | 说明 |
|---|---|
| 多类别共现 | 单图常含多种垃圾(如“厨余+其他”),适合多标签检测 |
| 类别不平衡 | “有害垃圾”样本最少(仅 1,538 张图,1,983 个框),需关注召回率 |
| 背景复杂 | 拍摄场景多样(垃圾桶、街道、厨房等),光照/遮挡变化大 |
| 形态多样 | 同一类垃圾外观差异大(如“可回收垃圾”含塑料瓶、纸箱、金属罐等) |
✅ 适用场景
- 智能垃圾分类机器人
- 垃圾投放监控系统
- 城市环卫 AI 管理平台
- 高校课程设计 / 毕业设计 / AI 竞赛(如天池、Kaggle)
该数据集是构建智能垃圾分类视觉系统的理想选择,支持高精度四分类目标检测,助力绿色城市与可持续发展。
以下是针对四类生活垃圾检测数据集(14,964 张图像,YOLO 格式,4 类:可回收垃圾、其他垃圾、厨余垃圾、有害垃圾)的完整YOLOv8 训练系统代码,包含数据配置、训练、验证、推理、评估及部署全流程。
✅ 一、前提条件
1. 数据目录结构(已按 8:2 划分)
garbage_detection_dataset/ ├── images/ │ ├── train/# 11,971 张 .jpg│ └── val/# 2,993 张 .jpg├── labels/ │ ├── train/# 11,971 个 .txt│ └── val/# 2,993 个 .txt└── dataset.yaml# 配置文件💡 若你尚未划分,请使用文末提供的自动划分脚本。
2. 安装依赖
pipinstallultralytics opencv-python torch torchvision scikit-learn📄 二、dataset.yaml配置文件
⚠️建议使用英文类别名(避免部分系统编码问题),但 YOLOv8 支持中文。
# dataset.yamltrain:./images/trainval:./images/valnc:4names:['recyclable','residual','organic','hazardous']# 或使用中文(确保终端支持 UTF-8):# names: ['可回收垃圾', '其他垃圾', '厨余垃圾', '有害垃圾']🔁类别映射说明:
0 → recyclable(可回收垃圾)1 → residual(其他垃圾)2 → organic(厨余垃圾)3 → hazardous(有害垃圾)
🚀 三、YOLOv8 训练代码(train.py)
# train.pyfromultralyticsimportYOLOimporttorchdefmain():device='cuda'iftorch.cuda.is_available()else'cpu'print(f"🚀 使用设备:{device}")# 加载预训练模型(推荐 yolov8s,平衡速度与精度)model=YOLO('yolov8s.pt')# 可选: yolov8n (更快), yolov8m (更准)# 开始训练results=model.train(data='dataset.yaml',epochs=100,# 垃圾分类数据量大,100 轮通常足够imgsz=640,# 推荐 640(兼顾细节与速度)batch=32,# 根据 GPU 显存调整(RTX 3090 可设 64)name='garbage_yolov8s_640',optimizer='AdamW',lr0=0.001,lrf=0.01,weight_decay=0.0005,warmup_epochs=3,# 数据增强(针对复杂背景优化)hsv_h=0.015,# 色调扰动(适应不同光照)hsv_s=0.7,hsv_v=0.4,degrees=10.0,# 轻微旋转translate=0.1,scale=0.5,fliplr=0.5,# 左右翻转(垃圾无方向性)mosaic=0.9,mixup=0.2,copy_paste=0.3,# 提升小目标(如有害垃圾电池)检测close_mosaic=10,device=device,workers=8,save=True,save_period=10,exist_ok=False,verbose=True)if__name__=='__main__':main()💡为什么用
copy_paste=0.3?
“有害垃圾”样本少且目标小(如电池、药片),Copy-Paste 可合成更多正样本,显著提升召回率。
🔍 四、推理与可视化(detect.py)
# detect.pyfromultralyticsimportYOLOimportcv2# 加载最佳模型model=YOLO('runs/detect/garbage_yolov8s_640/weights/best.pt')defdetect_image(image_path,conf_thres=0.3):"""检测单张图像并显示结果"""results=model(image_path,conf=conf_thres)annotated=results[0].plot()# 自动绘制框 + 中文/英文标签cv2.imshow("Garbage Detection",annotated)cv2.waitKey(0)cv2.destroyAllWindows()defdetect_folder(input_folder,output_folder="output"):"""批量检测文件夹并保存结果"""model.predict(source=input_folder,conf=0.3,save=True,project=output_folder,name="results",exist_ok=True)print(f"✅ 检测结果已保存至:{output_folder}/results/")📊 五、验证集评估(evaluate.py)
# evaluate.pyfromultralyticsimportYOLO model=YOLO('runs/detect/garbage_yolov8s_640/weights/best.pt')metrics=model.val(data='dataset.yaml')print("="*60)print("📊 验证集性能报告:")print(f"mAP@0.5 (Box):{metrics.box.map50:.4f}")print(f"mAP@0.5:0.95:{metrics.box.map:.4f}")print(f"Precision:{metrics.box.mp:.4f}")print(f"Recall:{metrics.box.mr:.4f}")print("="*60)# 按类别输出 AP@0.5class_names=['recyclable','residual','organic','hazardous']fori,nameinenumerate(class_names):ap50=metrics.box.ap50[i]ifhasattr(metrics.box,'ap50')else0.0print(f"{name:<12}: AP@0.5 ={ap50:.4f}")# 保存评估结果withopen("evaluation_results.txt","w",encoding='utf-8')asf:f.write(f"mAP@0.5:{metrics.box.map50:.4f}\n")f.write(f"mAP@0.5:0.95:{metrics.box.map:.4f}\n")fori,nameinenumerate(class_names):ap50=metrics.box.ap50[i]ifhasattr(metrics.box,'ap50')else0.0f.write(f"{name}: AP@0.5 ={ap50:.4f}\n")print("📝 评估结果已保存至 evaluation_results.txt")🧩 六、自动划分脚本(如需从原始数据划分)
# utils/split_dataset.pyimportosimportrandomimportshutil# 假设原始数据在 raw_images/ 和 raw_labels/raw_img_dir='raw_images'raw_lbl_dir='raw_labels'# 获取所有图像文件(确保 .jpg 和 .txt 一一对应)all_files=[f.replace('.jpg','')forfinos.listdir(raw_img_dir)iff.endswith('.jpg')]random.seed(42)random.shuffle(all_files)split_idx=int(0.8*len(all_files))train_files=all_files[:split_idx]val_files=all_files[split_idx:]# 创建目录forsplitin['train','val']:os.makedirs(f'images/{split}',exist_ok=True)os.makedirs(f'labels/{split}',exist_ok=True)# 复制文件forfintrain_files:shutil.copy(f'{raw_img_dir}/{f}.jpg',f'images/train/{f}.jpg')shutil.copy(f'{raw_lbl_dir}/{f}.txt',f'labels/train/{f}.txt')forfinval_files:shutil.copy(f'{raw_img_dir}/{f}.jpg',f'images/val/{f}.jpg')shutil.copy(f'{raw_lbl_dir}/{f}.txt',f'labels/val/{f}.txt')print(f"✅ 划分完成: 训练集{len(train_files)}张, 验证集{len(val_files)}张")📦 七、模型导出(用于部署)
# export_model.pyfromultralyticsimportYOLO model=YOLO('best.pt')# 导出为 ONNX(用于 CPU/Web)model.export(format='onnx',imgsz=640,simplify=True)# 导出为 TensorRT(用于 Jetson/NVIDIA GPU)model.export(format='engine',imgsz=640,half=True)# FP16 加速该系统可助力智慧环保建设,推动垃圾分类智能化落地。