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 知识体系总览
下面这张图,把本章的核心内容串起来了。你可以把它当成一个“数据采集与标注”的检查清单。