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

基于YOLO的轴承缺陷检测:568张小样本数据集的落地实践

发布时间:2026/9/26 7:36:36

资讯中心
01
ARTICLE

基于YOLO的轴承缺陷检测:568张小样本数据集的落地实践

基于YOLO的轴承缺陷检测:568张小样本数据集的落地实践
简介本资源为基于YOLO的轴承生产缺陷检测项目配套数据集面向从事工业视觉检测、深度学习目标检测方向的开发者与研究人员可用于训练和验证轴承缺陷识别模型。数据集共568张轴承图片划分为三类缺陷涵盖裂纹、划痕、腐蚀等常见生产问题适合作为YOLO系列算法实战与课程设计素材。压缩包共1772个文件包含624张jpg图像、577个txt标注文件、568个xml标注文件以及2个Python脚本和1个yaml配置文件整体约755.12MB覆盖图像、标注与训练配置的完整流程。目前已有336人学习下载。读者可借助该数据集完成从数据预处理、标注解析到模型训练与验证的全流程实践快速搭建缺陷检测原型并在此基础上进行数据增强、模型迭代与鲁棒性测试为工业质检场景提供可复用的方案参考。1. 568 张轴承图、3 类缺陷小样本产线检测到底能不能落地产线上真正让人头疼的从来不是「有没有模型」而是「模型能不能在只有几百张图的情况下把该拦的缺陷拦住」。轴承生产缺陷检测就是典型场景滚道划伤、保持架变形、内外圈磕碰这些缺陷在整条产线上出现的比例极低一天下来能攒到的有效样本可能就几十张。等你辛辛苦苦标完发现数据集只有 568 张、类别只有三类第一反应往往是——这点数据训 YOLO能行吗我的答案是能但前提是你别把它当成通用目标检测来做。568 张图、3 个类别属于典型的小样本工业检测任务它的核心矛盾不是「模型够不够强」而是「数据够不够用、标注够不够准、评估够不够贴近产线」。YOLO 系列尤其是 YOLOv8 这一代在小数据集上的迁移能力已经足够好真正决定成败的是数据组织方式、增强策略、置信度门限和误检漏检的取舍。这篇笔记就围绕「基于 YOLO 的轴承生产缺陷检测数据集 568 张、三类」这个具体命题把从环境搭建、数据转换、训练调参到避坑排查的完整路径讲清楚适合手上已经有一批轴承缺陷图、想快速跑通 baseline 的工程师也适合正在评估这条路值不值得投入的团队。2. 三类缺陷怎么定义轴承检测的标注口径与数据组织2.1 先定类别再谈模型轴承缺陷检测最容易翻车的地方不是模型选错而是类别定义含糊。568 张图、三类听起来简单但如果三类之间边界不清标注一致性就会崩模型学到的就是噪声。常见的三类划分方式是表面划伤滚道、外圈工作面的线状损伤、压痕/磕碰点状或块状的塑性变形、锈蚀/污渍面状的颜色异常。这三类在视觉上有一个天然的分界划伤是线状、压痕是块状、锈蚀是面状形态差异明显模型相对容易区分。但实际标注时会出现大量「既像划伤又像锈蚀」的样本比如一条带锈的划痕。我的处理原则是以主导成因定类划痕为主就归划伤锈蚀面积超过一半就归锈蚀并在标注规范里写清楚这条规则。标注口径一旦定下来就不要中途改否则前面标的数据全部要返工。三类缺陷的典型特征和标注要点可以对照下表类别典型形态标注框建议易混淆对象划伤线状、有方向性紧贴划痕外接矩形长条可拆多框反光条纹、油迹压痕/磕碰点状、块状、边缘锐利框住变形区域含轻微外扩灰尘颗粒、脏点锈蚀/污渍面状、颜色偏红褐或暗黄框住色变区域允许重叠光照不均、阴影2.2 568 张图怎么切分才不浪费小样本任务里验证集和测试集的切分方式直接决定你看到的指标是不是真的。568 张图如果按 8:1:1 切验证集只有 56 张、测试集 56 张单类样本可能只有十几张指标波动会非常大。我一般会按 7:1.5:1.5 来切训练集约 397 张、验证集约 85 张、测试集约 85 张同时保证每个类别在三个集合里的比例大致一致。切分时还有一个关键动作同一批次、同一轴承的图片必须放在同一个集合里否则会出现「训练集见过这个轴承的正面、测试集考它的侧面」这种数据泄漏指标虚高上线就崩。数据组织上YOLO 系列统一用 images/labels 双目录结构标签是 txt 格式每行类别id 中心x 中心y 宽 高坐标全部归一化到 0~1。568 张图对应的标签文件数量必须一致缺一个都会在训练时报错。建议在切分前先跑一遍完整性检查确认每张图都有对应标签、每个标签的坐标都在 0~1 之间、类别 id 不超过 2三类对应 0/1/2。2.3 用脚本把标注转成 YOLO 格式如果你手上的标注是 VOC 的 xml 或者 LabelMe 的 json需要先转成 YOLO 的 txt。下面这个脚本处理 VOC 格式转换逻辑是读取 xml 里的 bndbox算出中心点和宽高再归一化。转换前把类别名和 id 的映射写死避免顺序错乱。import os import xml.etree.ElementTree as ET # 类别映射顺序必须和训练时的 data.yaml 一致 CLASS_MAP {scratch: 0, dent: 1, rust: 2} def voc_to_yolo(xml_dir, out_dir, img_w, img_h): os.makedirs(out_dir, exist_okTrue) for xml_file in os.listdir(xml_dir): if not xml_file.endswith(.xml): continue tree ET.parse(os.path.join(xml_dir, xml_file)) root tree.getroot() lines [] for obj in root.iter(object): name obj.find(name).text.strip() if name not in CLASS_MAP: continue # 未定义类别直接跳过避免污染训练 cls_id CLASS_MAP[name] bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) # 归一化中心点 宽高 cx (xmin xmax) / 2.0 / img_w cy (ymin ymax) / 2.0 / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{cls_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) out_name xml_file.replace(.xml, .txt) with open(os.path.join(out_dir, out_name), w) as f: f.write(\n.join(lines)) voc_to_yolo(./annotations, ./labels, 640, 640)这段代码里有两个参数要特别注意img_w和img_h必须和实际图片尺寸一致如果你的图片尺寸不统一建议先统一 resize 到 640×640 再转换否则归一化坐标会错位。CLASS_MAP的顺序决定了类别 id训练时的 data.yaml 里 names 列表必须和它完全对应顺序错了模型会把划伤学成锈蚀。转换完成后随机抽 5 张图用可视化脚本画框检查一遍确认框的位置和类别都对这一步花五分钟能省掉后面几小时的排查。3. 从零跑通 YOLOv8 训练环境、配置与 568 张图的第一版模型3.1 环境搭建别在版本上浪费时间YOLOv8 的环境搭建现在已经是标准流程但版本冲突仍然是新手最容易卡住的地方。我的建议是直接用 conda 建一个干净环境Python 选 3.9 或 3.10PyTorch 按显卡 CUDA 版本装对应版本然后 pip 装 ultralytics。不要在一个已经装了一堆包的老环境里折腾依赖冲突排查起来非常费时间。conda create -n bearing_yolo python3.10 -y conda activate bearing_yolo # 按你的 CUDA 版本选择下面以 CUDA 11.8 为例 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install ultralytics装完之后用yolo checks验证环境确认 PyTorch 能识别到 GPU、CUDA 可用。如果显示 CPU only说明 PyTorch 版本和驱动不匹配重新装对应版本即可。这一步不要跳过很多人训练慢十倍就是因为实际在 CPU 上跑。3.2 data.yaml 与训练参数568 张图的配置逻辑数据配置文件 data.yaml 是训练入口三个字段必须写对train/val 指向图片目录、nc 是类别数、names 是类别名列表。568 张图、三类nc 就是 3。path: ./bearing_dataset train: images/train val: images/val nc: 3 names: [scratch, dent, rust]训练命令用命令行方式启动关键参数我一般这样设yolo detect train \ data./bearing_dataset/data.yaml \ modelyolov8s.pt \ epochs150 \ imgsz640 \ batch16 \ lr00.01 \ patience30 \ augmentTrue \ cacheTrue \ namebearing_v1逐个说参数含义。modelyolov8s.pt选 s 而不是 n是因为 568 张图样本量小n 模型容量太低容易欠拟合s 在精度和速度之间更平衡如果你的显卡显存紧张可以退到 n但 mAP 通常会掉 2~3 个点。epochs150配合patience30意思是 30 轮没有提升就早停小数据集上过拟合来得快早停能帮你省时间。imgsz640是标准输入尺寸轴承缺陷里的划伤往往很细分辨率再低会丢细节。batch16在 8G 显存上基本能跑显存不够就降到 8。lr00.01是初始学习率小数据集上不要设太大否则 loss 震荡。augmentTrue开启内置增强包括 mosaic、翻转、HSV 扰动这对 568 张图来说是刚需相当于把有效样本量放大几倍。cacheTrue把图片缓存到内存568 张图完全放得下能明显加快每个 epoch 的速度。3.3 训练过程看什么loss 曲线与 mAP 的读法训练启动后终端会打印每个 epoch 的 box_loss、cls_loss、dfl_loss 和 mAP50、mAP50-95。小数据集上前 20 个 epoch 的 loss 下降会很快之后逐渐平缓。如果 box_loss 一直不降大概率是标注框有问题回去检查标签如果 cls_loss 高但 box_loss 正常说明类别区分度不够可能是三类缺陷本身太像需要重新审视标注口径。mAP50 到 0.85 以上、mAP50-95 到 0.5 以上对于 568 张图的三类任务来说就是一个可用的 baseline。如果 mAP50 卡在 0.6 左右上不去先别急着换模型优先检查验证集里有没有标注错误——小数据集里一张错标图对指标的影响可能超过 1 个点。训练结束后runs/detect/bearing_v1 目录下会有权重文件、混淆矩阵、PR 曲线和验证集预测可视化混淆矩阵能直接告诉你哪两类在互相误判这是后续优化的方向。4. 小样本下的增强与调参让 568 张图发挥出 2000 张的效果4.1 内置增强够不够什么时候需要自定义YOLOv8 内置的增强已经覆盖了 mosaic、随机翻转、HSV 扰动、平移缩放对轴承缺陷检测来说mosaic 是最有效的一个它把四张图拼成一张强迫模型在不同背景下识别缺陷等价于增加了场景多样性。但内置增强有两个盲区一是旋转角度有限轴承是圆环形零件缺陷可能出现在任意角度水平翻转不够用二是没有针对性的噪声和模糊增强而产线相机在振动、油污环境下拍出来的图往往带噪声。如果第一版模型在验证集上表现尚可但测试集掉点明显说明泛化不够这时候可以考虑自定义增强。常见做法是在数据加载阶段加入随机旋转90/180/270 度和高斯噪声。不过要注意旋转增强会改变缺陷的方向性对划伤这类有方向特征的缺陷旋转后模型可能学到「方向不重要」的错误先验所以旋转增强要适度不要每张图都转。4.2 置信度门限与 NMS产线误检漏检的取舍模型训练完只是第一步真正上线时置信度门限conf和 NMS 的 IoU 门限才是决定误检漏检的关键。默认 conf0.25在轴承检测里往往偏低会把反光、油迹误判成缺陷。我的经验是先把 conf 提到 0.4~0.5观察误检是否下降同时看漏检有没有明显上升。如果某类缺陷本身样本少、模型置信度普遍偏低可以对这一类单独设门限而不是全局一刀切。NMS 的 IoU 门限默认 0.7对于密集小目标可以降到 0.5~0.6避免相邻缺陷被合并。轴承缺陷通常不会特别密集但如果一张图上有多条划伤IoU 门限太高会导致只保留一个框。验证时用yolo detect val配合不同 conf 跑几组画出误检率和漏检率的权衡曲线选一个产线能接受的平衡点。这个点没有标准答案取决于你的产线是「宁可错杀」还是「宁可放过」。4.3 用验证集做一轮参数扫描与其凭感觉调参不如用脚本跑一轮小规模扫描。下面这段代码遍历几组 conf 和 iou输出每组的 mAP 和误检数量帮你快速定位合理区间。from ultralytics import YOLO model YOLO(runs/detect/bearing_v1/weights/best.pt) for conf in [0.25, 0.35, 0.45, 0.55]: for iou in [0.5, 0.6, 0.7]: metrics model.val( data./bearing_dataset/data.yaml, confconf, iouiou, verboseFalse ) print(fconf{conf} iou{iou} mAP50{metrics.box.map50:.4f} fmAP50-95{metrics.box.map:.4f})这段代码的逻辑是固定模型权重只变后处理参数观察指标变化。注意model.val每次都会重新推理整个验证集85 张图跑一轮很快四组 conf 乘三组 iou 一共 12 轮几分钟就能跑完。跑完后重点看 mAP50 和 mAP50-95 的变化趋势如果某个 conf 下 mAP 明显下降说明门限太高把真缺陷滤掉了如果 mAP 变化不大但你能通过可视化看到误检减少那就选那个 conf。参数扫描的目的是缩小范围最终值还是要结合产线实际图片来定。5. 避坑与排查轴承缺陷检测里最容易翻车的 5 个地方5.1 训练 loss 正常但验证 mAP 极低现象训练集 loss 稳定下降但验证集 mAP 一直在 0.1~0.2 徘徊。原因通常是训练集和验证集的类别分布严重不均或者验证集里存在大量标注错误。568 张图里如果某一类只有二三十张切分后验证集里可能只有几张模型根本没学到这一类。解决方法是检查每个类别的样本数对样本极少的类别做过采样或者在切分时保证每类在验证集里至少有 10 张。同时用可视化脚本把验证集的标注框画出来逐张核对错标漏标在这个阶段必须清掉。5.2 模型把反光当成划伤现象产线图片上的金属反光条纹被大量误检为划伤误检率居高不下。原因是训练集里缺少反光样本模型没见过这种干扰把高亮线状区域和划伤混为一谈。解决方法是在训练集里主动加入带反光的正常样本作为背景图负样本让模型学会区分反光和真实划伤。另一个办法是在预处理阶段做光照归一化比如 CLAHE 或者简单的直方图均衡降低反光的影响。如果反光和划伤在灰度上确实难以区分可以考虑加一路偏振光成像从硬件层面解决。5.3 小目标缺陷被漏检现象大划伤、大压痕能检出但细小的点状压痕和短划痕经常漏检。原因是 YOLO 的 P3 特征图虽然负责小目标但 568 张图里小目标样本本身就不多模型对小目标的响应弱。解决方法有两个方向一是提高输入分辨率从 640 提到 800 或 1024小目标在特征图上的像素更多二是在数据增强里加入小目标的复制粘贴增强把缺陷区域裁剪出来随机贴到正常图上增加小目标样本量。提高分辨率会带来显存和速度的代价需要根据产线节拍权衡。5.4 换了批次图片后指标暴跌现象在验证集上 mAP 0.85换一批新拍的产线图片后 mAP 掉到 0.5。原因是训练集和实际产线图片存在域偏移可能是光照、相机参数、拍摄角度变了。这是工业检测里最经典的问题解决思路是让训练集尽量覆盖产线的各种工况包括不同光照、不同批次、不同角度的图片。如果新批次图片已经积累了一些最直接的办法是把它们标注后加入训练集做增量训练哪怕只加几十张域适应效果也很明显。另外推理前做和训练时一致的预处理同样的 resize、同样的归一化也是必须的预处理不一致会直接导致指标崩。5.5 标注框贴太紧导致模型学不到完整缺陷现象模型能定位到缺陷但框总是偏小或者同一缺陷被拆成多个框。原因是标注时框贴得太紧只框住了缺陷最明显的部分模型学到的就是「缺陷只有这么大」。解决方法是标注时在缺陷外扩 2~5 个像素保证框住完整缺陷区域同时统一标注规范避免同一个人前后标法不一致。如果缺陷本身形状不规则可以用分割标注代替检测框YOLOv8 的 seg 模型支持实例分割对不规则缺陷的定位更准但标注成本更高568 张图用检测框通常够用。6. 把 568 张图用到极致增量训练与产线验证的两个技巧第一版模型跑通之后真正决定它能不能上产线的是持续迭代的能力。568 张图不是终点而是一个起点。产线每天都在产生新图片其中被模型误检或漏检的样本是最有价值的把它们挑出来标注后加入训练集做增量训练模型会一轮比一轮稳。我的习惯是每周做一次增量把这一周产线上置信度在 0.2~0.4 之间的「模糊样本」导出人工复核后标注混入原训练集重新训练。注意增量训练时不要只喂新数据新旧数据要按比例混合否则模型会灾难性遗忘旧类别。一般新数据占比控制在 20%~30%学习率比首次训练低一个量级比如 0.001训练 30~50 个 epoch 即可。第二个技巧是产线验证时不要只看 mAP要建立自己的验收指标。mAP 是学术指标产线关心的是「每千件漏检几个、误检几个」。我一般会在测试集上统计三个数漏检率真实缺陷没被检出的比例、误检率正常件被误报的比例、以及每张图的平均推理耗时。漏检率优先于误检率因为漏检意味着不良品流出代价远高于误检。如果漏检率不达标优先提高召回可以适当降低 conf 门限用误检换漏检如果误检率太高影响产线效率再逐步收紧门限。这个权衡没有一劳永逸的参数需要根据产线的质量要求和节拍反复调。最后说一个我踩过的坑不要等到模型「完美」了才上产线试跑。小样本模型的泛化边界只有在真实数据上才能暴露出来越早让模型接触产线图片越早发现域偏移和标注口径问题。我一般会在第一版模型 mAP50 到 0.7 左右就拿到产线上做影子模式运行——模型照常推理但不控制执行机构只记录结果人工复核后积累反馈。这样跑两周你能拿到一批真实场景下的误检漏检样本比在验证集上反复调参有用得多。轴承缺陷检测这个方向568 张图完全能做出可用的 baseline难的是持续迭代和产线适配把这两件事做扎实模型的价值才能真正落地。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

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

03
WHY YAOTU

想打造同款高转化官网?

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

◈

场景化定制

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

◐

营销型架构

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

▲

全周期服务

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

免费获取你的建站方案

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