论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2201.03545
代码地址:https://github.com/facebookresearch/ConvNeXt
视觉识别的“咆哮的 20 年代”始于 Vision Transformers (ViTs) 的引入,它迅速取代了 ConvNets,成为最先进的图像分类模型。另一方面,普通的 ViT 在应用于目标检测和语义分割等一般计算机视觉任务时面临困难。正是分层 Transformer(例如 Swin Transformers)重新引入了几个 ConvNet 先验,使得 Transformer 作为通用视觉骨干实际上可行,并在各种视觉任务上表现出卓越的性能。然而,这种混合方法的有效性在很大程度上仍归功于 Transformer 的内在优势,而不是卷积固有的归纳偏差。在这项工作中,我们重新检查了设计空间并测试了纯 ConvNet 所能达到的极限。我们逐渐将标准 ResNet “现代化”为视觉 Transformer 的设计,并在此过程中发现了导致性能差异的几个关键组件。从而产生一系列纯 ConvNet 模型,称为 ConvNeXt。 ConvNeXts 完全由标准 ConvNet 模块构建,在准确性和可扩展性方面与 Transformer 竞争,实现 87.8% ImageNet top-1 准确率,在 COCO 检测和 ADE20K 分割方面优于 Swin Transformers,同时保持标准 ConvNet 的简单性和效率。
图1 ConvNets 和◦vision Transformer 的ImageNet-1K 分类结果。每个气泡的面积与模型族中变体的 FLOP 成正比。这里的 ImageNet-1K/22K 模型分别选取 2242/3842尺寸的图像。 ResNet 和 ViT 结果是通过改进原始论文的训练程序获得的。我们证明了标准的 ConvNet 模型可以实现与分层视觉 Transformer 相同的可扩展性,同时在设计上要简单得多。
回顾 2010 年代,这十年以深度学习的巨大进步和影响为标志。主要驱动力是神经网络的复兴,特别是卷积神经网络 (ConvNets)。十年来,视觉识别领域成功地从工程特征转向设计(ConvNet)架构。尽管反向传播训练的卷积神经网络的发明可以追溯到 1980 年代 [42],但直到 2012 年底我们才看到它在视觉特征学习方面的真正潜力。 AlexNet [40] 的引入沉淀了“ImageNet 时刻”[59],开创了计算机视觉的新时代。此后,该领域迅速发展。 VGGNet [64]、Inceptions [68]、ResNe(X)t [28, 87]、DenseNet [36]、MobileNet [34]、EfficientNet [71] 和 RegNet [54] 等代表性 ConvNet 专注于准确性的不同方面,效率和可扩展性,并推广了许多有用的设计原则。
ConvNets 在计算机视觉中的完全主导地位并非巧合:在许多应用场景中,“滑动窗口”策略是视觉处理所固有的,尤其是在处理高分辨率图像时。 ConvNets 有几个内置的归纳偏置,使它们非常适合各种计算机视觉应用。最重要的一个是平移等方差,这是对象检测等任务的理想属性。由于当以滑动窗口方式使用时,计算是共享的 [62],因此 ConvNets 本质上也是高效的。几十年来,这一直是 ConvNets 的默认使用,通常用于有限的对象类别,例如数字 [43]、人脸 [58、76] 和行人 [19、63]。进入2010年代,基于区域的检测器 [23, 24, 27, 57] 进一步将 ConvNets 提升到成为视觉识别系统中基本构建块的位置。
大约在同一时间,自然语言处理 (NLP) 的神经网络设计之旅走上了一条截然不同的道路,因为 Transformers 取代了循环神经网络成为主导的主干架构。尽管语言和视觉领域之间感兴趣的任务存在差异,但随着视觉转换器 (ViT) 的引入彻底改变了网络架构设计的格局,这两个流(语言与视觉)在 2020 年令人惊讶地融合了。除了最初的“patchify”层将图像分割成一系列补丁之外,ViT 没有引入图像特定的归纳偏差,并且对原始 NLP 变换器进行了最小的更改。 ViT 的一个主要关注点是缩放行为:借助更大的模型和数据集大小,Transformers 可以显着优于标准 ResNet。这些图像分类任务的结果令人鼓舞,但计算机视觉不仅限于图像分类。如前所述,过去十年中众多计算机视觉任务的解决方案在很大程度上依赖于滑动窗口、全卷积范式。在没有 ConvNet 归纳偏差的情况下,普通 ViT 模型在被用作通用视觉主干时面临许多挑战。最大的挑战是 ViT 的全局注意力设计,它在输入大小方面具有二次复杂度。这对于 ImageNet 分类可能是可以接受的,但很快就会变得难以处理更高分辨率的输入。
分层 Transformer 采用混合方法来弥补这一差距。例如,“滑动窗口”策略(例如局部窗口内的注意力)被重新引入 Transformer,使它们的行为更类似于 ConvNets。 Swin Transformer [45] 是朝这个方向发展的里程碑式的工作,它首次证明了 Transformer 可以被用作通用的视觉骨干,并在图像分类之外的一系列计算机视觉任务中实现最先进的性能。 Swin Transformer 的成功和迅速采用也揭示了一件事:卷积的本质并没有变得无关紧要;相反,它仍然很受欢迎,并且从未褪色。
从这个角度来看,Transformers 在计算机视觉方面的许多进步都旨在恢复卷积。然而,这些尝试是有代价的:滑动窗口自注意力的幼稚实现可能会很昂贵 [55];使用循环移位等先进方法[45],可以优化速度,但系统在设计上变得更加复杂。另一方面,具有讽刺意味的是,ConvNet 已经满足了许多所需的属性,尽管是以一种直接、简洁的方式。 ConvNets 似乎失去动力的唯一原因是(分层)Transformers 在许多视觉任务中超过了它们,而性能差异通常归因于 Transformers 卓越的缩放行为,其中多头自注意力是关键组成部分。(一味的证明Transformer比COnv强?)
与在过去十年中逐渐改进的 ConvNet 不同,Vision Transformers 的采用是一个进步。在最近的文献中,在比较两者时通常采用系统级比较(例如 Swin Transformer 与 ResNet)。 ConvNets 和分层视觉 Transformer 同时变得不同和相似:它们都配备了相似的归纳偏差,但在训练过程和宏观/微观层次的架构设计上存在显着差异。在这项工作中,我们研究了 ConvNets 和 Transformer 之间的架构区别,并在比较网络性能时尝试识别混杂变量。我们的研究旨在弥合 ConvNet 的前 ViT 和后 ViT 时代之间的差距,并测试纯 ConvNet 所能达到的极限。
为此,我们从经过改进程序训练的标准 ResNet(例如 ResNet50)开始。我们逐渐将架构“modernize”为构建分层视觉 Transformer(例如 Swin-T)。我们的探索是由一个关键问题引导的:Transformers 中的设计决策如何影响 ConvNets 的性能?我们发现了几个导致性能差异的关键组件。因此,我们提出了一个名为 ConvNeXt 的纯 ConvNet 家族。我们在各种视觉任务上评估 ConvNeXts,例如 ImageNet 分类 [17]、COCO [44] 上的对象检测/分割和 ADE20K [92] 上的语义分割。令人惊讶的是,完全由标准 ConvNet 模块构建的 ConvNeXts 在所有主要基准测试中的准确性、可扩展性和鲁棒性方面都与 Transformers 竞争。 ConvNeXt 保持了标准 ConvNets 的效率,训练和测试的完全卷积特性使其实施起来非常简单。
我们希望新的观察和讨论能够挑战一些共同的信念,并鼓励人们重新思考卷积在计算机视觉中的重要性。
在本节中,我们提供了从 ResNet 到类似于 Transformer 的 ConvNet 的技术路线。我们根据 FLOP 考虑两种模型大小,一种是 ResNet-50 / Swin-T 机制,其 FLOPs 约为 4.5 × 10的9次方,另一种是 ResNet-200 / Swin-B 机制,其 FLOPs 约为 15.0×10的9次方。为简单起见,我们将使用 ResNet-50 / Swin-T 复杂度模型展示结果。更高容量模型的结论是一致的,结果可以在附录 C 中找到。
图2 我们将标准 ConvNet (ResNet) 现代化,以设计分层视觉 Transformer (Swin),而不引入任何基于注意力的模块。前景条是 ResNet-50/Swin-T FLOP 机制中的模型精度; ResNet-200/Swin-B 方案的结果用灰色条显示。阴影线表示未采用修改。两种方案的详细结果见附录。许多 Transformer 架构选择可以合并到 ConvNet 中,它们会带来越来越好的性能。最后,我们的纯 ConvNet 模型,名为 ConvNeXt,可以胜过 Swin Transformer。
在高层次上,我们的探索旨在调查和遵循 Swin Transformer 的不同设计级别,同时保持网络作为标准 ConvNet 的简单性。我们的探索路线图如下。我们的起点是 ResNet-50 模型。我们首先使用用于训练视觉 Transformer 的类似训练技术对其进行训练,并与原始 ResNet-50 相比获得了很大改进的结果。这将是我们的基线。然后我们研究了一系列设计决策,我们总结为 1) 宏观设计,2) ResNeXt,3) 倒置瓶颈,4) 大内核大小,以及 5) 各种分层微设计。在图 2 中,我们展示了“网络现代化”的每一步我们能够实现的过程和结果。由于网络复杂性与最终性能密切相关,因此在探索过程中对 FLOPs 进行了粗略控制,尽管在中间步骤中,FLOPs 可能高于或低于参考模型。所有模型都在 ImageNet-1K 上进行训练和评估。
除了网络架构的设计,训练过程也会影响最终的性能。视觉Transformer不仅带来了一组新的模块和架构设计决策,而且还为视觉引入了不同的训练技术(例如 AdamW 优化器)。这主要与优化策略和相关的超参数设置有关。因此,我们探索的第一步是使用视觉 Transformer 训练程序训练基线模型,在本例中为 ResNet50/200。最近的研究 [7, 81] 表明,一组先进训练技术可以显着提高简单 ResNet-50 模型的性能。在我们的研究中,我们使用了一个接近 DeiT 的 [73] 和 Swin Transformer 的 [45] 的训练方法。训练从 ResNets 的原始 90 个 epoch 扩展到 300 个 epoch。我们使用 AdamW 优化器 [46]、Mixup [90]、Cutmix [89]、RandAugment [14]、随机擦除 [91] 等数据增强技术,以及随机深度 [36] 和标签平滑 [69] 等正则化方案.我们使用的完整超参数集可以在附录 A.1 中找到。就其本身而言,这种增强的训练方案将 ResNet-50 模型的性能从 76.1% [ 01]提高到 78.8% (+2.7%),这意味着传统 ConvNet 和视觉 Transformer 之间的很大一部分性能差异可能是由于训练技巧。我们将在整个“现代化”过程中使用具有相同超参数的固定训练路线。 ResNet-50 机制上报告的每个准确度都是通过使用三种不同的随机种子进行训练获得的平均值。
我们现在分析 Swin Transformers 的宏观网络设计。 Swin Transformers 遵循 ConvNets [28, 65] 使用多阶段设计,其中每个阶段具有不同的特征图分辨率。有两个有趣的设计考虑:阶段计算比率和“stem cell”结构。
改变阶段计算比率。 ResNet 中跨阶段计算分布的原始设计很大程度上是经验性的。重型“res4”阶段旨在与目标检测等下游任务兼容,其中探测器头在 14×14 特征平面上运行。另一方面,Swin-T 遵循相同的原则,但阶段计算比例略有不同,为 1:1:3:1。对于较大的 Swin Transformers,比例为 1:1:9:1。按照设计,我们将每个阶段的块数从 ResNet-50 中的 (3, 4, 6, 3) 调整为 (3, 3, 9, 3),这也使 FLOPs 与 Swin-T 对齐。这将模型准确率从 78.8% 提高到 79.4%。值得注意的是,研究人员已经彻底研究了计算的分布 [53, 54],并且可能存在更优化的设计。
从现在开始,我们将使用这个阶段的计算比率。
将stem更改为“Patchify”(分块?)。通常,stem cell的设计关注是在网络开始时如何处理输入图像。由于自然图像中固有的冗余性,普通stem结构会在标准 ConvNets 和视觉 Transformer 中积极地将输入图像下采样到适当的特征图大小。标准 ResNet 中的stem结构包含一个步长为 2 的 7×7 卷积层,然后是一个最大池,这就产生了输入图像的 4 倍下采样。在视觉 Transformer 中,stem结构使用了更激进的“patchify”策略,这对应于较大的内核大小(例如内核大小 = 14 或 16)和非重叠卷积。 Swin Transformer 使用类似的“patchify”层,但使用更小的 4 ×补丁大小来适应架构的多阶段设计。我们将 ResNet 风格的stem结构替换为使用 4×4、步幅为 4 的卷积层(k=s=4)实现的补丁化层。准确率从 79.4% 变为 79.5%。这表明 ResNet 中的stem结构可以用更简单的“patchify”层 à la ViT 代替,这将产生类似的性能。
== 我们将在网络中使用“patchify stem”(4×4 非重叠卷积)。==
在这一部分中,我们尝试采用 ResNeXt [87] 的思想,它比普通的 ResNet 具有更好的 FLOPs/accuracy 权衡。核心组件是分组卷积,其中卷积滤波器被分成不同的组。在较高的层面上,ResNeXt 的指导原则是“使用更多的组,扩大宽度”。更准确地说,ResNeXt 对瓶颈块中的 3×3 卷积层采用分组卷积。由于这显着降低了 FLOP,因此扩展了网络宽度以补偿容量损失。
图3 块的修改和结果规范。 (a) 是一个 ResNeXt 块;在(b)中,我们创建了一个倒置的瓶颈块,在(c)中,空间深度卷积层的位置向上移动。
在我们的例子中,我们使用深度卷积,这是分组卷积的一种特殊情况,其中组数等于通道数。深度卷积已被 MobileNet [34] 和 Xception [11] 推广。我们注意到,深度卷积类似于自注意力中的加权求和操作,它在每个通道的基础上进行操作,即仅在空间维度上混合信息。 depthwise conv 和 1 × 1 convs 的组合导致空间和通道混合的分离,这是视觉转换器共享的属性,其中每个操作要么混合空间维度或通道维度的信息,但不能同时混合两者。深度卷积的使用有效地降低了网络 FLOPs,并且正如预期的那样准确。按照 ResNeXt 中提出的策略,我们将网络宽度增加到与 Swin-T 相同的通道数(从 64 到 96)。随着 FLOPs (5.3G) 的增加,这使网络性能达到 80.5%。
== 我们现在将采用 ResNeXt 设计。==
每个 Transformer 块中的一个重要设计是它创建了一个倒置瓶颈,即 MLP 块的隐藏维度(hidden dim =4*input dim)是输入维度的四倍(参见图 4)。有趣的是,这种 Transformer 设计与 ConvNets 中使用的扩展比为 4 的倒置瓶颈设计相连。这个想法被 MobileNetV2 [61] 推广,随后在几个先进的 ConvNet 架构 [70, 71] 中获得了关注。
![ResNet、Swin Transformer 和 ConvNeXt 的块设计。由于存在多个专用模块和两个残差连接,Swin Transformer 的模块更加复杂。为简单起见,我们将 Transformer MLP 块中的线性层也称为“1×1 convs”,因为它们是等价的。](https://img-blog.csdnimg.cn/6193f071e93340ceb255843e9772506c.png mpwZw =640x640)
图4 ResNet、Swin Transformer 和 ConvNeXt 的块设计。由于存在多个专用模块和两个残差连接,Swin Transformer 的模块更加复杂。为简单起见,我们将 Transformer MLP 块中的线性层也称为“1×1 convs”,因为它们是等价的。
同样,我们探索倒置瓶颈设计。图 3 (a) 至 (b) 说明了这些配置。尽管深度卷积层的 FLOPs 增加了,但由于下采样残差块的快捷 1×1 卷积层的 FLOPs 显着减少,这种变化将整个网络的 FLOPs 减少到 4.6G。有趣的是,这会稍微提高性能(从 80.5% 提高到 80.6%)。在 ResNet-200 / Swin-B 方案中,这一步带来了更大的收益(81.9% 到 82.6%),同时也减少了 FLOP。
我们现在将使用倒置瓶颈。
在这部分探索中,我们关注大型卷积核的行为。视觉Transformer最显着的方面之一是它们的非局部自注意力,它使每一层都具有全局感受野。虽然过去 ConvNets [40, 68] 使用了大内核大小,但黄金标准(由 VGGNet [65] 普及)是堆叠小内核大小(3×3)的卷积层,它们在现代 GPU 上具有高效的硬件实现[41]。尽管 Swin Transformers 将局部窗口重新引入了 self-attention block,但窗口大小至少为 7×7,明显大于 3×3 的 ResNe(X)t 内核大小。在这里,我们重新审视了在 ConvNets 中使用大内核大小的卷积。(由swin T中的7x7卷积核引发对于大卷积核的思考?)。
向上移动深度卷积层。要探索大内核,一个先决条件是向上移动深度卷积层的位置(图 3 (b) 到 ©)。这在Transformer中也很明显:MSA 块放置在 MLP 层之前。由于我们有一个倒置的瓶颈块,这是一个自然的设计选择——复杂/低效的模块(MSA、大内核卷积)将具有更少的通道,而高效、密集的 1×1 层将完成繁重的工作。(不明白)这个中间步骤将 FLOP 减少到 4.1G,导致性能暂时下降到 79.9%。
增加卷积核大小。通过所有这些准备工作,采用更大的内核大小的卷积的好处是显着的。我们尝试了几种内核大小,包括 3、5、7、9 和 11。网络的性能从 79.9% (3×3) 提高到 80.6% (7×7),而网络的 FLOPs 大致保持不变。此外,我们观察到较大内核大小的好处在 7×7 处达到饱和点。我们也在大容量模型中验证了这种行为:当我们将内核大小增加到 7×7 以上时,ResNet-200 机制模型没有表现出进一步的增益。
我们将在每个块中使用 7×7 深度卷积。
至此,我们已经完成了对宏观尺度网络架构的检查。有趣的是,视觉 Transformer 中的很大一部分设计选择可能会映射到 ConvNet 实例化。
在本节中,我们在微观尺度上研究其他几个架构差异——这里的大部分探索都是在层级完成的,重点是激活函数和归一化层的具体选择。
用 GELU 代替 ReLU。 NLP 和视觉架构之间的一个差异是使用哪些激活函数的细节。随着时间的推移,已经开发了许多激活函数,但整流线性单元 (ReLU) [49] 由于其简单性和效率,仍然在 ConvNets 中广泛使用。 ReLU 也被用作原始 Transformer 论文 [77] 中的激活函数。高斯误差线性单元,或 GELU [32],可以被认为是 ReLU 的更平滑变体,被用于最先进的 Transformer,包括 Google 的 BERT [18] 和 OpenAI 的 GPT-2 [52],和大多数最近的视觉transformer。我们发现 ReLU 在我们的 ConvNet 中也可以用 GELU 代替,尽管准确率保持不变(80.6%)。
更少的激活函数。 Transformer 和 ResNet 块之间的一个小区别是 Transformer 的激活函数较少。考虑一个带有键/查询/值(qkv)线性嵌入层、投影层和 MLP 块中的两个线性层的 Transformer 块。 MLP 块中只有一个激活函数。相比之下,通常的做法是在每个卷积层(包括 1×1 卷积)上附加一个激活函数。在这里,我们研究了当我们坚持相同的策略时性能如何变化。如图 4 所示,我们从残差块中消除了所有 GELU 层,除了两个 1×1 层之间的一个,复制了 Transformer 块的样式。这个过程将结果提高了 0.7% 到 81.3%,实际上与 Swin-T 的性能相当。
我们现在将在每个块中使用单个 GELU 激活。
更少的归一化层。 Transformer 块通常也具有较少的归一化层。在这里,我们删除了两个 BatchNorm (BN) 层,在 conv 1 × 1 层之前只留下一个 BN 层。这进一步将性能提升至 81.4%,已经超过了 Swin-T 的结果。请注意,我们每个块的归一化层比 Transformer 还要少,因为根据经验,我们发现在块的开头添加一个额外的 BN 层并不能提高性能。
用 LN 代替 BN。 BatchNorm [38] 是 ConvNets 中的重要组成部分,因为它提高了收敛性并减少了过度拟合。然而,BN 也有许多错综复杂的东西,可能会对模型的性能产生不利影响 [84]。在开发替代规范化 [60, 75, 83] 技术方面已经进行了许多尝试,但 BN 在大多数视觉任务中仍然是首选选项。另一方面,Transformers 中使用了更简单的层规范化 [5] (LN),从而在不同的应用场景中实现了良好的性能。
在原始 ResNet 中直接用 LN 代替 BN 将导致性能欠佳 [83]。随着网络架构和训练技术的所有修改,我们在这里重新审视使用 LN 代替 BN 的影响。我们观察到我们的 ConvNet 模型在使用 LN 训练时没有任何困难;实际上,性能稍好一些,获得了 81.5% 的准确率。
从现在开始,我们将使用一个 LayerNorm 作为我们在每个残差块中的归一化选择。
分离下采样层。在 ResNet 中,空间下采样是通过每个阶段开始时的残差块来实现的,使用步长为 2 的 3×3 卷积(在残差边处使用步长为 2 的 1×1 卷积)。在 Swin Transformers 中,在各个阶段之间添加了一个单独的下采样层。我们探索了一种类似的策略,在该策略中,我们使用步长为 2 的 2×2 卷积层进行空间下采样。这种修改出人意料地导致了不同的训练。进一步的调查表明,在空间分辨率发生变化的地方添加归一化层有助于稳定训练。其中包括 Swin Transformers 中也使用的几个 LN 层:每个下采样层之前的一个,stem之后的一个,以及最终全局平均池化之后的一个。我们可以将准确率提高到 82.0%,大大超过 Swin-T 的 81.3%。
我们将使用单独的下采样层。这将我们带到了我们称之为 ConvNeXt 的最终模型。
ResNet、Swin 和 ConvNeXt 块结构的比较可以在图 4 中找到。ResNet-50、Swin-T 和 ConvNeXt-T 的详细架构规范的比较可以在表 9 中找到。
闭幕致辞。我们已经完成了我们的第一次“演练”,并发现了 ConvNeXt,一个纯 ConvNet,它在这个计算机制中的 ImageNet-1K 分类性能优于 Swin Transformer。值得注意的是,到目前为止讨论的所有设计选择都改编自视觉Transformer。此外,即使在 ConvNet 文献中,这些设计也并不新颖——在过去十年中,它们都是单独研究的,但不是集体研究的。我们的 ConvNeXt 模型具有与 Swin Transformer 大致相同的 FLOP、#params.、吞吐量和内存使用,但不需要专门的模块,例如移位窗口注意力或相对位置偏差。
这些发现令人鼓舞,但尚未完全令人信服——迄今为止,我们的探索仅限于小规模,但视觉Transformer的缩放行为才是真正让它们与众不同的地方。此外,ConvNet 能否在目标检测和语义分割等下游任务上与 Swin Transformers 竞争的问题是计算机视觉从业者关注的核心问题。在下一节中,我们将在数据和模型大小方面扩展我们的 ConvNeXt 模型,并在一组不同的视觉识别任务上评估它们。
我们构建了不同的 ConvNeXt 变体,ConvNeXtT/S/B/L,与 Swin-T/S/B/L [45] 具有相似的复杂性。 ConvNeXt-T/B 分别是 ResNet-50/200 机制上“现代化”程序的最终产品。此外,我们构建了一个更大的 ConvNeXt-XL 来进一步测试 ConvNeXt 的可扩展性。变体仅在通道数量 C 和每个阶段中的块 B 数量上有所不同。在 ResNets 和 Swin Transformers 之后,每个新阶段的通道数量都会翻倍。我们总结了以下配置:
•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)
ImageNet-1K 数据集由 1000 个对象类和 120 万张训练图像组成。我们在验证集上报告 ImageNet-1K top-1 准确度。我们还对 ImageNet-22K 进行预训练,这是一个包含 21841 个类(1000 个 ImageNet-1K 类的超集)的更大数据集,有 1400 万张图像进行预训练,然后在 ImageNet- 上微调预训练模型1K 用于评估。我们在下面总结了我们的训练设置。更多细节可以在附录 A 中找到。(预训练是个天堑呀^^!)
在 ImageNet-1K 上进行训练。我们使用 AdamW [46] 以 4e-3 的学习率训练 ConvNeXts 300 个 epoch。之后有一个 20 epoch 的线性预热和一个余弦衰减时间表。我们使用 4096 的批量大小(钞能力!)和 0.05 的权重衰减。对于数据增强,我们采用常见的方案,包括 Mixup [90]、Cutmix [89]、RandAugment [14] 和 Random Erasing [91]。我们使用随机深度 [37] 和标签平滑 [69] 对网络进行正则化。应用初始值 1e-6 的层尺度 [74]。我们使用指数移动平均线 (EMA) [51],因为我们发现它可以缓解较大模型的过度拟合。
ImageNet-22K 上的预训练。我们在 ImageNet-22K 上预训练 ConvNeXts 90 个 epoch,预热 5 个 epoch。我们不使用 EMA。其他设置遵循 ImageNet-1K。
在 ImageNet-1K 上进行微调。我们在 ImageNet-1K 上对 ImageNet22K 预训练模型进行了 30 个 epoch 的微调。我们使用 AdamW,学习率为 5e-5,余弦学习率计划,逐层学习率衰减 [6, 12],无预热,批量大小为 512,权重衰减为 1e-8。默认的预训练、微调和测试分辨率为 2242。此外,对于 ImageNet-22K 和 ImageNet-1K 预训练模型,我们以 3842 的更大分辨率进行微调。与 ViTs/Swin Transformers 相比,ConvNeXts 更容易在不同分辨率下进行微调,因为网络是全卷积的,无需调整输入块大小或插入绝对/相对位置偏差。
ImageNet-1K 表 1(上)显示了与最近的两个 Transformer 变体 DeiT [73] 和 Swin Transformers [45] 以及来自架构搜索的两个 ConvNet - RegNets [54]、EfficientNets [71] 和 EfficientNetsV2 [72] 的结果比较。 ConvNeXt 在准确度计算权衡以及推理吞吐量方面与两个强大的 ConvNet 基线(RegNet [54] 和 EfficientNet [71])具有竞争力。 ConvNeXt 的性能也全面优于具有类似复杂性的 Swin Transformer,有时具有可观的利润率(例如,ConvNeXt-T 的利润率为 0.8%)。与 Swin Transformers 相比,ConvNeXts 在没有诸如移位窗口或相对位置偏差等专门模块的情况下也享有更高的吞吐量。
表1 ImageNet-1K 上的分类精度。与 Transformers 类似,ConvNeXt 也显示出具有更高容量模型和更大(预训练)数据集的可扩展行为。推理吞吐量是在 V100 GPU 上测量的,遵循 [45]。在 A100 GPU 上,ConvNeXt 的吞吐量比 Swin Transformer 高得多。请参阅附录 E。 ViT 结果与 90 -Epoch的 AugReg [67] 培训,通过与作者的个人交流提供。
结果中的一个亮点是 ConvNeXt-B 为 3842:它比 Swin-B 高 0.6%(85.1% 对 84.5%),但推理吞吐量提高了 12.5%(95.7 VS 85.1 图像/秒)。我们注意到,当分辨率从 2242 增加到 3842 时,ConvNeXt B 相对于 Swin-B 的 FLOPs/吞吐量优势变得更大。此外,当进一步扩展到 ConvNeXt-L 时,我们观察到了 85.5% 的改进结果。
ImageNet-22K 我们在表 1(下)中展示了从 ImageNet-22K 预训练中微调的模型的结果。这些实验很重要,因为人们普遍认为视觉 Transformer 具有较少的归纳偏差,因此在大规模预训练时可以比 ConvNets 表现更好。我们的结果表明,在使用大型数据集进行预训练时,正确设计的 ConvNets 并不逊于视觉 Transformer——ConvNeXts 的性能仍然与类似大小的 Swin Transformers 相当或更好,吞吐量略高。此外,我们的 ConvNeXt-XL 模型达到了 87.8% 的准确度——在 3842 处比 ConvNeXt-L 有了相当大的改进,证明了 ConvNeXts 是可扩展的架构.
在 ImageNet-1K、EfficientNetV2-L 上,配备高级模块(如 Squeeze-andExcitation [35])和渐进式训练程序的搜索架构实现了最佳性能。然而,通过 ImageNet-22K 预训练,ConvNeXt 能够胜过 EfficientNetV2,进一步证明了大规模训练的重要性。
在附录 B 中,我们讨论了 ConvNeXt 的鲁棒性和域外泛化结果。
在这个消融中,我们检查了我们的 ConvNeXt 块设计是否可推广到没有下采样层并在所有深度保持相同特征分辨率(例如 14×14)的 ViT 风格 [20] 各向同性架构。我们使用与 ViT-S/B/L (384/768/1024) 相同的特征尺寸构建各向同性 ConvNeXt-S/B/L。深度设置为 18/18/36 以匹配参数和 FLOP 的数量。块结构保持不变(图 4)。我们将 DeiT [73] 的监督训练结果用于 ViT-S/B 和 MAE [26] 用于 ViT-L,因为它们采用了比原始 ViT [20] 改进的训练程序。 ConvNeXt 模型使用与以前相同的设置进行训练,但预热时间更长。 ImageNet-1K 在 2242 分辨率下的结果如表 2 所示。我们观察到 ConvNeXt 的性能通常与 ViT 相当,这表明我们的 ConvNeXt 块设计在用于非分层模型时具有竞争力。
表2 比较各向同性 ConvNeXt 和 ViT。训练内存是在 V100 GPU 上测量的,每个 GPU 批量大小为 32。
COCO 上的目标检测和分割。我们使用 ConvNeXt 主干在 COCO 数据集上微调 Mask R-CNN [27] 和 Cascade Mask R-CNN [9]。在 Swin Transformer [45] 之后,我们使用多尺度训练、AdamW 优化器和 3 x倍调度。更多细节和超参数设置可以在附录 A.3 中找到。表 3 显示了比较 Swin Transformer、ConvNeXt 和传统 ConvNet(如 ResNeXt)的对象检测和实例分割结果。在不同的模型复杂性中,ConvNeXt 的性能与 Swin Transformer 相当或更好。当放大到在 ImageNet-22K 上预训练的更大模型 (ConvNeXt-B/L/XL) 时,在许多情况下,ConvNeXt 在 box 和 mask AP 方面明显优于 Swin Transformers(例如 +1.0 AP).
表3 使用 Mask-RCNN 和 Cascade Mask-RCNN 的 COCO 对象检测和分割结果。 ‡ 表示模型在 ImageNet-22K 上进行了预训练。 ImageNet-1K 预训练的 Swin 结果来自他们的 Github 存储库 [3]。 ResNet-50 和 X101 模型的 AP 编号来自 [45]。我们在 A100 GPU 上测量 FPS。 FLOP 使用图像大小 (1280, 800) 计算。
ADE20K 上的语义分割。我们还使用 UperNet [85] 在 ADE20K 语义分割任务上评估 ConvNeXt 主干。所有模型变体都经过 16 万次迭代训练,批量大小为 16。其他实验设置遵循 [6](有关更多详细信息,请参见附录 A.3)。在表 4 中,我们报告了具有多尺度测试的验证 mIoU。 ConvNeXt 模型可以在不同的模型容量上实现具有竞争力的性能,进一步验证了我们架构设计的有效性。
表4 ADE20K 验证结果使用 UperNet [85]。 ‡ 表示 IN-22K 预训练。 Swins 的结果来自其 GitHub 存储库 [2]。在 Swin 之后,我们通过多尺度测试报告 mIoU 结果。 FLOP 分别基于 IN-1K 和 IN-22K 预训练模型的 (2048, 512) 和 (2560, 640) 输入大小。
关于模型效率的评论。在类似的 FLOPs 下,深度卷积的模型比只有密集卷积的 ConvNets 更慢并且消耗更多的内存。很自然地要问 ConvNeXt 的设计是否会使其实际上效率低下。正如整篇论文所展示的,ConvNeXts 的推理吞吐量与 Swin Transformers 相当或超过。这对于需要更高分辨率输入的分类和其他任务都是如此(有关吞吐量/FPS 的比较,请参见表 1,3)。此外,我们注意到训练 ConvNeXts 比训练 Swin Transformers 需要更少的内存。例如,使用 ConvNeXt-B 主干训练 Cascade Mask-RCNN 消耗 17.4GB 的峰值内存,每 GPU 批量大小为 2,而 Swin-B 的参考数为 18.5GB。与 vanilla ViT 相比,ConvNeXt 和 Swin Transformer 由于本地计算而表现出更有利的准确性 - FLOPs 权衡。值得注意的是,这种效率的提高是 ConvNet 归纳偏差的结果,与视觉 Transformers 中的自注意力机制没有直接关系。
混合模型(Hybrid models)。在 ViT 之前和之后的时代,结合卷积和自注意力的混合模型都得到了积极的研究。在 ViT 之前,重点是使用自注意力/非本地模块 [8、55、66、79] 来增强 ConvNet 以捕获远程依赖关系。最初的 ViT [20] 首先研究了一种混合配置,并且大量后续工作集中在将卷积先验重新引入 ViT,无论是显式 [15、16、21、82、86、88] 还是隐式 [45 ] 的风格。
基于卷积的最近研究。韩等人[25]表明局部Transformer注意力等效于非均匀动态深度卷积。然后将 Swin 中的 MSA 块替换为动态或常规深度卷积,实现与 Swin 相当的性能。并发工作 ConvMixer [4] 表明,在小规模设置中,深度卷积可以用作一种有前途的混合策略。 ConvMixer 使用更小的补丁大小来获得最佳结果,使得吞吐量远低于其他基线。 GFNet [56] 采用快速傅里叶变换 (FFT) 进行标记混合。 FFT 也是卷积的一种形式,但具有全局内核大小和循环填充。与许多最近的 Transformer 或 ConvNet 设计不同,我们研究的一个主要目标是深入了解标准 ResNet 的现代化过程并实现最先进的性能。
在 2020 年代,视觉Transformer,尤其是 Swin Transformers 等分层Transformer开始取代 ConvNets,成为通用视觉骨干网的首选。人们普遍认为,视觉 Transformer 比 ConvNets 更准确、更高效、更可扩展。我们提出了 ConvNeXts,这是一种纯 ConvNet 模型,可以在多个计算机视觉基准上与最先进的分层视觉 Transformer 竞争,同时保持标准 ConvNet 的简单性和效率。在某些方面,我们的观察结果令人惊讶,而我们的 ConvNeXt 模型本身并不是全新的——在过去十年中,许多设计选择都被单独检查过,而不是集体检查过。我们希望本研究报告的新结果能够挑战几种广泛持有的观点,并促使人们重新思考卷积在计算机视觉中的重要性。
致谢。我们感谢 Kaiming He、Eric Mintun、Xingyi Zhou、Ross Girshick 和 Yann LeCun 的宝贵讨论和反馈。
附录 :略。