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

1. 先抽查两百张难例,再换骨干网络
通用数据集上平均精度涨两个点,产线误检却爆了,多半是验证集泄漏或标注噪声被平均掉了。我更愿意先人工审核两百张难例,再动骨干网络——干净标注是 可学习性的上限,模型再大也学不对持续错误的标签。
自动标注流水线加速产出,但模型偏差会进训练集:错标被放大、漏标被当负样本。抽查不是形式主义,是防静默污染。
2. 常见问题
错类:相似类混淆(行人与工人)。框贴边:部分标注,训练学切半物体。漏标:隐式背景当负样本,正样本被惩罚。近重复:训练测试跨集重复。框贴边尤其隐蔽——平均精度看起来正常,产线对小目标召回崩。
3. 切分:按场景,别随机
按 场景、日期、地点 切,别随机同场景进训练和测试。同视频不同帧进训练验证是经典泄漏——模型记住背景纹理,验证虚高。自动驾驶同路线不同天也是。
from sklearn.model_selection import GroupKFold
for tr, va in GroupKFold(5).split(X, y, groups=scene_id):
...按场景分组切分是底线,不是可选项。同一路线、同一车间、同一相机机位的数据应整组进训练或整组进验证——随机帧切分会让模型记住背景,验证虚高、产线暴雷。感知哈希查近重复是 cheap 的泄漏检测,值得写进数据发布 checklist。
4. 工具链与快速质检
FiftyOne、CVAT 审核;OpenCV 快速可视化:
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