代码
摘要:Vision Transformers (ViTs)的引入很快取代了ConvNets,成为最先进的图像分类模型。ViT在应用于一般计算机视觉任务(如目标检测和语义分割)时面临困难。hierarchical
Transformers(例如,Swin Transformers)重新引入了几个ConvNet先验,使Transformers可以作为通用视觉主干,并在各种视觉任务中表现出显著的性能。然而,这种混合方法在很大程度上归功于transformer的固有优势,而不是卷积的固有感应偏差。在这项工作中,我们重新检查了设计空间,并测试了纯ConvNet可以实现的极限。我们逐渐将标准ResNet“现代化”到视觉转换器的设计,并发现了几个关键组件,这些组件在这一过程中导致了性能差异。这一探索的结果是一系列纯ConvNet模型,称为ConvNeXt。完全由标准ConvNet模块构建,ConvNeXts在准确性和可扩展性方面与Transformers竞争激烈,达到了87.8%的ImageNet top-1准确性,在COCO检测和ADE20K分割方面优于Swin Transformers,同时保持了标准ConvNet的简单性和效率。
这十年以深度学习得到了巨大进步。其主要驱动因素是神经网络,特别是卷积神经网络(ConvNet)的复兴。在过去的十年中,视觉识别领域成功地从特征工程转移到网络结构设计(ConvNet)。尽管反向传播可以追溯到20世纪80年代[42],但直到2012年底,我们才看到其在计算机视觉领域真正的潜力。AlexNet[40]的引入促成了“ImageNet时刻”[59],开创了计算机视觉的新时代。此后,这一领域发展迅速。VGGNet[64]、Inceptions[68]、ResNet,ResNeXt[28,87]、DenseNet[36]、MobileNet[34]、EfficientNet[71]和RegNet[54]等代表性网络专注于准确性、效率和可扩展性的等方面,并推出许多有用的设计原则。
ConvNet在计算机视觉中的盛行并非巧合:在许多视觉处理场景中,“滑动窗口”策略是固有的,尤其是在处理高分辨率图像时。ConvNet有几个内置的归纳偏差,使其非常适合各种计算机视觉任务。卷积是以滑动窗口方式使用的,所以计算是共享的,因此卷积本身是高效的[62]。以前,卷积只应用在有限的目标,比如说数字、人脸。直到2010年,基于区域的检测器将卷积层作为视觉识别领域基本的构建块。
大约在同一时间,自然语言处理(NLP)神经网络设计走了一条非常不同的道路,因为transformer取代了递归神经网络,成为主要的主干架构。尽管语言和视觉领域之间存在差异,但随着视觉转换器(ViT)的引入完全改变了网络架构设计的格局,这两条流在2020年惊人地融合在一起。除了最初的“补丁”层将图像分割成一系列补丁外,ViT没有引入图像特定的感应偏置,并对原始NLP中transformer进行最小更改。ViT的一个主要重点是缩放行为:借助更大的模型和数据集大小,Transformers显著优于ResNet。这些关于图像分类任务的结果令人鼓舞,但计算机视觉并不局限于图像分类。如前所述,过去十年中,许多计算机视觉任务的解决方案在很大程度上依赖于滑动窗口、全卷积范式。如果没有ConvNet归纳偏差,vanilla ViT模型在被用作通用视觉主干时面临许多挑战。最大的挑战是ViT的全局注意力设计,它相对于输入大小呈平方关系。这对于ImageNet分类来说可能是可以接受的,但对于更高分辨率的输入来说很快就会变得难以处理。
原始的transformer存在一些缺陷。Hierarchical Transformers采用混合方法来弥补这一缺陷。例如,将“滑动窗口”策略(例如本地窗口内的注意力)重新引入到Transformer中,使其行为更类似于ConvNet。Swin Transformer[45]是这方面的一项里程碑式的工作,首次证明了Transformers可以作为通用视觉主干,并在图像分类以外的一系列计算机视觉任务中实现最先进的性能。Swin Transformer的成功和迅速采用也揭示了一件事:卷积并不是变得无关紧要;相反,它仍然很受欢迎。
从这个角度来看,Transformers的许多进步旨在恢复卷积。然而,这些尝试是有代价的:滑动窗口自注意的实现可能代价高昂[55];使用cyclic shifting等先进方法[45],可以优化速度,但系统在设计上变得更加复杂。另一方面,几乎具有讽刺意味的是,ConvNet已经满足了许多所需的属性,尽管是以一种简单、无装饰的方式。ConvNet似乎失去动力的唯一原因是(分层)Transformers在许多视觉任务中超过了它们,性能差异通常归因于Transformers优越的缩放行为,其中多头自注意力是关键组成部分。
与过去十年中逐步改进的ConvNet不同,Vision Transformers是一个突变。在最近的文献中,在比较两者时,通常采用系统级比较(例如, Swin Transformer与ResNet)。ConvNet和hierar-
chical vision Transformers同时变得不同和相似:它们都具有相似的归纳偏差,但在训练过程和宏观/微观架构设计方面存在显著差异。在这项工作中,我们研究了ConvNets和transformer之间的架构差异,并试图在比较网络性能时识别混淆变量。我们的研究旨在弥合ViT前和ViT后之间的差距,并测试纯ConvNet可以实现的极限。
为此,我们从一个经过改进方法重新训练的标准ResNet(例如ResNet50)开始。我们逐步“现代化”架构,以构建hierarchical vision Transformer (例如Swin-T)。我们的探索以一个关键问题为指导:Transformers的设计决策如何影响ConvNet的性能?我们发现了导致性能差异的几个关键组件。因此,我们提出了一个称为ConvNeXt的纯ConvNet。我们评估了各种视觉任务上的ConvNeXts,例如ImageNet分类[17]、COCO上的目标检测/分割[44]和ADE20K上的语义分割[92]。令人惊讶的是,完全由标准ConvNet模块构建的ConvNeXts在所有主要基准测试的准确性、可扩展性和稳健性方面可以与Transformer竞争。ConvNeXt保持了标准ConvNet的效率,完全卷积特性,使其实现起来极其简单。
我们希望新的观察和讨论能够挑战一些普遍的观念,并鼓励人们重新思考卷积在计算机视觉中的重要性
在本节中,我们提供了从ResNet到与Transformers类似的ConvNet的轨迹。我们就FLOPs考虑了两种模型,一种是ResNet-50/Swin-T模式,浮点运算约为,另一个是ResNet-200/Swin-B模式,其FLOPs约为 。为了简单起见,我们将用ResNet-50/Swin-T复杂度模型给出结果。
我们探索的路线图如下。我们的出发点是一个ResNet-50模型。我们首先使用用于训练vision
Transformers的类似训练技术对其进行训练,并获得比原始ResNet-50更高的结果。这将是我们的基线。然后,我们研究了一系列设计决策,我们将其总结为1)宏观设计、2)ResNeXt、3)反向瓶颈、4)大尺寸卷积核和5)各种分层微观设计。在图2中,我们展示了“网络现代化”的每个步骤能够实现的过程和结果。由于网络复杂性与最终性能密切相关,在探索过程中控制FLOPs,尽管在中间步骤,浮点运算可能高于或低于参考模型。所有模型均在ImageNet-1K上进行训练和评估。
除了网络架构的设计外,训练方法也会影响最终性能。vision Transformers不仅带来了一组新的模块和架构设计,而且还引入了不同的训练技术(例如AdamW优化器)。这主要涉及优化策略和相关的超参数设置。因此,第一步是使用vision Transformer训练方法训练基线模型。最近的研究[7,81]表明,一组新的训练技术可以显著提高ResNet-50模型的性能。在我们的研究中,我们使用了一种类似于DeiT[73]和Swin Transformer[45]的训练方法。训练从最初的90个epoch扩展到300个epoch。我们使用AdamW优化器[46]、数据增强技术,如混合[90]、剪切混合[89]、随机增强[14]、随机擦除[91]和正则化方案,包括随机深度[36]和标签平滑[69]。这种增强的训练方法将ResNet-50模型的性能从76.1%[1]提高到78.8%(+2.7%),这意味着传统ConvNet和vision
Transformers 之间的性能差异很大一部分可能是由于训练技术。在整个“现代化”过程中,我们将使用具有相同超参数的固定训练配方。ResNet-50区域上每个报告的准确性都是从三个不同随机种子的训练中获得的平均值
现在,我们分析Swin Transformers的宏观设计。Swin Transformers遵循ConvNet[28,65]使用多级设计,其中每一级具有不同分辨率的特征图。有两个有趣的设计考虑: the stage compute ratio, and the “stem cell” structure
ResNet中跨阶段计算分布的原始设计在很大程度上是经验性的。“res4”阶段旨在与下游任务兼容,如目标检测。另一方面,Swin-T遵循相同的原则,但stage compute ratio略有不同,为1:1:3:1。对于较大的Swin Transformers,比率为1:1:9:1。在设计之后,我们将每个阶段中的块数从ResNet-50中的(3,4,6,3)调整为(3,3,9,3),这也将浮点与Swin-T对齐。这将模型精度从78.8%提高到79.4%。值得注意的是,研究人员已经彻底调查了计算的分布[53,54],并且可能存在一个更优化的设计
From now on, we will use this stage compute ratio
标准ResNet中的stem cell中含有7*7卷积层,步幅2,然后是最大池化,产生四倍下采样结构。在vision Transformers中,stem cell使用了“修补”策略,这对应于较大的卷积核(例如
卷积核大小=14或16)和非重叠卷积。Swin Transformer使用类似的“补丁”层,但补丁大小较小,为4,以适应架构的多阶段设计。我们用一个使用大小为4*4、步长为4卷积层。准确率从79.4%变为79.5%。这表明,ResNet中的stem可以用一个更简单的“补丁”层替代,这将产生类似的性能
We will use the “patchify stem” (4*4 non-overlapping convolution) in the network.
在这一部分中,我们尝试采用ResNeXt[87]的思想,它比普通的ResNet具有更好的效率/精度平衡。核心组件是分组卷积,其中卷积滤波器被分为不同的组。ResNeXt的指导原则是“使用更多的组,扩大宽度”。更具体地说,ResNeXt在瓶颈块中采用分组卷积。由于这显著减少了浮点运算,因此扩展了网络宽度以补偿容量损失。
在我们的例子中,我们使用深度卷积,这是分组卷积的一种特殊情况,其中组的数量等于通道的数量。深度卷积已被MobileNet[34]和Exception[11]普及。我们注意到,深度卷积类似于自注意力中的加权和运算,它基于每个通道进行操作,即仅混合空间维度中的信息。深度卷积和1*1卷积的组合导致空间和通道混合的分离,这是vision transformer共享的属性,其中每个操作要么跨空间维度或通道维度混合信息,但不是同时跨空间维度和通道维度混合信息。深度卷积的使用有效地减少了网络FLOPs,并如预期的那样,降低了准确性。根据ResNeXt中提出的策略,我们将网络宽度增加到与Swin-T相同的信道数(从64个增加到96个)。这使网络性能提高到80.5%,同时增加了FLOPs(5.3G)
Transformer块中的一个重要设计是,它创建了一个反向瓶颈,即MLP块的隐藏维度比输入维度宽四倍。(见图4)。有趣的是,这种transformer设计在卷积网络中也用到。这一想法在MobileNet V2[61]中得到推广,随后在几种先进的ConvNet架构中得到了推广[70,71]。
我们现在将使用反向瓶颈
在这一部分的探索中,我们重点关注大卷积核的行为。vision Transformers最显著的一个方面是其非局部自注意力,这使每一层都具有全局感受野。虽然过去ConvNet[40,68]使用了较大的内核大小,但目前通常都(由VGGNet[65]推广)是直接堆叠较小的卷积核(3*3大小的) ,这种设计在现代GPU上非常高效[41]。虽然Swin Transformers将局部窗口重新引入自注意力块,但窗口大小至少为7*7,显著大于ResNe(X)t内核大小3*3.在这里,我们再次讨论了在卷积网络中使用大内核的卷积
Moving up depthwise conv layer
要探索大内核,一个先决条件是向上移动深度卷积层(图3(b)到(c))。这一设计在Transformer中也很明显:MSA块放置在MLP层之前。由于我们有一个反向瓶颈块,这是一个自然的设计-复杂/低效模块(MSA,大内核)将具有更少的通道
这一中间步骤将浮点运算减少到4.1G,导致性能暂时下降到79.9%。
增加内核大小
有了所有这些准备,采用更大的内核大小卷积的好处是非常明显的。我们测试了几种内核大小,包括3、5、7、9和11。网络的性能从79.9%提高到(3*3) 至80.6%(7*7) ,而网络的FLOPs大致保持不变。此外,我们观察到,大内核的卷积的优势在7时达到饱和点.我们在大容量模型中也验证了这一行为:当我们将内核大小增加到7以上时,ResNet-200区域模型不会表现出进一步的增益。
We will use 7*7 depthwise conv in each block.
在本节中,我们在微观尺度上研究了其他几种架构差异——这里的大多数探索都是在层级上进行的,重点是激活函数和规范化层的具体选择
NLP和vision架构之间的一个差异是要使用哪些激活函数的细节。随着时间的推移,已经开发出了许多激活函数,但ReLU[49]由于其简单高效,仍然广泛用于卷积网络。ReLU在原始Transformer论文[77]中也用作激活函数。高斯误差线性单元或GELU[32]可以被认为是ReLU的更平滑变体,用于最先进的transformer中,包括谷歌的BERT[18]和OpenAI的GPT-2[52],以及最近的ViTs。我们发现,在我们的ConvNet中,ReLU也可以用GELU替代,尽管精度保持不变(80.6%)。
Transformer和ResNet块之间的一个小区别是Transformer的激活函数更少。考虑具有键/查询/值线性嵌入层、投影层和MLP块中的两个线性层的Transformer块。MLP块中只有一个激活功能。相比之下,通常的做法是在每个卷积层上附加一个激活函数。在这里,我们研究了当我们坚持相同的策略时,性能是如何变化的。如图4所示,我们从残差块中去除了所有GELU层,除了两个1*1间,复制Transformer块的样式。该过程将结果提高了0.7%到81.3%,实际上与Swin-T的性能相当.
We will now use a single GELU activation in each block.
Transformer块通常也具有较少的归一化层。在这里,我们删除了两个BatchNorm(BN)层,在1*1卷积 之前留下一个BN层。这进一步将性能提升到81.4%,已经超过了Swin-T的结果。注意,我们每个块的归一化层比Transformers更少,因为根据经验,我们发现在块的开头添加一个额外的BN层并不能提高性能。
BatchNorm[38]是ConvNet中的一个重要组成部分,因为它提高了收敛性并减少了过拟合。然而,BN还有许多复杂之处,可能会对模型的性能产生不利影响[84]。已经有很多人尝试开发替代normalization[60、75、83]技术,但BN仍然是大多数视觉任务的首选。另一方面,在transformer中使用了更简单的层归一化[5](LN),从而在不同的应用场景中获得了良好的性能。
在原始ResNet中直接用LN代替BN将导致性能下降[83]。在对网络架构和训练技术进行了所有修改后,我们再次讨论了使用LN代替BN的影响。我们观察到,我们的ConvNet模型使用LN在训练时没有任何困难;事实上,性能稍好一些,获得了81.5%的准确率。
From now on, we will use one LayerNorm as our choice of normalization in each residual block.
在ResNet中,空间下采样是通过使用步长为2 的卷积层实现的。在swin transformer中,在级之间添加了一个单独的下采样层。我们探索了一种类似的策略,其中我们使用了2*2个conv层,步幅2,用于空间下采样。这一修改令人惊讶地导致了训练的分歧。进一步的研究表明,在空间分辨率变化的地方添加归一化层可以帮助稳定训练。这些包括也用于Swin transformer的几个LN层:每个下采样层之前一个,stem之后一个,以及最终全局平均池之后一个。我们可以将准确性提高到82.0%,显著超过Swin-T的81.3%
我们将使用单独的下采样层。这就引出了我们的最终模型,我们称之为ConvNeXt
ResNet、Swin和convenxt块结构的比较如图4所示。ResNet-50、Swin-T和convenxt-T的详细架构规范的比较如表9所示
我们发现了纯ConvNeXt,在ImageNet-1K分类下优于Swin Transformer的。值得注意的是,到目前为止讨论的所有设计都是源于vision Transformers。此外,即使在ConvNet文献中,这些设计也并不新颖——在过去十年中,它们都是单独研究的,但不是集体研究的。我们的ConvNeXt模型具有swin transformer大致相同的FLOPs,#params。,吞吐量和内存,但不需要特殊模块,如转移窗口注意力或相对位置偏差。
这些发现令人鼓舞,但尚未完全令人信服——到目前为止,我们的探索仅限于小规模,但 vision Transformers的缩放行为才是它们的真正区别。此外,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 transformer一样,每个新阶段的通道数量都会翻倍。我们总结了以下配置
我们在验证集上报告了ImageNet-1K top-1精度。我们还在ImageNet-22K进行了预训练,ImageNet-22K是一个包含21841个类(1000个ImageNet-1K类的超集)的较大数据集,具有大约14M图像,然后在ImageNet-1K上微调预训练模型进行评估。我们以224*224分辨率进行预训练,并在224*224和384*384分辨率进行微调。先在大的数据集进行预训练,然后在相对小的数据集上进行微调。
表1(上)显示了与两种最新的transformer变体(DeiT[73]和Swin transformer[45])以及(RegNets[54]、EfficientNets[71]和EfficientNetsV2[72]的结果比较。在精度计算权衡和推理吞吐量方面,ConvNeXt超过两条强大的ConvNet基线(RegNet[54]和EfficientNet[71])。ConvNeXt在所有方面都优于复杂度相似的Swin Transformer。与Swin变压器相比,ConvNeXts没有特殊模块,如移位窗口或相对位置偏差,吞吐量也有所提高
结果中的一个亮点是ConvNeXt-B:它比Swin-B好0.6%(85.1%对84.5%),但推理吞吐量高12.5%(95.7对85.1图像/秒).
我们注意到,当分辨率从224增加到384时,ConvNeXt-B相对于Swin-B的浮点/吞吐量优势变得更大。此外,当进一步扩展到ConvNeXt-L时,我们观察到85.5%的改进结果。
我们在表1(下方)中展示了从ImageNet-22K预训练中微调的模型的结果。这些实验很重要,因为人们普遍认为,vision transformer具有更少的归纳偏差,因此在大规模预训练时,其性能优于ConvNet。我们的结果表明,当使用大数据集进行预训练时,适当设计的ConvNets并不劣于vision transformer,ConvNeXts的性能仍然相当于或优于类似大小的Swin transformer,具有略高的吞吐量。此外,我们的ConvNeXt-XL模型的精度达到87.8%——在384处比ConvNeXt-L有了相当大的改进,证明了ConvNeXts是可扩展的架构。
在ImageNet-1K、EfficientNetV2-L上,一个配备了高级模块(比如 Squeeze-and-
Excitation [35])和渐进式训练程序的搜索架构实现了最佳性能。然而,使用ImageNet-22K预训练
ConvNeXt的性能优于EfficientNetV2,进一步证明了大规模训练的重要性。
在本次消融中,我们检查了我们的ConvNeXt块设计是否可推广到ViT风格[20]各向同性架构,该架构没有下采样层,并保持相同的特征分辨率(例如14*14) 在所有深度。我们使用与ViT-S/B/L(384/768/1024)相同的特征维数来构造各向同性ConvNeXt-S/B/L。深度设置为18/18/36,以匹配参数和触发器的数量。块结构保持不变(图4)。我们使用来自DeiT[73]的ViT-S/B监督训练结果和MAE[26]的ViT-L监督训练结果,因为它们采用了比原始ViT[20]改进的训练方法。ConvNeXt模型的训练设置与之前相同,但预热时间更长。ImageNet-1K在2242分辨率下的结果如表2所示。我们观察到ConvNeXt的性能通常与ViT相当,表明我们的ConvNeXt块设计在非层次模型中使用时具有竞争力
我们使用ConvNeXt作为Mask R-CNN主干,在COCO数据集上微调Mask R-CNN[27]和级联Mask R-CNN[9]。遵循Swin Transformer[45],我们使用多尺度训练、AdamW优化器。
表3显示了的目标检测和实例分割结果,对比了Swin Transformer、ConvNeXt和传统ConvNet(如ResNeXt)。在不同的模型复杂性中,ConvNeXt实现了与Swin Transformer相当或更好的性能。
我们使用ConvNeXt骨干的UperNet[85]评估了ADE20K语义分割任务。所有模型变体都经过160K次迭代的训练,批大小为16。其他实验设置如下[6](更多详细信息请参见附录a.3)。在表4中,我们报告了多尺度测试的验证mIoU。ConvNeXt模型可以在不同的模型容量中实现具有竞争力的性能,进一步验证了我们架构设计的有效性
在类似的FLOPs下,具有深度卷积的模型比仅具有密集卷积的ConvNet更慢,消耗更多内存。人们自然会问,ConvNeXt的设计是否会使其实际上效率低下。如本文所示,ConvNeXts的推理吞吐量与Swin变压器相当或超过Swin transformer。这适用于需要更高分辨率输入的分类和其他任务(有关吞吐量/帧的比较,请参见表1,3)。此外,我们注意到,训练ConvNeXts比训练Swin Transformers需要更少的内存。例如,使用ConvNeXt-B主干网的训练级联掩码RCNN消耗17.4GB的峰值内存,每个GPU批大小为2,而Swin-B的参考号为18.5GB
卷积和自注意力相结合的混合模型都得到了积极的研究。在ViT之前,研究重点是使用自注意力/非局部模块[8、55、66、79]来增强ConvNet,以捕捉长期依赖性。最初的ViT[20]首先研究了一种混合配置,大量后续工作专注于以显式[15、16、21、82、86、88]或隐式[45]方式将卷积先验重新引入ViT。
Han等人[25]表明,局部transformer注意力相当于非均匀动态深度卷积。然后用动态或规则深度卷积替换Swin中的MSA块,实现与Swin差不多的性能。同期工作ConvMixer[4]表明,在小规模中,深度卷积可以用作一种有前途的混合策略。ConvMixer使用较小的补丁大小来实现最佳结果,使吞吐量大大低于其他基线。GFNet[56]采用快速傅立叶变换(FFT)进行令牌混合。FFT也是卷积的一种形式,但具有全局核大小和循环填充。与许多最近的Transformer或ConvNet设计不同,我们研究的一个主要目标是深入了解标准ResNet的现代化过程,并实现最先进的性能
在20世纪20年代,vision Transformers,特别是层次化的vision Transformers,如Swin Transformers ,开始取代ConvNet成为通用视觉主干的首选。
人们普遍认为,vision Transformers比ConvNet更准确、高效和可扩展。我们提出了ConvNeXts,这是一种纯ConvNet模型,可以在多个计算机视觉基准上与最先进的hierarchical vision Transformers竞争,同时保持标准ConvNet的简单性和效率。在某些方面,我们的观察结果令人惊讶,而我们的ConvNeXt模型本身并不完全是新的——在过去十年中,许多设计选择都是单独检查的,但不是整体检查的。我们希望这项研究的新结果将挑战一些广泛持有的观点,并促使人们重新思考卷积在计算机视觉中的重要性。