深度学习框架YOLOV8模型训练厨余垃圾检测数据集__(实为 __四类生活垃圾检测数据集 构建基于深度学习YOLOV8厨余垃圾检测系统 智慧环保建设,推动垃圾分类智能化落地
深度学习框架YOLOV8模型训练厨余垃圾检测数据集__(实为 __四类生活垃圾检测数据集 构建基于深度学习YOLOV8厨余垃圾检测系统 智慧环保建设,推动垃圾分类智能化落地
厨余垃圾检测数据集 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 加速
该系统可助力智慧环保建设,推动垃圾分类智能化落地。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)