ConvNeXt:卷积与设计策略的新篇章

ConvNeXt:卷积与设计策略的新篇章

0.引言

自从ViT模型被提出以后,在过去的几年里,Transformer在深度学习领域大杀四方。回顾近几年,在计算机视觉领域发表的文章绝大多数都是基于Transformer模型的,比如2021年ICCV的Best Paper Swin Transformer,而卷积神经网络已经开始慢慢淡出舞台中央。但是,在2022年的一月份,Facebook AI Research和UC Berkeley团队一起发表了一篇文章A ConvNet for the 2020s,在文章中提出了纯卷积神经网络ConvNeXt,它对标的是Swin Transformer。通过一系列实验比对,在相同的FLOPs下,ConvNeXt模型比Swin Transformer拥有更快的推理速度以及更高的准确率,在ImageNet 22K上ConvNeXt-XL达到了87.8%的准确率,让大家重新看待Transformer外族入侵这个事态。

论文名称:A ConvNet for the 2020s

论文下载:https://arxiv.org/abs/2201.03545

视频讲解:https://www.aideeplearning.cn/mcv_lesson/980/

1.模型和训练策略选择

ConvNeXt的设计完全基于现有的结构和方法,不包含任何新的结构或方法的创新。源代码简洁高效,只需不到一百行代码便可完成整个模型的构建,相对于Swin Transformer,其构建过程更为直接和简单。

相反,Swin Transformer引入了如滑动窗口和相对位置索引等相对复杂且难以理解的原理。其源码量较大,实现起来需要更多的时间和努力。然而,我们不能否认Swin Transformer的成功,这离不开其精心和巧妙的设计。

在介绍ConvNeXt之前,先思考一个问题:为什么现在基于Transformer架构的模型效果比卷积神经网络要好呢?

实际上,一个模型的最终表现是由数据集的质量、模型的设计以及训练策略三个因素共同决定的。ConvNeXt论文的作者提出一个假设:随着技术的进步,各种新的结构和优化策略可能是推动Transformer模型性能提升的关键因素。那么,如果将这些相同的策略应用于训练卷积神经网络,是否也能实现类似的效果呢?

为了探索这个问题,ConvNeXt论文的作者进行了一系列实验,其中以Swin Transformer为参考标准。这些实验的目的是对比并理解在相同训练策略下,卷积神经网络和Transformer模型在性能上的差异。在模型选择上,ConvNeXt论文的作者以非常经典的卷积模型ResNet-50作为基线模型进行研究。并在训练策略上,做了以下训练调整:

(1)从90 Epoch到300 Epoch。

(2)使用AdamW优化器,大幅提高了训练速度。相对于Adam,AdamW加上了正则项,以限制参数值的大小。

(3)对输入数据使用Mixup、Cutmix、RandAugment、Random Erasing等数据增强方法。Mixup将随机的两张样本按比例混合,分类的结果按比例分配;Cutmix将一部分区域cut掉但不填充0像素而是随机填充数据集中其他数据的其余像素值,分类结果按一定的比例分配;RandAugment是一种新的数据增强方法,主要思想是随机选择变换,调整它们的大小,以及Random Erasing随机擦除。

(4)使用随机深度(Stochastic Depth)和标签平滑(Label Smoothing)操作。

(5)使用指数移动平均值(EMA)技术减少模型过拟合。

结果分类准确率由76.1%上升到78.8%,这一个步骤提升了2.7%的精度。然后,以78.8%这个准确率为起点,作者在模型结构设计上,又模仿Swin Transformer做了很多改进尝试。每个方案对最终结果的影响(ImageNet 1K的准确率)如图7-33所示。很明显最后得到的ConvNeXt在相同FLOPs下准确率已经超过了Swin Transformer。接下来,针对每一个实验进行解析。

图片[1]-ConvNeXt:卷积与设计策略的新篇章-VenusAI
图1 模型改进过程

2.Macro Design

在Macro Design这个部分作者主要研究两方面:Changing Stage Compute Ratio和Changing Stem to “Patchify”。

Changing Stage Compute Ratio

Swin Transformer和CNN一样也采用金字塔结构:包含4个Stage,每个Stage输出不同尺度的特征。在原ResNet网络中,Stage 3堆叠的Block的次数是最多的。ResNet50中Stage 1到Stage 4堆叠Block的次数是(3, 4, 6, 3),比例大概是1:1:2:1,见表1。但在Swin Transformer中, Swin-T堆叠Block的次数比例是1:1:3:1,Swin-L堆叠Block的次数比例是1:1:9:1,见表2。很明显,在Swin-T中,Stage 3堆叠Block的占比更高。所以作者调整了一下ResNet原先的分布,从(3,4,6,3)到(3, 3, 9, 3)。这一步精度从78.8%到79.4%。不过这里要注意的一点是,调整后由于Blocks数量增加了,模型的FLOPs从原来的4G增加至4.5G,所以这个性能的提升很大程度上归功于FLOPs的增加。关于各个Stage的计算量分配,并没有一个理论上的参考,不过ResNet和EfficientNet V2等论文中都指出,后面的Stages应该占用更多的计算量。

图片[2]-ConvNeXt:卷积与设计策略的新篇章-VenusAI
表1 ResNet网络模型搭建参数
图片[3]-ConvNeXt:卷积与设计策略的新篇章-VenusAI
表2 Swin Transformer网络模型搭建参数

Changing Stem to “Patchify”

在深度学习和卷积神经网络中,stem通常指的是网络结构中的初始几层。这些层的主要任务是对原始输入图像进行一系列的基本变换,为后续的网络层提取更抽象的特征做准备。

另外,从表1可以看出ResNet的第一次下采样stem使用Stride=2的7×7卷积,然后接一个最大池化操作,会使得图像下采样4倍。而在Transformer当中,使用了更加激进的Patchify,即通过一个卷积核非常大且相邻窗口之间没有重叠的(即stride等于kernel_size)卷积层进行下采样。比如在Swin Transformer中采用的是一个卷积核大小为4×4步距为4的卷积层构成Patchify,同样是下采样4倍。因此,ConvNeXt中作者直接用Swin的Stem来替换ResNet的Stem,这个变动对模型效果影响较小:从79.4%提升至79.5%,这个步骤提升了0.1%的精度。

3.模仿ResNeXt模型

研究者尝试采用ResNeXt(ResNet:神来之“路”-VenusAI (aideeplearning.cn))的思想来改进ConvNeXt模型,ResNeXt比普通的ResNet具有更好的FLOPs、准确度权衡。核心组件是分组卷积,其中卷积核被分成不同的组。在较高的层面上,ResNeXt的指导原则是“使用更多的组,扩大宽度”。更准确地说,ResNeXt对Bottleneck块中的3×3卷积层采用分组卷积。由于这显著减少了FLOPs,因此网络宽度被扩大以补偿容量损失。

在ConvNeXt中例子中,作者使用更激进的逐层卷积,这是分组卷积的一种特殊情况,其中组数等于通道数。逐层卷积已在MobileNet(MobileNet:轻量化模型-VenusAI (aideeplearning.cn))和Xception(GoogLeNet:探索宽度的力量-VenusAI (aideeplearning.cn))中得到推广。逐层卷积类似于自注意力中的加权求和操作,它在每个通道的基础上进行操作,即仅在空间维度上混合信息。

此外,当逐层卷积和1×1卷积组合使用时,导致空间和通道混合的分离,这是Transformer的属性,即使用自注意力计算空间信息,使用MLP计算通道信息,这两者也是分开计算的。逐层卷积的使用有效地降低了网络FLOPs,并且正如预期的那样。按照ResNeXt中提出的方法,将网络宽度增加到与Swin Transformer相同的通道数(从64到96)。这使网络性能提高到80.5%,增加了FLOPs (5.3G)。

4.Inverted Bottleneck反向瓶颈结构

Transformer Block中的MLP模块非常像MobileNetV2中的反向瓶颈模块,即两头细中间粗,因此在ConvNeXt模型中,也将原本残差网络中的瓶颈结构改成了Inverted Bottleneck。ResNet中采用的Bottleneck模块如图2(a)所示, ConvNeXt模型采用的反向瓶颈模块如图2(b)所示。当作者采用Inverted Bottleneck模块后,在ResNet50模型上准确率由80.5%提升到了80.6%,在ResNet200模型上准确率由81.9%提升到82.6%。

图片[4]-ConvNeXt:卷积与设计策略的新篇章-VenusAI
图2 反向瓶颈结构

5.Large Kernel Sizes

在Transformer中一般都是对全局做自注意力计算,比如ViT模型。ConvNeXt的作者认为更大的感受野是ViT性能更好的可能原因之一。即使是Swin Transformer也有7×7大小的窗口。但现在主流的卷积神经网络都是采用3×3大小的卷积核,因为之前VGGNet论文中说通过堆叠多个3×3的卷积核可以替代一个更大的卷积核,而且现在的GPU设备针对3×3大小的卷积核做了很多的优化,所以会更高效。接着作者做了如下两个改动。

将逐层卷积模块上移

原来是1×1卷积→逐层卷积→1×1卷积,现在变成了逐层卷积→1×1卷积→1×1卷积,如图3所示。这么做是因为在Transformer中,MSA模块是放在MLP模块之前的,效仿这个结构,将逐层卷积进行上移。由于3×3的卷积数量减少,模型FLOPs由5.3G减少到4G,这样改动后,准确率下降到了79.9%。

图片[5]-ConvNeXt:卷积与设计策略的新篇章-VenusAI
图3 上移逐层卷积

增大卷积核尺寸

具体来说,将逐层卷积的卷积核大小由3×3改成了7×7(和Swin Transformer一样)。ConvNeXt的作者也尝试了其他尺寸,包括3×3、5×5、7×7、9×9、11×11发现取到7时准确率就达到了饱和。并且准确率从79.9%(3×3的卷积核)增长到 80.6% (7×7的卷积核)。

6.Micro Design

接下来作者再聚焦到一些更细小的差异,比如激活函数以及归一化操作。

使用GELU激活函数代替ReLU激活函数

在Transformer中激活函数基本用的都是GELU函数,而在卷积神经网络中最常用的是ReLU函数,于是作者又将激活函数替换成了GELU函数,替换后发现准确率没变化。

减少激活函数的使用

使用更少的激活函数。在卷积神经网络中,一般会在每个卷积层或全连接后都接上一个激活函数。但在Transformer中并不是每个模块后都跟有激活函数,比如MLP中只有第一个全连接层后跟了GELU激活函数。接着作者在ConvNeXt Block中也减少激活函数的使用,删除了Residual Block中除了两个1×1层之间的所有GELU层,如图4所示,减少后发现准确率从80.6%增长到81.3%。

图片[6]-ConvNeXt:卷积与设计策略的新篇章-VenusAI
图4 减少激活函数的使用

减少归一化操作的使用

使用更少的归一化操作。同样在Transformer中,归一化操作使用的也比较少,接着作者也减少了ConvNeXt Block中的归一化操作层。仅仅在1×1之间使用BN操作,精度提升到了81.4%。已经超过了Swin-T。

使用LN代替BN

将BN替换成LN。批量归一化在卷积神经网络中是非常常用的操作了,它可以加速网络的收敛并减少过拟合。但在Transformer中基本都用的层归一化,因为最开始Transformer是应用在自然语言处理领域的,而BN并不适用该领域的相关任务。接着作者将BN全部替换成了LN,发现准确率还有小幅提升达到了81.5%。

分离下采样层

在ResNet网络中Stage 2-Stage 4的下采样都是通过将主分支上3×3的卷积层步距设置成2,捷径分支上1×1的卷积层步长为2进行下采样的。但在Swin Transformer中是通过一个单独的Patch Merging实现的。接着作者就为ConvNext网络单独使用了一个下采样层,就是通过一个Layer Normalization加上一个卷积核大小为2步长为2的卷积层构成。更改后准确率就提升到了82.0%。

7.ConvNeXt 模型缩放

对于ConvNeXt网络,作者提出了Tiny/Small/Base/Large/XLarge五个版本,前四个版本的计算复杂度刚好和Swin Transformer中的Tiny/Small/Base/Large相似。这五个版本的配置如下:

(1)ConvNeXt-T: C = (96, 192, 384, 768), B = (3, 3, 9, 3)。

(2)ConvNeXt-S: C = (96, 192, 384, 768), B = (3, 3, 27, 3)。

(3)ConvNeXt-B: C = (128, 256, 512, 1024), B = (3, 3, 27, 3)。

(4)ConvNeXt-L: C = (192, 384, 768, 1536), B = (3, 3, 27, 3)。

(5)ConvNeXt-XL: C = (256, 512, 1024, 2048), B = (3, 3, 27, 3)。

其中C代表4个Stage中输入的通道数,B代表每个Stage重复堆叠Block的次数。在相同的计算复杂度下,ConvNeXt的模型精度是要高于Swin Transformer和ResNet模型的。

在ConvNeXt的研究中,讨论的设计方案虽然并不是全新的,但是都能够显著提升性能。本论文的重点是调参以提高精度,具有实际工程意义。更为重要的是,ConvNeXt在Transformer外族入侵计算机视觉领域的大背景下,掀起了CNN的“文艺复兴”,证明了通过使用一些先进的训练策略和模型设计思想,CNN能够达到与Transformer相媲美的最高精度。

8.ConvNeXt小结

在2020年,谷歌引入了一种名为ViT的模型,这种模型在计算机视觉领域中应用了Transformer结构,从而在该领域产生了显著的影响。ViT模型以一个创新的方式处理图像,即将图像切分为16×16的小片段或Patch,然后直接将这些Patch送入原本用于自然语言处理的Transformer模型中进行处理。令人惊奇的是,这种相对简单的方法在实践中产生了超越多年来积累的卷积神经网络模型的结果。

ViT模型的设计并没有特别考虑到图像的一些固有特性,比如CNN中的平移不变性和局部性特性。它只是将图像分解为Patch,然后像处理自然语言中的序列一样将其送入Transformer进行处理。这种方法的成功充分证实了Attention is all you need这一观点的正确性。ViT模型的发布之后,基于Transformer的研究在计算机视觉领域繁荣发展。例如,2021年微软发布了一种基于窗口移动的Swin Transformer,该模型通过窗口移动增进了相邻Patch之间的交互,也取得了卓越的成果。

然而,ConvNeXt模型的出现表明,并不一定需要像Transformer那样复杂的结构。通过优化已有的CNN技术和参数,也可以达到最高的性能。这表明CNN和Transformer两种模型都具有其独特的优势,没有谁绝对优于谁,而是应该相互借鉴,共同发展。ConvNeXt模型成功地借鉴了ViT和CNN模型的优点,构建了一个纯卷积网络,其性能甚至超越了基于Transformer的先进模型,这对于卷积网络来说无疑是一种荣誉。虽然在模型结构上ConvNeXt并没有创新的地方,看似只是许多技巧的堆叠,但正是这一点,充分证明了CNN的有效性和内在的潜力。

© 版权声明
THE END
共同营造AI社区,喜欢就支持一下吧~
点赞1281 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容