A ConvNet for the 2020s

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

摘要

视觉任务的20年代以ViT(Vision Transformers)为始,并迅速超越ConvNet成为性能最佳的图像分类模型。 分层Transformer(如Swin Transformer)重新引入了ConvNet先验信息 ,使得Transformer成实际可行的通用视觉骨干网络,并在不同视觉任务上取得了非凡的性能。但是,这种混合方法的有效性,归因于transformer的内在优势,而不是卷积的归纳偏差
论文重新验证了设计空间,并测试了单纯的卷积网络convnet可以达到的上限。 论文对标准的ResNet,循序渐进地朝着ViT方向改造,并发现了一些影响模型性能的关键部分。 得到了一系列纯粹的卷积网络模型,叫做ConvNeXt,在准确率和稳定性上完全可以和Transformers 媲美,在 ImageNet top-1达到87.8%准确率,而且在coco数据集目标检测和ADE20K数据集语义分割上超过了Swin Transformers,同时,保持了标准卷积的简单和效率。
在这里插入图片描述

2. Modernizing a ConvNet: a Roadmap

基于FLOPs对齐两种模型:
ResNet-50 / Swin-T计算量FLOPs: 4.5 × 1 0 9 4.5 \times 10^{9} 4.5×109
ResNet-200 / Swin-B计算量FLOPs: 15.0 × 1 0 9 15.0 \times 10^{9} 15.0×109
最终结果使用ResNet-50 / Swin-T展示。
原则:遵循Swin Transformer不同层次的设计,同时保持网络作为标准ConvNet的简单性。
首先,在相同的训练策略下,ViT比ResNet50性能表现要好很多,使用当前的ResNet50作为baseline;
之后,设计了一系列的 ‘modernize’ 改进策略:
(1)macro design;
(2)ResNeXt;
(3)inverted bottleneck;
(4)large kernel size;
(5)various layer-wise micro design。
图2展示了随着网络一步步地modernize,所有模型在ImageNet-1K上训练并测试取得的一些结果。
在这里插入图片描述

2.1 训练技巧

ViT除了新的结构模块设计,在视觉任务上训练策略也不同(例如AdamW优化器)。所以第一步,就是根据ViT的训练策略,训练一组ResNet50/200的baseline。
具体训练策略:
1)训练从90epoch扩展到300epoch;
2)使用AdamW优化器;
3)数据增强使用 Mixup、 Cutmix、RandAugment 、Random Erasing;
4)正则化方案包括随机深度(Stochastic Depth)和标签平滑(Label Smoothing)。具体参数设置如下:
在这里插入图片描述
就其本身而言,这种增强训练方法将ResNet-50模型的性能从76.1%提高到78.8%(+2.7%),这意味着传统卷积神经网络和ViT之间的性能差异很大一部分可能是由于训练技术

2.2 Macro Design

Changing stage compute ratio.

ResNet的res4 阶段的结构设计是为了适配下游的任务(比如目标检测,检测器要在14*14的尺寸上进行)。Swin-T也践行了同一原则,唯一不同的是4阶段的计算比率是 1:1:3:1,更大Swin Transformer使用的比率是1:1:9:1.所以调整ResNet50的block数量由(3,4,6,3)到(3,3,9,3),FLOAPs和Swin-T基本一致,但准确率从78.8%提升到79.4%。(有研究在分析计算分布的影响,可能存在更有的计算分布)

Changing stem to “Patchify”

stem结构主要关心:网络起始部分如何对输入图像处理。由于图片本身具有内在冗余,标准ResNet和ViT,一般都会将图像下采样到合适的特征图尺寸。在标准ResNet中,一组stride=2的7*7卷积,之后一组MaxPooling,生成输入图像的4倍下采样特征。在ViT中,使用了激进的“Patchify”策略应用到stem 策略,即一组大的kernel (通常了kernel size=14、16)和无重叠的卷积。
SiT使用了类似“Patchify”的策略,但是使用了更小的patch size=4来适应多阶段的结构设计。
论文将ResNet-style stem cell替换为patchily层,使用 4 ∗ 4 4*4 44,步长为4的卷积层准确率从79.4%提升到79.5%,这表明ResNet的stem cell可以被ViT的patchify层取代,并取得更好的性能。

2.3. ResNeXt-ify

此阶段,尝试使用ResNeXt的分组卷积。ResNeXt践行更多的分组,来扩充宽度。在bottleneck块中使用 3 ∗ 3 3*3 33的分组卷积,明显减少了FLOPs,同时用扩展网络宽度弥补容量的损失。

论文使用了depthwise convolution(DW),发现深度卷积类似于自注意力中的加权和操作,其操作基于每个通道,即只在空间维度上混合信息。深度卷积和 1 ∗ 1 1*1 11卷积相结合,形成空间和通道的分离,这也是ViT共有的特性,其每个操作要么混合了空间或者通道维度的信息,但不会同时混合。(当然,FLOPs降了,精度也如期降了!)

论文又将网络宽度64提升到和Swin-T一样的通道数96准确率提升到80.5%,FLOPs为5.3G。

2.4. Inverted Bottleneck

每个transformer块一个重要的设计是,创建了一个倒置瓶颈块,即MLP块的隐藏层尺寸是输入层尺寸的4倍。这种设计可联系到ConvNets中扩展比为4的倒置瓶颈块。这是MobileNetV2最先引起的倒置瓶颈块的潮流,之后广泛应用到ConvNet结构中。
在这里插入图片描述
论文使用了倒置瓶颈块结构,图3中的(a)到(b)解释了这一变化过程。虽然深度卷积的FLOPs增加了,但是在下采样shortcut 1 ∗ 1 1*1 11卷积层FLOPs减少了,整体的FLOPs也降低到4.6G并且性能从80.5%提升到80.6%

2.5. Large Kernel Sizes

ViT没有local自注意力机制,每一层都是全局视野。以前ConvNets有大尺寸的卷积核,但是 3 ∗ 3 3*3 33卷积核在现代gpu上有较高的硬件实现,所以被广泛使用。Swin-T重新引入local窗口的自注意力block,窗口尺寸 7 ∗ 7 7*7 77,明显比ResNeXt的 3 ∗ 3 3*3 33大很多,所以论文在ConvNet上再次使用大卷积核以对齐。

Moving up depthwise conv layer

探讨大的卷积核就要把深度卷积上移,图3中(b)到©。这类似于在Transformer中就是MSA block在MLP层之前。 (b)中本身就是导致的瓶颈块,现将大卷积核的深度卷积上移,那么深度卷积通道就要减少(复杂且低效的模块-大核卷积、MSA这种),而高效密集的 1 ∗ 1 1*1 11卷积成为主要工作部分。
性能下降到79.9%

Increasing the kernel size.

实验了几组kernel size3、5、7、9,性能从79.9%( 3 ∗ 3 3*3 33)提升到80.6%( 7 ∗ 7 7*7 77),FLOPs大体一致,在 7 ∗ 7 7*7 77性能达到饱和。R200也是在 7 ∗ 7 7*7 77卷积核性能达到最佳。

2.6. Micro Design

关注一些微观操作,大部分是层级的,关注特殊的激活函数和归一化层。

Replacing ReLU with GELU

将ReLU激活函数替换为NLP常用GELU,性能没变。

Fewer activation function

ViT有更少的激活函数,为了跟ViT结构相似。如图4,剔除了除 1 ∗ 1 1*1 11卷积层之外的所有GELU激活函数。性能提升到81.3%, 已经达到了Swin-T的性能指标。
在这里插入图片描述

Fewer normalization layers

transformer block的归一化层也很少,仿照他的风格,删除2个BN层,只留一组 1 ∗ 1 1*1 11卷积之前的BN层,性能提升到81.4%,已经超过了Swin-T。
这样看来,论文每个block的归一化层比Transformer更少,因为作者经验表明,在block的开始添加一个ewaide 的BN层并不能改善性能。

Substituting BN with LN.

有论文指出BN对模型有害,也有论文指出LN(Layer Normalization)在Transformer中表现更好。有论文直接用LN替代BN性能不佳,但是论文用LN替代BN性能有了提升至81.5%。

Separate downsampling layers.

ResNet空间下采样是通过每一阶段的第一个残差块,使用步长为2的 3 ∗ 3 3*3 33的卷积(shortcut中 1 ∗ 1 1*1 11的卷积步长也为2)。在Swin Transformer会在各阶段之间,有一个单独的下采样层。论文使用了步长为2的 2 ∗ 2 2*2 22卷积进行空间下采样。 并且进一步的观察表明,在空间分辨率改变的地方添加归一化层,有利于训练稳定
所以使用了 stride=2的conv_2*2和一层LN,性能提升至82.0%。
ResNet50、ConvNeXt-T以及Swin-T结构对比:
在这里插入图片描述

3. Empirical Evaluations on ImageNet

构建了不同尺度的ConvNeXt,ConvNeXt- T/S/B/L分别对应 Swin-T/S/B/L,不同尺度的区别仅仅在于,各阶段的通道数量C和block数量B,另通道数C增加是在每个新增的stage。具体配置如下:
• ConvNeXt-T: C = (96, 192, 384, 768), B = (3, 3, 9, 3)
• ConvNeXt-S: C = (96, 192, 384, 768), B = (3, 3, 27, 3)
• ConvNeXt-B: C = (128, 256, 512, 1024), B = (3, 3, 27, 3)
• ConvNeXt-L: C = (192, 384, 768, 1536), B = (3, 3, 27, 3)
• ConvNeXt-XL: C = (256, 512, 1024, 2048), B = (3, 3, 27, 3)

3.1. Settings

在ImageNet-22K上预训练模型,之后在 ImageNet-1K上fine-tune。
ConvNeXts’ ImageNet-1K training and ImageNet-22K pre-training settings in Table 5 第二节的所有配置都在Tabel5中,除了EMA=disabled,因为作者发现EMA会严重损害有BN层的模型

ImageNet Fine-tuning
基于之前预训练的模型进行微调,没有使用EMA。

另注:
与前面的实验观察不同,
R200的kernel size饱和值是5,R50的饱和值是7;
瓶颈块倒置结构在R200上性能涨幅更大。

具体实验详情,可见论文。

总结

虽然论文中所有对convnet设计改造,都来自于 vision Transform,但是改造后ConvNeXt的仍是纯粹的ConvNet,而且,性能明显超过Swin Transformer。相比Swin Transformer,ConvNeXt具有相同的FLOPs、参数量、吞吐量和内存使用,但不需要特殊的模块,比如滑窗注意力、相对位置偏置等。可见Swin Transformer在视觉任务上的优秀表现,并不能单纯归因于transformer的内在优势,反而ConvNet简单高效的结构更能打。

参考:

  1. https://mp.weixin.qq.com/s/Xg5wPYExnvTqRo6s5-2cAw
  2. https://zhuanlan.zhihu.com/p/456432890
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值