城市街道垃圾数据源城市街道垃圾检测数据集(YOLO)该数据集是城市街道场景下包含3300张街道垃圾图像。该数据集包含塑料瓶、香蕉皮、易拉罐、玻璃瓶等28种垃圾类型。该数据集已进行数据划分为训练集、验证集和测试集。具有完整的txt标注文本和yaml配置文件该数据精度较高。YOLO格式28类3300张”由于这是一个具体的数据资源包我无法直接“发送”文件给您数据准备与目录结构代码帮您快速整理数据。YOLOv8/v5 训练代码直接用于该数据集的模型训练。推理/检测代码训练完成后对街道图片进行垃圾检测。data.yaml 配置文件模板包含28种垃圾类别的定义。 第一步数据集目录结构准备YOLO格式的数据集需要特定的文件夹结构。假设您下载到的图片在 images 文件夹标注在 labels 文件夹请确保结构如下street_garbage_dataset/├── images/│ ├── train/ (存放训练集图片)│ ├── val/ (存放验证集图片)│ └── test/ (存放测试集图片)├── labels/│ ├── train/ (存放对应的txt标注)│ ├── val/│ └── test/└── street_garbage.yaml (配置文件)import osimport shutilimport randomdef split_dataset(base_dir, image_ext‘.jpg’):# 定义路径images_dir os.path.join(base_dir, ‘images’)labels_dir os.path.join(base_dir, ‘labels’)# 创建子目录 for split in [train, val, test]: os.makedirs(os.path.join(images_dir, split), exist_okTrue) os.makedirs(os.path.join(labels_dir, split), exist_okTrue) # 获取所有图片文件名 all_images [f for f in os.listdir(os.path.join(base_dir, images_raw)) if f.endswith(image_ext)] random.shuffle(all_images) total len(all_images) train_size int(total * 0.8) val_size int(total * 0.1) splits { train: all_images[:train_size], val: all_images[train_size:train_sizeval_size], test: all_images[train_sizeval_size:] } for split_name, files in splits.items(): for fname in files: # 移动图片 src_img os.path.join(base_dir, images_raw, fname) dst_img os.path.join(images_dir, split_name, fname) shutil.move(src_img, dst_img) # 移动对应的txt标签 (假设标签文件名与图片名一致仅后缀不同) label_name fname.replace(image_ext, .txt) src_lbl os.path.join(base_dir, labels_raw, label_name) if os.path.exists(src_lbl): dst_lbl os.path.join(labels_dir, split_name, label_name) shutil.move(src_lbl, dst_lbl) print(f数据集划分完成训练集:{len(splits[train])}, 验证集:{len(splits[val])}, 测试集:{len(splits[test])})使用示例将原始数据放在 images_raw 和 labels_raw 中运行split_dataset(‘./street_garbage_dataset’) 第二步创建 data.yaml 配置文件这是YOLO模型识别28种垃圾的关键文件。请创建名为 street_garbage.yaml 的文件。注意由于您未提供具体的28类名称列表我根据常见街道垃圾列举了部分示例塑料瓶、香蕉皮等请您根据实际数据集的 classes.txt 或文档补全剩余的类别名称。street_garbage.yaml数据集根路径 (请修改为您本地的绝对路径)path: /absolute/path/to/street_garbage_dataset # — 修改这里图片子目录train: images/trainval: images/valtest: images/test类别数量nc: 2828种垃圾类别名称 (请根据实际情况补全/修正)names:0: plastic_bottle # 塑料瓶1: banana_peel # 香蕉皮2: aluminum_can # 易拉罐3: glass_bottle # 玻璃瓶4: paper_cup # 纸杯5: plastic_bag # 塑料袋6: cigarette_butt # 烟头7: tissue # 纸巾8: food_wrapper # 食品包装9: straw # 吸管10: cardboard # 纸板11: styrofoam # 泡沫塑料12: metal_cap # 金属盖13: broken_glass # 碎玻璃14: battery # 电池15: mask # 口罩16: umbrella # 雨伞17: shoe # 鞋子18: toy # 玩具19: book # 书本20: leaf # 落叶 (如果是作为垃圾)21: branch # 树枝22: stone # 石块23: cloth # 布料24: tire # 轮胎25: bucket # 桶26: box # 盒子27: other_trash # 其他垃圾⚠️ 请务必核对您的数据集文档确保顺序和名称与txt标注中的数字对应 第三步模型训练代码 (基于 YOLOv8)推荐使用 Ultralytics 的 YOLOv8它对多类别小目标检测效果很好。安装依赖pip install ultralytics训练脚本 (train_model.py)from ultralytics import YOLOdef train_garbage_detector():# 1. 加载预训练模型 (推荐 yolov8n.pt 或 yolov8s.pt速度快且适合移动端部署)# nnano, ssmall, mmedium, llarge, xxlargemodel YOLO(‘yolov8n.pt’)# 2. 开始训练 results model.train( datastreet_garbage.yaml, # 指向上面创建的yaml文件 epochs100, # 训练轮数可根据收敛情况调整 imgsz640, # 输入图片尺寸 batch16, # 批次大小根据显存调整 (显存小可设为8) workers4, # 数据加载线程数 device0, # 使用GPU (0)如果是CPU则改为 cpu projectgarbage_detection, # 项目保存目录 nameexp_street_28classes, # 实验名称 patience20, # 早停耐心值防止过拟合 saveTrue, # 保存检查点 plotsTrue # 生成训练过程图表 ) print(训练完成模型保存在 runs/detect/exp_street_28classes/weights/best.pt)if name ‘main’:train_garbage_detector() 第四步推理/检测代码训练完成后使用以下代码对新图片进行检测。检测脚本 (detect.py)from ultralytics import YOLOimport cv2def detect_garbage(image_path, model_path):# 加载训练好的最佳模型model YOLO(model_path)# 进行预测 results model.predict( sourceimage_path, conf0.25, # 置信度阈值 iou0.45, # NMS IoU阈值 showTrue, # 是否直接显示结果窗口 saveTrue, # 是否保存图片到 runs/detect/predict line_width2 # 边框粗细 ) # 打印检测结果详情 for result in results: boxes result.boxes for box in boxes: cls_id int(box.cls[0]) conf float(box.conf[0]) class_name result.names[cls_id] print(f检测到: {class_name}, 置信度: {conf:.2f})if name ‘main’:# 替换为您的模型路径和图片路径model_file ‘runs/detect/exp_street_28classes/weights/best.pt’test_image ‘test_street.jpg’detect_garbage(test_image, model_file) 针对该数据集的特别建议类别不平衡问题28类垃圾中某些类别如塑料瓶小目标检测街道垃圾如烟头、吸管通常很小。优化训练时将 imgsz 设置为更大如 1280虽然会减慢速度但能显著提升小物体检测率。model.train(…, imgsz1280, …)