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

增广与标签一致

几何增广必须同步变换 bbox、mask 和 keypoints——框没跟着旋转,等于制造错标;albumentations 的 bbox_params 不是可选配置。

增广与标签一致

1. 框没跟着旋转,等于错标

检测 pipeline 加了 RandomRotate,mAP 训越久越差——可视化发现 bbox 仍在原 orientation,image 转了 90°。等于约三成样本 label 错。几何增广必须同步变换 bbox、mask、keypointsbbox_params 不是可选配置,是 label 契约的一部分。

2. Albumentations 正确用法

python
import albumentations as A
transform = A.Compose([
    A.HorizontalFlip(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
    A.Rotate(limit=15, p=0.3),
], bbox_params=A.BboxParams(
    format='pascal_voc', label_fields=['labels'], min_visibility=0.3))
out = transform(image=img, bboxes=boxes, labels=labels)

format 必须与数据一致:pascal_voc、coco、yolo 等。min_visibility 旋转后框大部分出界则 drop,避免无效 label。label_fields 让 class id 与 bbox 同步索引。

torchvision v2 transforms 支持 joint transform——API 不同,契约相同:image 和 annotation 同一随机 seed 同一几何变换。

3. 分类 vs 检测/分割

分类只有 image-level label,RandomCrop/Flip 不破坏语义(除极端 crop 裁掉主体)。检测/分割/instance seg 有 spatial annotation——任何改变 pixel 布局的增广都必须变换 annotation。Color jitter、Gaussian noise 不改变 geometry,无需动 bbox。

Mixup/CutMix 对检测更复杂——框的混合权重和 overlap 处理有专门实现,别直接套分类版。

4. 常见 bug

resize 时 image 用 bilinear、bbox 未按 scale 缩放。flip 时 x 坐标未 mirror。normalize 只作用于 image,label 被误 normalize。train/val 增广不一致:val 应 only resize/center crop,无 random geom。mosaic/multi-image aug 框坐标系未统一到 output canvas。

写 unit test:固定 seed,对已知 image+bbox 做 transform,assert 框与 visual overlay 一致。

5. 与 overfit-first 的衔接

新 pipeline 先做五十张 overfit——增广破坏 label 时 tiny set 都学不会。可视化增广后 overlay 是 debug 第一步,比调 LR 优先。

6. 案例:旋转增广未同步

某项目加旋转后 mAP 降——overlay 显示框未转。加 bbox_params 后 mAP 恢复并略涨。几何增广的第一条是 label 同步,不是增广强度。

7. 验收

  • 几何增广含 bbox_params 或等价 joint transform。
  • 增广后 visualization 框与物体对齐。
  • unit test 覆盖 flip/rotate/resize 坐标变换。
  • val 无 random geom aug,与 train 策略分离。
  • min_visibility 等过滤减少 invalid box。

8. 落地与衔接

数据流水线合并请求必须含边界框参数或联合变换,并附固定种子的叠加截图。单元测试覆盖翻转、旋转、缩放坐标变换,持续集成失败则阻断合并。训练与验证增广策略分文件配置,验证禁止随机几何变换。新增强广类型先过五十张过拟合门槛再开全量。文档写清框格式与最小可见度默认值,避免多人混用不同标注格式。审查时对照可视化,不靠口头保证标签同步。

9. 案例复盘

某检测加随机旋转后平均精度越训越差,叠加图显示框未随图像旋转——约三成样本等价错标。补边界框参数后指标恢复并略涨。复盘把几何增广合并模板改为必须附前后对比图,并加坐标单元测试。此后旋转、马赛克类改动不再悄然破坏标签,调试时间从数天缩到数小时。该模板已推广到分割与关键点任务。

8. 与过拟合调试的衔接

增广与标签一致性应在「先过拟合一小撮」门禁之前通过:五十张 tiny set 过不了时,优先 overlay 增广后的框与 mask,而不是调学习率。与 dl-overfit-first 配合时,tiny 阶段可暂时关闭随机几何增广,只验证 resize 与 normalize 链;几何增广正确后再逐步打开旋转与 mosaic。

增广是 data pipeline 的一部分,label 必须跟 pixel 同步变。框没跟着转,不是增广「太强」,是 pipeline 错了——模型会在错标上收敛到假最优。把增广与 label 契约当成 code review 硬项;几何增广改动应触发固定难例可视化回归,失败则阻断训练启动。分割与关键点任务沿用同一标签同步契约。审查合并请求时对照固定难例叠加图,几何变换与标签不同步应直接退回修改,不得带着疑似错标进入全量训练。

← 全部文章

johan's blog