4、数据采集与标注规范:工业相机选型、光照与角度策略、LabelImg/Labelme标注工具、COCO格式详解

数据采集和标注,说白了就是给模型「喂什么」和「怎么喂」的问题。我见过太多项目,模型结构选得挺先进,最后栽在数据上——不是拍出来的图片质量不行,就是标注格式乱七八糟。这一章,咱们就把这些坑一个个填上。

核心观点: 深度学习模型的上限,90%由数据质量决定。工业场景下,一张光线均匀、角度标准的图片,比十张随手拍的照片更有价值。

4.1 工业相机选型:别只看像素

很多人一上来就问「我要多少万像素的相机?」。其实像素只是基础,工业场景下更关键的是传感器类型、帧率和接口协议。

我个人习惯把选型拆成三步:

  1. 确定检测精度——你要看清多小的缺陷?0.1mm的划痕还是1mm的裂纹?
  2. 计算分辨率——视野范围除以最小缺陷尺寸,再乘以2~3倍裕量。
  3. 选传感器——CMOS还是CCD?
参数 CMOS(主流) CCD(高端)
成本 低,适合批量部署 高,适合科研级
帧率 高(60fps以上常见) 中等(30fps左右)
噪声 略高,但算法可补偿 低,暗光表现好
工业场景 90%的产线检测 半导体晶圆、精密零件

嗯,这里要注意:接口协议千万别选错。USB3.0适合短距离(<5米),GigE(千兆网)适合长距离(<100米),Camera Link适合超高带宽。我在一条汽车零部件产线上吃过亏——选了USB3.0,结果相机离工控机8米,信号衰减严重,最后全换成GigE才搞定。

4.2 光照与角度策略:打光比选相机更重要

你想想看,同样的缺陷,在不同光照下拍出来完全两样。我经常跟团队说:打光打好了,模型训练省一半功夫。

工业场景下,常见的光照策略有四种:

  • 明场照明——光源与相机同侧,适合表面平整、反光强的物体(如金属、玻璃)。
  • 暗场照明——光源从侧面打,适合检测划痕、凹凸(缺陷处会反光变亮)。
  • 背光照明——光源在物体背后,适合检测轮廓、孔洞、透明物体。
  • 同轴照明——光线通过半透半反镜垂直照射,适合高反光表面(如镜面、晶圆)。
我的经验: 对于金属表面的划痕缺陷,暗场照明效果最好。我曾经对比过明场和暗场下的同一批样本,暗场下缺陷的对比度提升了3倍以上,模型收敛速度快了将近一倍。

角度策略上,我建议固定相机与工件之间的相对位置。产线上工件是流动的,但拍摄角度必须一致。如果角度变化太大,模型会学到「角度特征」而不是「缺陷特征」——这坑我踩过。

4.3 标注工具:LabelImg vs Labelme

标注工具的选择,取决于你要做目标检测还是语义分割。两个工具我都重度用过,说说区别。

工具 适用任务 输出格式 标注方式
LabelImg 目标检测(矩形框) Pascal VOC XML / YOLO TXT 拖拽画框,速度快
Labelme 语义分割(多边形) JSON(可转COCO) 点选轮廓,精度高

LabelImg 适合快速框出缺陷位置。比如检测螺丝有没有滑丝、PCB板有没有缺件——矩形框就够了。我个人习惯用它的「自动保存」功能,配合快捷键(W画框、D下一张),一天能标500张。

Labelme 适合不规则缺陷。比如裂纹、气泡、划痕——这些形状用矩形框会框进大量背景,干扰模型学习。Labelme支持多边形标注,你可以沿着缺陷边缘点一圈,精度高很多。

避坑指南: 我曾经用Labelme标了2000张图,结果发现标注的JSON文件里,坐标是归一化的还是坐标搞混了。后来统一用坐标+COCO格式转换脚本,才把数据对齐。建议一开始就定好坐标规范。

4.4 COCO格式详解:工业场景下的最佳实践

COCO格式是目前工业界最通用的标注格式之一。它用JSON文件组织所有信息,结构清晰,主流框架(Detectron2、MMDetection、YOLOv5/v8)都原生支持。

一个标准的COCO JSON包含以下几个顶级字段:

{
  "images": [ ... ],   // 图片信息:id、文件名、宽高
  "annotations": [ ... ], // 标注信息:id、图片id、类别id、bbox、segmentation
  "categories": [ ... ]   // 类别信息:id、名称
}

我重点说说bbox字段。COCO的bbox格式是 [x, y, width, height],注意是左上角坐标+宽高,不是中心点坐标。很多新手在这里翻车——把YOLO格式的 [cx, cy, w, h] 直接塞进COCO,结果模型训练出来框全偏了。

另外,segmentation字段在工业缺陷分割中很常用。它存储的是多边形顶点坐标列表:

"segmentation": [[x1, y1, x2, y2, ..., xn, yn]]

每个多边形是一维数组,偶数位是x,奇数位是y。如果有多个不连通的缺陷区域,可以用多个多边形。

工业场景建议: 如果你的缺陷类别超过10类,建议在COCO的info字段里加上版本号和标注日期。我维护过一个300类缺陷的数据集,没有版本管理,后来都不知道哪个JSON是最新的——血的教训。

4.5 数据采集与标注全流程

把上面这些串起来,一个完整的流程是这样的:

数据采集与标注全流程 ① 产线采集 ② 相机选型 ③ 光照策略 ④ 图像采集 ⑤ 数据筛选 ⑥ 标注工具 ⑦ COCO格式 ⑧ 质量检查 不合格则返回重新标注或采集 💡 关键指标: • 每类缺陷至少采集500张原始图像 • 标注框与缺陷边缘误差 < 3像素 • 标注一致性(多人标注同一张图)> 95%

流程走完,你得到的就是一份高质量的工业缺陷数据集。我个人习惯在最后一步质量检查上花最多时间——随机抽10%的标注结果,用可视化脚本把框和分割画出来,肉眼过一遍。虽然费时,但能发现很多自动化检查漏掉的问题。

小技巧: 用Python写一个简单的COCO可视化脚本,把标注框和分割轮廓叠加在原图上,输出成一张张检查图。我每次标注完都会跑一遍,看到框偏了或者漏标的,直接打回重标。

数据准备好了,下一件事就是怎么用这些数据训练一个能上产线的模型。不过那是后面章节的内容了,咱们先把数据这关守好——数据质量过硬,模型训练就成功了一半。