paper:Revisiting ResNets: Improved Training and Scaling Strategies
official implementation:https://github.com/tensorflow/tpu/tree/master/models/official/resnet/resnet_rs
third-party implementation:https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/resnet.py
这篇文章探讨了计算机视觉中的模型架构、训练方法和扩展策略(scaling strategy),并重新审视了ResNet的这些方面,作者发现,训练方法和模型缩放策略可能比架构变化更重要。
本文的一些观察和创新点
- 通过重新审视ResNet的模型架构、训练方法、缩放策略三个方面,作者发现训练方法和缩放策略可能比架构变化更重要。将EfficientNet的训练配置应用到ResNet-200上并进行了一些小的修改同时进行了模型结构的改进,在ImageNet上的精度从79.9%提升到了83.4%,其中训练方法的改进就贡献了全部性能提升的3/4。
- 当weight decay和其它正则化方法一起使用时,需要根据情况适度减少权值衰减值,以免过度正则。
- 之前的方法例如EfficientNet在设计scaling strategy时的两个常见陷阱:一是从小规模机制(小模型或少的训练epoch)下推断缩放策略,二是从一个单一的、潜在的次优初始结构中推断缩放策略。本文的方法是通过训练跨越不同宽度、深度和图像分辨率的模型完整的epoch来设计缩放策略。
- 本文提出了新的缩放策略,具体包括两点:一是在可能发生过拟合的情况下扩展模型深度,而在其他情况下扩展模型宽度。二是更慢地增加图像分辨率。
更新训练方法
由于ResNet原始的训练策略有些久远,作者首先更新了训练策略,具体来说采用了EfficientNet的配置并做了一些修改:(1)学习率策略由exponential decay改为cosine learning rate(2)数据增强由AutoAugment改成RandAugment(3)优化器由RMSProp改成Momentum optimizer。具体的训练配置如下表所示。
结果如下表所示,原始的ResNet-200在ImageNet上的Top-1精度为79.5%,这里将训练方法和正则化方法统一都称为训练方法,更新训练方法后精度达到了82.2%,最后两项是模型结构的改进最终达到了83.4%的精度。可以看到,光训练方法本身就贡献了全部精度提升的3/4,表明了训练方法对性能的影响。
结合其它正则化方法时减少权值衰减的重要性
表2展示了当将正则化方法组合在一起时,改变权重衰减的重要性。当应用RandAugment和标签平滑时,不需要改变默认的weight decay值即1e-4。但当我们进一步增加dropout and/or stochastic depth时,性能可能会下降,除非我们进一步减少权重衰减。背后的直觉是,由于权值衰减本身就起到正则化的作用,所以在和其它正则化方法一起使用时,需要减少它的值以免过度正则化。
作者提出了一个新的模型缩放策略,具体包括两点
#1 在可能发生过拟合时缩放深度,否则缩放宽度
如图3右所示,在350个epoch的设置中,在所有分辨率下depth scaling都优于width scaling。缩放宽度可能会导致过拟合,即使增加了正则化强度,有时也会影响性能。相反如图3左所示,在10个epoch的设置下,width scaling的效果要优于depth scaling。作者推测这是由于缩放宽度相比于缩放深度参数量增加的更多,从而更有可能导致过拟合。
#2 更缓慢地缩放分辨率
如图2所示,较大的图像分辨率产生了递减的收益。因此,作者建议比以往的工作更缓慢地提高图像分辨率。这和EfficientNet提出的复合缩放规则不同,改规则会产生非常大的输入图像,比如EfficientNet-B7的输入分辨率为600,EfficientNet-L2的输入分辨率为800。