ConvNeXt V2学习笔记

ConvNeXt V2学习笔记

ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders

Abstract

在改进的架构和更好的表示学习框架的推动下,视觉识别领域在21世纪20年代初实现了快速现代化和性能提升。例如,以ConvNeXt[52]为代表的现代ConvNets在各种场景中都表现出了强大的性能。虽然这些模型最初是为使用ImageNet标签的监督学习而设计的,但它们也可能受益于自监督学习技术,如蒙面自编码器(MAE)[31]。然而,我们发现,简单地结合这两种方法会导致性能不佳。在本文中,我们提出了一个全卷积掩码自编码器框架和一个新的全局响应归一化(GRN)层,可以添加到ConvNeXt架构中,以增强通道间的特征竞争。这种自我监督学习技术和架构改进的共同设计产生了一个名为ConvNeXt V2的新模型家族,它显著提高了纯ConvNets在各种识别基准上的性能,包括ImageNet分类、COCO检测和ADE20K分割。我们还提供各种大小的预训练ConvNeXt V2模型,从高效的3.7 m参数Atto模型,在ImageNet上具有76.7%的top-1精度,到仅使用公共训练数据实现最先进的88.9%精度的650M Huge模型。

1. Introduction

在前几十年研究突破的基础上[34,44,47,60,68],视觉识别领域迎来了大规模视觉表征学习的新时代。预训练的大规模视觉模型已经成为特征学习和实现广泛视觉应用的基本工具。视觉表示学习系统的性能在很大程度上受到三个主要因素的影响:所选择的神经网络体系结构和训练网络的方法,还有训练数据。在视觉识别领域,这些领域的进步都有助于整体性能的提高。

image-20230105114844106

神经网络架构设计的创新一直在表示学习领域发挥着重要作用。卷积神经网络架构(ConvNets)[34,44,47]通过允许对各种视觉识别任务使用通用特征学习方法[25,33],而不是依赖于手动特征工程,对计算机视觉研究产生了重大影响。近年来,最初为自然语言处理开发的transformer体系结构[68]也因其在模型和数据集大小[21]方面的强大伸缩行为而受到欢迎。最近,ConvNeXt[52]体系结构使传统的卷积网络现代化,并证明纯卷积模型也可以是可扩展的体系结构。然而,探索神经网络架构设计空间的最常用方法仍然是通过对ImageNet上的监督学习性能进行基准测试

在另一条研究线上,视觉表征学习的重点已经从带有标签的监督学习转向带有借口目标的自我监督预训练。在许多不同的自监督算法中,蒙面自编码器(MAE)[31]最近在视觉领域的蒙面语言建模中取得了成功,并迅速成为一种流行的视觉表示学习方法。然而,自监督学习的常见做法是使用为监督学习设计的预定架构,并假设设计是固定的。例如,MAE是使用视觉转换器[21]架构开发的。

可以将架构和自监督学习框架的设计元素结合起来,但在使用ConvNeXt和蒙面自编码器时,这样做可能会带来挑战。其中一个问题是MAE有一个特定的编解码器设计,该设计针对变压器的序列处理能力进行了优化,这允许计算量大的编码器专注于可见补丁,从而降低了预训练成本。这种设计可能与使用密集滑动窗口的标准convnet不兼容。此外,如果不考虑架构和训练目标之间的关系,可能不清楚是否能实现最佳性能。事实上,之前的研究已经表明,使用基于掩模的自监督学习训练ConvNets可能很难[43],并且经验证据表明,变压器和ConvNets可能具有不同的特征学习行为,这些行为可能会影响表示质量

为此,我们建议在同一框架下共同设计网络架构和掩码自编码器,目的是使基于掩码的自监督学习对ConvNeXt模型有效,并获得与使用变压器获得的结果相似的结果

在设计掩码自编码器时,我们将掩码输入视为一组稀疏补丁,并使用稀疏卷积[28]仅处理可见部分。该想法的灵感来自于在处理大规模3D点云时使用稀疏卷积[15,76]。在实践中,我们可以使用稀疏卷积实现ConvNeXt,并且在微调时,权重被转换回标准的密集层,而不需要特殊处理。为了进一步提高预训练效率,我们将变压器解码器替换为单个ConvNeXt块,使整个设计完全卷积化。我们观察到这些变化的混合结果:学习到的特征是有用的,并且在基线结果的基础上有所改进,但微调性能仍然不如基于变压器的模型

然后,我们对ConvNeXt的不同训练配置进行特征空间分析。当直接在掩码输入上训练ConvNeXt时,我们在MLP层发现了一个潜在的特征崩溃问题。为了解决这个问题,我们建议添加一个全局响应规范化层来增强通道间的特性竞争。当模型使用蒙面自编码器进行预训练时,这种变化是最有效的,这表明重用监督学习中的固定架构设计可能是次优的

总之,我们介绍了ConvNeXt V2,它与掩码自编码器一起使用时,性能得到了提高。我们发现该模型显著提高了纯ConvNets在各种下游任务上的性能,包括ImageNet分类[60]、COCO对象检测[49]和ADE20K分割[81]。ConvNeXt V2模型可用于各种计算制度,包括不同复杂性的模型:从高效的3.7 m参数Atto模型,在ImageNet上达到76.7%的top-1精度,到650M Huge模型,在使用in - 22k标签时达到最先进的88.9%精度。

2. Related Work

ConvNets

ConvNets的设计于20世纪80年代首次引入,并使用反向传播进行训练,多年来在优化、精度和效率方面经历了许多改进[35,36,39,44,58,61,63,75]。这些创新主要是通过在ImageNet数据集上使用监督训练发现的。近年来,已经做出了一些努力,使用自监督的前文本任务(如旋转预测和着色)执行体系结构搜索,例如UnNAS[50]。最近,ConvNeXt[52]对设计领域进行了全面审查,并证明纯ConvNets可以像视觉转换器[21,51]一样可扩展,后者已成为许多应用程序的主导架构。ConvNeXt在要求较低复杂度的场景中特别出色[7,70,71]。我们的ConvNeXt V2模型由自监督学习提供支持,提供了一种简单的方法来升级现有模型,并在广泛的用例中实现性能的显著提升。

Masked Autoencoders

以掩码自编码器[31]为代表的掩码图像建模是一种最新的自监督学习策略。蒙面自编码器作为一种神经网络预训练框架,在视觉识别方面表现出了广泛的影响。然而,原始的掩码自编码器由于其非对称编码器-解码器设计而不能直接适用于convnet。其他框架,如[3,77],已经尝试将该方法用于ConvNets,但结果好坏参半。MCMAE[23]使用一些卷积块作为输入标记器。据我们所知,没有预先训练的模型表明自我监督学习可以提高最佳ConvNeXt监督结果

3. Fully Convolutional Masked Autoencoder

我们的方法在概念上很简单,并以完全卷积的方式运行。学习信号是通过以高掩蔽率随机屏蔽原始输入视觉,并让模型在给定剩余上下文的情况下预测缺失部分来生成的。我们的框架如图2所示,现在我们将更详细地描述它的主要组件。

image-20230105114649240

Masking.

我们使用掩码比为0.6的随机掩码策略。由于卷积模型具有分层设计,其中特征在不同阶段进行下采样,掩码在最后阶段生成,并递归上采样直至最佳分辨率。为了在实践中实现这一点,我们从原始输入图像中随机去除60%的32 × 32块。我们使用最小的数据增强,只包括随机调整大小的裁剪

Encoder design.

在我们的方法中我们使用ConvNeXt[52]模型作为编码器。使蒙面图像建模有效的一个挑战是防止模型学习允许它从蒙面区域复制和粘贴信息的快捷方式。在基于变压器的模型中,这是相对容易防止的,它可以将可见的补丁作为编码器的唯一输入。然而,使用ConvNets实现这一点比较困难,因为必须保留2D图像结构。虽然朴素解决方案涉及在输入端引入可学习的掩码令牌[3,77],但这些方法降低了预训练的效率,并导致训练和测试时间不一致,因为在测试时没有掩码令牌。当掩蔽比很高时,这尤其成问题

为了解决这个问题,我们的新见解是从“稀疏数据视角”来查看蒙面图像,这是受到了在3D任务中学习稀疏点云的启发[15,76]。我们的关键观察是,蒙面图像可以表示为一个二维稀疏像素阵列。基于这种见解,很自然地将稀疏卷积合并到我们的框架中,以促进掩码自动编码器的预训练。在实践中,在预训练期间,我们建议将编码器中的标准卷积层转换为子流形稀疏卷积,这使得模型只能在可见数据点上操作[15,27,28]。我们注意到,稀疏卷积层可以在微调阶段转换回标准卷积,而不需要额外的处理。作为一种替代方法,也可以在密集卷积运算前后应用二进制掩蔽运算。这种操作在数值上与稀疏卷积具有相同的效果,理论上计算量更大,但在TPU等AI加速器上更友好。

Decoder design.

我们使用一个轻量级的普通ConvNeXt块作为解码器。这在总体上形成了非对称编码器-解码器体系结构,因为编码器更重有等级制度。我们还考虑了更复杂的解码器,如分层解码器[48,59]或变压器[21,31],但更简单的单一ConvNeXt块解码器在微调精度方面表现良好,并大大减少了预训练时间,如表1所示。我们将解码器的尺寸设置为512。

image-20230105200818080

Reconstruction target.

我们计算重建图像与目标图像之间的均方误差(MSE)。与MAE[31]类似,目标是原始输入的patch-wise归一化图像,并且损失仅应用于被屏蔽的patch。

FCMAE

我们现在通过结合上面描述的建议,提出了一个全卷积掩码自动编码器(FCMAE)。为了评估该框架的有效性,我们使用ConvNeXt-Base模型作为编码器,并进行了一系列消融研究。在整篇论文中,我们关注端到端微调性能,因为它在迁移学习中的实际相关性,并使用它来评估学习表示的质量。

我们分别使用ImageNet-1K (IN1K)数据集进行800和100个epoch的预训练和微调,并报告单个224×224中心作物的前1个IN-1K验证精度。关于实验装置的更多细节可以在附录中找到。

为了理解在我们的FCMAE框架中使用稀疏卷积的影响,我们首先研究它在掩码图像预训练期间如何影响学习表示的质量。我们的实证研究结果表明,为了达到良好的效果,防止信息泄漏是至关重要的

image-20230105201009797

接下来,我们将自我监督方法与监督学习进行比较。具体而言,我们获得了两个基线实验结果:使用相同配方的监督100 epoch基线和ConvNeXt原始论文[52]中提供的300 epoch监督训练基线。我们发现,我们的FCMAE预训练提供了比随机基线更好的初始化(即82.7→83.7),但它仍然需要赶上在原始监督设置中获得的最佳性能。

image-20230105200957103

这与最近使用基于变压器的模型[3,31,77]的掩模图像建模的成功形成对比,其中预先训练的模型显著优于监督模型。这促使我们研究ConvNeXt编码器在蒙面自动编码器预训练期间所面临的独特挑战,我们接下来将讨论这个问题。

4. Global Response Normalization

在本节中,我们将介绍一种新的全局响应规范化(GRN)技术,使FCMAE预训练与ConvNeXt架构结合使用时更加有效。我们首先通过定性和定量特征分析来激发我们的方法。

Feature collapse

为了更深入地了解学习行为,我们首先在特征空间中进行定性分析。我们可视化了一个FCMAE预训练的ConvNeXt-Base模型的激活,并注意到一个有趣的“特征崩溃”现象:有许多死的或饱和的特征映射,激活在通道之间变得多余。我们在图3中显示了一些可视化效果。这种行为主要是在一个ConvNeXt块[52]的维度扩展MLP层中观察到的。

image-20230105201238354

Feature cosine distance analysis

为了进一步定量地验证我们的观察结果,我们进行了特征余弦距离分析。给定激活张量 X ∈ R H × W × C X∈R^{H×W ×C} XRH×W×C X i ∈ R H × W X_i ∈ R^{H×W} XiRH×W是第i个通道的特征映射。我们将其重塑为HW维向量,并计算平均的对方向余弦距离通过通道 1 C 2 ∑ i C ∑ j C 1 − cos ⁡ ( X i , X j ) 2 \frac{1}{C^{2}} \sum_{i}^{C} \sum_{j}^{C} \frac{1-\cos \left(X_{i}, X_{j}\right)}{2} C21iCjC21cos(Xi,Xj)距离值越大,特征的多样性越强;距离值越小,特征的冗余性越强

为了进行分析,我们从ImageNet-1K验证集中的不同类别中随机选择1000张图像,并从不同模型的每一层中提取高维特征,包括FCMAE模型、ConvNeXt监督模型[52]和MAE预训练的ViT模型[31]。然后,我们计算每个图像的每层距离,并对所有图像的值求平均值。结果如图4所示。FCMAE预训练的ConvNeXt模型表现出明显的特征崩溃趋势,与我们从之前的激活可视化中观察到的一致。这促使我们考虑在学习过程中使特征多样化并防止特征崩溃的方法

Approach

大脑中有许多促进神经元多样性的机制。例如,横向抑制[6,30]可以帮助增强被激活神经元的反应,增加单个神经元对刺激的对比度和选择性,同时还可以增加整个神经元群体的反应多样性。在深度学习中,这种形式的横向抑制可以通过响应归一化[45]来实现。在这项工作中,我们引入了一种新的响应归一化层,称为全局响应归一化(GRN),其目的是提高信道的对比度和选择性。给定一个输入特征 X ∈ R H × W × C X∈R^{H×W ×C} XRH×W×C,所提出的GRN单元包括三个步骤:1)全局特征聚合,2)特征归一化,3)特征校准

首先,我们聚合了一个空间特征图 X i X_i Xi转化为具有全局函数G(·)的向量gx:

image-20230105202542573

这可以看作是一个简单的池化层。我们在表2a中尝试了不同的函数。有趣的是,全球平均池,一个广泛使用的特征聚合器[37,72],在我们的例子中表现不佳。相反,我们发现使用基于范数的特征聚合,特别是使用l2范数,可以获得更好的性能。这给了我们一组聚合值$G(X) = gx ={||X_1||, ||X_2||, . . . , ||X_C||} ∈ R^C $ 这里的$ G(X)_i = ||X_i||$是聚合第i个通道的统计信息的标量

接下来,我们对聚合值应用响应归一化函数N(·)。具体来说,我们使用一个标准的分裂归一化如下:

image-20230105203011278

直观地,对于第i个通道,Eqn. 2计算了它相对于所有其他通道的相对重要性。与其他形式的归一化相似[42,45,68],这一步通过相互抑制在通道间形成特征竞争。在表2b中,我们还检查了其他归一化函数的使用,发现简单的除法归一化效果最好,尽管标准化 ( ∣ ∣ X i ∣ ∣ − µ) / σ (||Xi ||−µ)/σ ∣∣Xi∣∣µ/σ在应用于相同的L2形式聚合值时会产生类似的结果。

最后,我们使用计算的特征归一化分数来校准原始输入响应:

image-20230105203221614

核心GRN单元非常容易实现,只需要三行代码,并且没有可学习的参数。GRN单元的伪代码在算法1中。

image-20230105203302131

为了简化优化,我们添加了两个额外的可学习参数,γ和β,并将它们初始化为零。我们还在GRN层的输入和输出之间添加了一个残余连接。最终生成的GRN区块为 X i = γ ∗ X i ∗ N ( G ( X ) i ) + β + X i Xi=γ*Xi*N(G(X)i)+β+Xi Xi=γXiN(G(X)i)+β+Xi。此设置允许GRN层最初执行身份识别功能,并在训练期间逐渐适应。残余连接的重要性如表2c所示。

image-20230105203504036

ConvNeXt V2

我们将GRN层合并到原始ConvNeXt块中,如图5所示。我们根据经验发现,当应用GRN时,LayerScale[65]变得不必要,并且可以移除。使用这种新的模块设计,我们创建了各种不同效率和容量的模型,我们称之为ConvNeXt V2模型系列。这些型号的重量轻(例如Atto[70])来计算密集型(例如巨大型)。详细的型号配置见附录。

image-20230105203604631

Impact of GRN

我们现在使用FCMAE框架对ConvNeXt V2进行预训练,并评估GRN的影响。从图3中的可视化和图4中的余弦距离分析中,我们可以观察到ConvNeXt V2有效地缓解了特征塌陷问题。余弦距离值始终很高,表明各层之间保持了特征多样性。这种行为类似于MAE预训练的ViT模型[31]。总体而言,这表明ConvNeXt V2学习行为可以在类似的掩蔽图像预训练框架下类似于ViT。

image-20230105203657629

接下来,我们评估微调性能。

image-20230105203758536

当配备GRN时,FCMAE预训练模型可以显著优于300历元监督模型。GRN通过增强特征多样性来提高表示质量,这在V1模型中是不存在的,但已证明对于基于掩码的预训练至关重要。注意,这种改进是在不增加额外参数开销或增加FLOPS的情况下实现的。2

Relation to feature normalization methods

其他标准化层[2,41,45,67,73]的性能是否与全局响应归一化(GRN)层?在表2d中,我们将GRN与三个广泛使用的归一化层进行了比较:局部响应归一化(LRN)[45]、批处理归一化(BN)[41]和层归一化(LN)[2]。我们观察到,只有GRN能够显著优于监督基线。LRN缺乏全球背景,因为它只对比附近邻居的频道。BN沿着批处理轴在空间上归一化,这不适用于屏蔽输入。LN隐含地通过全球均值和方差标准化来鼓励特征竞争,但其效果不如GRN。

Relation to feature gating methods

增强神经元间竞争的另一种方法是使用动态特征门控方法[37,56,69,72,78]。在表2e中,我们将GRN与两个经典选通层进行了比较:挤压和排斥(SE)[37]和卷积块注意力模块(CBAM)[72]。SE侧重于信道门控,而CBAM侧重于空间门控。两个模块都可以增加与GRN所做的相似。GRN更加简单和高效,因为它不需要额外的参数层(如MLP)。

The role of GRN in pre-training/fine-tuning

最后,我们检验了GRN在预训练和微调中的重要性。我们在表2f中给出了结果,其中我们要么从微调中删除GRN,要么仅在微调时添加新初始化的GRN。无论哪种方式,我们都观察到了显著的性能下降,这表明在预训练和微调中保持GRN都很重要。

5. ImageNet Experiments

image-20230105204222881

image-20230105204232873

image-20230105204246401

6. Transfer Learning Experiments

image-20230105204306867

image-20230105204320543

7.Conclusion

在本文中,我们介绍了一个新的ConvNet模型族,称为ConvNeXtV2,它涵盖了更广泛的复杂性。虽然体系结构的变化很小,但它是专门为更适合自我监督学习而设计的。使用我们的完全卷积掩码自动编码器预训练,我们可以在各种下游任务中显著提高纯ConvNets的性能,包括ImageNet分类、COCO对象检测和ADE20K分割。

### ConvNeXt V2 Training Tutorials and Documentation #### Overview of ConvNeXt V2 ConvNeXt represents an evolution in convolutional neural network architecture, aiming to bridge the gap between CNNs and transformers while maintaining computational efficiency. The introduction of ConvNeXt V2 further refines this approach by incorporating improvements that enhance performance and scalability. #### Official Resources The official repository for ConvNeXt provides comprehensive resources including detailed documentation on how to train models effectively: - **GitHub Repository**: Accessible at [https://github.com/facebookresearch/ConvNeXt](https://github.com/facebookresearch/ConvNeXt), this resource offers not only source code but also setup instructions tailored specifically towards training ConvNeXt architectures. - **Model Zoo**: Included within the GitHub page is a model zoo where pretrained weights are available alongside scripts demonstrating fine-tuning procedures[^1]. #### Detailed Tutorial Examples For those seeking more guided learning experiences beyond just reading through documents, several community-contributed tutorials exist which walk users step-by-step through setting up environments suitable for running experiments with ConvNeXt V2: - **Colab Notebooks**: Interactive notebooks hosted on platforms like Google Colab provide hands-on practice opportunities without requiring local installation efforts. These often come preloaded with necessary dependencies configured correctly out-of-the-box. - **Blog Posts & Articles**: Websites such as Medium host articles written by researchers who have successfully implemented these networks; they share insights gained during their own projects along with practical tips for overcoming common challenges encountered when working with newer versions of ConvNeXt. #### Example Code Snippet Below demonstrates initializing a basic configuration file used frequently across many implementations found online today: ```python import torch from convnext import build_convnext_model model = build_convnext_model( depth=[3, 3, 9], dims=[96, 192, 384], drop_path_rate=0.4, ) if __name__ == "__main__": input_tensor = torch.randn((1, 3, 224, 224)) output = model(input_tensor) print(output.shape) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值