4. 数据采集与标注:从硬件选型到格式落地

数据采集和标注,说白了就是给模型准备「教材」。教材质量不行,模型学出来也是半吊子。我见过太多团队花大把时间调模型,结果回头一看,数据本身就有问题——光源打错了、相机分辨率不够、标注框歪歪扭扭。嗯,今天咱们就把这块硬骨头啃下来。

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

很多人一上来就问「我要多少万像素的相机?」。其实像素只是起点,真正决定成像质量的,是传感器类型、帧率和接口带宽。

参数 说明 我的建议
传感器类型 CCD vs CMOS 静态缺陷检测用CCD,动态产线用全局快门CMOS
分辨率 500万~2000万像素常见 根据最小缺陷尺寸算:至少3个像素覆盖最小缺陷
帧率 FPS 产线速度÷视野宽度,再留20%余量
接口 USB3.0 / GigE / Camera Link GigE最通用,Camera Link适合高速高分辨率
避坑指南: 我曾经选了一款500万像素的USB3.0相机,结果产线一跑起来,传输带宽不够,画面掉帧。后来换成GigE接口才解决。记住:接口带宽要按「分辨率×帧率×像素深度」算一遍。

4.2 光源方案设计:打光打得好,标注少烦恼

光源是工业视觉里最容易被低估的环节。我个人的经验是:光源方案定下来,标注工作量能减少30%。为什么?因为好的打光能让缺陷「跳」出来,差的打光让缺陷「藏」进去。

常见光源类型

  • 环形光源:适合检测划痕、凹坑,打光均匀
  • 条形光源:适合检测边缘、轮廓,比如PCB焊点
  • 同轴光源:适合高反光表面,比如金属、镜面
  • 背光源:适合测量尺寸、检测通孔

打光角度

高角度打光突出表面纹理,低角度打光突出凹凸缺陷。我做过一个金属表面划痕项目,一开始用高角度打光,划痕根本看不清。换成低角度后,划痕像刀刻一样明显。你想想看,同样的相机、同样的算法,就换个光源角度,效果天差地别。

核心原则: 光源方案的目标不是「照亮」,而是「增强对比度」——让缺陷区域和正常区域的灰度差最大化。

4.3 标注工具:LabelImg vs CVAT

标注工具我用了不少,最常用的就两个:LabelImg 和 CVAT。它们各有各的适用场景。

特性 LabelImg CVAT
安装方式 本地安装,轻量 Docker部署,Web端
适用场景 单人小项目,几百张图 团队协作,上万张图
标注格式 Pascal VOC / YOLO COCO / VOC / YOLO / 自定义
高级功能 基本矩形框 多边形、关键点、自动标注、AI辅助

LabelImg 快速上手

# 安装
pip install labelImg

# 启动
labelImg

# 快捷键
W: 创建矩形框
A: 上一张
D: 下一张
Ctrl+S: 保存

我个人习惯用 LabelImg 做小批量验证,比如先标200张看看模型能不能收敛。如果项目规模大,我会直接上 CVAT,因为它支持多人同时标注,还能用半自动标注功能——先训练一个初版模型,然后用模型预标注,人工修正,效率能翻好几倍。

注意: CVAT 部署需要 Docker 环境,内存建议至少 8GB。我曾经在 4GB 的机器上跑,标注界面卡得不行,后来加了内存才流畅。

4.4 标注格式:COCO、YOLO、VOC

标注格式说白了就是「怎么把框的位置存下来」。三种主流格式各有各的脾气。

Pascal VOC (XML格式)

每个图片对应一个XML文件,框的坐标是 xmin, ymin, xmax, ymax(左上角和右下角)。

<annotation>
  <filename>img_001.jpg</filename>
  <size>
    <width>1920</width>
    <height>1080</height>
  </size>
  <object>
    <name>scratch</name>
    <bndbox>
      <xmin>100</xmin>
      <ymin>200</ymin>
      <xmax>300</xmax>
      <ymax>400</ymax>
    </bndbox>
  </object>
</annotation>

YOLO (TXT格式)

一个TXT文件存所有框,坐标是归一化的 class_id, x_center, y_center, width, height。

0 0.156 0.278 0.104 0.185
1 0.450 0.600 0.080 0.120

COCO (JSON格式)

所有标注信息放在一个JSON文件里,支持分割多边形。适合实例分割任务。

{
  "images": [{"id": 1, "file_name": "img_001.jpg", "width": 1920, "height": 1080}],
  "annotations": [{"id": 1, "image_id": 1, "category_id": 1, "bbox": [100, 200, 200, 200]}],
  "categories": [{"id": 1, "name": "scratch"}]
}
我的选择策略: 做目标检测用YOLO格式(轻量、好解析),做实例分割用COCO格式,做分类任务用VOC格式。如果你不确定,那就用COCO——它兼容性最好,主流框架都支持。

4.5 知识体系总览

下面这张图把本章的核心逻辑串起来了。从硬件采集到标注格式,每一步都影响最终的数据集质量。

数据采集与标注知识体系 数据采集 光源方案 标注工具 传感器 分辨率 环形 同轴 LabelImg CVAT 标注格式:COCO / YOLO / VOC 高质量缺陷数据集 💡 核心逻辑: 相机选型决定图像质量 → 光源方案增强缺陷对比度 → 标注工具选择影响效率 → 标注格式决定框架兼容性

4.6 标注流程实战

最后,我分享一下自己常用的标注流程,你直接照着做就行:

  1. 采集原始图像:按光源方案架好设备,拍100~200张测试图,检查成像质量
  2. 制定标注规范:明确「什么是缺陷」「框要包多紧」「重叠框怎么处理」
  3. 选择工具:小项目用LabelImg,大项目用CVAT
  4. 标注+质检:标完一轮后,随机抽20%让另一个人复检,不一致的地方讨论修正
  5. 格式转换:用脚本统一转成目标格式(我常用 labelme2coco.py 这类工具)
  6. 数据划分:训练集70%、验证集15%、测试集15%,按类别分布分层抽样
一句话总结: 数据采集和标注不是「体力活」,而是「技术活」。光源方案定得好,标注量减半;标注规范定得清,模型效果翻倍。