4. 工业数据集采集与标注:从相机选型到数据划分

数据,说白了就是工业质检项目的“燃料”。模型再牛,没有高质量的数据也是白搭。我见过太多团队花大把时间调参,结果发现是数据本身有问题——要么光照不对,要么标注漏了关键缺陷。这一章,咱们就把数据采集和标注这摊事彻底捋清楚。

4.1 工业相机选型与拍摄规范

选相机不是越贵越好,得看你的检测对象是什么。我当年刚入行时,给一个手机玻璃盖板项目选相机,差点买了台高速相机——后来发现根本用不上,白白浪费预算。

4.1.1 相机选型核心参数

参数 说明 我的建议
分辨率 决定能看清多小的缺陷 一般缺陷至少占 3×3 像素,按检测精度反推
帧率 决定检测节拍 流水线场景至少 30fps,静态拍摄无所谓
传感器类型 CCD vs CMOS 工业场景 CCD 更稳,但 CMOS 性价比高
接口 USB3.0 / GigE / Camera Link GigE 最常用,布线方便,距离远
镜头接口 C / CS / F 等 C 口最常见,适配镜头多
小技巧: 选型时先算“像素当量”——即每个像素对应实际物理尺寸。比如检测 0.1mm 的划痕,用 500 万像素相机拍 100mm×100mm 视野,像素当量约 0.045mm/pixel,勉强够用。我个人习惯留 2 倍余量。

4.1.2 拍摄规范:光照与角度

工业质检里,光照比相机本身还重要。你想想看,同样的缺陷,打光角度不对,拍出来就是“隐身”的。

  • 环形光:适合检测划痕、凹坑,能凸显表面纹理变化。
  • 背光:适合检测轮廓、尺寸,比如螺丝是否缺失。
  • 同轴光:适合高反光表面,比如金属、玻璃。
  • 条形光:适合大面积均匀照明,比如 PCB 板检测。
避坑指南: 我曾经在一个项目中,用环形光拍金属表面,结果反光太强,模型死活学不会。后来换成同轴光加偏振片,问题才解决。记住:先调光,再调参。

拍摄角度方面,尽量让相机光轴垂直于被测面。如果必须倾斜,要保证畸变在可接受范围内——不然模型学到的特征全是歪的。

4.2 LabelImg / LabelStudio 标注工具使用

标注工具选哪个?我的经验是:小项目用 LabelImg,大项目用 LabelStudio。前者轻量,后者功能全,支持多人协作。

4.2.1 LabelImg:快速上手

LabelImg 是纯 Python 写的,安装简单。我最喜欢它的快捷键——标注效率能翻倍。

# 安装
pip install labelImg

# 启动
labelImg

# 常用快捷键
W: 创建矩形框
A: 上一张图
D: 下一张图
Ctrl+S: 保存
Del: 删除选中框

标注时注意:框要贴紧缺陷边缘,别留太多背景。我见过有人框得松松垮垮,结果模型学了一堆背景特征,检测精度直接掉 10 个点。

4.2.2 LabelStudio:企业级标注

LabelStudio 支持图像、文本、音频等多种类型,而且可以配置标注模板。对于工业质检,我一般用它的“矩形框标注”模板,配合“分类”标签。

  • 项目配置:定义标签列表,比如“划痕”、“脏污”、“破损”。
  • 多人协作:分配任务给不同标注员,支持审核流程。
  • 导出格式:支持 COCO、VOC、YOLO 格式,直接喂给模型。
我的习惯: 先用 LabelImg 快速标注几百张做原型验证,等模型跑通了,再用 LabelStudio 组织大规模标注。这样前期不浪费配置时间,后期又能保证质量。

4.3 数据集划分:训练 / 验证 / 测试

数据划分看似简单,但坑不少。我见过有人把同一产品的不同照片分到训练集和测试集——结果模型“记住”了产品特征,而不是缺陷特征。

4.3.1 划分原则

数据集 比例 用途 注意事项
训练集 70% - 80% 模型学习参数 包含所有缺陷类型,分布尽量均匀
验证集 10% - 15% 调参、选模型 不能参与训练,不能泄露信息
测试集 10% - 15% 最终评估 完全独立,只在最后用一次
重要: 测试集一旦用过,就不能再用来调参。否则你评估的“泛化能力”其实是“记忆能力”。我早期犯过这个错,模型在测试集上 99% 准确率,上线直接崩。

4.3.2 划分方法

工业场景下,我推荐用 分层抽样——保证每个缺陷类型在三个集合中的比例一致。比如划痕占 30%,那训练、验证、测试集里划痕也各占 30%。

# 用 sklearn 做分层划分
from sklearn.model_selection import train_test_split

# 假设 images 是图片路径列表,labels 是对应的缺陷类型
train_imgs, temp_imgs, train_labels, temp_labels = train_test_split(
    images, labels, test_size=0.3, stratify=labels, random_state=42
)

val_imgs, test_imgs, val_labels, test_labels = train_test_split(
    temp_imgs, temp_labels, test_size=0.5, stratify=temp_labels, random_state=42
)

另外,同一产品的不同照片要分到同一集合。比如一个零件拍了 10 张不同角度的照片,这 10 张要么全在训练集,要么全在测试集——不然模型会“作弊”。

4.4 本章知识体系

下面这张图把数据采集到划分的流程串起来了,你可以对照着梳理自己的项目。

工业数据集采集与标注流程 1. 需求分析 2. 相机选型 3. 拍摄规范 4. 数据标注 5. 数据集划分 6. 输出数据集 关键要点: • 相机选型:分辨率、帧率、传感器、接口、镜头 • 拍摄规范:光照类型(环形/背光/同轴/条形)、角度、畸变控制 • 标注工具:小项目用 LabelImg,大项目用 LabelStudio • 数据集划分:分层抽样、按产品分组、测试集只用一次
总结一下: 数据采集和标注是工业质检项目的“地基”。相机选型要算像素当量,拍摄规范要优先调光,标注工具按项目规模选,数据集划分要分层抽样。每一步都踩实了,后面的模型训练才能顺风顺水。