3. 数据集准备

做工业质检,说白了就是教模型看懂「什么是不好的」。但模型很笨,你得先给它看成千上万张带缺陷的图,还得告诉它「缺陷长什么样」。这一步没做好,后面调参调得再好也是白搭。我见过太多项目,算法选得挺先进,结果因为数据集质量太差,上线就崩。

这一章,我们就来聊聊工业缺陷数据集怎么来、怎么标、怎么扩。全是实战里踩过的坑和总结出的经验。

3.1 工业缺陷数据集的采集:从产线到硬盘

数据采集是第一步,也是最容易被低估的一步。很多人觉得「不就是拍照片吗?」——嗯,还真不是那么简单。

核心原则:采集的数据必须覆盖产线上所有可能出现的缺陷类型、光照条件、产品角度和背景干扰。宁可多拍,不要漏拍。

我在一个手机中框检测项目里就吃过亏。当时只拍了正常产线光照下的样本,结果模型一上线,遇到夜班换了一批灯管,误检率直接飙到30%。后来我们不得不重新采集了不同光照、不同角度的数据,才把误检压下来。

工业数据采集通常有几种方式:

采集方式 适用场景 优缺点
在线采集(产线相机) 大批量、固定工位 数据真实,但缺陷样本少
离线采集(实验室搭建) 小批量、多品种 可控性强,但成本高
半自动采集(人工+机械臂) 缺陷样本极少的场景 灵活,但效率低

我个人习惯是:优先用在线采集,因为数据最贴近真实工况。但缺陷样本太少时,我会在实验室里用离线方式「复现」缺陷,比如用刻刀划痕、用滴管制造污渍。你想想看,模型没见过某种缺陷,它怎么可能学会检测?

小技巧:采集时记得记录元数据——产品批次、相机参数、光照强度、缺陷类型。这些信息在后续分析模型失败案例时,能帮你快速定位问题。

3.2 标注工具:LabelImg vs LabelMe,怎么选?

数据有了,接下来就是标注。工业质检里最常用的两个标注工具就是 LabelImg 和 LabelMe。很多人问我哪个好,我的回答是:看你的检测任务类型。

3.2.1 LabelImg:矩形框的王者

LabelImg 是 YOLO 系列最经典的标注工具。它生成的标注格式直接就是 YOLO 的 txt 格式,几乎不用转换。如果你做的是目标检测(比如检测划痕、脏污的位置),用 LabelImg 最省事。

# LabelImg 生成的 YOLO 格式标注示例
# 每行:class_id x_center y_center width height
# 坐标都是归一化到 [0,1] 的
0 0.523 0.412 0.156 0.089
1 0.234 0.678 0.098 0.123

我曾经在一个 PCB 缺陷检测项目里,用 LabelImg 标了 5000 张图。它的快捷键很顺手,W 键画框、A/D 键切换图片,标起来效率很高。但要注意:LabelImg 只支持矩形框,如果你的缺陷形状不规则(比如裂纹、气泡),矩形框会框进大量背景,干扰模型学习。

3.2.2 LabelMe:多边形标注的利器

LabelMe 支持多边形标注,可以精确勾勒出缺陷的轮廓。它生成的标注是 JSON 格式,需要转换成 YOLO 的格式才能用。虽然多了一步转换,但对于不规则缺陷,效果比矩形框好太多。

避坑指南:我曾经在一个玻璃划痕检测项目里,用 LabelImg 标矩形框,模型训练完精度死活上不去。后来换成 LabelMe 标多边形,mAP 直接提升了 12 个点。为什么?因为划痕是细长条,矩形框里大部分是背景,模型学了一堆「背景特征」,反而把真正的划痕特征淹没了。

两个工具怎么选?我列了个对比表:

对比维度 LabelImg LabelMe
标注形状 仅矩形框 多边形、矩形、圆形等
输出格式 YOLO txt / Pascal VOC XML JSON(需转换)
标注效率 高(快捷键多) 中等(多边形点选较慢)
适用场景 规则形状缺陷、通用目标检测 不规则缺陷、实例分割
学习成本 低 中等

我的建议是:如果缺陷形状接近矩形(比如缺角、脏污块),用 LabelImg;如果缺陷形状不规则(比如裂纹、划痕、气泡),用 LabelMe。 别嫌麻烦,标注质量直接决定模型上限。

3.3 数据增强策略:让有限的数据发挥无限的价值

工业场景里,缺陷样本往往很少。一条产线一天可能只产出几十个缺陷品,但模型训练需要几千张。怎么办?数据增强。

数据增强不是随便翻翻转转就完事了。工业质检有它的特殊性——增强策略必须模拟真实产线的变化,而不是为了增强而增强。

核心原则:数据增强后的样本,必须仍然「像」真实产线上可能出现的图像。不要做那些现实中不可能出现的变换。

3.3.1 几何变换:模拟产品位置和角度的变化

产线上产品的位置不可能每次都完全居中,角度也会有微小偏差。所以几何变换是必须的。

  • 随机旋转: ±15° 以内,太大就不像了
  • 随机平移: 水平和垂直方向 ±10%
  • 随机缩放: 0.8~1.2 倍
  • 水平翻转: 注意!有些产品有方向性(比如文字、logo),不能翻转

我记得在一个手机外壳检测项目里,客户要求不能做水平翻转,因为外壳上的 logo 方向是固定的。如果强行翻转,模型会学到「logo 朝右才是对的」,反而把正常产品误判为缺陷。

3.3.2 色彩变换:模拟光照变化

产线的光照会随着时间、灯管老化、环境光变化而波动。色彩变换就是为了模拟这些变化。

  • 亮度调整: ±20%
  • 对比度调整: ±15%
  • 饱和度调整: ±10%
  • 高斯噪声: 模拟传感器噪声

小技巧:不要用 HSV 空间的随机抖动,工业图像很多是灰度图,HSV 变换会引入不真实的颜色。我一般只用亮度和对比度调整,再加一点高斯噪声就够了。

3.3.3 高级增强:Mosaic 和 MixUp

YOLO 系列自带 Mosaic 增强,就是把 4 张图拼成 1 张。这个策略对工业场景特别有用——它能让模型在 1 张图里同时看到多个缺陷,变相增加了缺陷样本的密度。

# YOLOv8 训练时启用 Mosaic 增强
# 在 ultralytics 的配置文件中设置
mosaic: 1.0  # 1.0 表示 100% 的批次使用 Mosaic
mixup: 0.1  # 10% 的概率使用 MixUp

MixUp 是把两张图按比例混合,标签也按比例混合。这个策略对工业场景效果一般,因为混合后的图像看起来「不真实」,模型可能会学到一些奇怪的纹理。我个人习惯:Mosaic 必开,MixUp 看情况。

3.3.4 工业场景特有的增强策略

除了通用增强,工业场景还有一些「独门秘籍」:

增强策略 模拟场景 实现方式
随机遮挡 产品被零件遮挡 随机用黑色矩形块遮挡部分区域
模糊模拟 相机失焦、运动模糊 高斯模糊、运动模糊核
光照渐变 产线光照不均匀 在图像上叠加径向渐变
缺陷复制粘贴 增加缺陷样本数量 从标注图中抠出缺陷,粘贴到正常图上

缺陷复制粘贴这个策略,我强烈推荐。做法很简单:从已有的缺陷样本里把缺陷区域抠出来,然后随机粘贴到正常产品的图像上。这样既能增加缺陷样本数量,又能保证缺陷的「真实性」——因为缺陷本身是真实的,只是位置变了。

避坑指南:缺陷复制粘贴时,要注意粘贴位置的合理性。比如划痕不能贴在产品的边缘之外,气泡不能贴在金属表面(气泡只出现在透明材质上)。我曾经犯过这个错,模型学了一堆「不可能出现的缺陷位置」,上线后误检率奇高。

3.4 本章知识体系总览

说了这么多,我画了一张图来总结本章的核心内容。你可以把它当作一个「数据准备路线图」:

工业缺陷数据集准备流程 工业缺陷数据集准备流程 数据采集 在线采集 离线采集 半自动采集 数据标注 LabelImg LabelMe 增强 几何变换 色彩变换 高质量工业缺陷数据集 YOLO 模型训练 关键要点 • 采集:覆盖所有缺陷类型、光照条件、产品角度 • 标注:规则缺陷用 LabelImg,不规则缺陷用 LabelMe • 增强:模拟真实产线变化,不做不可能出现的变换

从这张图可以看得很清楚:数据采集是源头,标注是桥梁,增强是放大器。三个环节环环相扣,任何一个环节出问题,最终模型效果都会打折扣。