(CVPR-2022)将内核扩展到31x31:重新审视cnn中的大型内核设计
我们回顾了现代卷积神经网络(cnn)中的大型内核设计。受视觉变形器(ViTs)最新进展的启发,在本文中,我们证明了使用几个大的卷积内核而不是一堆小内核可能是一个更强大的范例。我们提出了五个指导原则,例如,应用重参数化的大深度卷积来设计高效的高性能大内核cnn。根据指导方针,我们提出了RepLKNet,这是一种纯CNN架构,其内核大小为31×31,与常用的3×3形成对比。
将内核扩展到31x31:重新审视cnn中的大型内核设计
paper题目:Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
paper是清华发表在CVPR 2022的工作
paper地址:链接
Abstract
我们回顾了现代卷积神经网络(cnn)中的大型内核设计。受视觉变形器(ViTs)最新进展的启发,在本文中,我们证明了使用几个大的卷积内核而不是一堆小内核可能是一个更强大的范例。我们提出了五个指导原则,例如,应用重参数化的大深度卷积来设计高效的高性能大内核cnn。根据指导方针,我们提出了RepLKNet,这是一种纯CNN架构,其内核大小为31×31,与常用的3×3形成对比。RepLKNet极大地缩小了cnn和ViTs之间的性能差距,例如,在ImageNet上实现了与Swin Transformer和一些典型的下游任务相当或更好的结果,并且延迟更低。RepLKNet对大数据和大模型的可扩展性也很好,在ImageNet上的top-1精度为87.8%,在ADE20K上的mIoU为56.0%,在同类模型尺寸的先进水平中很有竞争力。我们的研究进一步表明,与小核cnn相比,大核cnn具有更大的有效感受野和更高的形状偏差而不是纹理偏差。代码和模型在:链接。
1. Introduction
卷积神经网络(cnn)[40,53]曾是现代计算机视觉系统中常见的视觉编码器选择。然而,近年来,cnn[40,53]受到了视觉变形器(Vision transformer, ViTs)[34,59,86,94]的极大挑战,ViTs在许多视觉任务上表现领先——不仅是图像分类[34,104]和表示学习[4,9,16,100],而且在许多下游任务上,如目标检测[24,59]、语义分割[94,98]和图像恢复[10,54]。为什么vit超级强大?一些研究认为多头自注意力(MHSA)机制在ViTs中起着关键作用。他们提供的经验结果表明,MHSA更灵活[50],能够(更少的归纳偏差)[20],对扭曲更稳健[66,98],或能够建模长期依赖关系[69,90]。但一些研究对MHSA的必要性提出了质疑[115],将vit的高性能归因于适当的构建块[33]和/或动态稀疏权重[38,111]。更多的文献[20,38,42,95,115]从不同的角度解释了vit的优越性。
在这项工作中,我们专注于一个观点:建立大的感受野的方式。在vit中,MHSA通常被设计为全局的[34,78,94]或局部的但具有大内核的[59,70,89],因此单个MHSA层的每个输出都能够从一个大区域收集信息。然而,大型内核在cnn中并不普遍使用(除了第一层[40])。相反,一种典型的方式是使用许多小空间卷积的堆栈[40,44,47,68,77,82,109] (例如,3×3)来扩大最先进的cnn中的感受野。只有一些老式的网络,如AlexNet[53]、inception[79-81]以及一些从神经架构搜索衍生出来的架构[37,43,56,116]采用了大空间卷积(大于5)作为主要部分。上述观点自然导致了一个问题:如果我们使用几个大的而不是许多小的内核来构建传统的cnn呢?大内核或者构建大感受野的方式是缩小cnn和vit性能差距的关键吗?
为了回答这个问题,我们系统地探索了cnn的大型内核设计。我们遵循一个非常简单的“哲学”:只是在传统网络中引入大的深度卷积,其大小范围从3×3到31×31,尽管存在通过单个或几个层引入大感受野的其他替代方案,例如。特征金字塔[93],扩张卷积[13,101,102]和变形卷积[23]。通过一系列实验,我们总结了有效使用大卷积的五个经验准则:1)非常大的内核在实践中仍然是有效的;2)恒等映射是非常重要的,特别是对于非常大的内核网络;3)用小内核重参数化[30]有助于弥补优化问题;4)大卷积对下游任务的促进作用远大于ImageNet;5)大内核即使在小的特征图上也很有用。
基于上述指导方针,我们提出了一个名为RepLKNet的新架构,这是一个纯CNN,其中使用重参数化的大卷积来建立大的感受野。我们的网络总体上遵循Swin Transformer[59]的宏观架构,并进行了一些修改,同时用大深度卷积取代了多头自注意力。我们主要对中型和大型模型进行基准测试,因为ViTs曾经被认为在大数据和模型上超过cnn。在ImageNet分类上,我们的基线(与内核大小为31×31的Swin-B模型大小相似)仅在ImageNet1K数据集上训练的top-1精度达到84.8%,比Swin-B高0.3%,但延迟效率更高。
更重要的是,我们发现大型内核设计在下游任务上特别强大。例如,在复杂度和参数预算相似的情况下,我们的网络在COCO检测[55]上比ResNeXt-101[99]或ResNet101[40]骨干的性能高出4.4%,在ADE20K分割[114]上高出6.1%,与Swin transformer相当甚至更好,但推理速度更高。考虑到更多的预训练数据(例如73M图像)和更多的计算预算,我们的最佳模型在相似模型大小的最先进的模型中获得了非常有竞争力的结果,例如在ImageNet上的top-1准确率为87.8%,在ADE20K上为56.0%,这表明了对大规模应用的出色可扩展性。
我们认为RepLKNet的高性能主要是因为通过大内核构建的大有效感受野(erf)[63],如图1所示。此外,与传统cnn相比,RepLKNet利用了更多的形状信息,这在一定程度上符合人类的认知。我们希望我们的发现可以帮助理解cnn和ViTs的内在机制。
图1。ResNet-101/152和RepLKNet-13/31的有效感受野(ERF)。暗区分布越广表明ERF越大。更多的层(例如,从ResNet101到ResNet-152)对扩大erf没有什么帮助。相反,我们的大内核模型RepLKNet有效地获得了大erf。
2. Related Work
2.1. Models with Large Kernels
正如引言中提到的,除了inception[79-81]等少数老式模型,大内核模型在VGG-Net[77]之后就不再流行了。其中一个代表性的工作是全局卷积网络(Global Convolution Networks, GCNs)[67],它使用1×K和K×1的非常大的卷积来改进语义分割任务。然而,据报告,大型内核会损害ImageNet的性能。局部关系网络(LRNet)[45]提出了一个空间聚合算子(LRLayer)来取代标准卷积,它可以被视为一个动态卷积。LR-Net可以从7×7大小的内核中受益,但如果使用9×9,性能会下降。当内核大小与特征图一样大时,top-1的精度显著降低,从75.7%下降到68.4%。
最近,Swin transformer[59]提出了捕捉窗口注意力转移的空间模式,窗口大小从7到12不等,也可以看作是大内核的一种变体。后续研究[32,58]采用了更大的窗口尺寸。受这些局部变形器成功的启发,最近的一项工作[38]在[59]中使用静态或动态7×7深度卷积替换MHSA层,同时仍然保持可比的结果。虽然[38]提出的网络与我们的设计模式相似,但动机不同:[38]没有研究erf、大内核和性能之间的关系;相反,它将视觉变形器的优越性能归因于稀疏连接、共享参数和动态机制。另外三部代表作是Global Filter Networks (GFNets)[72]、CKConv[74]和FlexConv[73]。GFNet优化了傅里叶域中的空间连接权值,相当于空间域中的圆形全局卷积。CKConv将内核定义为处理顺序数据的连续函数,可以构造任意大的内核。FlexConv为不同的层学习不同的内核大小,可以像特征图一样大。尽管它们使用非常大的内核,但它们并不打算回答我们想要的关键问题:为什么传统cnn的性能不如vit,以及如何在普通cnn中应用大内核。此外,[38]和[72]都没有在强基线上评估他们的模型,例如,模型大于SwinL。因此,目前尚不清楚大内核cnn是否能像变压器一样扩展。并行工作。ConvMixer[87]使用最多9×9的卷积来取代ViTs[34]或mlp的“混合器”组件[84,85]。
MetaFormer[103]认为池化层可以替代自注意力。ConvNeXt[60]采用7×7深度卷积设计强大的架构,推动CNN性能的极限。尽管这些工作表现出出色的性能,但它们并没有从更大的卷积(例如,31×31)中表现出好处。
2.2. Model Scaling Techniques
对于一个小型模型,通常的做法是将其扩展以获得更好的性能,因此扩展策略在最终的精度-效率权衡中发挥着至关重要的作用。对于cnn,现有的缩放方法通常关注模型深度、宽度、输入分辨率[31,68,82]、瓶颈比和群宽度[31,68]。然而,内核大小常常被忽略。在第3节中,我们将展示内核大小也是cnn中一个重要的缩放维度,特别是对于下游任务。
2.3. Structural Re-parameterization
结构重参数化[26-30]是一种通过转换参数等价转换模型结构的方法。例如,RepVGG针对的是一个深度推理时类vgg(例如,无分支)模型,并在训练过程中构建了额外的resnet风格的跳连,平行于3×3层。与真实的类vgg模型很难训练[40]相比,这样的快捷方式帮助模型达到了令人满意的性能。训练结束后,通过一系列线性变换将快捷方式吸收到并行的3×3内核中,从而使生成的模型成为类vgg模型。在本文中,我们使用这种方法将一个相对较小的内核(例如3×3或5×5)添加到一个非常大的内核中。通过这种方式,我们使非常大的内核能够捕获小范围的模式,从而提高了模型的性能。
3. Guidelines of Applying Large Convolutions
简单地将大卷积应用到cnn上通常会导致性能和速度较差。在本节中,我们总结了有效使用大型内核的5条指导原则。
准则1:大深度卷积在实践中是有效的。人们认为,大核卷积在计算上是昂贵的,因为核大小成倍地增加了参数和FLOPs的数量。应用深度卷积(DW)可以极大地克服这一缺陷[17,44]。例如,在我们提出的RepLKNet(详见表5)中,将不同阶段的内核大小从[3,3,3,3]增加到[31,29,27,13],仅使FLOPs和参数量分别增加18.6%和10.4%,这是可以接受的。剩下的1×1卷积实际上占据了大部分的复杂性。
有人可能会担心DW卷积在像gpu这样的现代并行计算设备上非常低效。对于传统的DW 3×3内核[44,74,109]来说也是如此,因为DW操作引入了较低的计算与内存访问成本比率[64],这对现代计算架构并不友好。然而,我们发现当内核大小变大时,计算密度增加:例如,在DW 11×11内核中,每次我们从特征图中加载一个值,它最多可以参加121次乘法,而在3×3内核中,这个数字只有9。因此,根据屋顶模型,当内核大小变大时,实际延迟的增加不应该像FLOPs的增加一样多。
备注1。不幸的是,我们发现现有的深度学习工具(如Pytorch)对大型DW卷积的支持很差,如表1所示。因此,我们尝试了几种方法来优化CUDA内核。基于fft的方法[65]似乎是实现大卷积的合理方法。但在实际应用中,我们发现分块(逆)隐式gemm算法是更好的选择。该实现已经集成到开源框架MegEngine[1]中,我们在这里省略了细节。我们还为PyTorch发布了一个高效的实现[2]。表1显示,与Pytorch基线相比,我们的实现要高效得多。通过我们的优化,在RepLKNet中DW卷积的延迟贡献从49.5%降低到12.3%,这与FLOPs占用大致成比例。
表1。在单个GTX 2080Ti GPU上,具有不同内核大小和分辨率的24层深度卷积堆栈的推断速度。输入形状为(64,384,R, R)。基线用Pytorch 1.9.0 + cuDNN 7.6.5评估,FP32精度。
准则2:恒等映射方式非常重要,特别是对于具有非常大内核的网络。为了证明这一点,我们使用MobileNet V2[75]进行基准测试,因为它大量使用DW层,并且有两个已发布的变体(带或不带恒等映射方式)。对于大内核版本,我们只需将所有DW 3×3层替换为13×13。所有模型在ImageNet上以相同的训练配置训练100个epoch(详见附录A)。表2显示,使用恒等映射的大内核将MobileNet V2的准确率提高了0.77%。然而,如果没有恒等映射,大内核的准确率仅为53.98%。
表2。正常/无恒等映射MobileNet V2中不同内核大小的结果。
备注2。该指南也适用于vit。最近的一项研究[33]发现,如果没有恒等映射,注意力的排名会随着深度的增加而成倍地下降,导致过度平滑的问题。虽然大内核cnn可能会以不同于ViT的机制退化,但我们也观察到,如果没有恒等映射,网络很难捕捉到局部细节。从类似于[91]的角度来看,恒等映射使模型成为由许多具有不同感受野(RF)的模型组成的隐式集成,因此它可以从更大的最大RF中受益,同时不会失去捕获小范围模式的能力。
准则3:用小内核重参数化[30]有助于解决优化问题。我们将MobileNet V2的3×3层分别替换为9×9和13×13层,并可选地采用Structural Reparameterization[26,27,30]方法。具体来说,我们构造了一个与大层并行的3×3层,然后经过批处理归一化(Batch normalization, BN)[49]层(图2)后,将它们的输出相加。训练结束后,我们将小核和BN参数合并到大核中,这样得到的模型相当于训练时的模型,但不再有小核。表3显示了直接将内核大小从9增加到13会降低精度,而重参数化可以解决这个问题。
图2。一个将小内核(例如3×3)重参数化为大内核(例如7×7)的示例。详见[27,30]。
表3。不同内核大小的MobileNet V2上3×3重参数化的结果。
然后,我们将imagenet训练的模型转移到Cityscapes [21]上的DeepLabv3+[15]的语义分割。我们只替换主干,并保留MMSegmentation[19]提供的所有默认训练设置。观察结果与ImageNet上相似:3×3 re-param将9×9模型的mIoU提高了0.19,将13×13模型的mIoU提高了0.93。通过这种简单的重新参数化,将内核大小从9增加到13不再降低ImageNet和cityscape上的性能。
备注3。众所周知,ViTs存在优化问题,特别是在小数据集上[34,57]。一种常见的解决方法是引入卷积先验,例如,为每个自注意力块添加一个DW 3×3卷积[18,96],这与我们的方法类似。这些策略在网络之前引入了额外的平移等效方差和局部性,使其更容易在小数据集上优化而不损失通用性。类似于ViT的行为[34],我们还发现,当预训练数据集增加到7300万张图像时(参考下一节的RepLKNet-XL),可以省略重新参数化而不退化。
准则4:大卷积比ImageNet分类更能促进下游任务。表3(重参数后)显示,将MobileNet V2的内核大小从3×3增加到9×9可以提高1.33%的ImageNet精度,而cityscapes可以提高3.99%。表5显示了类似的趋势:随着内核大小从[3,3,3,3]增加到[31,29,27,13],ImageNet精度仅提高了0.96%,而ADE20K[114]上的mIoU提高了3.12%。这种现象表明,ImageNet分数相似的模型在下游任务中的能力可能非常不同(如表5中最下面的3个模型)。
表5所示。不同内核大小的RepLKNet。模型在ImageNet-1K上进行120次224×224输入预训练,并在ADE20K上使用UperNet进行80K迭代微调。在ADE20K上,我们测试了单尺度mIoU,并根据Swin输入2048×512计算FLOPs。
备注4。是什么导致了这种现象?首先,大内核设计显著增加了有效感受野(ERFs)[63]。大量研究表明,“上下文”信息意味着较大的erf,在许多下游任务中至关重要,如目标检测和语义分割[61,67,93,101,102]。我们将在第五节讨论这个话题。其次,我们认为另一个原因可能是大型内核设计对网络产生了更多的形状偏差。简单地说,ImageNet图片可以根据纹理或形状进行正确的分类,如[7,35]所提出。然而,人类识别物体主要基于形状线索,而不是纹理,因此具有更强形状偏差的模型可能更好地转移到下游任务。最近的一项研究[88]指出,vit具有很强的形状偏差,这部分解释了为什么vit在transfer任务中具有超强的能力。相比之下,在ImageNet上训练的传统cnn倾向于纹理[7,35]。幸运的是,我们发现简单地增大cnn的内核大小可以有效地改善形状偏差。详情请参阅附录C。
准则5:大内核(例如13×13)即使在小的特征图(例如7×7)上也很有用。为了验证它,我们将MobileNet V2最后阶段的DW卷积放大到7×7或13×13,因此内核大小与特征图大小相同甚至更大(默认为7×7)。我们将重参数化应用于准则3所建议的大型内核。表4显示,尽管最后阶段的卷积已经涉及非常大的感受野,但进一步增加内核大小仍然会导致性能提高,特别是在下游任务(如cityscape)上。
表4。MobileNet V2最后阶段不同内核大小的结果。前面阶段的内核大小仍然是3 × 3。
备注5。当核尺寸变大时,注意cnn的平移等效方差并不严格成立。如图3所示,相邻空间位置的两个输出仅共享部分核权值,即通过不同的映射进行转换。该特性也符合ViTs的“哲学”-在获得更多容量之前放松对称。有趣的是,我们发现在变形器界广泛使用的2D相对位置嵌入(2D Relative Position Embedding, RPE)[5,76]也可以被看作是一个大小为(2H−1)×(2W−1)的大深度核,其中H和W分别为特征图的高度和宽度。大型内核不仅有助于学习概念之间的相对位置,而且由于填充效应[51],还可以编码绝对位置信息。
图3。用小特征图和大核来说明卷积。相邻位置的两个输出只共享部分内核权值。平动等值并不严格成立。
4. RepLKNet: a Large-Kernel Architecture
按照上面的指导方针,在本节中,我们提出了一个具有大内核设计的纯CNN架构RepLKNet。据我们所知,到目前为止,cnn仍然主导着小型模型[108,110],而视觉变形器被认为在更复杂的预算下优于cnn。因此,在本文中,我们主要关注相对较大的模型(其复杂度等于或大于ResNet-152[40]或Swin-B[59]),以验证大型内核设计是否可以消除cnn与vit之间的性能差距。
4.1. Architecture Specification
我们在图4中勾画了RepLKNet的架构:Stem指的是开始层。由于我们的目标是下游密度预测任务的高性能,所以我们希望在开始时通过几个conv层捕获更多细节。在第一个带有2×下采样的3×3层之后,我们安排了一个DW 3×3层来捕获低级模式,一个1×1 conv,另一个DW 3×3层用于下采样。
阶段1-4每个阶段都包含几个RepLK块,它们使用恒等映射(准则2)和DW大内核(准则1)。我们在DW conv之前和之后使用1×1 conv作为常见的实践。请注意,每个DW大型conv都使用5×5内核进行重新参数化(准则3),这在图4中没有显示。除了大的conv层提供了足够的接受域和聚合空间信息的能力外,模型的表示能力也与深度密切相关。为了提供更多的非线性和跨通道的信息交流,我们希望使用1×1层来增加深度。受变形器[34,59]和mlp[26,84,85]中广泛应用的前馈网络(Feed-Forward Network, FFN)的启发,我们使用类似cnn风格的块,由恒等映射、BN、两个1×1层和GELU[41]组成,因此称为ConvFFN块。与经典FFN在全连接层之前使用层归一化[3]相比,BN的优势在于可以融合到conv中进行高效推理。通常情况下,ConvFFN块的内部通道数为4×作为输入。简单地跟随ViT和Swin,它将注意力和FFN块交织在一起,我们在每个RepLK块之后放置一个ConvFFN。
过渡块放置在阶段之间,首先通过1×1 conv增加通道维度,然后使用DW 3×3 conv进行2×下采样。总之,每个阶段都有三个架构超参数:RepLK块的数量B、通道维度C和内核大小k。因此,一个RepLKNet架构由[B1, B2, B3, B4]、[C1, C2, C3, C4]、[K1, K2, K3, K4]定义。
图4。RepLKNet由主干、阶段和过渡组成。除了深度(DW)大内核外,其他组件包括DW 3×3、密集1×1 conv和批量归一化49。注意,每个conv层都有一个后面的BN,这里没有描述。这类convn - bn序列使用ReLU作为激活函数,除了恒等映射加法之前(作为一种常见的做法[40,75])和GELU[41]之前。
4.2. Making Large Kernels Even Larger
我们通过固定B=[2,2,18,2], C=[128, 256, 512, 1024],改变K并观察分类和语义分割的性能,继续在RepLKNet上评估大内核。在没有仔细调优超参数的情况下,我们随意地将内核大小分别设置为[13,13,13,13]、[25,25,25,13]、[31,29,27,13],并将模型称为RepLKNet-13/25/31。我们还构建了两个小内核基线,其中内核大小都是3或7 (RepLKNet-3/7)。
在ImageNet上,我们使用AdamW[62]优化器、RandAugment[22]、mixup[106]、CutMix[105]、Rand擦除[113]和随机深度[48]训练了120个epoch,并采用了最近的工作[4,599,60,86]。详细的培训配置见附录A。
对于语义分割,我们使用ADE20K[114],这是一个广泛使用的大规模语义分割数据集,包含150个类别的20K张图像用于训练,2K用于验证。我们以imagenet训练的模型为骨干,采用MMSegmentation[19]实现的带有80k迭代训练设置的UperNet[97],对单尺度mIoU进行测试。
表5显示了不同内核大小的结果。在ImageNet上,虽然将内核大小从3增加到13提高了精度,但使它们更大不会带来进一步的改进。然而,在ADE20K上,将内核从[13,13,13,13]扩大到[31,29,27,13],mIoU增加0.82,参数只增加5.3%,FLOPs增加3.5%,这突出了大内核对下游任务的重要性。
在接下来的小节中,我们使用具有更强训练配置的RepLKNet31来与ImageNet分类、cityscape /ADE20K语义分割和COCO[55]目标检测方面的最先进技术进行比较。我们将上述模型称为RepLKNet-31B (B为Base),并将C =[192, 384, 768, 1536]的更宽模型称为RepLKNet31L (Large)。我们构造了另一个RepLKNet-XL,其C =[256,512,1024,2048],在RepLK块中采用1.5×反向瓶颈设计(即DW大卷积层的通道为1.5×作为输入)。
略
更多推荐
所有评论(0)