如何把resnet中的BN换成GN resnets_计算机视觉

作者 | 陈大鑫、青暮

谷歌大脑和UC伯克利近期联合发表了一篇论文,这篇论文对何恺明等人2015年发表的ResNet为骨干的ResNets系列网络做了重新的回顾和研究。

Revisiting ResNets: Improved Training and Scaling Strategies

如何把resnet中的BN换成GN resnets_人工智能_02

GitHub地址(TensorFlow):https://github.com/tensorflow/tpu/tree/master/models/official/resnet

大家都知道ResNet自提出以来便取得了巨大的成功,一时之间很多视觉研究工作都会以此为骨干网络,但是近两年来ResNets这一骨干网络的地位逐渐被EfficientNets取代。

如何把resnet中的BN换成GN resnets_人工智能_03

根据Papers with Code上ImageNet图像分类的Top-5准确率排行榜,前五名都是基于EfficientNet架构,第六名才是基于ResNet的BiT-L。

如何把resnet中的BN换成GN resnets_机器学习_04

ResNes难道注定就比不过EfficientNets吗?

本篇论文便是对ResNets进行了重新研究。在这篇论文中,研究人员决定分别分析模型架构、训练和扩展策略的效果。

令人惊讶的是,研究人员在这篇论文中发现训练和扩展策略可能要比架构更改更重要,而且,最终的ResNet是可以与SOTA模型相比的。

这似乎意味着ResNets网络终于可以与EfficientNets网络匹敌了。

这究竟是怎么做到的呢?

曾在Kaggle Kernels上取得第一名的数据科学家Andrey Lukyanenko第一时间为我们带来了这篇论文的解读。

如何把resnet中的BN换成GN resnets_如何把resnet中的BN换成GN_05

这篇论文在社交网络上也得到了广泛的关注:

如何把resnet中的BN换成GN resnets_机器学习_06

如何把resnet中的BN换成GN resnets_计算机视觉_07

如何把resnet中的BN换成GN resnets_网络_08

以下是Andrey Lukyanenko的解读:

在本篇论文中,研究人员提供了两种新策略:

1、如果可能过拟合,则缩放模型深度;否则,缩放模型宽度;

2、增加图像分辨率的速度比以往的论文中推荐的速度更慢。

基于这些想法,研究人员开发了新的架构ResNet-RS。在GPU上训练的结果比较得出,它比EfficientNets快2.1-3.3倍,同时在ImageNet上达到类似的准确率。

在半监督学习中,ResNet-RS达到了86.2%的ImageNet Top-1准确率,同时比EfficientNet-NoisyStudent快了4.7倍。

如何把resnet中的BN换成GN resnets_机器学习_09

同时,ResNet-RS在下游任务的迁移学习上也提高了性能。

最后,研究人员建议使用这些ResNet-RS作为进一步研究的基准。

这不禁让人高呼:  爷青回!ResNets Yes!!!

 

1

关键思想

如果将其他正则化技术与权重衰减一起使用,则最好减小权重衰减的比重。

适用于小型模型或epoch较小的技术不一定适用于较大模型和epoch较大的技术;因此,有必要根据完整模型的完整训练选择适当的缩放策略。Andrey Lukyanenko认为这是关键点!

他们的改进训练和缩放策略也适用于其他模型:适用于EfficientNets、自监督学习、甚至适用于3D视频分类。

2

模型改进策略

研究人员列举了四种可能的模型性能改进类型:架构、训练/正则化方法、缩放策略和额外训练数据。

1、架构:就是架构优化,通常包括新的模块、注意力机制、lambda层和NAS。

2、训练和正则化方法:dropout、标签平滑、随机深度、dropblock、数据扩充;学习率规划也有所帮助。

3、扩展策略:改善模型的宽度、深度和数据分辨率。

4、增加训练数据通常也会有帮助。

 

3

方法

研究人员描述了他们使用的方法和架构:

  • 使用SE模块的ResNet、ResNet-D;
  • 使EfficientNet设置与小的更改相匹配:350个epoch、余弦学习规划、RandAugment、动量优化器。这里大多数更改是为了简单起见;
  • 权重衰减、标签平滑、dropout和随机深度以进行正则化;
  • RandAugment应用了一系列随机图像变换(例如平移、剪切、颜色失真);
  • 对于超参数调整,研究人员使用了大约2%的ImageNet数据集作为hold-out验证集;

 

4

改善训练方法

关于性能提升的研究

ResNet-200本身有79.0%的Top-1准确率,改进的训练方法带来了+ 3.2%的性能增长,架构变化带来了+ 1.2%的性能增长。这证明,单单改进训练方法就可以带来巨大的性能提升。

如何把resnet中的BN换成GN resnets_如何把resnet中的BN换成GN_10

结合正则化方法时减少权重衰减的重要性

可以看到,如果不减少权重衰减,则添加其他正则化方法可能会降低性能。另一方面,如果我们降低权重衰减速率,则添加其他正则化方法可以提高性能。

如何把resnet中的BN换成GN resnets_人工智能_11

 

5

扩展策略带来的提升

如何把resnet中的BN换成GN resnets_人工智能_12

作者分别在[0.25,0.5,1.0,1.5,2.0]的宽度乘数、[26,50,101,200,300,350,400]的深度和[128,160,224,320,448]的分辨率上对ImageNet进行了广泛的实验。训练进行了350个epoch,对更大的模型进行了正则化,以避免过拟合。

研究得到了一个重要的结果:FLOPs不能准确地评估有限数据方案中的性能。可以看到,即使对于相同的FLOPS,特定参数的差异也可能意味着较大模型的性能会有明显差异。

如何把resnet中的BN换成GN resnets_如何把resnet中的BN换成GN_13

另一个重要发现是:最佳的扩展策略取决于训练方法。

可以看到,对于较大epoch训练,缩放深度比缩放宽度要好,另一方面,对于较小epoch的训练,宽度的缩放更好。

6

改进训练方法和应用扩展策略的实验

ResNet-RS的速度-准确率表现

有趣的是,即使FLOPS和参数数量更高,ResNet-RS的速度也要比EfficientNet快。

如何把resnet中的BN换成GN resnets_人工智能_14

如何把resnet中的BN换成GN resnets_人工智能_15

7

提高EfficientNets的效率

研究人员将慢速的图像分辨率缩放策略应用于EfficientNets,并训练了具有不同图像分辨率的多个版本,实验结果如下图所示:

如何把resnet中的BN换成GN resnets_机器学习_16

8

更多任务

研究人员在120万张带标签的ImageNet图像和1.3亿张带伪标签的图像(如Noisy Student)上训练了ResNet-RS,实验结果如下表所示:

如何把resnet中的BN换成GN resnets_人工智能_17

迁移学习

为了紧密匹配SimCLR的训练设置并提供公平的比较,研究人员对ResNet-RS仅应用了部分原始的训练策略。但是从下表可以看出,结果要好得多:

如何把resnet中的BN换成GN resnets_计算机视觉_18

视频分类

视频分类训练方法的对比研究。下图用不同颜色标记了正则化方法(绿色)、训练方法(紫色)和架构(黄色)上的改进。

ResNet-RS的训练策略可以应用到基于Kinetics-400视频分类的3D ResNet模型上,并同样能改进基线模型性能。

如何把resnet中的BN换成GN resnets_机器学习_19

9

结语

在这篇论文中,研究人员通过对训练方法和扩展策略进行研究发现最终的ResNet是可以与SOTA模型相比的,架构并不是唯一决定因素。

本文作者希望他们的工作能够鼓励大家对更多的网络做进一步重新审查研究,以保持本文所提议的创新和基线的方法具有一致性。

对于本文您心动了吗?或者有什么质疑吗?

还不赶紧亲自上手试试!

参考链接:

https://andlukyane.com/blog/paper-review-resnetsr

如何把resnet中的BN换成GN resnets_如何把resnet中的BN换成GN_20