尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

YOLOV5齿轮缺陷检测实战:数据集格式与训练调参全解析

YOLOV5齿轮缺陷检测实战:数据集格式与训练调参全解析 简介目标检测是计算机视觉在工业质检中落地最广的技术方向之一其核心在于让模型自动定位并识别图像中的异常区域。YOLO系列以高效的单阶段检测结构著称其中YOLOV5凭借清晰的目录组织、灵活的配置和成熟的训练管道成为工程实践中的常用选择。在工业场景中齿轮表面缺陷如划伤、崩角、锈蚀往往形态多样、背景复杂需要规范的数据标注和合理的训练验证划分才能训练出可靠模型。通过理解YOLO格式的归一化坐标表示、data.yaml配置及超参数调整逻辑可以快速搭建一套可复用的缺陷检测流程。本文围绕齿轮缺陷检测数据集梳理从目录结构、标注规范到训练调参的完整链路为工业视觉落地提供参考。 一台手机、一个显微镜或者生产线上的定焦相机架在那里拍到的都是同一类东西圆形的、带齿的、金属质感的零件表面有划痕、有崩角或者边缘锈了一块。咱们的目标是让模型自己把这些缺陷找出来框住告诉质检员“这里有问题”。这就是你正在做的事也是这套数据集存在的意义。我在计算机视觉方向做了不少年接触过不少工业检测项目有一套顺手的齿轮缺陷检测数据YOLOV5目录格式3个类别自带训练集/验证集划分。这篇文章就从这个数据集讲起把YOLOV5的训练流程、目录结构、标注规范、超参数设置、常见踩坑点全部串起来。不管你是刚接触目标检测的初学者还是已经被工业现场脏数据折磨过一阵的工程师这篇文章应该都能给你一些可复用的参考。我需要先交代一下这批数据的基本情况数据是按YOLOV5的标准目录格式组织的图片放在images目录下对应的标注txt放在labels目录下。一共三类缺陷命名很直白scratch齿面划伤。这是最常见的缺陷类型一条或多条细线状痕迹长短、深浅不一。chip齿尖/齿面崩角边缘缺损有比较明显的断裂缺口表现为小区域缺失。rust锈蚀。金属表面出现斑块状的颜色变化常伴有纹理粗糙。每张图片都有对应的标注文件标注内容就是“类别归一化坐标框宽高”完全符合YOLO系列的输入格式省去了自己转换的麻烦。训练集和验证集已经按一定比例分好拿到手就能开训不需要再自己写脚本乱切。这个数据集本身不算大但作为工业场景的示例来说类别划分清晰、缺陷形态典型、差异化足够拿来练手和做算法验证都是合适的。尤其是对于刚接触YOLOV5目录结构、或者想快速跑通工业缺陷检测流程的人来说可以直接在这个基础上做迁移学习然后把自己的缺陷样本加进去变成私有数据集。下面我从数据集的格式设计讲起顺着训练流程走到实际调参最后把现场验证中的常见问题一并理清。1. 内容整体设计与思路拆解1.1 为什么采用YOLOV5目录格式之前很多做缺陷检测的工程师习惯用VOC或者COCO格式标注。VOC是一张图片配一个XML文件标注框信息写在XML里面的一个object标签下面COCO则是一张大JSON所有图片的标注信息全塞在一个文件里。这两种格式各有优势但到了实际训练阶段都得额外写一段转换脚本把自己麻烦一遍。VOC要解析XML然后生成txtCOCO要把JSON里的annotation信息遍历一遍再重写。而YOLOV5目录格式是“一张图对应一个txt”txt文件的每一行对应一个目标框格式是class x_center y_center width height好就是这四个坐标值外加一个类别序号。看起来简单但实际用起来非常方便。因为工业场景下经常需要一边采集数据一边看效果新增一批图、标注一批图直接丢到images目录和labels目录下就行不需要动任何索引文件。另外还有一个实际原因labelImg、labelme这类标注工具都支持直接导出YOLO格式或者一键转换。数据生产端和训练端是同一种格式中间的转换成本直接消失了。这个数据集在选型的时候明显是考虑了工业场景下“快速迭代、持续扩充”的实际需求。1.2 三类缺陷的标注思路与设计逻辑把缺陷分成划伤、崩角、锈蚀这三类不是随随便便分的。工业质检最核心的问题是你希望模型把什么东西和什么东西区分开。划伤和锈蚀可能同时出现在同一个齿面上如果不分开标模型就会把这两个特征混在一起给出的置信度会偏低或者一会报A类缺陷、一会报B类缺陷质检逻辑就乱了。崩角的形状和阴影经常和背景非常接近如果不单独作为一个类别模型很容易直接漏检。所以这三类的定义逻辑就是按缺陷成因和形态区分类别之间尽量不重叠。拿到手之后我在标注数据里看了一眼确认了标注文件里的坐标和缺陷边界是比较严格的没有出现“一个大框把三处划伤全圈进去”这种偷懒情况。这是保证训练效果的基础。1.3 数据集的“学习路径”意义这套数据集拿来训练YOLOV5s这类轻量级模型效果是很理想的。它足够小单卡几小时能训练完它又足够典型包含了细长条形目标划伤、小面积突变目标崩角、区域性纹理变化目标锈蚀这三种类型基本上覆盖了工业视觉中常见的缺陷形态。如果你从来没跑过YOLOV5的完整训练流程这套数据就是一条比较顺的“学习路径”先读懂目录结构再搞清楚标注格式然后调起训练脚本最后用val或者detect验证效果。整条链路走通之后再去做其他工业检测项目你就有底子了。2. 数据集目录结构与格式全解析2.1 标准目录树参考下面是我实际用它训练时使用的目录结构建议大家保持一致gear_defect_data/ ├── data.yaml ├── images/ │ ├── train/ │ │ ├── gear_001.jpg │ │ ├── gear_002.jpg │ │ └── ... │ └── val/ │ ├── gear_101.jpg │ └── ... └── labels/ ├── train/ │ ├── gear_001.txt │ └── ... └── val/ ├── gear_101.txt └── ...有一个细节要记住images/train里的图片文件名和labels/train里的txt文件名必须是一一对应的。比如图片叫gear_001.jpg那标注文件就必须叫gear_001.txt。YOLOV5在训练时是按文件名去匹配图片和标签的如果有一张图没有对应的txt文件会报一句警示信息然后直接跳过这张图——这在工业场景下容易造成“你以为自己在训练所有数据实际上训练集凭空少了一截”的情况。2.2 YOLO标注格式详解打开一个标注txt内容是这样2 0.581771 0.443490 0.104536 0.059357 0 0.433160 0.584848 0.099316 0.046754解释一下第一个数类别序号0对应scratch1对应chip2对应rust。第二个数目标中心点的x坐标已经归一化到0-1之间等于框中心x / 图片宽度。第三个数目标中心点的y坐标等于框中心y / 图片高度。第四个数目标框的宽度等于框宽 / 图片宽度。第五个数目标框的高度等于框高 / 图片高度。这里有一个容易踩坑的点YOLO格式的四个坐标值全是归一化之后的相对值不是像素值。所以不管你的原始图片是640x640还是1920x1080只要归一化做了YOLOV5都能直接处理。不要以为标注文件里写的是像素坐标直接用原图尺寸去推理会对不上。另外一个容易忽略的坑图片尺寸变了标注坐标不用跟着改。因为标注是归一化的相对坐标。但是如果你做了“裁切”操作比如把一张大图裁成四张子图那标注坐标就必须重新计算不做数据增强之前先搞清楚这一点可以避免后续大量返工。2.3 data.yaml配置说明训练前需要编辑data.yaml告诉YOLOV5在哪里找图片和标签以及类别信息。基本内容如下train: gear_defect_data/images/train val: gear_defect_data/images/val nc: 3 names: [scratch, chip, rust]注意train和val后面写的路径是找到images目录YOLOV5会自动根据images的路径推导出labels的路径——它默认把路径中的images替换为labels。所以一个常见的报错是把labels目录放错了位置或者图片路径写错了然后训练时出现“image ... missing labels”或者“found no labels”的红色警告。提示不要用绝对路径写在data.yaml里。除非你永远不换机器。目录路径建议用相对当前工作目录的路径或者放入一个比较稳定的绝对位置不然换个环境跑就要改一堆东西。3. 训练集与验证集的合理划分策略3.1 划分比例与逻辑这批数据已经帮你分好了训练集和验证集比例大概在8:2到7:3之间。这个比例是合理的。模型训练是需要在大量的“典型情况”上去学习特征验证集则是用来模拟“真正上场之后的抽检”。如果训练集太小模型泛化能力不足验证集上表现会一塌糊涂如果训练集太大、验证集太小又可能出现过拟合而你自己发现不了。7:3是工业缺陷检测里一个比较稳妥的窗口。少样本场景甚至可以到6:4但再往下训练集就不够吃了。3.2 划分数据时的“同源数据泄漏”问题关于训练集/验证集的划分有一件事很多人一开始不重视直到模型上线才意识到那就是不要按照图片序列盲目划分要按目标/工件个体来划分。比如齿轮A的图片拍了10张齿轮B的图片拍了10张如果随机划分训练/验证集那么齿轮A的图片可能一部分在训练集一部分在验证集。这样看起来指标很好看但实际是因为验证集里出现了与训练集过于相似的图像模型的“泛化能力”被高估了。到了新工件上你可能就翻车。正确的做法是尽量按照工件个体来划分一个齿轮的所有图片要么全在训练集要么全在验证集。这套示例数据的划分是合理的这也就意味着你后续如果自己扩充数据别偷懒随机切要先按“组”划分。3.3 划分之后的三步检查拿到划分好的数据集之后按下面三个步骤做一次检查检查类别分布是否均衡统计训练集和验证集中scratch、chip、rust三类各自的标注框数量。如果验证集中某个类别的数量是0那训练过程会非常迷惑因为loss中该类别的贡献一直是0最后这个类别很可能没有学习效果。工业场景下小样本类别干脆训练后单独验证。检查图片是否损坏工业现场有时候采集的图是花屏或者全黑的模型训练时越到后面越会被这些坏数据带偏。可以写一段简单的Python脚本扫描所有图片opencv读不出来的直接删掉。检查空标注如果图片是正常的但没有标注文件也就是这张图里没有任何缺陷这个时候要分情况看。如果只是少数几张没有缺陷通常直接剔除如果你想专门做“负样本”那就要单独处理。不要默认“没标就等于无缺陷”要确认过图片内容再说。4. YOLOV5训练实操全流程4.1 环境准备我用的是比较常规的一套环境你可以参照着来Python 3.8PyTorch 1.10CUDA 11.x显卡不行的纯CPU跑也可以就是慢YOLOV5仓库git clone https://github.com/ultralytics/yolov5.git克隆下来之后安装依赖pip install -r requirements.txt这一步往往会碰到一个错误torch版本跟CUDA版本对不上。建议先单独装好PyTorch去官网挑跟你显卡驱动匹配的命令再执行requirements.txt的安装。注意如果你只想快速验证不要求太高的mAP用CPU也完全可以跑这套小数据集就是epochs耗时会拉长。建议还是整一块NVIDIA显卡体验完全不同。4.2 修改模型配置文件训练前需要改两个配置文件models/yolov5s.yaml把里面的nc参数改为3。data.yaml确认上面的路径与类别列表正确。yolov5s.yaml的开头大概是nc: 3 # number of classes depth_multiple: 0.33 width_multiple: 0.50depth_multiple和width_multiple决定了网络的宽度和深度。yolov5s是“small”版本是速度和精度的折中。工业缺陷检测中轻量级、速度快、部署方便比超高精度更常被优先考虑。4.3 训练命令与参数解读基本的训练命令如下python train.py --img 640 --batch 16 --epochs 200 --data data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --name gear_defect这里每个参数我解释一遍因为很多人就是在这一层开始糊涂的--img 640输入图片尺寸。图片在训练时会缩放到640x640。工业缺陷检测中如果缺陷非常小可以适当加大到1280但训练时间会成倍上涨。先跑640有天花板了再往上加。--batch 16一次迭代喂给模型的图片数量。越大显存占用越高梯度更新时间越稳定。显存不够就调小到8或4。工业小数据集batch不用太小否则loss会震荡得很厉害。--epochs 200整个数据集被模型完整学习200轮次。对于小数据集200轮够看趋势了。不需要一上来就设很大。--weights yolov5s.pt预训练权重。这里的yolov5s.pt是在COCO数据集上预训练过的继承了它学到的基础视觉特征。迁移学习在工业场景下非常管用尤其是数据量不大的时候。--name gear_defect保存本次训练结果的文件夹名会生成在runs/train/gear_defect/目录下。训练过程中终端会打印每一轮的平均loss值runs/train/gear_defect/下面还会生成一些图表包括results.png这是判断训练好坏最直观的一张图。4.4 超参数调整的经验训练完后如果发现mAP不够高不要急着加数据先看看你现在这条曲线是怎么走的训练集loss降不下来但验证集loss也很高可能是模型容量不够尝试用yolov5m或者yolov5l增加网络宽度和深度或者加大预训练模型的复杂度。训练集loss一直降验证集loss稳定在某个值不降反升过拟合了。增加数据增强、加dropout、加数据量或者提前停止。工业检测小数据集很容易过拟合。loss能降但mAP很低大概率是正负样本不均衡或者标注框不准确。先检查labels里的坐标和图片中的真实目标是否匹配。YOLOV5还支持调超参数的遗传算法python train.py --epochs 50 --evolve它会自己生成一批超参数组合然后训练、评估、选优。在小数据集上跑这个很耗时但如果你愿意等一晚上第二天往往能收获一组比默认配置更好的参数。5. 常见问题与排查技巧实录说到YOLOV5训练工业检测数据常见的坑我已经替你们踩过不少下面整理一份问题速查表。问题现象可能原因排查方法训练报错“found no labels”标注路径不对或labels目录结构错误检查data.yaml中的路径确认图片对应txt存在训练时提示“skipping ... train image”图片损坏或标注文件为空用opencv逐一读图统计空txt文件loss下降特别慢学习率太低或数据集太小查看results.png适当加大--lr0或增加epochs验证集mAP高但实际检测差同源数据泄漏或过拟合训练集检查划分逻辑用新采集图片测试降低epochs检测结果漏掉小目标缺陷输入尺寸太小或标注框太小调大--img用小目标增强策略保证标注框不丢几条细节经验展开说说。第一条标注文件内容为空的情况。YOLOV5对于“这张图没有目标”的处理方式是不写txt文件或者txt里面没有任何内容。但很多标注工具默认会生成一个空txt。训练时YOLOV5看到空txt会认为这张图没有目标会把它参与负样本训练这是合法的。但如果你本意是想“标注缺陷图”结果有几十张图都是空的那这些负样本对模型学会检测缺陷基本没有正面帮助还占显存。我习惯先跑一个脚本统计一下空txt的数量确认不是标注遗漏。第二条验证集mAP高不代表现场表现好。工业缺陷检测的特殊之处在于现场背景复杂同一类型的缺陷在光照、角度变化下差异很大。训练集里如果都是单一背景模型学到的“划痕”可能是“在某个特定光线下出现的深色细线”换一个角度就不认了。所以一个严谨的做法是训练完模型之后抽一部分新拍的图片跑一遍detect.py用肉眼看看输出。mAP只给你一个数字肉眼才能给你“哦它真的找到了”的信心。第三条错误标注是最隐蔽的坑。有些标注框稍微偏一点模型一开始可能还能扛住但随着训练轮次增加这些错误标注会像坏老师一样一遍一遍教模型“框的位置可以有偏差”导致最终输出框不稳定。你会发现loss正常、mAP还行但实际输出框就是“差那么一点”。遇到这种情况除了重新检查标注一个笨但有效的办法是把训练集里损失最高的几十张图打印出来人工看一遍是哪里的问题。通常一轮下来就能抓出十来个标注错误。第四条关于数据增强。YOLOV5默认开启Mosaic增强就是把4张图拼成一张再训练对小目标检测很有效。但工业小数据集上Mosaic有一个副作用很多数据本身是1920x1080的大图缩放到640x640的时候缺陷已经被缩小了很多再把4张图拼一起每个缺陷就更小了。如果模型老是漏掉小缺陷试试在训练时关闭Mosaic增强或者把--img调成1280让模型先用高分辨率“看清楚”缺陷长什么样再逐步降低输入尺寸去推理。第五条训练集和验证集的比例不是越大越好。有些同学手里总共就几百张图一上来就按9:1切结果训练集几百张验证集几十张出来的验证mAP波动极大。工业小数据集的合理做法是先把数据扩增到位再按8:2划分。扩增不是简单翻转和旋转还包括亮度变化、对比度变化、噪声叠加这样模型才不会在换一个亮度之后就失效。6. 后续可扩展的方向从数据集到私有模型落地跑通这套齿轮缺陷检测数据之后你手上已经有了一条完整的从数据到训练的流水线。接下来要往工业场景落地的话可以按这个顺序去扩展先迁移到自己的数据上。用自己的齿轮样本替换images和labels中的内容类别名称和数量改成自己的就可以直接训练私有模型。如果自己的样本不够先别急着上复杂网络用YOLOV5s预训练权重迁移学习能用最小的成本探出数据质量的天花板在哪。再做一次全量标注重检。用训练好的模型跑一遍训练集输出预测框和置信度然后人工把所有置信度低于某个阈值的预测框找出来看是不是标注漏了或者标错了。这种“模型辅助标注”的方法在工业视觉领域真的很常用能节省大量人工标注时间。最后考虑推理端的部署。YOLOV5在这类数据上训练出来的模型权重可以导出为ONNX、TensorRT或者OpenVINO格式部署到边缘设备上。齿轮缺陷检测这种场景通常不需要特别复杂的后处理直接在检测框内判断“有缺陷/无缺陷”就可以输出给PLC或者质检系统了。部署的时候可以根据实际硬件情况把--img调到480甚至320推理速度会有非常明显的提升有些小缺陷也能保留。说到底这套齿轮缺陷检测数据集不是让你只用来跑一个demo就完事。它的价值在于给你提供了一个完全符合YOLOV5训练规范的样本结构——目录该怎么建、标注该怎么标、训练验证该怎么切、模型该怎么调。把这条流水线理解透后面换任何工业场景你都能快速搭出一套可用的检测方案来。我自己在拿到这类数据集时通常会在训练前多花半小时做上面那些检查跑一下标注情况统计、看一眼验证集图片分布、确认没有空标注。这半小时看起来是“耽误时间”实际上能帮你省下后面几天调试的精力。尤其是工业数据脏和乱才是常态清洗数据永远比调网络结构更优先。如果你正准备跑这套数据建议第一次训练时先用默认参数把全流程走通然后看results.png再决定往哪个方向调。不要一上来就把超参数改得面目全非那样你根本没法判断问题出在数据还是出在参数上。先跑通再优化这是所有目标检测项目的通用打法。本文还有配套的精品资源点击获取
返回列表