厨余垃圾检测数据集 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.yaml
train: ./images/train
val: ./images/val

nc: 4
names: ['可回收垃圾', '其他垃圾', '厨余垃圾', '有害垃圾']

💡 注意: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. 安装依赖

pip install ultralytics opencv-python torch torchvision scikit-learn

📄 二、dataset.yaml 配置文件

⚠️ 建议使用英文类别名(避免部分系统编码问题),但 YOLOv8 支持中文。

# dataset.yaml
train: ./images/train
val: ./images/val

nc: 4
names: ['recyclable', 'residual', 'organic', 'hazardous']
# 或使用中文(确保终端支持 UTF-8):
# names: ['可回收垃圾', '其他垃圾', '厨余垃圾', '有害垃圾']

🔁 类别映射说明

  • 0 → recyclable(可回收垃圾)
  • 1 → residual(其他垃圾)
  • 2 → organic(厨余垃圾)
  • 3 → hazardous(有害垃圾)

🚀 三、YOLOv8 训练代码(train.py

# train.py
from ultralytics import YOLO
import torch

def main():
    device = 'cuda' if torch.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.py
from ultralytics import YOLO
import cv2

# 加载最佳模型
model = YOLO('runs/detect/garbage_yolov8s_640/weights/best.pt')

def detect_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()

def detect_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.py
from ultralytics import YOLO

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.5
class_names = ['recyclable', 'residual', 'organic', 'hazardous']
for i, name in enumerate(class_names):
    ap50 = metrics.box.ap50[i] if hasattr(metrics.box, 'ap50') else 0.0
    print(f"{name:<12}: AP@0.5 = {ap50:.4f}")

# 保存评估结果
with open("evaluation_results.txt", "w", encoding='utf-8') as f:
    f.write(f"mAP@0.5: {metrics.box.map50:.4f}\n")
    f.write(f"mAP@0.5:0.95: {metrics.box.map:.4f}\n")
    for i, name in enumerate(class_names):
        ap50 = metrics.box.ap50[i] if hasattr(metrics.box, 'ap50') else 0.0
        f.write(f"{name}: AP@0.5 = {ap50:.4f}\n")
print("📝 评估结果已保存至 evaluation_results.txt")

🧩 六、自动划分脚本(如需从原始数据划分)

# utils/split_dataset.py
import os
import random
import shutil

# 假设原始数据在 raw_images/ 和 raw_labels/
raw_img_dir = 'raw_images'
raw_lbl_dir = 'raw_labels'

# 获取所有图像文件(确保 .jpg 和 .txt 一一对应)
all_files = [f.replace('.jpg', '') for f in os.listdir(raw_img_dir) if f.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:]

# 创建目录
for split in ['train', 'val']:
    os.makedirs(f'images/{split}', exist_ok=True)
    os.makedirs(f'labels/{split}', exist_ok=True)

# 复制文件
for f in train_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')

for f in val_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.py
from ultralytics import YOLO

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 加速

该系统可助力智慧环保建设,推动垃圾分类智能化落地。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐