A ConvNet for the 2020s
论文链接: https://arxiv.org/abs/2201.03545
一、 Problem Statement
现在Transformer大行其道,很多纯卷积的网络也不断的革新。这篇文章分析transformer的优势,也借鉴了一些新的卷积网络的点,基于ResNet50和ResNet200逐步提升精度。
二、 Direction
作者认为,Transformer的优势在于其multi-head self-attention中优异的scaling behavior。ConvNets和Transformer都有相似的inductive biases,但是不同的是,在训练过程中和结构设计上,存在着差异性。作者尝试去找出这些影响因素,去测试一下pure ConvNets能达到一个怎么样的性能。
How do design decisions in Transformers impact ConvNets’ performance?
下面就是作者探索的历程:
三、 Method
先来看一下整体结构:
1. Training Techniques
作者做了以下训练调整:
- 从90 epoches到300 epoches。
- 使用AdamW 优化器。
- Mixup, Cutmix, RandAugment, Random Erasing数据增强。
- 使用Stochastic Depth和Label Smoothing。
- 使用EMA减少模型过拟合。
这一个步骤提升了2.7%的精度。
2. Macro Design
作者分析了Swin Transformer网络设计,发现使用了multi-stage design,每一个stage有不同的特征图分辨率。有两个值得思考的设计: stage compute ratio和stem cell structure。
- 改变stage compute ratio。 作者认为ResNet的 heavy “res4” stage主要是用于下游任务,其detector head是基于14x14的特征图。而Swin-T, 它的比例是1:1:3:1。因此,作者调整了一下ResNet原先的分布,从(3,4,6,3)到(3,3,9,3)。 这一步精度从78.8%到79.4%。
- ResNet 的stem cell使用stride=2的7x7卷积,然后接一个max pool,会使得图像下采样4倍。而在Transformer当中,使用了aggressive “patchify”; Swin Transformer使用了4x4的patch size。因此,作者使用4x4, stride=4的卷积。这个步骤提升了0.1%的精度。
3. 借鉴ResNeXt
ResNeXt的核心是grouped convolution。使用更多的groups,扩展网络宽度。 而作者在这里,使用的是depthwise convolution,这是一种特殊的grouped convolution,(其中groups的数量等于通道数)。作者通过增加网络的宽度到与Swin-T的通道数一样(64到96),精度提升到80.5%。
4. Inverted Bottleneck
Transformer block的一个重要设计是创建了inverted bottleneck。如下图所示:
因此,作者做出了以下改变:
也就是从上图的a,转到了b。尽管使用depthwise convolution layer增加了FLOPs,但这个改变,使得整体的网络FLOPs降到了4.6G,且精度提升了0.1%。在更大的模型上(ResNet-200),提升了0.7%。
5. Large Kernel Size
Transformer中,non-local self-attention能够获得全局的感受野。因此,作者使用了large kernel-sized convolutions。为了使用large kernel,就要改变一下depthwise conv layer。如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0R05k1g2-1642432892991)(4.png)]
也就是从b到c。Transformer中 MSA block也是在MLP layers之前的。这一个调整减少了FLOPs到4.1G,精度也下降到了79.9%。然后使用7x7的卷积核,精度又提升到了80.9%。6. Micro Design
- 使用GELU替换ReLU,精度没有变化。
- 更少的activate functions,作者发现,Transformers很少激活函数。作者删除了residual block中的所有GELU层,除了两个1×1层之间的。精度提升了到了81.3%。
- 使用更少的normalization layers。仅仅在1x1之间使用BN,精度提升到了81.4%。作者还发现,在每个Block的开始添加一个额外的BN层,精度不会提升。
- 作者使用LN替换BN,精度提升了0.1%。
- 分离降采样层。且在特征图大小变化的时候,添加一个normalization layers,有助于稳定训练。精度提升到了82.0%。
四、 Conclusion
作者提出,迄今为止讨论的设计方案都不是新颖的,但都能够提升性能。所以,借鉴transformer的设计思想和一些ConvNet的tricks,一样可以达到SOTA。这是一篇调参提升精度的实验性论文,比较有实际的工程意义。
五、 Reference
借鉴transformer的设计思想和一些ConvNet的tricks,一样可以达到SOTA。这是一篇调参提升精度的实验性论文,比较有实际的工程意义。