简介这份资源面向从事工业质检、缺陷识别方向的目标检测学习者与工程人员提供管道焊接缝缺陷检测数据集按YOLOV5目录格式整理可直接投入训练省去格式转换与标注清洗的繁琐环节。数据为800×800的RGB图像共2个类别good与bad覆盖正常与缺陷两类焊缝状态适合二分类检测任务的快速验证与模型调优。压缩包内共1995个文件以jpg图像与同名txt标注为主另附1个可视化py脚本和1张png示意图整体约93.27MB其中训练集908张图片及对应标签验证集206张图片及对应标签划分明确便于直接开展训练与评估。可视化脚本无需修改即可运行随机传入一张图片便能绘制边界框并保存到当前目录方便检查标注质量与类别分布。目前已有196人学习下载适合需要快速搭建管道焊缝缺陷检测基线、验证YOLOV5训练流程的读者参考使用。1. 管道焊接缝缺陷检测数据集2 类别 YOLOv5 目录格式到底怎么用管道焊接缝缺陷检测这个场景很多人第一次接触是在工业质检的项目里。焊缝表面有气孔、夹渣、未熔合、裂纹这些典型缺陷传统做法靠老师傅拿放大镜看片子效率低且漏检率随疲劳度上升。换成目标检测的思路就是把每一处缺陷框出来并分类让模型替代人眼做初筛。这个数据集提供的就是 YOLOv5 目录格式的标注2 个类别拿来就能直接喂给 YOLOv5 训练。适合谁做工业缺陷检测的算法工程师、想拿真实产线数据练手的学生、以及需要快速验证焊缝检测方案可行性的团队。它解决的核心问题是你不用从零标注几千张焊缝图省掉最耗时的数据准备环节直接进入模型调参和部署验证。2. YOLOv5 目录格式拆解2 类别焊缝数据的组织逻辑2.1 目录结构长什么样YOLOv5 要求的数据集目录不是随便放几个文件夹就行它有固定的层级约定。拿到一个标注为「YOLOv5 目录格式」的焊缝数据集解压后通常看到这样的结构weld_defect_dataset/ ├── images/ │ ├── train/ │ │ ├── 001.jpg │ │ ├── 002.jpg │ │ └── ... │ ├── val/ │ │ ├── 101.jpg │ │ └── ... │ └── test/ # 可选 │ └── ... ├── labels/ │ ├── train/ │ │ ├── 001.txt │ │ ├── 002.txt │ │ └── ... │ ├── val/ │ │ ├── 101.txt │ │ └── ... │ └── test/ │ └── ... └── data.yaml关键点在于images和labels是平级目录且内部的train、val、test子目录名必须完全一致。图片和标注文件通过文件名一一对应比如images/train/001.jpg对应labels/train/001.txt。这个对应关系是硬约束文件名不一致模型就找不到标签训练直接报错。2.2 标注文件里的 5 个数字每个.txt标注文件里每一行代表一个目标框格式是class_id x_center y_center width height这 5 个值都是归一化到 0~1 之间的浮点数。class_id从 0 开始计数2 类别就是 0 和 1。x_center和y_center是框中心点相对于图片宽高的比例width和height是框的宽高相对于图片宽高的比例。举个例子一张 640×640 的焊缝图某个缺陷框在像素坐标下是左上角 (100, 200)、右下角 (300, 400)那么中心点像素坐标x200, y300宽高像素w200, h200归一化后x_center200/6400.3125, y_center300/6400.46875, width200/6400.3125, height200/6400.3125标注行就是0 0.3125 0.46875 0.3125 0.3125这里有个血泪经验很多自己标注的数据集翻车就翻在归一化上。有人直接填像素坐标训练时 loss 不降排查半天才发现格式错了。YOLOv5 不会帮你自动转换它默认你给的就是归一化值。2.3 data.yaml 的 4 个必填字段data.yaml是 YOLOv5 训练时的数据配置文件2 类别焊缝数据集的最小配置如下# 数据集根路径建议用绝对路径避免相对路径歧义 path: /home/user/weld_defect_dataset # 训练集和验证集的图片目录相对于 path train: images/train val: images/val # 类别数量焊缝数据集是 2 nc: 2 # 类别名称顺序必须和标注文件里的 class_id 对应 names: 0: porosity # 气孔 1: crack # 裂纹names里的顺序不能乱。如果标注时把气孔标为 0、裂纹标为 1这里就必须一致。顺序搞反了模型会把气孔预测成裂纹mAP 看着还行但实际全错。nc必须等于names的条目数写错了 YOLOv5 会在初始化检测头时直接抛维度不匹配的错误。3. 用 YOLOv5 训练焊缝缺陷检测模型从环境到推理的完整链路3.1 环境准备与依赖安装YOLOv5 对 PyTorch 版本有要求建议用 Python 3.8 以上、PyTorch 1.8 以上。以下是经过验证的安装流程# 创建虚拟环境避免污染系统 Python conda create -n weld_yolo python3.8 -y conda activate weld_yolo # 安装 PyTorch根据 CUDA 版本选择这里以 CUDA 11.3 为例 pip install torch1.12.1cu113 torchvision0.13.1cu113 \ --extra-index-url https://download.pytorch.org/whl/cu113 # 克隆 YOLOv5 仓库用官方仓库不要用来路不明的 fork git clone https://github.com/ultralytics/yolov5.git cd yolov5 # 安装依赖requirements.txt 里锁定了兼容版本 pip install -r requirements.txt安装完成后用python -c import torch; print(torch.cuda.is_available())验证 GPU 是否可用。返回True才能用 GPU 训练否则会退到 CPU训练时间从几小时变成几天。3.2 用 train.py 启动训练关键参数怎么设YOLOv5 的训练入口是train.py针对 2 类别焊缝数据集我一般这样起命令python train.py \ --data /home/user/weld_defect_dataset/data.yaml \ --weights yolov5s.pt \ --img 640 \ --batch-size 16 \ --epochs 100 \ --workers 4 \ --device 0 \ --project runs/train \ --name weld_exp1 \ --exist-ok逐项说明--data指向你的data.yaml绝对路径不要用相对路径否则从不同目录启动会找不到文件。--weights预训练权重。焊缝数据集通常几千张从yolov5s.pt开始比从头训练收敛快得多。如果显存够可以换yolov5m.pt或yolov5l.pt精度会高一些但速度慢。--img 640输入分辨率。焊缝缺陷通常比较小640 是起点。如果缺陷在图中占比很小可以提到 1280但显存占用会翻倍。--batch-size 16批大小。显存 8G 用 1611G 用 32不够就往下调调到不报 OOM 为止。--epochs 1002 类别任务通常 100~300 轮足够。看验证集 mAP 曲线如果 50 轮后还在涨就继续加。--workers 4数据加载线程数。设成 CPU 核心数的一半左右太多反而拖慢。--device 0用第 0 号 GPU。多卡用0,1。--project和--name输出目录训练日志、权重、混淆矩阵都存这里。训练启动后终端会打印每轮的 box_loss、obj_loss、cls_loss 和验证集的 P、R、mAP0.5。重点盯 mAP0.5如果 20 轮后还在 0.1 以下大概率是数据格式或标注有问题先回去检查 labels 目录。3.3 训练过程监控与早停判断YOLOv5 自带 TensorBoard 支持训练时另开终端tensorboard --logdir runs/train浏览器打开localhost:6006能看到 loss 曲线和 mAP 曲线。几个判断经验box_loss和obj_loss应该在前 10 轮快速下降如果平着不动检查学习率或数据标注。mAP0.5在 50 轮左右应该到 0.6 以上焊缝 2 类别任务数据质量正常的情况下。如果卡在 0.3 以下多半是类别不平衡或标注框太松。验证集 loss 开始上升而训练集 loss 还在降就是过拟合了加数据增强或减模型复杂度。YOLOv5 默认没有早停但可以用--patience参数比如--patience 30表示 30 轮 mAP 没提升就停。这个参数能省不少电费。3.4 推理验证用 detect.py 看实际效果训练完在runs/train/weld_exp1/weights/下会有best.pt和last.pt。用best.pt跑推理python detect.py \ --weights runs/train/weld_exp1/weights/best.pt \ --source /home/user/test_weld_images \ --img 640 \ --conf-thres 0.25 \ --iou-thres 0.45 \ --save-txt \ --project runs/detect \ --name weld_test--source可以是单张图、图片目录、视频文件或摄像头编号。--conf-thres 0.25置信度阈值。焊缝检测建议从 0.25 起调漏检比误检代价高的话往下调到 0.15。--iou-thres 0.45NMS 的 IoU 阈值。缺陷框重叠多的话调到 0.5~0.6避免把相邻缺陷合并。--save-txt把检测结果存成 YOLO 格式的 txt方便后续做统计分析。推理结果图存在runs/detect/weld_test/下直接看框得准不准。如果发现大量漏检先别急着调模型把--conf-thres降到 0.1 看看是不是阈值卡太高了。4. 焊缝缺陷检测的避坑指南5 个真实翻车现场4.1 现象训练 loss 正常下降但 mAP 始终为 0原因data.yaml里的names顺序和标注文件里的class_id对不上。比如标注时气孔是 0、裂纹是 1但 yaml 里写反了。模型学到的类别和验证时计算的类别错位mAP 计算时匹配不上。解决打开几个标注 txt 文件确认 class_id 的分布然后和data.yaml的names逐条核对。最稳妥的办法是写个脚本统计所有标注文件里出现的 class_id 集合确保和names的 key 完全一致。4.2 现象训练报错AssertionError: train and val directories do not exist原因data.yaml里的train和val路径写的是相对于path的相对路径但path本身写错了或者目录名大小写不一致比如Imagesvsimages。Linux 下大小写敏感Windows 下不敏感跨平台迁移时容易翻车。解决用ls逐级确认目录存在path用绝对路径train和val用相对于path的路径。如果还报错在 Python 里import os; os.path.exists(...)打印一下实际解析的路径。4.3 现象显存溢出 OOMbatch-size 降到 1 还是报错原因--img设太大或者模型选了yolov5x.pt这种大模型。焊缝图如果本身分辨率很高比如 4000×3000YOLOv5 会先 resize 到--img指定的大小但数据加载时的内存占用仍然和原图尺寸相关。解决先把--img降到 416 跑通确认不是代码问题后再逐步往上加。同时检查--workers是不是设太高导致内存爆了降到 2 试试。如果必须用高分辨率换yolov5s.pt并开--rect减少 padding。4.4 现象验证集 mAP 很高但实际推理漏检严重原因训练集和验证集是从同一批图里随机切的分布太接近。实际产线上的焊缝图光照、角度、背景和训练集差异大模型过拟合了训练集的特定模式。解决验证集要按时间、批次或设备来源划分不要随机切。如果数据集本身来源单一做交叉验证或者留出一部分完全不同工况的图做测试。另外检查--augment参数推理时开增强能提升一些鲁棒性。4.5 现象标注框看起来对但训练后框偏移明显原因标注时用的工具比如 labelImg默认输出的是 Pascal VOC 的xmin, ymin, xmax, ymax格式有人手动转 YOLO 格式时归一化算错了或者忘了减 1像素坐标从 0 开始还是从 1 开始。解决写个校验脚本把 YOLO 格式的标注反算回像素坐标画到原图上肉眼检查。重点看框是不是正好套住缺陷。如果整体偏移一个固定值就是坐标原点问题如果框大小不对就是宽高算错了。5. 把 2 类别焊缝检测推到产线进阶技巧与验证习惯5.1 用混淆矩阵定位类别混淆YOLOv5 训练完会在输出目录生成confusion_matrix.png。2 类别任务看这个矩阵特别直观对角线是正确分类非对角线是混淆。如果气孔和裂纹互相混淆严重说明这两个类别的视觉特征在模型看来太接近。解决办法有两个一是回去检查标注是不是有些气孔被标成了裂纹二是加更多难例专门找那些模棱两可的图重新标。5.2 用测试时增强TTA榨出最后几个点推理时加--augment开启 TTA模型会对同一张图做翻转、缩放等变换后综合结果。代价是推理速度慢 2~3 倍但 mAP 通常能涨 1~3 个点。产线如果对节拍要求不苛刻这个参数值得开。命令很简单python detect.py \ --weights runs/train/weld_exp1/weights/best.pt \ --source /home/user/test_weld_images \ --augment \ --conf-thres 0.25.3 导出 ONNX 做部署前的精度对齐训练完的.pt权重不能直接上产线通常要转成 ONNX 或 TensorRT。导出 ONNXpython export.py \ --weights runs/train/weld_exp1/weights/best.pt \ --include onnx \ --img 640 \ --batch-size 1 \ --simplify导出后务必做一件事用同一张图分别跑 PyTorch 和 ONNX 推理对比输出的框坐标和置信度。如果差异超过 1%检查--img和--batch-size是否和导出时一致。ONNX 对动态 batch 的支持有时会引入数值误差产线部署前这一步不能省。5.4 我自己的验证习惯每次训完一个焊缝模型我不会只看 mAP 数字。我会从验证集里挑 20 张图手动跑一遍推理把结果图拼成一张大图肉眼过一遍。重点看三类漏检的、误检的、框歪的。漏检的图单独存一个文件夹下次加数据时优先补这类场景。误检的图看是不是背景干扰比如焊缝旁边的划痕被误判成裂纹。这个习惯帮我省了很多次「指标好看但上线翻车」的后悔药。另外data.yaml里的names我习惯用英文加注释比如porosity # 气孔这样换电脑或换人接手时不会因为中文编码问题翻车。标注文件我定期用脚本做完整性校验每张图必须有对应的 txt每个 txt 的行数不能为 0除非是负样本坐标值必须在 0~1 之间。这些检查写成脚本跑一遍只要几秒钟但能挡住 90% 的低级错误。焊缝缺陷检测这个方向数据质量比模型结构重要得多。2 类别看起来简单但工业场景的类内差异大、类间差异小标注的一致性直接决定天花板。把数据格式吃透、把验证做扎实比换更大的模型管用。希望帮到你。本文还有配套的精品资源点击获取