A ConvNet for the 2020s 论文笔记

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。这是一篇调参提升精度的实验性论文,比较有实际的工程意义。

五、 Reference

你可能感兴趣的:(网络Backbone,深度学习,计算机视觉,神经网络)