
今天分享的是一篇图像增广的论文,来自 CVPR 2021。
论文标题:KeepAugment: A Simple Information-Preserving Data Augmentation Approach
Facebook AI lab 做的数据增强库:facebookresearch/AugLy
一些增广方式的代码:AWS-OHL-AutoAug
数据增广方式总结:Data augmentation
Keras Cut Mix 官方示例:Keras: CutMix data augmentation for image classification
「」
编写记录
- 2021 年 6 月 19 日,初稿。
- 2021 年 6 月 20 日,完善。
数据增广
数据增广可以简单理解为一种让数据集「变多」的方式。例如,为了获得更多的训练图像,我们可以随机调整大小、改变图像的亮度或旋转;为了获得更大的声音数据集,我们可以尝试提高或降低音频样本的音调,或者进行加速和减速。数据增强技术可以总结为下图:
对于计算机视觉,图像增广可以分为两类:
- 区域级别的。就是改动的范围现定于某一个 patch,比如 Cutout、Cutmix。
- 整体级别的。对于整张图像进行改动。比如 AutoAugument、RandAugument。
对于这两种级别的增广,作者做了个实验,结果如下图所示:
从图上可以看出来,当增加 Cutout 的切割面积和增大 RandAugment 的某个参数时,训练精度(蓝线)和测试精度(红线)之间的差距会逐渐减小,这表明模型泛化能力在一直增加。然后问题是,在某个阈值之后,训练和预测的数值都开始下降,这表明此时的增广图像并不能很好的替代未增广(Clean)图像。
方法
为了解决上文提到的问题,本文提出了一个叫做 Keep Augment的方法,通过 Saliency Map 测量图像中矩形区域的 重要性,并确保在数据增强后保留重要的矩形区域。
其实很简单啦。对于上图 (a4) 和 (b4) 就是所谓的 Saliency Map(应该是越白表示重要性得分越高) ,红框区域的重要性得分就比绿色框要高。然后针对不同增广方式,想办法保留红框部分:
- 对于区域级别的增广比如 Cutout,多次尝试 Cut,直到 Cut 的框框部分的重要性得分少于阈值。
- 对于整体级别的增广比如 RandAugment,多次采样区域,直到采到的区域重要性得分大于阈值,就把这个区域的原始图像粘贴到增广后的图像上。
上述方法写成伪代码就是下面的样子:
一些实现细节
本方法中的 Saliency Map 需要在每个训练步骤的反向传播的时候计算得到,这就可能带来两倍的计算开销。因此本文在实现时提出了两个方法来减少增加的计算开销:
低分辨率近似
如图 (a) 用低分辨率的图像计算 Saliency Map 然后再映射回原分辨率,这样能够显着加快 Saliency Map 的计算速度。例如在 ImageNet 上,通过将分辨率从 224 降低到 112,实现了 3 倍计算成本的降低。
Easy Loss 近似
如图(b),使用网络前面的层计算 Loss 进而计算 Saliency Map。例如本文作者实现时在第一个 Inception 块之后额外添加了一个平均池化层和一个线性头。这样在计算 Saliency Map 时,又实现了 3 倍计算成本的降低。
另外作者说这两个措施没有让精度有(可见的)降低。
实验
以 CIFAR-10 为例:
可以看到 KeepAugument + low resolution 的方法有比较一致的提升,不过提升确实不大… …
总结
思路还是挺有意思的,根据图像重要性进行魔改,这个思路可以学习一下;
之前看过一个也是用到图像重要性的小样本文章,好像是把重要性部分扣掉然后重建… 之后找来对比看看。
值得注意的相关工作:
Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps,Saliency Maps 的出处。
AutoAugment: Learning Augmentation Policies from Data(CVPR 2019),说是把强化学习用到 Augment 上?
Reference
- 本文标题:Daily Paper 08 - KeepAugment
- 本文作者:Tilden Ji
- 创建时间:2021-06-19 21:09:00
- 本文链接:https://itiandong.com/2021/daily-paper-08/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!