4、数据集构建与标注:数据采集策略、标注规范与质量审核
做工业视觉这么多年,我越来越觉得一个道理:模型的上限,其实在数据采集阶段就定死了。你算法调得再好,如果训练数据跟产线实际工况差着十万八千里,那落地的时候一定会摔跟头。今天咱们就聊聊数据集构建这件事,从采集策略到标注规范,再到质量审核,把这条链路捋清楚。
4.1 数据采集策略:别让模型「没见过」
数据采集不是简单拿相机拍几张照片就完事。我见过太多项目,实验室里跑得飞起,一上产线就崩——为什么?因为采集的数据太「干净」了。
4.1.1 覆盖真实工况的多样性
工业场景下,光照、角度、产品批次、设备振动都会影响图像。你想想看,如果训练集里全是正光、静态、完美产品,模型怎么可能处理得了产线上那些「刁钻」情况?
我个人习惯,在制定采集方案时至少考虑以下维度:
| 维度 | 典型变化 | 采集建议 |
|---|---|---|
| 光照条件 | 亮度、色温、角度 | 不同时段、不同光源组合下采集 |
| 产品姿态 | 旋转、平移、倾斜 | 模拟传送带抖动、人工放置偏差 |
| 缺陷类型 | 划痕、脏污、变形、缺料 | 每种缺陷至少采集 200+ 样本 |
| 背景干扰 | 反光、阴影、油污 | 保留产线真实背景,不要抠图 |
4.1.2 正负样本比例的把控
工业检测里,良品(负样本)往往占绝大多数,缺陷品(正样本)少得可怜。如果直接拿原始比例训练,模型会学成「永远判良品」的懒汉。
我建议的采集比例:
- 良品样本:覆盖正常工艺波动即可,不用太多
- 缺陷样本:每种缺陷类型至少 300-500 张,复杂缺陷要更多
- 难例样本:边界模糊、光照异常、遮挡等「擦边球」情况,专门采集一批
说白了,缺陷样本才是模型真正要学的知识。如果现场缺陷不够,可以考虑用数据增强或仿真生成来补充,但一定要保证生成的缺陷足够真实。
4.2 标注规范:三种标注方式的选型
标注这件事,直接决定了模型能学到什么。工业视觉里常用的标注方式有三种:矩形框、多边形、分割掩码。选哪个?看任务需求。
4.2.1 矩形框标注
最基础、最快速的方式。用 (x_min, y_min, x_max, y_max) 框出目标区域。
- 适用场景:目标检测、简单缺陷定位(如螺丝缺失、标签歪斜)
- 优点:标注效率高,一个熟练工每天能标 1000+ 张
- 缺点:框内包含大量背景,对不规则缺陷不够精确
# 矩形框标注格式示例(COCO格式)
{
"bbox": [120, 45, 80, 60], # x, y, width, height
"category_id": 1, # 缺陷类别
"area": 4800,
"iscrowd": 0
}
4.2.2 多边形标注
用一系列顶点勾勒出目标的精确轮廓。标注量比矩形框大,但精度更高。
- 适用场景:不规则缺陷(划痕、裂纹、崩边)、精密零件轮廓检测
- 优点:背景干扰少,模型定位更准
- 缺点:标注耗时,复杂形状可能需要 20+ 个顶点
# 多边形标注格式示例
{
"segmentation": [[
120, 45, 140, 50, 160, 55,
180, 60, 200, 50, 190, 30
]], # 顶点坐标列表
"category_id": 2
}
嗯,这里要注意:多边形顶点数量不是越多越好。我见过有人把一条划痕标了 50 个点,结果模型反而学歪了。一般来说,10-15 个顶点就能描述大多数工业缺陷。
4.2.3 分割掩码
像素级别的标注,每个像素都打上类别标签。这是最精确、也是最费力的方式。
- 适用场景:语义分割、实例分割、精密测量(如划痕长度、面积计算)
- 优点:信息最完整,可以精确计算缺陷面积、形状
- 缺点:标注成本极高,一张复杂图像可能标 30 分钟
# 分割掩码标注(RLE格式,更节省存储)
{
"segmentation": {
"size": [480, 640],
"counts": "a1b2c3d4e5..." # 游程编码
},
"category_id": 3
}
4.3 数据清洗与质量审核:别让垃圾数据毁了模型
数据标完了,是不是就能直接训练了?别急。我见过太多团队,标注数据里错误百出——漏标、错标、边界不准……用这种数据训练,模型能好才怪。
4.3.1 常见的数据质量问题
| 问题类型 | 具体表现 | 影响 |
|---|---|---|
| 漏标 | 图像中存在缺陷但未标注 | 模型学到「缺陷=正常」,漏检率飙升 |
| 错标 | 类别标错(如划痕标成脏污) | 类别混淆,模型分不清 |
| 边界不准 | 标注框/多边形偏离实际目标 | 定位精度下降,IoU 指标虚高 |
| 重复标注 | 同一缺陷被标了多次 | 模型对重复区域过度关注 |
4.3.2 我的清洗流程
我习惯用「三遍审核法」来保证数据质量:
- 第一遍:自动清洗
- 检查标注格式是否正确(坐标是否越界、类别 ID 是否合法)
- 过滤掉模糊、过暗、过曝的图像
- 剔除标注面积过小(< 10 像素)的缺陷
- 第二遍:人工抽检
- 随机抽取 10%-20% 的数据,逐张检查标注质量
- 重点关注难例样本和边界样本
- 记录错误类型,反馈给标注团队
- 第三遍:交叉验证
- 让两个标注员独立标注同一批数据
- 计算标注一致性(如 IoU、类别一致性)
- 不一致的样本由专家仲裁
4.3.3 标注一致性评估
怎么量化标注质量?我常用两个指标:
- IoU(交并比):两个标注框的重叠程度,一般要求 > 0.7
- Cohen's Kappa:类别标注的一致性,> 0.8 算合格
# 计算两个标注框的 IoU
def compute_iou(box1, box2):
x1 = max(box1[0], box2[0])
y1 = max(box1[1], box2[1])
x2 = min(box1[2], box2[2])
y2 = min(box1[3], box2[3])
inter = max(0, x2 - x1) * max(0, y2 - y1)
area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
union = area1 + area2 - inter
return inter / union if union > 0 else 0
4.4 本章知识体系
下面这张图把数据集构建与标注的核心流程串起来了,你可以对照着梳理自己的项目:
你看,整个流程环环相扣。数据采集是源头,标注规范是骨架,质量审核是最后一道防线。任何一个环节出问题,都会传导到下游,最终影响模型在产线上的表现。