Rethinking ImageNet Pre-training

论文:Rethinking ImageNet Pre-training

这篇paper因为其想法比较具有颠覆性(还有作者是Kaiming He大佬),刚放出来就引发了大量的讨论。通常来说,对于绝大部分CV问题的惯常做法就是,不管三七二十一,先在ImageNet预训练一下,然后针对具体的问题fine-tuing。在这里,作者发现,从零开始训练,不用fine-tuing效果也和使用预训练一样。那就引发了一个思考?为什么需要去ImageNet预训练?

作者使用从零初始化,依然可以得到和COCO2017冠军的结果,且结果十分鲁棒性。即便是在以下三种情况下:

  • 使用10%的训练数据
  • 使用更深,更宽的网络(依旧没有过拟合,依旧很鲁棒)
  • 在多种任务下,多种评价指标下

先看一张作者实验结果对比图:


Rethinking ImageNet Pre-training_第1张图片
实验结果

从图中可以看出:

  • 迭代次数足够多的时候(达到次的时候),随机初始化与预训练结果一样
  • 图中的精度曲线分叉表示使用/不使用学习率衰减
  • 使用预训练收敛更快。

总结起来,其实就是,使用预训练可以加快收敛,但是精度不会上升。其实也没有媒体吹得那么神。在这一行越久,就越发现,在深度学习领域,没有什么事是绝对的。一个结论可以被反复推翻,归根结底,还是因为神经网络的模型参数太多,可解释性太差。作者得到的这个结论,也是完全有可能和自己工作中的实际结论出现偏差的。

作者的比较方法

为了公平的比较使用预先训练和随机初始化的结果,作者采用的模型没有针对随机初始化进行特定的网络结构设计。除了以下两点不同:

  • 随机初始化模型使用了Group Normalization,因为Batch Normalization在batch size太小的时候效果不好。对于检测问题,由于图片太大,使得batch size上不去,因此用Group Normalization比较合适。而对于预训练模型,由于分类问题的图片比较小,batch size可以比较大,那么BN算出来的就靠谱很多,因此直接用BN就可以了。
  • 随机初始化模型训练时间更久,因为预训练模型没有算上预训练的时间,所以直接比是不公平的。

对于第一点,作者为了保证实验结果的合理性,对于随机初始化模型也使用BN,并结合多GPU训练(增大batch size)实现了随机初始化训练。此外,作者发现即便不使用归一化,通过选择初始化方式,依旧可以实现随机初始化训练,并且结果比肩预训练。

实验

整片文章思想就是如上面所说,接下来就是大量的对比实验以验证论述。

使用10%的数据进行随机初始化训练

Rethinking ImageNet Pre-training_第2张图片
10%数据训练结果

可以看出,即便是少量数据,依旧结果不差。验证了作者的第一条结论

使用更深,更宽的网络

Rethinking ImageNet Pre-training_第3张图片
使用更深,更宽的网络

这里使用的模型是Mask RCNN,backbone分别是ResNet101, ResNeXt152。后者参数是前者的四倍。实际实验发现,即使使用更深,更宽的网络,结果不仅没有过拟合,精度还上升了。这里验证了作者的第二条结论。第三天结论验证方式类似,不再赘述。

总结

  • 预训练可以加快收敛,没别的用处。
  • 实际工程中,还是可以使用预训练,收敛快,省事
  • 本文的实验设计非常严密,基本上考虑到了每一个疑问点。值得借鉴。
  • 对于许多“可能是”理论,要多思考,多问几个为什么。尤其是对于深度学习这种“黑盒子”,换个实验条件,结论可能就相反。这篇paper的结论也是如此,不能奉为圣旨

你可能感兴趣的:(Rethinking ImageNet Pre-training)