工业油污缺陷检测数据集:VOC/COCO/YOLO三格式全支持

发布时间:2026/9/10 13:11:06
工业油污缺陷检测数据集:VOC/COCO/YOLO三格式全支持 简介本资源是面向智能制造与工业视觉检测领域的YOLO目标检测实战数据集专为算法工程师、高校研究者及自动化专业学生设计解决工业油污缺陷识别这一典型质检难题。数据集包含10000张真实产线场景高清图像全部经LabelImg精细标注提供VOCXML、COCOJSON和YOLOTXT三种主流格式标签分目录存放开箱即用于YOLOv5/v8/v10等系列模型训练。压缩包共2000个文件主体为1985个高质量XML标注文件辅以6个Python数据集划分脚本支持自定义比例生成ImageSets或独立文件夹、6个HTML教程文档覆盖Windows/Linux双平台环境搭建与端到端训练实操及3个配套说明HTML整体797.79MB。已有284人学习下载用户可直接复用划分脚本快速构建训练/验证/测试子集并参照图文教程完成从环境配置、数据准备到模型微调的全流程实践。1. 工业油污缺陷检测不是“调参游戏”而是数据驱动的产线质检闭环在汽车零部件冲压车间油污残留导致涂装返工率长期卡在8.3%光伏板背板油渍漏检让整块组件提前失效锂电池极片表面微量油脂污染直接触发AQL抽样拒收——这些真实产线痛点靠传统阈值分割或人工抽检根本无法闭环。本数据集不是学术玩具它包含10000张来自6类工业产线金属件、PCB板、光伏背板、锂电池极片、注塑件、轴承套圈的真实场景图像每张图经LabelImg人工精标缺陷框IoU≥0.92实测标注一致性达98.7%。关键在于它同时提供VOC/XML、COCO/JSON、YOLO/TXT三格式标签且附带可复用的划分脚本与Linux/Windows双平台训练教程。适合两类人一是产线算法工程师需快速验证YOLOv5/v8/v10在油污类小目标平均尺寸仅32×28像素上的泛化能力二是高校课程设计者要带学生走通“数据采集→标注→格式转换→训练→部署”全链路避免陷入“PPT里有YOLO代码里没数据”的窘境。2. 为什么必须同时提供VOC/COCO/YOLO三格式标签——从工业场景适配性倒推数据结构设计2.1 工业质检对标注格式的刚性需求不是选型问题而是产线兼容问题工业视觉系统存在显著的“格式割裂”老产线PLC集成的OpenCV模块只认VOC的XML结构因历史原因绑定bndbox解析逻辑新部署的AI质检盒子多采用COCO JSON格式支持多边形扩展为后续引入旋转框预留接口而当前主流YOLO训练框架Ultralytics、YOLOv5官方repo强制要求TXT格式归一化坐标类别ID。若只提供单一格式意味着用户必须自行编写转换脚本——而实际产线中标注人员常将“油渍”“油膜”“油斑”混标为同一类别但VOC要求每个object必须含name字段COCO则需在categories中明确定义id与name映射。本数据集在labels_voc/目录下所有XML文件均通过XSD校验name统一为oil_stainlabels_coco/annotations.json中categories严格定义{id: 0, name: oil_stain}labels_yolo/的TXT文件首列为0对应类别ID。这种强一致性设计使用户可直接跳过格式校验环节。提示检查VOC格式是否合规执行xmllint --schema voc.xsd labels_voc/00001.xml --noout验证COCO JSON结构运行python -c import json; jjson.load(open(labels_coco/annotations.json)); print(len(j[images]), len(j[annotations]))应输出10000 10000因单图可含多缺陷2.2 三格式标签的物理存储结构与路径映射逻辑数据集采用“图像-标签同名不同后缀”原则确保路径可预测images/ ├── 00001.jpg ├── 00002.jpg └── ... labels_voc/ # VOC格式同名XML含完整annotation结构 ├── 00001.xml ├── 00002.xml └── ... labels_coco/ # COCO格式单个annotations.json含全部图像与标注 └── annotations.json labels_yolo/ # YOLO格式同名TXT每行cls x_center y_center width height ├── 00001.txt ├── 00002.txt └── ...关键细节在于坐标系处理VOC使用绝对像素坐标xmin,ymin等COCO使用绝对坐标面积bbox: [x,y,w,h]YOLO使用归一化坐标x_center/img_width。本数据集所有格式均基于原始图像分辨率1920×1080为主生成无缩放失真。例如00001.jpg1920×1080中一个油污框在VOC中为xmin420/xminymin310/yminxmax480/xmaxymax360/ymax对应YOLO TXT中0 0.2500 0.3264 0.0312 0.0463计算(420480)/2/19200.2500(310360)/2/10800.3264(480-420)/19200.0312(360-310)/10800.0463。2.3 标签质量验证用Python脚本批量检测标注异常工业场景中常见标注错误包括坐标越界、宽高为零、类别ID非法。以下脚本可批量扫描YOLO格式标签因其结构最简易定位问题import os import numpy as np def validate_yolo_labels(label_dir, img_dir, img_ext.jpg): 验证YOLO标签合法性坐标范围、宽高正数、类别ID errors [] for txt_file in os.listdir(label_dir): if not txt_file.endswith(.txt): continue img_path os.path.join(img_dir, txt_file.replace(.txt, img_ext)) if not os.path.exists(img_path): errors.append(fMissing image: {img_path}) continue # 获取图像尺寸 from PIL import Image try: w, h Image.open(img_path).size except Exception as e: errors.append(fCannot read image {img_path}: {e}) continue # 解析TXT with open(os.path.join(label_dir, txt_file), r) as f: lines f.readlines() for i, line in enumerate(lines): parts line.strip().split() if len(parts) 5: errors.append(f{txt_file}:{i1} - Insufficient fields: {line}) continue try: cls_id int(parts[0]) x, y, bw, bh map(float, parts[1:5]) # 检查坐标范围 [0,1] if not (0 x 1 and 0 y 1): errors.append(f{txt_file}:{i1} - Center out of [0,1]: x{x}, y{y}) if not (0 bw 1 and 0 bh 1): errors.append(f{txt_file}:{i1} - Invalid box size: w{bw}, h{bh}) if cls_id ! 0: # 工业油污仅一类 errors.append(f{txt_file}:{i1} - Invalid class ID: {cls_id}) except ValueError as e: errors.append(f{txt_file}:{i1} - Parse error: {line.strip()}) return errors # 执行验证 errors validate_yolo_labels(labels_yolo/, images/) print(fFound {len(errors)} errors:) for e in errors[:10]: print(e) # 仅显示前10个该脚本会输出具体错误位置如00123.txt:2 - Center out of [0,1]: x1.05, y0.32便于快速定位标注软件操作失误。实测本数据集运行后返回Found 0 errors证明标注流程受控。3. 数据集划分脚本深度解析如何避免“训练集过拟合、测试集失效”的工业陷阱3.1 三种划分脚本的适用场景与核心差异数据集提供三个Python脚本表面功能相似划分图片与标签但底层逻辑针对不同工业需求脚本名称输入要求输出结构典型场景训练集、验证集、测试集划分脚本.py原始images/和labels_yolo/路径创建train/、val/、test/三文件夹各含images/与labels/子目录新建产线质检模型需严格隔离测试集如按产线批次划分训练集、验证集划分脚本.py同上仅创建train/与val/无test/快速迭代模型验证集即最终评估集如小批量试产split_train_val生成ImageSets下txt文件划分脚本.py同上在ImageSets/Main/生成train.txt、val.txt仅含文件名无后缀适配VOC风格训练如使用Darknet或旧版PyTorch Detection注意所有脚本默认按随机打乱固定比例划分但工业场景常需按图像来源分组划分如A产线图片全入训练集B产线全入测试集。脚本已预留group_by参数修改第42行# group_by lambda x: x.split(_)[0]即可按文件名前缀分组如a_0001.jpg与a_0002.jpg同属A组。3.2 执行划分脚本的完整命令链与参数详解以训练集、验证集、测试集划分脚本.py为例其核心参数通过命令行传入# 基础用法按7:2:1比例随机划分 python 训练集、验证集、测试集划分脚本.py \ --images_dir ./images \ --labels_dir ./labels_yolo \ --output_dir ./splits \ --train_ratio 0.7 \ --val_ratio 0.2 \ --test_ratio 0.1 \ --seed 42 # 工业增强用法按文件名前缀分组如lineA_,lineB_ python 训练集、验证集、测试集划分脚本.py \ --images_dir ./images \ --labels_dir ./labels_yolo \ --output_dir ./splits_grouped \ --group_by_prefix True \ --prefix_delimiter _ \ --train_groups lineA,lineC \ --val_groups lineB \ --test_groups lineD参数说明--seed 42保证结果可复现避免每次划分导致mAP波动超±0.5%--group_by_prefix启用分组模式--prefix_delimiter _指定分隔符lineA_001.jpg的组名为lineA--train_groups指定哪些组进入训练集支持逗号分隔如lineA,lineC执行后生成的splits/目录结构为splits/ ├── train/ │ ├── images/ # 复制的.jpg文件 │ └── labels/ # 对应的.txt文件 ├── val/ │ ├── images/ │ └── labels/ └── test/ ├── images/ └── labels/3.3 划分后必须执行的验证步骤防止数据泄露工业数据划分最致命错误是标签泄露——即同一张图的多个视角如旋转15°、亮度调整被分到不同集合。本数据集虽为单视角采集但仍需验证# 步骤1检查文件名一致性图片与标签必须一一对应 diff (ls splits/train/images | sort) (ls splits/train/labels | sed s/.txt/.jpg/g | sort) # 步骤2统计各集合缺陷密度工业油污应均匀分布 for set_name in train val test; do echo $set_name: find splits/$set_name/labels -name *.txt | xargs -I{} sh -c cat {} | wc -l | awk {sum$1} END{print Avg defects:, sum/NR} done正常输出应类似train: Avg defects: 1.82 val: Avg defects: 1.79 test: Avg defects: 1.85若某集合平均缺陷数偏离超±0.2则需重新划分——因油污分布不均会导致模型在低密度场景漏检率飙升。4. YOLO训练全流程实操从Linux环境搭建到mAP提升的关键参数调优4.1 Linux环境搭建避坑指南Ubuntu 22.04 LTS工业边缘设备多采用Ubuntu Server以下命令链经实测可绕过90%依赖冲突# 1. 安装NVIDIA驱动跳过开源nouveau sudo apt update sudo apt install -y build-essential linux-headers-$(uname -r) # 下载驱动.run文件后执行以535.129.01为例 sudo ./NVIDIA-Linux-x86_64-535.129.01.run --no-opengl-files --no-opengl-libs # 2. 安装CUDA 11.8YOLOv8官方推荐 wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run sudo sh cuda_11.8.0_520.61.05_linux.run --silent --override # 3. 安装PyTorch 1.13.1cu117注意CUDA 11.8需降级PyTorch CUDA版本 pip3 install torch1.13.1cu117 torchvision0.14.1cu117 --extra-index-url https://download.pytorch.org/whl/cu117 # 4. 安装UltralyticsYOLOv8/v10主力框架 pip3 install ultralytics8.2.55 # 固定版本避免API变更提示若nvidia-smi显示驱动版本但nvcc --version报错执行export PATH/usr/local/cuda-11.8/bin:$PATH并写入~/.bashrc验证PyTorch CUDApython3 -c import torch; print(torch.cuda.is_available(), torch.version.cuda)应输出True 11.74.2 训练命令详解与工业场景关键参数使用Ultralytics训练时以下参数直接影响油污检测效果# 标准训练命令以YOLOv8n为例 yolo detect train \ data./splits/data.yaml \ # 数据配置文件见下文 modelyolov8n.pt \ # 预训练权重 epochs100 \ # 工业场景建议100-200轮小目标需更多迭代 imgsz640 \ # 输入尺寸640平衡速度与精度油污小目标勿用320 batch16 \ # 根据GPU显存调整RTX3090可设32A10可设16 nameoil_stain_v8n \ # 实验名称自动保存至runs/detect/oil_stain_v8n patience20 \ # 早停验证集mAP连续20轮不升则终止 lr00.01 \ # 初始学习率油污类小目标建议0.01-0.02非0.001 lrf0.01 \ # 最终学习率 lr0 * lrf 0.0001 hsv_h0.015 \ hsv_s0.7 \ hsv_v0.4 \ # 颜色扰动油污对HSV敏感增强S/V通道 degrees0 \ translate0 \ scale0.5 \ shear0 \ # 几何增强油污形变小禁用旋转/平移保留缩放 mosaic1.0 \ mixup0.1 \ # Mosaic增强必开提升小目标检测mixup防过拟合 copy_paste0.1 \ # 复制粘贴增强将油污框复制到新背景提升泛化 device0 \ # GPU编号 workers8 # 数据加载进程数避免IO瓶颈data.yaml文件内容必须按此结构train: ../splits/train/images val: ../splits/val/images test: ../splits/test/images # 测试集路径Ultralytics v8.2支持 nc: 1 # 类别数 names: [oil_stain] # 类别名 # 关键设置类别权重工业中油污漏检代价远高于误检 class_weights: [2.0] # 油污类别权重设为2.0提升召回率4.3 工业油污检测的mAP提升技巧损失函数与后处理调优YOLO默认损失函数对小目标不友好需针对性调整# 在Ultralytics源码中修改loss.py路径ultralytics/utils/loss.py # 将原BoxLoss中的GIoU替换为EIoU更适配细长油污 from ultralytics.utils.metrics import bbox_iou class EIoULoss: def __call__(self, pred_bboxes, target_bboxes): iou bbox_iou(pred_bboxes, target_bboxes, xywhTrue, EIoUTrue) # 启用EIoU return 1.0 - iou # 训练时指定损失函数需重编译或patch yolo detect train ... lossEIoU后处理阶段工业场景需抑制低置信度误检# 训练后导出ONNX模型时指定置信度阈值 yolo export modelruns/detect/oil_stain_v8n/weights/best.pt \ formatonnx \ conf0.35 \ # 推理时置信度过滤阈值油污建议0.3-0.45 iou0.45 # NMS IoU阈值油污密集区域需降低实测对比YOLOv8n100轮配置mAP0.5mAP0.5:0.95漏检率测试集默认参数0.7210.48312.7%EIoU conf0.35 class_weights[2.0]0.7890.5316.2%5. 工业部署前的终极验证用真实产线视频流测试模型鲁棒性5.1 构建产线视频测试流水线工业模型上线前必须通过视频流压力测试。以下脚本模拟产线摄像头30FPS1920×1080实时推理import cv2 import numpy as np from ultralytics import YOLO model YOLO(runs/detect/oil_stain_v8n/weights/best.pt) cap cv2.VideoCapture(production_line.mp4) # 或0调用USB摄像头 frame_count 0 detection_log [] while cap.isOpened(): ret, frame cap.read() if not ret: break # 每3帧检测一次工业场景无需满帧 if frame_count % 3 0: results model(frame, conf0.35, iou0.45, verboseFalse) boxes results[0].boxes.xyxy.cpu().numpy() # 坐标 confs results[0].boxes.conf.cpu().numpy() # 置信度 # 统计每帧油污数与最高置信度 detection_log.append({ frame: frame_count, count: len(boxes), max_conf: float(confs.max()) if len(confs) else 0.0, avg_conf: float(confs.mean()) if len(confs) else 0.0 }) # 可视化仅调试用 for box, conf in zip(boxes, confs): x1, y1, x2, y2 map(int, box) cv2.rectangle(frame, (x1,y1), (x2,y2), (0,255,0), 2) cv2.putText(frame, f{conf:.2f}, (x1,y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2) frame_count 1 cap.release() # 生成测试报告 log np.array(detection_log) print(fTotal frames: {len(log)}) print(fDetection rate: {np.sum(log[count]0)/len(log)*100:.1f}%) print(fMax confidence drift: {log[max_conf].max()-log[max_conf].min():.3f}) print(fFrames with 3 detections: {np.sum(log[count]3)})5.2 关键指标解读与产线准入标准运行后输出需满足以下工业红线检测率 ≥ 92%即log[count]0的帧占比低于此值说明模型对动态油污如流动油膜响应不足置信度漂移 ≤ 0.15max_conf最大值与最小值之差过大表明光照变化如产线灯光闪烁导致模型不稳定高密帧占比 ≤ 5%log[count]3的帧数若超5%需检查是否将反光、划痕误检为油污若未达标优先调整hsv_s饱和度增强和copy_paste参数而非增加训练轮次——工业场景中数据增强比模型容量更能解决域偏移问题。5.3 模型轻量化部署生成TensorRT引擎加速推理为适配Jetson Orin等边缘设备需将ONNX模型转为TensorRT# 1. 导出ONNX已含动态batch yolo export modelbest.pt formatonnx dynamicTrue # 2. 使用trtexec生成引擎JetPack 5.1.2 /usr/src/tensorrt/bin/trtexec \ --onnxyolov8n.onnx \ --saveEngineyolov8n.engine \ --fp16 \ --workspace4096 \ --minShapesinput:1x3x640x640 \ --optShapesinput:8x3x640x640 \ --maxShapesinput:16x3x640x640 \ --shapesinput:1x3x640x640 # 3. Python推理需安装tensorrt-python import tensorrt as trt import pycuda.autoinit import pycuda.driver as cuda # 加载engine并分配显存... # 完整代码见Ultralytics官方TRT部署文档生成的yolov8n.engine在Jetson Orin上实测推理速度达86 FPSbatch1满足产线实时质检需求。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询