数据增强(Data Augmentation)系列: SnapMix 原理及应用

数据增强(Data Augmentation)系列: SnapMix

作者:Shaoli Huang
发表时间:2020
Paper 原文: SnapMix: Semantically Proportional Mixing for Augmenting Fine-grained Data、

官方开源代码:https://github.com/Shaoli-Huang/SnapMix

SnapMix 是由 Shaoli Huang 等人提出的一种针对细粒度数据增强的方法。论文于 2020 年 12 月 9 日提交到 arXiv 上,可以说是新鲜出炉,并且代码也已经开源,该数据增强方法已经在 kaggle 比赛上被大量使用。

使用 SnapMix 基本能带来1%~2% 的提升,此外 SnapMix 就是一个单纯的数据增强手段,所以对推理速度不会有影响。

论文没有细读,如有不准确的地方,欢迎讨论。

1. 前言

各种 Mix 的数据增强方法已经被大量使用,并且也证明效果不错,比如 Mixup 和 CutMix,但是都是直接从像素层面来进行 Mix,如下图。这种粗犷的增强方式在很多情况下是不合理的。比如对于 CutMix,如果 cut 掉的是很关键的部分,虽然面积很小,但是确是很关键的信息,然后在生成新标签的时候仅仅通过统计被 cut 掉的面积作为权重的话,显然是不合理的。

数据增强(Data Augmentation)系列: SnapMix 原理及应用_第1张图片

2. SnapMix

SnapMix 的思想很简单,既然在生成 label 的时候,直接在原图中以被 cut 掉的面积作为权重不合理,那作者就针对这一不合理作出了改进。

数据增强(Data Augmentation)系列: SnapMix 原理及应用_第2张图片

既然直接在原图中根据面积生成 label 不合理,作者就提出到 SPM (Semantic Percetage maps) 上计算 label。由于 SPM 上可以体现每个 pix 的对标签的贡献度(semantic relatedness to the corresponding label),这样就比直接看面积来的准确。

具体的,首先计算输入图像的 CAM(Class Activation Mapping),然后对 CAM 归一化得到 SPM,最后借助 SPM 进行标签融合。CAM 计算公式如下。
C A M ( I i ) = Φ ( ∑ l = 0 d ω y i l F l ( I i ) ) CAM(I_i) = \Phi(\sum_{l=0}^{d} \omega^l_{y_i}F_l(I_i) ) CAM(Ii)=Φ(l=0dωyilFl(Ii))
其中:
Φ ( ) 是 上 采 样 操 作 , 将 结 果 上 采 样 到 输 入 图 片 的 s i z e I i 是 输 入 的 图 片 F l 是 最 后 一 个 C o n v 层 输 出 的 第 l 个 f e a t u r e m a p ω y i 是 分 类 权 重 , 也 就 是 最 后 的 f c 层 的 输 出 \begin{aligned} & \Phi() 是上采样操作,将结果上采样到输入图片的 size \\ & I_i 是输入的图片 \\ & F_l 是最后一个 Conv 层输出的 第 l 个 feature map \\ & \omega_{y_i} 是分类权重,也就是最后的 fc 层的输出 \end{aligned} Φ()sizeIiFlConvlfeaturemapωyifc

除此之外,作者还提到了 非对称混合 (Asymmetrical Mixture)的概念,如上图,两张图片中 cut 的大小是不相等的,这样在填充的时候通过一些变换,达到目标尺寸然后再填充,通过这种方式可以使混合更加多样性。

3. 效果

作者做了大量实验,基本能涨一到两个点。效果比 MixUp 和 CutMix 强。

数据增强(Data Augmentation)系列: SnapMix 原理及应用_第3张图片

4. 应用实例

pytorch resnet50 使用 SnapMix 的代码可以参考: Pytorch + resnet50 + SnapMix

你可能感兴趣的:(深度总结,深度学习,SnapMix,原理,调用,应用,数据增强)