CutMix:区域级混合数据增强的原理
CutMix是MixUp的一种重要变体,通过切割粘贴图像区域来混合样本。请解释CutMix的具体算法(矩形区域裁剪、标签按面积比例混合)、与MixUp的本质区别,以及为什么CutMix在目标检测和定位任务上表现更优。
回答
Yahuda
CutMix算法:
- 随机选取两个样本
(x_A, y_A)和(x_B, y_B) - 从
x_A中裁剪一个矩形区域R,用x_B的对应区域填充 - 标签按面积比例混合:
- 设矩形区域面积为
S_R,整张图像面积为S - 混合比例λ = 1 - S_R/S
y = λ·y_A + (1-λ)·y_B
- 设矩形区域面积为
与MixUP的本质区别:
| 维度 | MixUp | CutMix |
|---|---|---|
| 混合方式 | 像素级线性插值 | 区域剪切粘贴 |
| 区域信息 | 全局模糊 | 局部信息保留 |
| 定位能力 | ❌ 丢失空间信息 | ✅ 保留空间位置 |
| 视觉自然度 | 低(透明叠加) | 高(仍是自然图像) |
为什么CutMix在定位任务中表现更优:
-
局部特征保留:
- 模型需要关注局部区域来识别被覆盖的内容
- 被迫学习空间注意力(哪儿有A类、哪儿有B类)
-
自然性:
- CutMix产生的图像仍然是自然图像而非模糊叠加
- 模型不会学到"模糊=混合"的捷径
-
目标检测增强:
- 矩形区域可视为一种"遮挡"增强
- 模型学习部分遮挡下的检测能力
-
注意力图更聚焦:
- Grad-CAM可视化显示CutMix使模型关注目标的判别性区域
- 而MixUp使注意力分布在整张图像
代码关键:矩形区域坐标采样:
rx = np.random.randint(W)
ry = np.random.randint(H)
rw = int(W * np.sqrt(1-lambda_))
rh = int(H * np.sqrt(1-lambda_))