4. 数据版本管理与数据集构建

在工业视觉项目中,模型精度往往不是被网络结构卡住的,而是被数据卡住的。同一批产线图像,如果标注口径变了、增强策略改了、训练集与测试集混入了同一卷料,模型指标就会在“看似相同”的数据集上出现不可复现的波动。因此,数据版本管理要解决的核心问题是:让每一次训练都能追溯到唯一确定的数据快照,并让这个快照的构成、划分和偏差可被解释。

一、三类数据的版本控制对象

工业视觉的数据通常分为三层:原始数据、标注数据、增强数据。它们的版本控制策略并不相同。

  • 原始数据(raw):相机采集的原始图像或视频帧,是不可再生的证据。版本控制以“批次”为单位,记录采集时间、工位、相机型号、镜头、光源、曝光、增益、产品批次。原始数据原则上只追加、不修改,一旦落盘即冻结。
  • 标注数据(label):与原始图像一一对应的标注文件(如 COCO JSON、YOLO txt、掩膜 PNG)。标注会迭代,因此需要独立版本号,并记录标注规范版本、标注人、复核人、修改原因。
  • 增强数据(aug):由原始图像加标注经几何、光度变换生成。增强数据不应单独长期存储为“新数据源”,而应保存增强配方(随机种子、变换参数、概率),使其可重放。这样既节省存储,又保证可复现。
推荐做法:原始数据与标注数据用内容哈希(如 SHA-256)标识,增强数据用“原始哈希 + 配方哈希”派生标识。数据集版本号 = 三者组合的清单哈希。

二、数据集划分策略

划分不是简单按 8:1:1 随机切分。工业场景中,同一产品、同一卷料、同一班次采集的图像高度相似,随机切分会导致训练集和测试集“近邻泄漏”,测试指标虚高。正确的划分应按采集单元分组:以产品批次、卷料号或采集时段为分组键,整组进入同一子集。

常用比例与适用场景:

划分方式比例适用场景
按批次分组划分70/15/15缺陷类型稳定、批次间差异小
按时间前向划分早期训练 / 中期验证 / 后期测试模拟产线时间漂移,评估泛化
留一批次交叉验证K 折批次少、样本珍贵

验证集用于调参和早停,测试集只在最终评估时使用一次。若测试集被反复查看并据此调参,它实际上已退化为验证集,必须重新划分。

三、类别不平衡处理

工业缺陷检测中,划痕、脏污等缺陷可能只占千分之几,而背景占绝大多数。直接训练会让模型偏向多数类。处理手段分三个层次:

  1. 采样层:对含缺陷图像过采样,或对背景图像欠采样。过采样时注意同一图像的不同增强副本不应跨子集分布。
  2. 损失层:使用 Focal Loss 或带类别权重的交叉熵。权重可按 w_c = N / (K · n_c) 估算,其中 N 为总样本数,K 为类别数,n_c 为第 c 类样本数。
  3. 增强层:对稀有类做针对性增强,如小目标缺陷的随机缩放、旋转、局部对比度扰动,但增强幅度需与真实成像变化一致,避免引入不存在的形态。
不要用“复制缺陷图像”来平衡类别。重复样本会让模型记住该图像而非学习缺陷特征,验证指标会明显高于真实产线表现。

四、数据卡编写

数据卡(Data Card)是数据集的“身份证”,让接手者无需翻代码就能判断该数据集能否用于当前任务。一份可用的数据卡至少包含:数据集名称与版本号、采集设备与工位、图像数量与分辨率、类别定义与每类样本数、标注规范版本、划分方式与各子集数量、增强配方摘要、已知偏差与限制、许可与使用范围。

下面这张图概括了从原始数据到可训练数据集版本的完整链路,以及版本标识的生成位置:

原始数据 raw 图像 / 视频帧 只追加 · 冻结 标注数据 label JSON / txt / mask 独立版本号 增强配方 aug 种子 + 变换参数 可重放 · 不存副本 内容哈希 SHA-256 唯一标识 按采集单元分组划分(防近邻泄漏) 训练集 70% 调参 · 训练 验证集 15% 早停 · 选型 测试集 15% 最终评估 · 只用一次 类别不平衡处理(三层协同) 采样层 过采样 / 欠采样 损失层 Focal / 类别权重 增强层 稀有类定向增强 数据集版本 = 原始哈希 + 标注哈希 + 增强配方哈希 + 划分清单哈希

五、一个可执行的数据卡示例

以下是一份面向某金属表面缺陷检测项目的数据卡片段,字段可直接套用:

数据集名称:metal-surface-defect
版本号:v2.3.0
采集设备:Basler acA2440-75um,镜头 25mm,环形白光
工位:冲压线 A 工位,曝光 8000us,增益 6dB
图像数量:12480 张,分辨率 2448×2048
类别定义:
  scratch(划痕)   n=412
  stain(脏污)     n=286
  dent(凹坑)      n=158
  background(背景)n=11624
标注规范版本:label-spec-v1.4(最小框面积 12px²)
划分方式:按卷料号分组,70/15/15
  训练 8736 / 验证 1872 / 测试 1872
增强配方:随机水平翻转 p=0.5,亮度 ±15%,高斯噪声 σ=3
已知偏差:夜班光照偏暗,样本占比 18%,测试集已覆盖
使用范围:仅限 A 工位同型号产品,跨工位需重新评估

有了这份数据卡,当模型在测试集上 mAP 下降 3 个点时,团队可以快速判断是标注规范变更、增强配方调整,还是划分方式改变导致的,而不是盲目重训。数据版本管理的价值,正在于把“数据变了”这件事从模糊感受变成可定位的工程事实。