【ARXIV2201】ConvNeXt

【ARXIV2201】ConvNeXt

论文:https://arxiv.org/abs/2201.03545
代码:https://github.com/facebookresearch/ConvNeXt

Facebook 和 UC Berkeley 的科研人员提出了 ConvNeXt,对标的是2021年最火的 Swin Transformer,在相同的FLOPs下, ConvNeXt 比 Swin Transformer 拥有更高的准确率,在ImageNet 22K上达到 87.8% 。

论文本质上是一系列 Trick 的集合,主要包括五方面:1、macro design;2、ResNeXt;3、inverted bottleneck;4、large kerner size;5、micro designs 。下面以 ResNet50 为基础进行介绍与分析。

1、 宏观设计

  • 如下图所示,原始ResNet50中,resblock的比例是(3,4,6,3),仿照 swin 的结构,resblock调整成(3,3,9,3),调整后,准确率由78.8提升至79.4。
  • 原始的ResNet50中,第一步是通过7x7的卷积(步长为2)+ 3x3池化(步长为2)将图像尺寸从224变成56。作者采用 swin 的做法,使用4x4的卷积(步长为4)处理,准确率从79.4提升为79.5。

【ARXIV2201】ConvNeXt

2、借鉴ResNeXt

ResNeXt 通过特征分组提升了性能。一般来说,特征分组有助于构建一系列子空间,增加特征的多样性,Transfomer 里的 multi-head 就是这个道理。作者直接应用 depthwise conv,即group数和 channel 数相同,同时,卷积的通道数从64提升到96,准确率达到80.5%。

3、借鉴Inverted Bottleneck

作者认为 Tranformer block 中的MLP非常像 MobileNetV2 中的 Inverted Bootleneck,因此借鉴了这一结构。作者应用的结构如下图所示,通道数变化为 96== >384==>96,第一层和第三层为 1x1 conv,中间第二层为 deconv 3x3。 性能进一步提升至80.6%。

【ARXIV2201】ConvNeXt

4、更大的卷积核

  • 如下图所示,将deconv上移到第一层,这样就类似 Transformer 了,MSA放在MLP之前,因为这样GFLOPs就减少了,但是准确率下降到了79.9%
【ARXIV2201】ConvNeXt
  • 作者将 deconv 3x3 又改成了 7x7 (这个大小和 swin 一样。当然作者也尝试了更大尺寸,发现卷积核更大时准确率不再上升了,如下图所示),准确率从 79.9 提升到 80.6。
【ARXIV2201】ConvNeXt

5、Micro design

  • 将ReLU替换为GELU。 准确率没有变化,尽管没有变化,也许和其它trick 结合后,会发生显著变化。
  • 减少激活函数。 Transformer中只有并不是所有层后都有激活,作者仿照着减少了激活函数,具体如下图所示,准确率从80.6显著提升至81.3。
【ARXIV2201】ConvNeXt
  • 减少 Norm 。 如上图所示,作者仿照Transformer 的结构,只在第一次卷积后使用 BN,性能提升至 81.4,此时性能已经超越了swin。
  • 将 BN 替换为 LN。 作者参照 Transformer ,全部使有和LN,性能又提升至 81.5。
  • 添加下层样层。 ResNet中 stage2-stage4 中使用步长为2的3x3卷积进行下采样,而Swin 中的下采样是通过 Patch Merging 模块实现的,参照这个设计,作者添加了一个单独的下采样层(2x2卷积,步长为2),准确率提升为82.0。

Micro design 的性能演化如下图所示,这就是基于 ResNet50 改进的最终版本了,已经显著超越了同等的 swin transformer。

【ARXIV2201】ConvNeXt

根据B站 霹雳吧啦 老师的讲解,源代码中还有一个Layer Scale 论文中没有提及,来自 ICCV2021 的 Going deeper with image transformers,将输入的特征层乘上一个可训练的参数,该参数就是一个向量,元素个数与特征层channel相同,即对每个channel的数据进行缩放(听起来很像通道级的 attention),感兴趣可以看看作者源代码。

上一篇:GPT笔记


下一篇:Transformer论文翻译