返回专辑
·Johan·3 分钟阅读

视觉数据:标注比你想的脏

错标、漏标、框贴边和 train/test 场景泄漏,常比换 backbone 涨点更多;清洗数据是视觉项目最被低估的杠杆。

视觉数据:标注比你想的脏

1. 先抽查两百张难例,再换骨干网络

通用数据集上平均精度涨两个点,产线误检却爆了,多半是验证集泄漏或标注噪声被平均掉了。我更愿意先人工审核两百张难例,再动骨干网络——干净标注是 可学习性的上限,模型再大也学不对持续错误的标签。

自动标注流水线加速产出,但模型偏差会进训练集:错标被放大、漏标被当负样本。抽查不是形式主义,是防静默污染。

2. 常见问题

错类:相似类混淆(行人与工人)。框贴边:部分标注,训练学切半物体。漏标:隐式背景当负样本,正样本被惩罚。近重复:训练测试跨集重复。框贴边尤其隐蔽——平均精度看起来正常,产线对小目标召回崩。

3. 切分:按场景,别随机

场景、日期、地点 切,别随机同场景进训练和测试。同视频不同帧进训练验证是经典泄漏——模型记住背景纹理,验证虚高。自动驾驶同路线不同天也是。

python
from sklearn.model_selection import GroupKFold
for tr, va in GroupKFold(5).split(X, y, groups=scene_id):
    ...

按场景分组切分是底线,不是可选项。同一路线、同一车间、同一相机机位的数据应整组进训练或整组进验证——随机帧切分会让模型记住背景,验证虚高、产线暴雷。感知哈希查近重复是 cheap 的泄漏检测,值得写进数据发布 checklist。

4. 工具链与快速质检

FiftyOne、CVAT 审核;OpenCV 快速可视化:

python
for box, cls in labels:
    x, y, w, h = box
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
    cv2.putText(img, str(cls), (x, y-5),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)

OpenCV 快速可视化适合 spot check,但批量审核仍推荐 FiftyOne 等工具——它们能按嵌入距离聚类难例,比逐张翻图效率高一个数量级。

5. 自动标注与离群复核

自动标注模型 bias 会静默进训练集:它系统性漏标的小目标,在验证集上被平均掉,产线才爆。我会对单图损失或嵌入距离 top-k 做人工复核,而不是只看平均精度。导出 COCO 格式前断言类别编号连续、框宽高大于零;组合矩形合并重叠预测框查双重标注。删脏样本常比修框快——图像修复不能修标签,别在错误标注上浪费训练算力。

6. 案例:同路线泄漏

某园区检测项目验证精度零点九一,上线误检率超预期三倍。审计发现训练验证按帧随机切,同一路线不同帧跨集——模型记住固定背景牌。改按路线分组切分后,验证精度降到零点八二但更可信,产线误检率对齐验证。

7. 版本与验收

数据集版本与模型版本绑定版本标签。增删五百张要比「再训一轮」更谨慎记录——否则无法解释精度跳变。

  • 人工审核抽样错误率
  • 训练验证近重复检测(嵌入余弦或感知哈希)
  • 修正标签前后验证精度差值
  • 难例分桶(小目标、暗光、遮挡)分开报

难例分桶(小目标、暗光、遮挡)分开报,避免平均精度掩盖产线真正痛点。数据集变更应走评审:增删五百张的影响常大于多训十轮——版本记录是复现的前提。干净标注是视觉项目最被低估的杠杆。

← 全部文章

johan's blog