【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。
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%。
4、更大的卷积核
- 如下图所示,将deconv上移到第一层,这样就类似 Transformer 了,MSA放在MLP之前,因为这样GFLOPs就减少了,但是准确率下降到了79.9%
- 作者将 deconv 3x3 又改成了 7x7 (这个大小和 swin 一样。当然作者也尝试了更大尺寸,发现卷积核更大时准确率不再上升了,如下图所示),准确率从 79.9 提升到 80.6。
5、Micro design
- 将ReLU替换为GELU。 准确率没有变化,尽管没有变化,也许和其它trick 结合后,会发生显著变化。
- 减少激活函数。 Transformer中只有并不是所有层后都有激活,作者仿照着减少了激活函数,具体如下图所示,准确率从80.6显著提升至81.3。
- 减少 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。
根据B站 霹雳吧啦 老师的讲解,源代码中还有一个Layer Scale 论文中没有提及,来自 ICCV2021 的 Going deeper with image transformers,将输入的特征层乘上一个可训练的参数,该参数就是一个向量,元素个数与特征层channel相同,即对每个channel的数据进行缩放(听起来很像通道级的 attention),感兴趣可以看看作者源代码。
标签:ARXIV2201,卷积,Transformer,准确率,ConvNeXt,步长,作者,所示 来源: https://www.cnblogs.com/gaopursuit/p/15852647.html