论文解读 Learning Data Augmentation Strategies for Object Detection
Learning Data Augmentation Strategies for Object Detection
今天介绍一篇来自 Google Brain 团队的工作 “Learning Data Augmentation Strategies for Object Detection”,作者是 Barret Zoph, Ekin D. Cubuk, Golnaz Ghiasi, Tsung-Yi Lin, Jonathon Shlens, Quoc V. Le。
这篇文章可以看做是之前 AutoAugment 的扩展,在检测任务上搜索一个好的数据增强方案。作者在 AmoebaNet + NAS-FPN 上用搜出来的数据增强方法能达到 50.7 的 COCO validation mAP。
Motivation
首先回顾一下 AutoAugment:对于图像分类任务通常要用到一系列的数据增强手段,比如左右翻转 Flip,对比度/饱和度增强,Resize,等等。使用哪些数据增强方法、每个方法使用几次、每个方法被使用到的概率、方法之间的顺序可以构成一个庞大的搜索空间,然后用 AutoML 的方法搜一个不错的组合,一般要比人工设计的数据增强策略要效果好。
Method
而在这篇 Paper 中,目标任务的任务从分类变成了检测,首先作者提出一个观点:在检测任务中如果直接采用分类任务的数据增强策略,带来的涨点是有限的。检测任务上有一些和框的位置有关的数据增强方法,比如旋转角度,仿射变换,是分类任务上没有的。因此有必要针对检测任务专门搜最优的数据增强方法。
作者将检测任务上的数据增强策略搜索看成了一个离散优化问题(discrete optimization problem)。
首先作者定义了22个数据增强运算,包括对颜色、几何变换、框位置的变换进行增强。官方的 TensorFlow 代码可以在这里找到。一些运算的介绍如下表所示:
有一些数据增强运算,比如 Mixup,Manifold Mixup,Dropblock 作者发现加进去会掉点,就没有采用。
有了这22个数据增强运算,怎么构成搜索空间呢?作者规定了最终的数据增强策略由 K 个子策略 (sub-policies)组成,每个子策略包含 N 个数据增强运算。每个运算又包含两个超参数:被用到的概率 P 和强度 M。P 和 M 被离散化为6份。训练的时候,每次抽一个子策略,然后把这个子策略包含的数据增强运算应用到图片上。
这样整个搜索空间的大小为:
可视化这些候选子策略如下图所示:
在这么大的一个候选空间找到候选解,Grid Search 肯定是不行的,需要用 Auto ML 的方法来搜。作者用了常见 RNN 控制器+ 强化学习的方法,proximal policy optimization (PPO) 算法。也就是 RNN 在每个 step 来预测挑选哪些子策略,把 RetinaNet 在 validation set 上的 mAP 作为反馈。
在整个 COCO 数据集上搜比较费时间,所以作者从 COCO 上抽了 5K 数据作为训练集,7392 张图片作为验证集,检测算法是 ResNet50 + RetinaNet,在 400 块 TPU 上训练了 8 小时。
最后搜出来的“丹方”如下表所示:
实验结果
观察最后搜出来的结果,作者发现这三个数据增强方法经常被用到:
- Rotate ,就是整张图和框一起旋转;
- Equalize ,直方图均衡化
- BBox Only TranslateY,仅对框的位置做垂直向上或向下翻转
看来在检测任务上,这些运算比较重要。
随后作者使用不同的 backbone 网络 (ResNet50, 101, 200),分别进行了两组对照实验。一组是 baseline 方法,在 RetinaNet 上使用传统的数据增强策略(0.5的概率水平翻转,multi-scale jittering,图片先 resize 到 [512,786] 之间,再 crop 成 640x640);还有一组是在RetinaNet 上使用搜出来的数据增强策略。实验结果如下表:
可以看出,作者搜出来的策略更好,即使是大模型上也能涨 2.2。
此外,作者的 22 个数据增强运算,包括对颜色、几何变换、框位置的变换三部分,作者验证了每一部分都是必要的,如下表所示:
为了验证搜出来的策略能迁移到别的检测方法上,作者在 AmoebaNet + NAS-FPN 的方法上进行了尝试,结果仍然能涨 1.6。加上一些把图拉大、anchor 数量增加的 tricks,最终能在 COCO 验证集上取得 50.7 的 mAP。 这个单尺度训练、单模型的成绩已经超过了 17 年的 COCO 冠军。
同样是为了验证方法的普适性,作者用 Faster RCNN + Res101,在 PASCAL VOC 上进行了验证,同样能涨 2.7。
数据增强的方法一般在数据集比较少的时候比较有用。因此作者就从 COCO 中抽出来 { 5000, 9000, 14000, 23000} 张图片来训 RetinaNet,分别做两组实验:baseline,baseline + 学到的数据增强策略。结果如下:
作者得出结论,
- 训练集数据很小的时候,数据增强方法带来的涨点最多;
- 在小物体上涨的特别多
进一步分析在IoU卡 0.5, 0.75,[0.5:0.95:0.05]时候的增益,效果如下:
可以看出,在AP75的时候涨点最多,说明框回归的更准了,这也可能是在小物体上能涨点的原因。
作者还观察到加了数据增强后,如下面两张图所示,网络收敛时候的 loss 变小了,权重的 L2-norm 变小了,说明有一定正则化的作用。
结论
个人觉得这篇 paper 还是 AutoAugment 的思路,换了个检测的搜索空间。以后肯定也会有工作再换到分割、点云的搜索空间上。这一类 paper 最大的 novelty 在于如何设计一个好的搜索空间;其次才是如何设计高效的搜索方法,比如FastAutoAugment这一系列。
如果有理解不到位的地方,欢迎大家在评论区指正。