视觉增广:别增到不合理
几何增广要同步变换 bbox/mask;随机翻转对「文字/左右语义」数据集是毒药;ColorJitter 范围要在部署域内。

1. 框没跟着旋转就训练了幽灵标签
检测涨不动时先查增广——增广库忘了边界框参数,或手写仿射变换只变换中心点,标签就漂了。增广服务 部署域不变性,不是越多越好;错增广让模型学伪影,比不增广更糟。四图拼接改边界框坐标,标签必须重映射到新画布——漏重映射一张图的标签就全错。
2. 几何增广必须同步
增广库需 同一变换 作用于图像、边界框、掩码:
transform = A.Compose([
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.3),
], bbox_params=A.BboxParams(format='yolo', label_fields=['class_labels']))OpenCV 手写:
M = cv2.getRotationMatrix2D((cx, cy), angle, scale)
rot = cv2.warpAffine(img, M, (w, h),
flags=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_REFLECT_101)边界框四角齐次变换再取轴对齐最小外接矩形会 放大 框(宽松框效应),训练可接受但要知道。分割掩码用同一矩阵变换,最近邻插值,否则标签编号被插值污染。姿态任务关键点可见性随遮挡置零。
3. 物理合理性
复制粘贴增广要 blend 和 color match,否则网络学粘贴边界。无缝克隆可做泊松混合,适合离线增广。行车数据水平翻转等于错车道;有方向语义的图(文字、左右标志)谨慎水平翻转。
4. 光度增广与部署域
颜色抖动、对比度受限自适应直方图均衡模拟光照;过强破坏颜色特征。与部署的自动白平衡、自动曝光策略一致——产线锁曝光时,训练也别用极端颜色抖动,否则部署域外。增广强度应在部署域内采样,不是越大越好。
5. 分割与姿态任务的同步
分割掩码必须用最近邻插值,图像用双线性——混用会把标签编号插值成无效类。姿态估计的关键点可见性要随遮挡置零,不能只变换坐标。透视变换后取轴对齐框会偏大,检测训练可接受但要意识到宽松框效应;若做实例分割,多边形顶点也要同步变换,不能只动中心点。
Mosaic 四图拼接时标签坐标必须 remap 到新画布——漏一张图的标注就污染整个 batch。极端透视增广让边界框物理上不可实现,小数据集慎用。复制粘贴增广要 blend 和 color match,否则网络学粘贴边界。
6. 案例:旋转增广漏同步
某检测项目加了随机旋转正负十五度,但脚本只旋转图像没同步边界框,验证精度虚高。训练集 ghost label 导致产线对小目标框系统性偏大。修复后验证精度降一点但产线对齐——增广 pipeline 的单测比盲训十轮更值得先做。
7. 验证集与验收
增广不进验证测试集。测试时增强是推理技巧,不是训练增广替代品。每一类增广要回答:部署域里会不会出现?行车数据别水平翻转,有文字的标志别随机翻转——这些不是保守,是物理约束。
- 可视化增广后叠加边界框,肉眼查十张
- 单测一张图刚性变换前后交并比大于零点九九
- 训练验证分布散度(特征空间)别差太多
增广 pipeline 应有单测:刚性变换前后交并比大于零点九九。可视化十张增广结果肉眼查,比盲训十轮更高效。训练增广与部署预处理(resize、归一化、色彩空间)必须一致,否则增广白做——这是常被忽略的 silent mismatch。
相关
也可以看看
johan's blog