4. 数据采集与标注:从硬件选型到格式落地
数据采集和标注,说白了就是给模型准备「教材」。教材质量不行,模型学出来也是半吊子。我见过太多团队花大把时间调模型,结果回头一看,数据本身就有问题——光源打错了、相机分辨率不够、标注框歪歪扭扭。嗯,今天咱们就把这块硬骨头啃下来。
4.1 工业相机选型:别只看像素
很多人一上来就问「我要多少万像素的相机?」。其实像素只是起点,真正决定成像质量的,是传感器类型、帧率和接口带宽。
| 参数 | 说明 | 我的建议 |
|---|---|---|
| 传感器类型 | CCD vs CMOS | 静态缺陷检测用CCD,动态产线用全局快门CMOS |
| 分辨率 | 500万~2000万像素常见 | 根据最小缺陷尺寸算:至少3个像素覆盖最小缺陷 |
| 帧率 | FPS | 产线速度÷视野宽度,再留20%余量 |
| 接口 | USB3.0 / GigE / Camera Link | GigE最通用,Camera Link适合高速高分辨率 |
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,因为它支持多人同时标注,还能用半自动标注功能——先训练一个初版模型,然后用模型预标注,人工修正,效率能翻好几倍。
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"}]
}
4.5 知识体系总览
下面这张图把本章的核心逻辑串起来了。从硬件采集到标注格式,每一步都影响最终的数据集质量。
4.6 标注流程实战
最后,我分享一下自己常用的标注流程,你直接照着做就行:
- 采集原始图像:按光源方案架好设备,拍100~200张测试图,检查成像质量
- 制定标注规范:明确「什么是缺陷」「框要包多紧」「重叠框怎么处理」
- 选择工具:小项目用LabelImg,大项目用CVAT
- 标注+质检:标完一轮后,随机抽20%让另一个人复检,不一致的地方讨论修正
- 格式转换:用脚本统一转成目标格式(我常用
labelme2coco.py这类工具) - 数据划分:训练集70%、验证集15%、测试集15%,按类别分布分层抽样