概
Augmentation 在分类识别中已经是非常常用的技术了, 但是在GAN中却并不多用, 究其原因主要是:
- Augmentation容易泄露导致生成器最后拟合的是变换后的分布;
- 技术上, augment之后是否保留梯度(这个其实是我个人的想法, 总觉得augmentation只能施加在图片上, 原来大部分augmentation都可以直接在tensor上实现, 虽然这可能不是现成的).
主要内容
Differentiable Augmentation
添加augmentation有三种策略:
- T ( x ) T(x) T(x), 仅对真实样本施加, 显然这种情况会让生成器学到恶心的东西;
- T ( x ) , T ( G ( z ) ) T(x), T(G(z)) T(x),T(G(z)), 对二者都施加, 但仅用于训练判别器;
- T ( x ) , T ( G ( z ) ) T(x), T(G(z)) T(x),T(G(z)), 对二者都施加, 同时训练生成器, 当然这就要求augmentation不破坏梯度.
本文采取的就是第三种策略.
Adaptive Augmentation
这篇文章有一个点我觉得很有意思, 其认为augmentation应当是’invertible’的.
倘若我们对一个生成的图片施加随机的旋转: 0, 90, 180, 270, 那么显然, 最后的生成器就不一定生成正常视角(0)的图片, 这是因为, 不管生成最后变成 0, 90, 180, 270度的概率都是一样的, 生成器没法判断哪一个才是我们想要的是对的.
所以, 这篇文章认为, 对于每一个augmentation应该添加一个概率 p < 1 p < 1 p<1, 即按照小于1的概率实施.
虽然代码给出了很多augmentation, 不过最后选择的是比较弱的俩种…
注: Diff_Aug 虽然没有这个概率 p p p, 但是它选择的变换都是满足‘invertible’的.