当前位置: 首页 > news >正文

【论文精读】ConvNeXt

摘要

       Vision Transformer是当前最先进的图像分类模型,但普通ViT在应用于一般计算机视觉任务(如目标检测和语义分割)时面临困难。故后来的分层Vision Transformer(如Swin Transformer)通过引入了几种卷积网络先验,使Transformer作为通用视觉骨干实际上可行,并在各种视觉任务上表现出卓越的性能。 然而,这种混合方法的有效性在很大程度上仍然归功于Transformer的内在优越性,而不是卷积的内在归纳偏差。

       本文重新审视了设计空间,并测试了纯卷积网络所能达到的极限,通过研究ConvNets和Transformer的架构区别,来找到卷积网络和ViT性能差异的关键变量。旨在弥合ConvNets和vit之间的差距,并测试纯ConvNet可以实现的极限。具体有:

  • 本文从标准ResNet (如ResNet-50)开始,逐渐将卷积架构逼近到分层Vision Transformer(如Swin-T),逼近过程中发现了几个导致性能差异的关键组件。基于此提出了一个纯卷积网络家族,称为ConvNeXts
  • 在ImageNet分类、COCO目标检测/分割和ADE20K语义分割任务上,纯卷积结构的ConvNeXts,在准确性、可扩展性和所有主要基准的鲁棒性方面与Transformer相当,同时ConvNeXts保持了标准ConvNets的简单性和高效性
    image

       上图为ConvNeXts与ViT等在ImageNet-1K分类任务的性能对比,气泡大小正比于模型的GFLOPs。

框架

Modernizing a ConvNet: a Roadmap

       本节提供从ResNet转为ConvNeXt的轨迹,考虑两种模型大小的GFLOPs,一种是ResNet-50/Swin-T,GFLOPs约为 4.5 × 1 0 9 4.5×10^9 4.5×109,另一种是ResNet-200/Swin-B模型,GFLOPs约为 15.0 × 1 0 9 15.0×10^9 15.0×109

       从一个ResNet-50模型,首先用用于训练ViT的类似训练技术来训练它,在获得了比原始ResNet-50有很大改善的结果后,以此为基线。然后研究了一系列设计策略,包括:macro design、ResNeXt、inverted bottleneck、large kernel size、various layer-wise micro designs。
image
       上图为从ResNet到ConvNeXt每一步所能实现的过程和结果。由于网络复杂度与最终性能密切相关,在探索过程中,GFLOPs大致被控制。所有模型都在ImageNet-1K上进行训练和评估。

Training Techniques

       本文使用了类似DeiT和Swin Transformer的训练方法训练ResNets。故ResNets的训练从最初的90个epoch扩展到300个epoch。以及使用AdamW优化器,数据增强技术,如Mixup、Cutmix、RandAugment、Random Erasing和正则化方案,包括Stochastic Depth和Label Smoothing。

       这种增强的训练方法将ResNet-50的性能从76.1% 提高到78.8%(+2.7%),意味着传统卷积网络和Vision Transformer之间的性能差异很大一部分可能是由于训练方法。

       在之后的所有改进中,将基于此固定训练方法。报告的所有ResNet-50的精度都为由三个不同的随机种子训练的模型的精度的平均值。

Macro Design

       Swin Transformer遵循ConvNets使用多阶段结构,其中每个阶段具有不同的Feature Map分辨率。故考虑两个设计因素:每个阶段的计算占比(Stage Ratio)和Patchify Stem结构。

Changing stage compute ratio

       Swin-Transformer的骨干网络被分成了4个不同的Stage,每个Stage又是由若干个Block组成,Swin-T的Block的比例是(1,1,3,1),而对于更大的模型来说,这个比例是(1,1,9,1)。本文将ResNet-50的每个阶段的Block数从(3,4,6,3)调整到(3,3,9,3),以对齐Swin-T的GFLOPs。基于此,模型精度从78.8%提高到79.4%。

       后续的改进也将基于这个stage compute ratio。

Changing stem to “Patchify”

       由于自然图像中固有的信息冗余,卷积网络和Vision Transformer都会对输入图像进行降采样。标准ResNet中使用一个步幅为2的7 × 7卷积层及max池化的stem cell,对输入图像的4×下采样。Vision Transformer中则使用patchify策略,对应较大核尺寸的(14或16)非重叠卷积。Swin Transformer使用类似的patchify层,但其patch大小为4,以适应架构的多阶段设计。

       为了对齐Vision Transformer,本文将resnet的stem cell替换为由卷积核尺寸4 × 4,stride为4卷积层实现的patchify层。基于此,准确率从79.4%提高到79.5%。

       后续改进也将基于这个4×4卷积的patchify stem。

ResNeXt-ify

       ResNeXt因为使用了分组卷积(卷积滤波器被分成不同的组),因而比普通ResNet具有更好的GFLOPs/accuracy权衡。由于bottleneck block中的3 ×3卷积层全部采用分组卷积,显著减少了GFLOPs,因此可以通过扩展网络宽度来补偿容量损失。

       故本文的bottleneck block使用分组卷积的特殊情况深度卷积(组的数量等于通道的数量),其先将3 ×3卷积以通道为单位进行运算(深度卷积),然后再通过1×1卷积进行通道融合(点卷积)。3 ×3的深度卷积和1×1的点卷积导致了分离的空间混合和通道混合,这对齐了Vision Transformer的特性。

       基于此,ConvNeXt的GFLOPs从4.4降到了2.4,但其准确率从79.5%降到了78.3%。故根据ResNeXt中提出的策略,本文将网络宽度增加到与Swin-T相同的信道数量(从64增加到96),对应GFLOPs增加到5.3,网络性能达到80.5%。

       后续改进也将基于ResNeXt-ify。

Inverted Bottleneck

image
       Transformer的一个重要设计是其为中间维度小,两头维度大逆瓶颈层的架构(上图(b)),Self-Attention的维度是512,而MLP的维度是2048。逆瓶颈层由MobileNetv2普及,并在后续的卷积改进模型中相继被证明有效。

       本文的ConvNeXt也使用了逆瓶颈层的结构,虽然这导致深度卷积层的GFLOPs增加,但由于下采样残差块的1×1卷积层的GFLOPs显著减少,整个网络GFLOPs减少到4.6,而性能从80.5%提高到80.6%。

       后续改进也将基于逆瓶颈层。

Large Kernel Sizes

       Vision Transformer最独特的特性为其具有全局感受野,故本文重新审视卷积网络中大核卷积的使用。

Moving up depthwise conv layer

       要探索大型内核,首先对齐Transformer。因为Transformer的MSA块放置在MLP层之前,故本文将深度卷积层的位置进行了上移,如上图(b)到(c)。这一中间步骤将GFLOPs减少到4.1,导致性能暂时下降到79.9%。

Increasing the kernel size

image
       基于上述,本文实验了几种内核大小,包括3、5、7、9和11。对应的网络性能也从79.9%(3× 3)提高至80.6%(7×7),GFLOPs增加至4.2。

       此外,大核卷积的尺寸在7×7处达到饱和点,故ConvNeXt将使用核尺寸为7×7的深度卷积(上图右)。

Micro Design

       本节在微观尺度上进一步研究其它的架构差异,重点为激活函数和规一化层的选择。

Replacing ReLU with GELU

        在原始的Transformer中,ReLU也被用作激活函数。而在后续的改进工作如BERT、GPT2中采用GELU作激活函数。为了对齐上述改进,本文也用GELU代替原始ResNet的ReLU,尽管使用GELU后的精度依旧为80.6%。

Fewer activation functions

       一个Transformer块中,只有MLP块中使用了一个激活函数,而ResNet块的每个卷积层都会加一个激活函数。故本文也采用相同策略,只在ConvNeXt块的两个1×1卷积中间加一个GELU(上图右)。该方法将结果提升了0.7%至81.3%,与Swin-T的性能相当。

       后续改进的每个ConvNeXt块中都使用单个GELU激活。

Fewer normalization layers

       Transformer块通常也具有较少的规一化,故本文删除了原始ResNet块的两个BatchNorm(BN)层,只在conv 1×1层之前留下一个BN层(上图右)。这进一步将性能提高到81.4%,超过了Swin-T的结果。

Substituting BN with LN

       BatchNorm是ConvNets中的一个重要组件,因为其提高了收敛性并减少了过拟合。然而,BN可能会对模型的性能产生不利影响。而Transformer中使用了更简单的层归一化(LN),从而在不同的应用场景中具有良好的性能。 故本文在原始ResNet中用LN代替BN(上图右),这将性能提高至81.5%。

       后续改进将在每个残差块中使用一个LayerNorm作为规一化选择。

Separate downsampling layers

       在残差网络中,通常使用的是步长为2的3×3卷积或1×1卷积来进行下采样。而Swin Transformer将下采样层从其它运算中剥离开来,即使用一个步长为2的2×2卷积插入到不同的Stage之间。ConvNeXt也是采用了这个策略,并在下采样层前后各加入了一个LN,以及在最终的全局均值池化之后也加入了一个LN,这些归一化可以保持模型训练的稳定性。这将模型的准确率提升至82.0%,明显超越了过Swin-T的81.3%。

       基于上述一系列改进,最终得到了一个纯卷积网络的ConvNeXt系列模型。

实验

       本文构造了ConvNeXt几种不同变体ConvNeXt-T/S/B/L,其复杂性与Swin-T/S/B/L相似,以及一个更大的一个更大的ConvNeXt-XL。变体仅在每个阶段的通道数量C和块数量B上有所不同。如下配置:

  • C o n v N e X t − T : C = ( 96 , 192 , 384 , 768 ) , B = ( 3 , 3 , 9 , 3 ) ConvNeXt-T:C=(96,192,384,768),B=(3,3,9,3) ConvNeXtT:C=(96,192,384,768),B=(3,3,9,3)
  • C o n v N e X t − S : C = ( 96 , 192 , 384 , 768 ) , B = ( 3 , 3 , 27 , 3 ) ConvNeXt-S:C=(96,192,384,768),B=(3,3,27,3) ConvNeXtS:C=(96,192,384,768),B=(3,3,27,3)
  • C o n v N e X t − B : C = ( 128 , 256 , 512 , 1024 ) , B = ( 3 , 3 , 27 , 3 ) ConvNeXt-B: C = (128, 256, 512, 1024), B = (3, 3, 27, 3) ConvNeXtB:C=(128,256,512,1024),B=(3,3,27,3)
  • C o n v N e X t − L : C = ( 192 , 384 , 768 , 1536 ) , B = ( 3 , 3 , 27 , 3 ) ConvNeXt-L: C = (192, 384, 768, 1536), B = (3, 3, 27, 3) ConvNeXtL:C=(192,384,768,1536),B=(3,3,27,3)
  • C o n v N e X t − X L : C = ( 256 , 512 , 1024 , 2048 ) , B = ( 3 , 3 , 27 , 3 ) ConvNeXt-XL: C = (256, 512, 1024, 2048), B = (3, 3, 27, 3) ConvNeXtXL:C=(256,512,1024,2048),B=(3,3,27,3)

Settings

       实验报告了在ImageNet-1K训练和在ImageNet- 22K预训练并在ImageNet-1K微调两种策略,并报告了在ImageNet-1K验证集上的top-1精度。

Training on ImageNet-1K

       ImageNet-1K上ConvNeXts训练配置:使用AdamW 以 4 e − 3 4e^{-3} 4e3的学习率训练300个epoch,前20个epoch使用linear warmup,并用cosine decaying schedule,batch-size为4096,weight decay系数为0.05。数据增强采用Mixup、Cutmix、RandAugment和Random Erasing。正则化使用Stochastic Depth和Label Smoothing。还使用初始值 1 e − 6 1e^{-6} 1e6的Layer Scale,以及指数移动平均(EMA),这可以减轻了较大模型的过拟合。

Pre-training on ImageNet-22K

       ImageNet- 22K上ConvNeXts预训练配置:总共进行了90个epoch的预训练,并warmup了5个epoch,不使用EMA。其他设置遵循ImageNet-1K训练配置。

Fine-tuning on ImageNet-1K

       在ImageNet-1K上对ImageNet-22K预训练模型微调配置:使用AdamW 以 5 e − 5 5e^{-5} 5e5的学习率进行了30个epoch的微调,并采用了cosine decaying schedule,layer-wise learning rate decay,无warmup,batch-size为512,weight decay系数为 1 e − 8 1e^{-8} 1e8。默认的预训练、微调和测试分辨率是 22 4 2 224^2 2242,此外,还对ImageNet-22K和ImageNet-1K预训练模型进行了更大的分辨率为 38 4 2 384^2 3842的微调。

Results

ImageNet-1K

image
       上表(上)显示了与DeiT和Swin Transformer以及RegNets、EfficientNets 和EfficientNetsV2的比较结果。观察到,ConvNeXts在精度/计算权衡以及推理吞吐量方面与RegNet和EfficientNet相当。ConvNeXts全面优于类似计算复杂度的Swin Transformer,在没有特殊模块(如移动窗口或相对位置偏差)的情况下,ConvNeXts与Swin Transformer相比具有更高的吞吐量。

        38 4 2 384^2 3842 分辨率的ConvNeXt-B比Swin-B提高了0.6%(85.1%vs. 84.5%),但推理吞吐量提高了12.5%(95.7 vs. 85.1)。当进一步扩展到ConvNeXt-L时,观察到85.5%的改进结果。

ImageNet-22K

       上表(下)显示了从ImageNet- 22K预训练中微调的模型的结果。观察到,当用大型数据集进行预训练时,正确设计的卷积网络并不逊色于Vision Transformer,ConvNeXts的性能仍然与类似大小的Swin Transformer相当或更好,且吞吐量略高。

       此外,ConvNeXt-XL模型在 38 4 2 384^2 3842分辨率时达到了87.8%的准确率,比ConvNeXt-L有了更大的改进,表明ConvNeXts是可扩展的架构。

       在ImageNet-1K上,配备了高级模块(如Squeeze-and-Excitation)和渐进式训练程序的搜索架构(EfficientNetV2-L)取得了最佳性能。然而,通过ImageNet- 22K预训练,ConvNeXt能够超过EfficientNetV2,进一步证明了大规模训练的重要性。

Isotropic ConvNeXt vs. ViT

       本实验检查了ConvNeXt的块设计是否可泛化为vit风格的各向同性架构(没有下采样层,所有深度保持相同的特征分辨率)。故使用与ViT-S/B/L相同的特征维度(384/768/1024)构建了各向同性ConvNeXt-S/B/L,相应深度设置为18/18/36,以匹配参数和GFLOPs的数量,块结构保持不变。并使用了DeiT的ViT-S/B和MAE的ViT-L作为对比结果。ConvNeXt模型使用与之前相同的设置进行训练,但具有更长的warmup。
image
       结果如上图,观察到ConvNeXt的表现通常与ViT相当,表明ConvNeXt模块设计在非层次模型中使用时是有竞争力的。

Empirical Evaluation on Downstream Tasks

Object detection and segmentation on COCO

       本实验使用ConvNeXt作为backbone在COCO数据集上微调Mask R-CNN和Cascade Mask R-CNN。
image
       结果如上表,比较Swin Transformer、ConvNeXt和传统卷积网络(如ResNeXt)的目标检测和实例分割结果。观察到,在不同的模型复杂性中,ConvNeXt实现了与Swin Transformer相当或更好的性能。当扩展到在ImageNet-22K上预训练的更大的模型(ConvNeXt-B/L/XL)时,ConvNeXt在box和mask AP方面明显优于Swin Transformer (+1.0 AP)。

Semantic segmentation on ADE20K

image
       上表为用UperNet 在ADE20K语义分割任务上的评估结果,所有模型变体都进行了160K的epoch训练,batch-size为16,并报告了使用多尺度测试的mIoU。观察到,ConvNeXt实现有竞争力的性能,进一步验证了该架构的有效性。

Appendix

Experimental Settings

ImageNet (Pre-)training

image
       上表为ConvNeXts的ImageNet-1K训练和ImageNet-22K预训练详细设置,除了随机深度率,所有ConvNeXt变体都使用相同的设置。

       各向同性ConvNeXts同样采用上表中ImageNet-1K的设置,但warmup扩展到50个epoch,各向同性ConvNeXt-S/B禁用了layer scale,各向同性ConvNeXt-S/B/L的随机深度比为0.1/0.2/0.5。

ImageNet Fine-tuning

image
       上表列出了在ImageNet-1K数据集上进行微调的设置。除ConvNeXt-L外,微调都从预训练中获得的最终模型权重开始。ConvNeXt-L使用在预训练期间其最佳的EMA模型作为微调的起点。

Downstream Tasks

image
       对于ADE20K和COCO实验,本文遵循BEiT和Swin中使用的训练设置,还使用了MMDetection和MMSegmentation工具箱。下游任务使用了ImageNet预训练的最终模型权重(而不是EMA权重)作为网络初始化。

       对于COCO目标检测实验,超参数扫描包括学习率 { 1 e − 4 , 2 e − 4 } \{1e^{-4},2e ^{-4}\} {1e4,2e4},layer-wise learning rate decay { 0.7 , 0.8 , 0.9 , 0.95 } \{0.7, 0.8, 0.9, 0.95\} {0.7,0.8,0.9,0.95},和stochastic depth rate { 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 } \{0.3,0.4,0.5,0.6,0.7,0.8\} {0.3,0.4,0.5,0.6,0.7,0.8}。对ImageNet-22K预训练Swin-B/L也是用相同配置进行微调,并使用了官方代码和预训练的模型权重。

       对于ADE20K目标分割实验,超参数扫描包括学习率 { 8 e − 5 , 1 e − 4 } \{8e^{- 5},1e^{-4} \} {8e5,1e4}、layer-wise learning rate decay { 0.8 , 0.9 } \{0.8,0.9\} {0.8,0.9}和stochastic depth rate { 0.3 , 0.4 , 0.5 } \{0.3,0.4,0.5\} {0.3,0.4,0.5}。报告了使用多尺度测试的mIoU结果,其他单尺度测试结果见上表。

Robustness Evaluation

image
       上表为ConvNeXts和其他模型的鲁棒性评估结果。本实验在几个鲁棒性基准数据集(ImageNet-A、ImageNet-R、 ImageNet-Sketch和ImageNet-C/ ¯C数据集)上测试了ImageNet-1K训练/微调的分类模型,并报告了ImageNet-C的平均损坏误差(mCE),ImageNet- ¯C的损坏误差,以及所有其他数据集的top-1精度。

       观察到,ConvNeXts(特别是大规模模型变体)表现出很好的鲁棒性,在几个基准上超过了最先进的鲁棒Transformer模型。通过额外的ImageNet-22K数据预训练,ConvNeXt-XL展示了强大的域泛化能力(分别在ImageNet-A/R/Sketch基准上实现了69.3%/68.2%/55.0%的精度)。

Modernizing ResNets: detailed results

image
image
       上述两表为在ResNet-50/Swin-T和ResNet-200/Swin-B逐步改进到ConvNeXt-T/B的过程中,每个步骤的ImageNet-1K top-1精度和GFLOPs。ResNet-50模型使用3个随机种子进行实验。

       ResNet-200每个阶段的初始块数是(3,24,36,3),在改变阶段比例后,其各阶段块数更改为Swin-B的(3,3,27,3)。这大大减少了计算量,因此同时将其宽度从64增加到84,以保持计算量保持在一个相似的水平。在采用深度卷积的步骤之后,其宽度进一步增加到128(与Swin-B相同)。

       观察到,ResNet-200模式下的结果与ResNet-50模式下的结果基本一致。在ResNet-200中,inverting dimensions带来的改进比在ResNet-50中更大(+0.79%vs. +0.14%)。增加核大小所获得的性能在核大小为5而不是7时达到饱和。 与ResNet-50模式相比,使用更少的规一化层也有更大的增益(+0.46%vs. +0.14%)。

Detailed Architectures

image
       上表为ResNet-50、ConvNeXt-T和Swin-T之间的详细架构比较。

Benchmarking on A100 GPUs

image
       使用V100 GPU在ImageNet上进行推理吞吐量基准测试时, ConvNeXts在推理方面比具有相似参数数量的Swin Transformer略快。本节在更先进的A100 GPU上重复该基准测试。

       结果如上表。Swin Transformer和ConvNeXts都实现了比在V100 GPU上更快的推理吞吐量,但ConvNeXts的优势明显更大,有时快49%。

reference

Liu, Z. , Mao, H. , Wu, C. Y. , Feichtenhofer, C. , Darrell, T. , & Xie, S. . (2022). A convnet for the 2020s. arXiv e-prints.

相关文章:

  • 2.26作业
  • Kafka3.x进阶
  • 百亿大佬南存辉瞄准光伏板块,正泰电器分拆正泰安能上市
  • Android的LiveData
  • 机器学习理论知识学习
  • 化学分子Mol2文件格式与使用注意事项
  • vue-element-admin如何绕开系统的请求的路由,使用静态路由
  • 【GameFramework框架内置模块】4、内置模块之调试器(Debugger)
  • https://htmlunit.sourceforge.io/
  • SpringBoot快速入门(黑马学习笔记)
  • Vue.js+SpringBoot开发超市商品管理系统
  • 基于Springboot + Vue 母婴商城系统
  • SQL库操作
  • Mac使用K6工具压测WebSocket
  • uniapp中在app中清除缓存功能
  • @jsonView过滤属性
  • 《Java编程思想》读书笔记-对象导论
  • 「面试题」如何实现一个圣杯布局?
  • 10个最佳ES6特性 ES7与ES8的特性
  • canvas 高仿 Apple Watch 表盘
  • Git学习与使用心得(1)—— 初始化
  • java8 Stream Pipelines 浅析
  • Linux各目录及每个目录的详细介绍
  • MYSQL 的 IF 函数
  • MySQL主从复制读写分离及奇怪的问题
  • Spring-boot 启动时碰到的错误
  • 区块链技术特点之去中心化特性
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 一个JAVA程序员成长之路分享
  • 原生js练习题---第五课
  • 在Unity中实现一个简单的消息管理器
  • 走向全栈之MongoDB的使用
  • 树莓派用上kodexplorer也能玩成私有网盘
  • # Java NIO(一)FileChannel
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Git) gitignore基础使用
  • (二十四)Flask之flask-session组件
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)c52学习之旅-流水LED灯
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)JAVA中的堆栈
  • (转载)利用webkit抓取动态网页和链接
  • *2 echo、printf、mkdir命令的应用
  • .bat批处理(六):替换字符串中匹配的子串
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .Net程序帮助文档制作
  • .sh