论文笔记:Rethinking ImageNet Pretraining——是否需要Pretrain

论文:https://arxiv.org/pdf/1811.08883.pdf

本文主要:

  • 说明能在检测或者实例分割上通过From Scratch的方式得到比较好的效果
  • 甚至能大部分复用finetune ImageNet预训练网络时候的超参,仅仅是迭代次数提升,都可以得到接近ft的效果
  • pretrain仅能够加速训练的收敛,不会对目标任务的指标提升起作用
  • 这样的结论让人重新审视目前流行的 Pretrain-fintune流程

Intro

  1. 传统思路认为Pretrain学习了图像的一些通用特征,在此基础上进行迁移学习,能够获得更好的效果
  2. 但预训练的数据增加,对迁移学习(finetune)的目标任务结果没有影响,这跟1. 体现的思想不符,存疑
  3. 做到from scratch ≈ \approx pretrain有2个前提:(1)使用更为合适的BN;(2) 比finetune用更长的迭代
  4. 在不同的baseline(各种基于ImageNet Finetune的网络/任务)都能够得到类似的结论,用更少的数据也能得到类似结论
  5. 基于实验观察到的现象:
    1. finetune能够加速收敛,但只要from scratch 的时间足够长( ≈ \approx pretrain + finetune的总迭代次数),也能够在训练后期赶上finetune的收敛
    2. 预训练并非起到regulation的作用
    3. 当对bbox的定位(框的准确性)要求比较高的时候,预训练起不到作用
    4. pretrain的诞生其实是一些局限性下的权衡(数据不够,GPU不够)

Methodology

这里主要讨论finetune & from scratch的2个最关键的不同:BN & 收敛速度(迭代次数)

  1. 要求From scratch & ft 的收敛速度相同是不现实的。因为预训练的过程中已经学习了很多底层&高层的通用特征
  2. 这里需要厘清样本的概念:
  • 实质上一张图(样本)训练100次(epoch) = 100个样本
  • 一个样本可以指一张图,也可以指一个像素,也可以指一个实例(BBox)
  • 如果统计像素作为样本量的话,也要注意预训练的图片输入分辨率和ft的也可能有不同
  1. 在2的基础上,我们从3个维度(图片,像素,实例)去看ft & from scatch的样本数量差异(如Figure2所示),得知from scratch 的迭代至少要是ft的3倍,才能勉强和 pretrain + ft这样的流程有相同样本量(至少在pixel这个维度是对齐的)。这里以90k作为一个单位(schedule),那么ft需要2schedule,重训需要6个schedule
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7TfsOTFg-1589723769324)(en-resource://database/3380:1)]

实验配置

  • 使用COCO做实验,并且用2017的train/val split
  • 实验只在开源的Mask RCNN基础上改了GN(global Normalization)/ SyncBN
  • 公平起见,FT实验也用的GN/SyncBN,而不是fix BN
  • lr都只在最后60k次迭代降低0.1倍,最后20k再降低0.1倍,实验表明后面再降低lr对训练没有帮助
  • 初始 l r = 0.02 lr = 0.02 lr=0.02,带线性的warm-up, w d = 1 0 − 4 wd = 10^{-4} wd=104,momentum = 0.9,8GPU, syncSGD, bs = 2/gpu
  • 除了随机水平反转&将图片缩放到短边800,没有用其他的数据增广

实验结论

baseline

  • 对于MaskRCNN 无论是ResNet50 还是101,训2个schedule对于finetune是足够的,但是对from scratch不行
  • 大概要训5-6个schedule才够,如下图所示,跳变的地方是学习率降低到原来的1/10
  • 训到后面可以发现pretrain可以减少训练用时,无法提升指标
  • 在0.75 IOU下,可以看到from scratch的指标更高(这里注意COCO的mAP计算是在各个IoU 0.5, 0.55, 0.60, 0.65, 0.70都评一次,然后取平均的)

扩展实验1:数据增广的影响

  • 不仅是scale & flip的数据增广,外加一个短边 [ 640 , 800 ] [640,800] [640,800]的随机缩放
  • 往往使用更多的数据增广就要训更久时间
  • 更多的数据增广可理解为数据集的扩充,因此也削弱了pretrain的主导作用

Cascade RCNN

  • 这里是对框的准确性进行实验:Cascade RCNN是一种提升框准确性的算法
  • Mask RCNN的适配:在最后一个stage加一个Mask Head
  • 为了减少训练时间,先用常规Mask RCNN from scratch训练,最后270K次迭代才换成Cascade RCNN
  • 训练时也用了scale数据增广
  • 得到的结论相近

验证不带BN的网络

  • 用原始的Faster RCNN, VGG16 骨干网络
  • 训练的时候加上scale数据增广
  • pretrain训9个schedule,9个之后会掉点,而且VGG的收敛比较慢
  • from scratch 训11个schedule 达到相同的效果

Q&A

  1. pretrain是否必要:否,只要数据足够多,而且需要是target domain data 而不是Pretrain data,才能起到帮助
  2. pretrain是否有帮助:是,一方面降低数据量的要求,另一方面降低训练耗时
  3. 是否需要大的数据量:是的,最好是target domain的数据
  4. 此外,结合 https://zhuanlan.zhihu.com/p/137410354。two-stage模型之前一直没办法from scratch训练的一个很大的原因在于batch size不够大,却又缺乏一些提升点(包括ROI Align,Group Norm,Sync BN等)

你可能感兴趣的:(论文笔记)