摘要
视觉识别的“咆哮二十年代”始于 Vision Transformer(ViT)的引入,ViT 很快取代了 ConvNet,成为图像分类任务中的最新最强模型。然而,vanilla ViT 在应用于目标检测、语义分割等通用计算机视觉任务时面临困难。Hierarchical Transformer(如 Swin Transformer)重新引入了若干 ConvNet 的先验知识,使 Transformer 成为实用的通用视觉骨干网络,并在各种视觉任务中展现出卓越的性能。然而,这类混合方法的有效性通常仍被归因于 Transformer 的内在优势,而非卷积操作固有的归纳偏置。
在本工作中,我们重新审视网络设计空间,并测试纯 ConvNet 的性能上限。我们逐步将一个标准的 ResNet “现代化”,向 Vision Transformer 的设计理念靠拢,并在此过程中发现了若干导致性能差异的关键组件。最终我们构建出一个纯 ConvNet 模型系列,称为 ConvNeXt。这些模型完全由标准的 ConvNet 模块构成,但在准确率和可扩展性方面能够与 Transformer 竞争。例如,在 ImageNet 上达成了 87.8% 的 top-1 准确率,并在 COCO 检测和 ADE20K 分割任务上超过 Swin Transformer,同时保持了标准 ConvNet 的简洁性和高效性。代码地址:https://github.com/facebookresearch/ConvNeXt
1. 引言
回顾 2010 年代,这十年标志着深度学习的巨大进步与影响。其主要推动力是神经网络,尤其是卷积神经网络(ConvNet)的复兴。在这十年中,视觉识别领域成功地从手工设计特征转向了(ConvNet)结构的设计。尽管可通过反向传播训练的 ConvNet 早在 1980 年代就已被提出 [42],但直到 2012 年末我们才真正看到其在视觉特征学习中的巨大潜力。AlexNet [40] 的提出引发了所谓的 “ImageNet 时刻” [59],从而开启了计算机视觉的新时代。从那以后,该领域以惊人的速度发展。代表性的 ConvNet 模型如 VGGNet [64]、Inception [68]、ResNe(X)t [28, 87]、DenseNet [36]、MobileNet [34]、EfficientNet [71] 以及 RegNet [54],分别在准确率、效率和可扩展性方面进行了重点探索,并推广了许多有益的设计原则。
ConvNets 在计算机视觉领域的全面主导地位并非偶然:在许多应用场景中,“滑动窗口”策略是视觉处理的内在需求,尤其是在处理高分辨率图像时。ConvNets 拥有若干内建的归纳偏置,使其非常适用于各类计算机视觉任务。其中最重要的是平移等变性(translation equivariance),这是诸如目标检测等任务所期望的性质。ConvNets 还具有固有的效率优势,因为在滑动窗口的使用方式下,计算是共享的[62]。数十年来,这一直是 ConvNets 的默认使用方式,通常用于有限的对象类别,如数字[43]、人脸[58,76]和行人[19,63]。进入 2010 年代,基于区域的检测器[23, 24, 27, 57]进一步将 ConvNets 推向了视觉识别系统中的核心构建模块的地位。
与此同时,自然语言处理(NLP)中的神经网络设计经历了完全不同的路径,Transformer 取代了循环神经网络,成为主流的骨干网络架构。尽管语言与视觉任务之间存在巨大差异,这两条研究路径却在 2020 年惊人地收敛:Vision Transformer(ViT)的引入彻底改变了网络架构设计的格局。除了初始的“patchify”层(将图像划分为 patch 序列)之外,ViT 并未引入图像特有的归纳偏置,对原始 NLP Transformer 的改动也极为有限。ViT 的一个主要关注点是其扩展性行为:借助更大的模型和数据集规模,Transformer 可以显著超越标准 ResNet 在图像分类任务中的表现。这些结果令人鼓舞,但计算机视觉任务并不局限于图像分类。如前所述,在过去十年中,许多计算机视觉任务的解决方案都高度依赖于滑动窗口的全卷积范式。缺乏 ConvNet 的归纳偏置,使得原始的 ViT 模型在作为通用视觉骨干方面面临诸多挑战。其中最大的问题是 ViT 的全局注意力设计,其计算复杂度随输入尺寸呈二次增长。虽然这在 ImageNet 分类任务中可以接受,但在更高分辨率的输入场景中则迅速变得难以处理。
分层 Transformer 采用混合策略来弥合这一差距。例如,“滑动窗口”策略(如局部窗口内的注意力)被重新引入 Transformer,使其行为更接近 ConvNet。Swin Transformer[45] 是该方向上的里程碑工作,首次展示了 Transformer 可被用作通用视觉骨干,并在图像分类之外的多种视觉任务上达到了 SOTA 表现。Swin Transformer 的成功与迅速普及也揭示了一个事实:卷积的本质从未过时,仍然非常重要且被广泛需求。
从这个视角来看,Transformer 在视觉领域的许多进展实质上是为了“重新找回”卷积。这些尝试当然是有代价的:例如,滑动窗口自注意力的直接实现可能开销巨大[55];而通过诸如循环移位(cyclic shifting)[45]等高级方法虽可优化速度,但系统的设计也随之变得更加复杂。反观 ConvNet,已经以一种直接、简洁的方式天然具备了上述许多期望的属性。ConvNet 看似失去热度的唯一原因是:(分层)Transformer 在多个视觉任务上超越了其表现,并且这种性能差距通常被归因于 Transformer 的出色扩展能力,尤其是多头自注意力机制这一核心组件。
与在过去十年中逐步改进的 ConvNet 不同,Vision Transformer 的出现是一次范式上的飞跃。在最近的文献中,系统级的对比(如 Swin Transformer 与 ResNet)常被用于评估两者的性能。ConvNet 与分层视觉 Transformer 在某些方面变得既相似又不同:它们都具备了类似的归纳偏置,但在训练方式以及宏观/微观架构设计上存在显著差异。在本研究中,我们考察了 ConvNet 与 Transformer 的架构差异,并试图识别在网络性能比较中可能存在的混淆变量。我们的研究旨在弥合 ConvNet 的前 ViT 与后 ViT 时代之间的差距,同时测试纯 ConvNet 的性能极限。
为此,我们从一个标准的 ResNet(例如 ResNet-50)开始,并采用改进的训练方式。随后我们逐步将其“现代化”,向着分层视觉 Transformer(如 Swin-T)的设计靠近。我们的探索受一个核心问题驱动:**Transformer 中的设计决策如何影响 ConvNet 的性能?**在此过程中,我们发现了几个对性能差异产生重要影响的关键组件。最终,我们提出了一个完全基于标准 ConvNet 模块构建的纯卷积网络系列,称为 ConvNeXt。我们在多个视觉任务上对 ConvNeXt 进行了评估,如 ImageNet 分类[17]、COCO[44]上的目标检测与分割,以及 ADE20K[92]上的语义分割。令人惊讶的是,ConvNeXt 完全由标准卷积模块构成,却能在准确性、可扩展性和鲁棒性方面,在所有主流基准测试中与 Transformer 一较高下。ConvNeXt 保留了标准 ConvNet 的效率,其全卷积结构使其在训练和推理过程中极为简单易用。
我们希望本文中的新发现与讨论能够挑战一些广为流传的观点,并促使人们重新思考卷积在计算机视觉中的重要性。
2. 现代化 ConvNet 的路线图
在本节中,我们提供了一条从 ResNet 演进到在结构上与 Transformers 相似的 ConvNet 的路径。我们考虑了两种模型规模的 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 复杂度模型的结果。对于更高容量模型的结论是一致的,相关结果可以在附录 C 中找到。
从高层次来看,我们的探索目标是借鉴 Swin Transformer 的不同层级设计,同时保持网络的简洁性,即标准 ConvNet 的形式。我们的探索路线如下。起点是一个 ResNet-50 模型。我们首先使用与训练 vision Transformer 类似的训练技术对其进行训练,并获得了相比原始 ResNet-50 大幅提升的结果。这将作为我们的基线。随后我们研究了一系列设计决策,我们将其总结为:1)宏观结构设计(macro design),2)ResNeXt,3)倒置瓶颈结构(inverted bottleneck),4)大卷积核(large kernel size),以及 5)各种逐层的微观结构设计(layer-wise micro designs)。在图 2 中,我们展示了整个“网络现代化”过程中所采用的步骤及各步骤所取得的结果。由于网络复杂度与最终性能密切相关,我们在整个探索过程中大致控制了 FLOPs,尽管在中间步骤中 FLOPs 可能会高于或低于参考模型。所有模型均在 ImageNet-1K 上进行了训练和评估。
2.1. 训练技巧
除了网络结构的设计之外,训练过程同样会影响最终的性能。Vision Transformer 不仅带来了一套新的模块和结构设计选择,同时也将不同的训练技术(例如 AdamW 优化器)引入了视觉领域。这主要涉及优化策略及其相关的超参数设置。因此,我们探索的第一步是使用 vision Transformer 的训练流程来训练一个基线模型,在本例中是 ResNet-50/200。近期研究 [7, 81] 表明,一套现代化的训练技术可以显著提升一个简单 ResNet-50 模型的性能。在我们的研究中,我们使用了接近 DeiT [73] 和 Swin Transformer [45] 的训练方案。训练周期从 ResNet 的原始 90 轮扩展到 300 轮。我们使用了 AdamW 优化器 [46],数据增强技术包括 Mixup [90]、Cutmix [89]、RandAugment [14]、Random Erasing [91],以及正则化策略如 Stochastic Depth [36] 和 Label Smoothing [69]。我们使用的完整超参数设置可在附录 A.1 中找到。单靠这套增强训练方案,ResNet-50 的性能就从 76.1% [1] 提升到了 78.8%(+2.7%),这表明传统 ConvNet 和 vision Transformer 之间的性能差异中有相当一部分可能归因于训练技巧。在整个“现代化”过程中,我们将始终使用这套固定的训练方案及相同的超参数。每个 ResNet-50 复杂度下报告的准确率均为使用三个不同随机种子训练后的平均值。
2.2. 宏观结构设计
我们现在分析 Swin Transformer 的宏观网络设计。Swin Transformer 借鉴了 ConvNet [28, 65] 的多阶段设计,每个阶段具有不同的特征图分辨率。其中有两个有趣的设计考量:阶段计算分布比(stage compute ratio)和“干细胞(stem cell)”结构。
更改阶段计算分布比。ResNet 中跨各阶段的计算分布最初主要是经验驱动的。其较重的“res4”阶段旨在兼容如目标检测等下游任务,因为检测器头部通常作用于 14×14 的特征图平面。Swin-T 采用了类似原则,但其阶段计算分布比稍有不同,为 1:1:3:1;而在更大的 Swin Transformer 中,该比例为 1:1:9:1。借鉴此设计,我们将 ResNet-50 各阶段的 block 数量从 (3, 4, 6, 3) 调整为 (3, 3, 9, 3),这也使得 FLOPs 与 Swin-T 保持一致。这一调整使模型准确率从 78.8% 提升到了 79.4%。值得注意的是,已有研究深入探讨了计算分布 [53, 54],更优的设计方案很可能仍有待发现。从此之后,我们将在网络中使用该阶段计算分布比。
将 stem 结构改为 “Patchify”。通常而言,stem cell 的设计关系到输入图像在网络起始阶段的处理方式。由于自然图像存在大量冗余,在标准 ConvNet 与 vision Transformer 中常见的做法是通过 stem cell 积极地将输入图像下采样为适当的特征图尺寸。在标准 ResNet 中,stem cell 包含一个步幅为 2 的 7×7 卷积层,接着是最大池化层,这将输入图像下采样为原来的 1/4。而在 vision Transformer 中,更为激进的“patchify”策略被用作 stem cell,它通常采用较大的卷积核尺寸(例如核大小为 14 或 16)且无重叠地进行卷积。Swin Transformer 采用了类似的“patchify”层,但为了适应其多阶段结构,patch 尺寸被设为 4。我们将 ResNet 风格的 stem cell 替换为一个 4×4、步幅为 4 的卷积实现的 patchify 层。准确率从 79.4% 提升到了 79.5%。这表明 ResNet 中的 stem cell 可以被 ViT 风格的、更简单的“patchify”层替代,并能获得相似的性能。
我们将在网络中使用该“patchify stem”(4×4 非重叠卷积)。
2.3. ResNeXt 化
在本节中,我们尝试采用 ResNeXt [87] 的思想,该方法相比 vanilla ResNet 拥有更好的 FLOPs/准确率权衡。其核心组件是分组卷积(grouped convolution),即将卷积核划分为不同的组。从高层次看,ResNeXt 的指导原则是“使用更多的分组,扩大宽度”。更准确地说,ResNeXt 在 bottleneck block 中的 3×3 卷积层使用了分组卷积。由于这显著减少了 FLOPs,因此网络宽度被扩大以补偿容量的损失。
在我们的实验中,我们使用的是 depthwise convolution,这是一种特殊的分组卷积,其中分组数等于通道数。depthwise 卷积被 MobileNet [34] 和 Xception [11] 推广开来。我们注意到,depthwise 卷积类似于 self-attention 中的加权求和操作,其也是按通道进行操作的,即仅在空间维度上混合信息。depthwise 卷积与 1×1 卷积的结合实现了空间混合与通道混合的分离,这一特性也存在于 vision Transformer 中,在其中每种操作要么在空间维度上混合信息,要么在通道维度上混合,但不会同时进行。
使用 depthwise 卷积有效降低了网络 FLOPs,正如预期的那样,其准确率也下降。按照 ResNeXt 提出的策略,我们将网络宽度从 64 提高到与 Swin-T 相同的 96 通道,以补偿性能损失。这将网络性能提升至 80.5%,对应 FLOPs 为 5.3G。
我们将从此采用 ResNeXt 的设计。
温馨提示:
阅读全文请访问"AI深语解构" ConvNeXT:面向 2020 年代的卷积神经网络