2. 数据采集与标注规范

数据采集和标注,说白了就是给模型“喂饭”。饭好不好,直接决定了模型能不能干活。我在工业缺陷检测这行摸爬滚打了好几年,见过太多项目因为前期数据没搞好,后面算法调得再好也白搭。这一章,咱们就把这“饭”怎么做,聊透了。

2.1 工业相机选型:别让眼睛骗了你

相机就是模型的“眼睛”。选错了,后面全是废片。我个人习惯,先看三个核心参数:分辨率、帧率、传感器类型。

参数 说明 我的建议
分辨率 决定能看到多小的缺陷。比如检测0.1mm的划痕,视野是100mm,那分辨率至少得1000像素以上。 别盲目追求高像素。像素越高,数据量越大,训练越慢。够用就行。
帧率 决定采集速度。产线跑得快,帧率就得高,不然会漏检。 我曾经在一个项目里,产线速度60m/min,用了个30fps的相机,结果图像全是拖影。后来换了120fps的才搞定。
传感器类型 CCD vs CMOS。CCD噪声低,适合弱光;CMOS速度快,性价比高。 现在主流工业相机基本都是CMOS了,除非你对噪声极其敏感。
小技巧: 选型时,记得算一下“像元尺寸”。像元越大,感光能力越强,但分辨率会下降。一般3.45μm到5.5μm是比较常见的区间。

2.2 光照环境搭建:打光打得好,缺陷跑不了

光照是工业视觉的灵魂。你想想看,一个透明的玻璃瓶,你用正面光打过去,啥也看不见。但用背光一打,里面的气泡、裂纹清清楚楚。

我常用的几种打光方式:

  • 环形光: 适合检测平面上的划痕、凹坑。光线均匀,能消除阴影。
  • 背光: 适合检测透明物体或轮廓。比如玻璃、塑料瓶的缺陷。
  • 同轴光: 适合高反光表面,比如金属、镜面。能避免反光干扰。
  • 条形光: 适合检测大面积的表面,比如布匹、纸张。
避坑指南: 我曾经在一个项目中,用环形光打金属表面,结果反光太强,把划痕全盖住了。后来换成同轴光,才把缺陷“挖”出来。记住,打光不是越亮越好,而是要“让缺陷和背景的对比度最大”。

2.3 标注工具:LabelImg vs CVAT

标注是体力活,但工具选对了,能省一半力。我主要用两个工具:LabelImg 和 CVAT。

2.3.1 LabelImg:轻量级首选

LabelImg 是个老牌工具,基于Python + Qt。安装简单,开箱即用。适合小团队或个人项目。

  • 优点: 轻量、免费、支持PascalVOC和YOLO格式。
  • 缺点: 不支持多人协作,标注效率一般。
  • 我的用法: 快速标注几百张图片时,我首选它。快捷键设置好,鼠标点几下就完事。

2.3.2 CVAT:团队协作利器

CVAT 是Intel开源的在线标注平台。功能强大,支持多人同时标注,还能自动标注(基于预训练模型)。

  • 优点: 支持多人协作、自动标注、多种格式导出(COCO、VOC、YOLO等)。
  • 缺点: 部署稍复杂,需要Docker环境。
  • 我的用法: 项目大了,需要几个人同时标注时,我肯定用CVAT。还能设置标注任务,分配工作量,方便管理。
特性 LabelImg CVAT
安装难度 简单 中等(需Docker)
多人协作 不支持 支持
自动标注 不支持 支持
格式支持 VOC、YOLO COCO、VOC、YOLO等
适用场景 个人/小项目 团队/大项目

2.4 标注格式:COCO vs VOC

标注完了,得存成模型能读的格式。目前最主流的就是COCO和VOC。我刚开始学的时候,也搞不清这俩有啥区别。说白了,就是“存数据的方式不同”。

2.4.1 Pascal VOC格式

VOC格式用XML文件存标注信息。每个图片对应一个XML文件。结构清晰,但文件多,管理起来麻烦。

<annotation>
    <folder>images</folder>
    <filename>000001.jpg</filename>
    <size>
        <width>1920</width>
        <height>1080</height>
        <depth>3</depth>
    </size>
    <object>
        <name>scratch</name>
        <bndbox>
            <xmin>100</xmin>
            <ymin>150</ymin>
            <xmax>200</xmax>
            <ymax>250</ymax>
        </bndbox>
    </object>
</annotation>

2.4.2 COCO格式

COCO格式用一个JSON文件存所有标注信息。结构更紧凑,适合大数据集。现在大部分新模型(如Detectron2、MMDetection)都默认用COCO格式。

{
    "images": [{"id": 1, "file_name": "000001.jpg", "width": 1920, "height": 1080}],
    "annotations": [{"id": 1, "image_id": 1, "category_id": 1, "bbox": [100, 150, 100, 100]}],
    "categories": [{"id": 1, "name": "scratch"}]
}
核心区别: VOC是“一个图片一个文件”,COCO是“所有图片一个文件”。COCO的bbox格式是[x, y, width, height],VOC是[xmin, ymin, xmax, ymax]。转换时别搞混了。

2.5 知识体系总览

下面这张图,把本章的核心内容串起来了。你可以把它当成一个“数据采集与标注”的检查清单。

数据采集与标注知识体系 数据采集与标注 工业相机选型 光照环境搭建 标注工具 标注格式 分辨率 帧率 传感器类型 环形光 背光 同轴光 条形光 LabelImg CVAT Pascal VOC COCO 标注格式决定了 模型如何读取数据