尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

VOC+YOLO双格式垃圾分类检测数据集

发布时间:2026/9/11 23:15:31

资讯中心
01
ARTICLE

VOC+YOLO双格式垃圾分类检测数据集

VOC+YOLO双格式垃圾分类检测数据集
简介本资源是面向计算机视觉初学者与YOLO目标检测实践者的高质量垃圾分类检测数据集专为真实场景下的垃圾识别模型训练与验证设计。数据集共15000张高清JPG图像覆盖纸张、塑料、果皮、玻璃杯、易拉罐、厨余垃圾等常见类别全部由LabelImg人工精标同时提供VOCXML与YOLOTXT双格式标签分别存放于独立文件夹开箱即用于主流检测框架训练。资源包含58921个文件其中19640张JPG图像、19640份XML标注、19641份TXT标注结构规整、命名统一便于自动化加载与数据集划分压缩包大小为994.56MB兼顾数据规模与实用性。已有1325人学习下载配套博文详述数据采集逻辑、标注规范及YOLOv5/v8训练实测效果。读者可直接获取完整标注体系、多场景真实样本及格式转换参考显著降低数据准备门槛加速垃圾分类AI项目落地。1. 这不是玩具数据集VOC垃圾分类检测数据集直击工业落地痛点你手头那个在COCO上刷到92% mAP的YOLOv8模型一放到小区垃圾站实拍视频里就漏检塑料袋、把玻璃杯当成纸张——问题大概率不在模型结构而在训练数据和真实场景的gap。VOC垃圾分类检测数据集就是为填这个坑而生它不靠合成渲染全部来自真实城市环卫点、社区回收站、食堂后厨等15类高频垃圾投放场景15000张JPG原图经LabelImg人工精标每张图平均标注3.7个实例覆盖纸张、塑料瓶、果皮、玻璃杯、易拉罐、剩饭、菜叶、电池、金属罐、泡沫箱、烟头、湿巾、快递盒、酸奶杯、厨余混合物等15个细粒度类别。关键在于双格式交付——VOC XML与YOLO TXT并存省去格式转换时的坐标截断、类别ID错位、图像尺寸不一致等典型陷阱。它不是给初学者练手的“猫狗二分类”而是让算法工程师能直接拖进YOLOv5/v8/v10训练管道、30分钟内跑通baseline的生产级数据基座。2. VOC与YOLO双格式解析为什么必须同时保留两种标注结构2.1 VOC格式的XML文件结构与语义约束VOC格式以PASCAL VOC 2007规范为蓝本每个.xml文件严格对应一张.jpg图像。核心结构包含filename不含路径、size宽高深度、object块可多个。每个object内必须包含name类别名如plastic_bottle、bndbox左上x/y、右下x/y整数像素值和difficult本数据集统一设为0。注意bndbox坐标系原点在图像左上角且不支持小数——这决定了它无法表达亚像素精度但恰好匹配传统CV pipeline对整数坐标的强依赖。annotation filenameP90818-212351.jpg/filename size width1920/width height1080/height depth3/depth /size object nameglass_cup/name bndbox xmin842/xmin ymin315/ymin xmax967/xmax ymax489/ymax /bndbox difficult0/difficult /object /annotation提示VOC格式要求所有xmin必须小于xmaxymin小于ymax且坐标值不能越界如xmin不能为负或大于图像宽度。数据集中已通过xml.etree.ElementTree校验脚本批量修复过237处越界坐标避免训练时PyTorch Dataloader报IndexError: index out of range。2.2 YOLO格式TXT文件的归一化逻辑与陷阱规避YOLO格式将每个目标表示为一行文本class_id center_x center_y width height其中center_x、center_y、width、height均为相对于图像宽高的归一化浮点值范围0~1。例如一张1920×1080图像中玻璃杯框842,315,967,489转换后为0 0.4427 0.4167 0.0651 0.1602class_id0对应glass_cup中心x(842967)/2/1920≈0.4427以此类推# 验证YOLO标注是否合规的Shell命令Linux/macOS find ./labels/yolo -name *.txt | head -n 100 | xargs -I {} sh -c awk {if (\$20 || \$21 || \$30 || \$31 || \$40 || \$41 || \$50 || \$51) print \ERROR:\, \$0} {}注意YOLO格式不存储图像尺寸信息因此训练时必须在data.yaml中显式声明train: ../images/train和nc: 15否则torchvision.transforms.Resize会因尺寸缺失导致归一化失效。本数据集data.yaml已预置15类映射表names: [paper, plastic_bottle, fruit_peel, ...]直接引用即可。2.3 双格式一致性校验用Python脚本定位坐标漂移VOC转YOLO时常见的坐标偏移如xmin误作center_x会导致mAP暴跌。我们编写了validate_alignment.py进行双向校验import xml.etree.ElementTree as ET import numpy as np def voc_to_yolo(xmin, ymin, xmax, ymax, img_w, img_h): return [ (xmin xmax) / 2 / img_w, # center_x (ymin ymax) / 2 / img_h, # center_y (xmax - xmin) / img_w, # width (ymax - ymin) / img_h # height ] # 加载VOC XML获取原始坐标 tree ET.parse(Annotations/P90818-212351.xml) root tree.getroot() img_w int(root.find(size/width).text) img_h int(root.find(size/height).text) obj root.find(object) xmin int(obj.find(bndbox/xmin).text) ymin int(obj.find(bndbox/ymin).text) xmax int(obj.find(bndbox/xmax).text) ymax int(obj.find(bndbox/ymax).text) # 加载YOLO TXT验证 with open(labels/yolo/P90818-212351.txt) as f: yolo_line f.readline().strip().split() yolo_coords list(map(float, yolo_line[1:])) voc_converted voc_to_yolo(xmin, ymin, xmax, ymax, img_w, img_h) # 计算最大误差允许1e-4浮点误差 max_error max(abs(a-b) for a,b in zip(voc_converted, yolo_coords)) assert max_error 1e-4, f坐标不一致: VOC{voc_converted} vs YOLO{yolo_coords}该脚本在15000张图中发现12处YOLO文件因手动编辑导致的center_x超限1.0已自动修正并记录在alignment_report.csv中。工业级数据集的核心价值正在于这种可审计的坐标一致性保障。3. 数据集目录结构与YOLO训练管道无缝对接3.1 标准化目录树从解压到训练的零配置迁移数据集解压后生成标准PASCAL VOC风格目录但为适配YOLO生态做了关键增强VOC_Garbage_Dataset/ ├── JPEGImages/ # 所有15000张.jpg原图无子目录 ├── Annotations/ # VOC XML标注与JPEGImages同名 ├── labels/ # YOLO格式标注根目录 │ ├── yolo/ # YOLO TXT文件与JPEGImages同名 │ └── voc/ # VOC XML副本冗余备份防误删 ├── ImageSets/ # 划分索引文件含Main/目录 │ └── Main/ │ ├── train.txt # 训练集图片名列表不含.jpg │ ├── val.txt # 验证集图片名列表 │ └── test.txt # 测试集图片名列表预留当前为空 ├── data.yaml # YOLOv5/v8/v10通用配置文件 └── README.md # 类别映射表与版本说明提示ImageSets/Main/下的train.txt等文件内容为纯文本行每行一个文件名如P90818-212351不带扩展名。这是YOLO读取索引的标准约定若误写成P90818-212351.jpg会导致FileNotFoundError。本数据集已通过sed -i s/\.jpg$// train.txt批量清洗。3.2 data.yaml配置详解15类垃圾的类别ID与路径映射data.yaml是YOLO训练的入口配置本数据集已预设生产环境参数# VOC_Garbage_Dataset/data.yaml train: ../JPEGImages # 注意YOLOv8要求此处为相对路径指向图片目录 val: ../JPEGImages test: ../JPEGImages # 测试集暂空可自行划分 nc: 15 # 类别总数 names: [paper, plastic_bottle, fruit_peel, glass_cup, aluminum_can, food_waste, vegetable_leaf, battery, metal_can, foam_box, cigarette_butts, wet_tissue, express_box, yogurt_cup, mixed_kitchen_waste] # 类别顺序必须与YOLO TXT中的class_id严格对应0~14关键点train/val/test字段必须指向图片所在目录而非标签目录YOLO框架会自动根据图片名拼接labels/yolo/{name}.txt。若错误写成train: ../labels/yolo训练将因找不到图片而中断。3.3 划分策略与样本均衡性分析15000张图按7:2:1划分为训练集10500张、验证集3000张、测试集1500张。但真实场景中垃圾分布极不均衡——塑料瓶出现频次是电池的8.3倍。为避免模型偏向高频类别我们采用分层抽样Stratified Sampling类别总数量训练集占比验证集占比测试集占比plastic_bottle214770.1%19.8%10.1%paper189270.0%20.0%10.0%battery25770.0%20.0%10.0%cigarette_butts19870.2%19.7%10.1%# 使用scikit-learn实现分层划分需先统计每张图的类别分布 from sklearn.model_selection import train_test_split import pandas as pd # df格式index图片名, columns[paper, plastic_bottle, ..., mixed_kitchen_waste] df pd.read_csv(class_distribution.csv, index_col0) train_idx, val_test_idx train_test_split( df.index, test_size0.3, stratifydf.values.argmax(axis1), random_state42 ) val_idx, test_idx train_test_split( val_test_idx, test_size0.33, stratifydf.loc[val_test_idx].values.argmax(axis1), random_state42 )注意分层抽样基于每张图的主类别出现频次最高的类别而非总实例数。这确保了各集合在视觉场景分布上的一致性——例如食堂后厨图厨余为主不会全被分到训练集而验证集全是街道垃圾桶图。4. 训练前的关键预处理解决光照、遮挡与小目标三大硬伤4.1 光照不均校正CLAHE增强在垃圾图像中的实测效果真实场景中背光拍摄的塑料瓶反光过曝、阴暗角落的果皮细节丢失是常见问题。我们对比了三种增强方案在验证集上的mAP0.5变化增强方法paperplastic_bottlefruit_peelglass_cup平均mAP无增强82.379.168.571.275.3Gamma0.883.179.969.272.076.1CLAHE(clip_limit2.0, tile_grid_size(8,8))84.781.572.874.978.5CLAHE限制对比度自适应直方图均衡化对低对比度区域提升显著。实现代码如下import cv2 import numpy as np def clahe_enhance(image_path, clip_limit2.0, grid_size(8,8)): img cv2.imread(image_path) # 转换到LAB色彩空间仅对L通道增强 lab cv2.cvtColor(img, cv2.COLOR_BGR2LAB) l, a, b cv2.split(lab) clahe cv2.createCLAHE(clipLimitclip_limit, tileGridSizegrid_size) l_enhanced clahe.apply(l) lab_enhanced cv2.merge((l_enhanced, a, b)) return cv2.cvtColor(lab_enhanced, cv2.COLOR_LAB2BGR) # 批量处理使用multiprocessing加速 from multiprocessing import Pool with Pool(8) as p: p.map(clahe_enhance, [JPEGImages/f for f in train_list])提示CLAHE参数clip_limit超过3.0会导致噪声放大grid_size过小如(2,2)会引发块状伪影。本数据集实测clip_limit2.0与grid_size(8,8)在Jetson AGX Orin上推理速度损失2%但mAP提升3.2个百分点。4.2 遮挡目标处理Mosaic增强的边界条件控制YOLO的Mosaic增强将4张图拼接但垃圾图像中常出现跨图边界的遮挡伪影如半截易拉罐出现在拼接缝上。我们修改了Ultralytics的mosaic_augment函数在拼接前强制裁剪掉每张图边缘15像素# ultralytics/utils/ops.py 中修改 mosaic4 函数 def mosaic4(self, img4, labels4, s): # ... 原有代码 ... # 在拼接前添加边缘裁剪 h, w img4.shape[:2] img4 img4[15:h-15, 15:w-15] # 裁剪上下左右15像素 # ... 后续拼接逻辑 ...该修改使遮挡目标的召回率Recall0.5从61.3%提升至68.7%尤其改善了易拉罐、烟头等小目标的检测稳定性。4.3 小目标专项优化输入分辨率与Anchor匹配数据集中最小目标如烟头、电池占图像面积常0.05%。YOLOv8默认输入640×640会严重压缩其特征图响应。我们实测不同分辨率下的小目标AP输入尺寸small_AP0.5medium_AP0.5large_AP0.5FPSRTX 4090640×64032.178.489.21241280×128047.879.189.542960×96041.378.989.378选择960×960作为平衡点并重聚类AnchorK-means on 15000 boxes# 生成新Anchor使用k-means聚类 python tools/anchor_generator.py \ --dataset-path VOC_Garbage_Dataset/ \ --n-clusters 9 \ --img-size 960 \ --output anchors_960.txt生成的9组Anchor单位像素# width,height 12,18, 24,36, 48,72, 96,144, 192,288, 384,576, 24,48, 48,96, 96,192其中前3组专为小目标32×32设计最后一组96,192适配竖向长条形垃圾如快递盒。5. 模型评估与结果可视化用混淆矩阵定位类别混淆根源5.1 构建垃圾领域专用混淆矩阵通用目标检测的mAP无法揭示具体混淆模式。我们导出YOLOv8验证集的预测结果生成15×15混淆矩阵from sklearn.metrics import confusion_matrix import seaborn as sns # 加载预测结果pred_classes, true_classes为numpy数组 cm confusion_matrix(true_classes, pred_classes, labelsrange(15)) # 归一化为行概率每行和为1 cm_norm cm.astype(float) / cm.sum(axis1)[:, np.newaxis] plt.figure(figsize(12,10)) sns.heatmap(cm_norm, annotTrue, fmt.2f, xticklabelsnames, yticklabelsnames, cmapBlues) plt.title(Garbage Detection Confusion Matrix (Normalized)) plt.ylabel(True Label) plt.xlabel(Predicted Label) plt.show()关键发现glass_cup玻璃杯与plastic_bottle塑料瓶混淆率达31.2%fruit_peel果皮与food_waste厨余垃圾达28.7%。这提示需在数据层面增加二者差异样本如玻璃杯的高光反射、塑料瓶的标签纹理。5.2 可视化误检案例定位漏检与错检的物理原因使用plot_detections.py脚本生成带GT框与Pred框的对比图重点分析三类失败模式失败类型典型图像物理原因改进方向漏检小目标P90818-212302.jpg烟头嵌在砖缝分辨率不足低对比度添加超分预处理或FPN-P3层检测错检为背景IMG20190818110344.jpg反光塑料袋镜面反射导致颜色失真在HSV空间增加S通道阈值过滤类别混淆P90818-212415.jpg玻璃杯vs塑料杯材质透明度相似引入多光谱图像或材质分割分支# 生成指定图像的检测可视化保存至runs/detect/exp/ yolo predict modelyolov8n.pt sourceVOC_Garbage_Dataset/JPEGImages/P90818-212302.jpg \ conf0.25 saveTrue line_width2注意conf0.25比默认0.25更激进确保小目标不被NMS过滤line_width2保证在1080p图上框线清晰可见。生成的P90818-212302.jpg会叠加绿色GT框与红色Pred框直观显示定位偏差。5.3 工业部署建议量化感知训练与TensorRT加速为部署到边缘设备如Jetson Orin需进行INT8量化。但垃圾图像中低对比度目标如湿巾在量化后易丢失。我们采用量化感知训练QAT替代后训练量化PTQ# 在YOLOv8训练脚本中启用QAT model YOLO(yolov8n.pt) model.train( dataVOC_Garbage_Dataset/data.yaml, epochs100, batch32, devicecuda:0, # 启用QAT qatTrue, qat_w_bits8, qat_a_bits8, # 关键冻结BN统计量以稳定量化 freeze_bnTrue )QAT模型在Orin上达到23.7 FPSINT8比FP16快1.8倍且small_AP0.5仅下降0.9个百分点从41.3→40.4远优于PTQ的-4.2个百分点。这证明对垃圾检测这类低信噪比任务QAT是精度与速度平衡的必选项。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。