在本文中,我们回顾了与 Transformer 架构相关的现代视觉模型。从 vanilla ViT 到 MetaFormer,我们用可视化示意图和公式详细描述了每个架构。
维特
论文:一幅图像值得 16x16 个单词:用于大规模图像识别的变换器 [2]
ViT 首次成功地在计算机视觉中采用 Transformer 架构,以更少的计算资源优于其他基于 CNN 的技术,同时更专注于分类任务。作者声称,要使这样的架构发挥作用,需要对大量数据进行预训练,因为 ViT 中没有归纳偏差,可以简化对较小数据集的训练。
ViT 简单地将图像分成多个固定大小的块(即本文中的 16x16),对应于 NLP 中的词嵌入。ViT 中的一个图像块(即 3 x 16 x 16 张量)可以说等于一个词,并且每个块都通过线性层转换为向量。嵌入向量,每个包含相应图像块的信息,由 Transformer 编码器处理如下。
所提出的网络类似于 Vanilla Transformer,除了在每个块之前应用 LayerNorm,并且在每个块之后都有剩余连接。详细地说,一个编码器块是通过交替包含两层具有 GELU[10] 非线性的 MSA 和 MLP 来实现的。最终预测由附加到表示图像整体信息的类令牌的 MLP 头进行。
在上面的公式中,(1)中的 z₀ 表示一组图像嵌入。(2) 和 (3) 显示迭代地将l索引的 MSA 和 MLP 层应用于这些嵌入,直到l达到L,这是编码器中编码器块的数量。最终图像表示(即编码器层之后的类标记)在(4)中由 y 显示。请注意,在 (1) 中,添加了与嵌入具有相同维度的位置嵌入 E_pos,以对来自图像中不同位置的补丁施加位置信息。
对于最终模型,随着模型大小从左到右增加,作者建议使用三种变体:ViT-Base、ViT-Large 和 ViT-Huge。在下表中,“Layers”表示编码器中存在多少个编码器块,“Hidden size D”表示一个嵌入向量的维度,尤其如此。
ViT-H 和 ViT-L 在 JFT-300M 数据集预训练和下游任务(即 ImageNet)微调后分别达到 ImageNet[7] 88.5 和 87.76 的精度,优于之前的 ResNet 基线模型[6]。根据作者的说法,ViT 需要比以前的模型更少的计算资源来训练,尽管由于没有归纳偏差,所以需要这么大的数据集。
在较小的数据集的情况下,原始的基于 CNN 的架构(上图中的 ResNet50x1、ResNet152x2)由于其归纳偏置而表现优于 ViT。然而,ViT 开始在更大的数据集中超越 CNN 的性能。
ImageNet-1k 更好的普通 ViT 基线
论文:ImageNet-1k [13] 的更好的普通 ViT 基线
自第一篇 ViT 论文发表以来,通过应用正则化 [4]、设计新架构 [3] 等实现了在没有大规模预训练的情况下表现出色的无数努力。然而,在这篇论文中,作者声称与在 ImageNet-1k 中训练时进一步修改的模型相比,严格遵循原始架构的简单 ViT 基线具有竞争力的性能,并提出了一些微不足道的更改。这些修改都不是新颖的,可以概括如下。
- 在训练图像上应用 Rand Augment + Mixup
- 使用固定的 sin-cos 位置编码,而不是学习的编码
- 使用 1024 的批量大小,而不是 4096
- 使用全局平均池化(GAP),而不是类标记
- 在没有激活函数的情况下使用线性层进行最终预测。
对于实验,作者使用 DeiT[4] 的 ViT-S/16 变体进行上述所有改进,并在 90 个时期的训练后达到 76.5% 的 top-1 准确率,与 ResNet 变体和现代 ViT 设置相匹配。
在上图中,绿色的点和线显示了新提出的基线的性能,它击败了使用更复杂架构的其他模型。
斯文变形金刚
论文:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows[3]
在本文中,作者提出了一种名为 Swin Transformer (SwinT) 的 ViT 分层变体,它可以对输入进行密集预测,同时保持与输入大小相关的线性计算复杂度。与传统的 CNN 架构相比,SwinT 在分类、目标检测和图像分割任务中取得了有竞争力的结果,而 vanilla ViT 在应用中往往局限于分类任务。
为此,SwinT 采用了两项关键技术。
- 具有补丁合并的分层体系结构
- 具有局部自注意力的移位窗口机制
下图很好地说明了这些变化。
为了实现分层架构,SwinT 采用了 patch-merging 方法,将 token 的数量减少了 4 倍,同时将每个 token 的维数从 C 增加到 2C。它是通过在每个 SwinT 块之后应用于 2 x 2 相邻补丁的卷积层来实现的。它不同于 Vanilla ViT,其分辨率或补丁大小永远不会改变(即各向同性架构)。通常,我们可以在网络的初始层中使用较小的补丁大小而不必担心计算,因为补丁的数量最终会通过补丁合并层来减少。由于这种特性,SwinT 可以用于需要对图像进行密集处理的目标检测、语义分割等任务。
另外,请注意,patch embedding 和 FFNN blocks(= MLP) 都可以通过应用卷积层来实现,尤其是前者的滤波器大小(即 patch 大小)和步幅相同,而后者的 1 × 1 卷积. SwinT 的补丁合并使用了类似的方案。
下图说明了整个 SwinT 体系结构。
如您所见,在第 1 阶段和第 2 阶段的补丁合并之后,分辨率从原始的 H/4 × W/4 变为 H/8 ×W/8,最终在最后阶段 4. 请注意,嵌入的维数同时增加了 2 倍,从 C 到 8C。每个 SwinT 块都是通过具有移位窗口机制的本地窗口自注意力实现的。首先,在本地窗口自注意力中,自注意力被限制在同一个M ×M 大小的窗口(即 M×M 块)中的查询、键和值,导致相对于输入大小的线性计算复杂度。为了进一步加强不同窗口中补丁之间的相关性,作者提出了一种移位窗口机制,将窗口分区方案从前一层更改为连续层。
在第l + 1 层中,窗口分区从具有 M × M 窗口大小的第l层中位移 (⌊M/2⌋, ⌊M/2⌋) 个像素。具体来说,新窗口中的自我注意计算跨越了前一个窗口中的边界,提供了它们之间的联系。
最后,SwinT 块由交替窗口方式自注意 (W-MSA)、MLP、移位窗口方式自注意 (SW-MSA) 和 MLP 构建。这可以用下面的公式来概括(层归一化和跳过连接也被使用)。
在计算自注意力时,作者添加了相对位置编码以提供有关每个补丁所在位置的模型信息(在每个 M × M 大小的窗口中)。
最后,作者构建了 4 个 SwinT 候选模型,Swin-T、Swin-S、Swin-B、Swin-L,其复杂度从基线 Swin-B 增加了 x0.25、x0.5、x1、x2。对于所有这些模型,窗口大小 M 默认设置为 7,每个头的查询维度(因为使用了多头注意力)为 32。
上图展示了每个模型的特征,其中C表示嵌入向量的维度,层数表示每个阶段迭代的SwinT块的数量。
在实验中,Swin-L 在 ImageNet-22K 中进行预训练后在 ImageNet-1k 中达到了 87.3% 的准确率,并在目标检测(CoCo 中的 58.7 box AP)和语义分割(ADE20K 中的 53.5 mIoU)等任务中进一步取得了有竞争力的结果。
蔡涛
论文:Going Deeper with Image Transformers[14]
在这篇论文中,作者提出了新的 ViT 架构,可以简化更深层次模型的训练,实现最先进的 ImageNet 精度 86.5%(当时),同时仅在 ImageNet-1k 中进行训练。
为此,作者首先关注已知有助于深度模型训练的残差架构,在 ViT 中定义如下。(不同于 vanilla ViT,layerNorm,η,在 SA 或 FFN 块之前应用。)
在之前的一些工作中,模型的基础分支在被添加到跳跃连接分支之前乘以一个可学习的标量,以帮助训练非常深的网络。按照这种方法,作者提出了 LayerScale,这是一种将初始化为接近 0 的对角矩阵乘以 SA 和 FFN 层的技术。
λᵢⱼ 和 λ'ᵢⱼ 都初始化为 0.1,直到深度 18,深度 24 为 10^-5,更深的网络为 10^-6。直觉上,通过使用此方案,我们可以预期随着模型接近较小 λ 的恒等映射,训练会变得轻松。
对于另一个贡献,作者建议仅将 CLS 令牌放在层的后面,这是由于要求香草自注意力的权重优化两个矛盾的对象 (1) 指导补丁之间的自注意力,(2)总结对线性分类器有用的信息。CaiT 旨在通过将自注意力分解为两个独立的注意力来解决这一矛盾。
- 自注意力阶段
- 将补丁信息放入 CLS 嵌入的类注意阶段
在阶段(2)中,只有类嵌入通过以下公式更新。
模型的规模可以通过选择网络的深度和嵌入维度来决定。在以 448 分辨率训练知识蒸馏和微调的 48 深度模型后,他们在 ImageNet 中达到了 86.5% 的准确率。
CoAtNet
论文:针对所有数据大小结合卷积和注意力 [15]
在这篇论文中,作者提出了一种将卷积层和 ViT 的 self-attention 结合起来的方法,以享受两者的好处。粗略地说,卷积层往往具有更好的泛化能力和更快的收敛速度,而 ViT 中使用的注意力层具有更高的模型容量,可能受益于更大的数据集。
首先,我们需要注意,深度卷积和自注意力可以使用以下公式表示。
在上面的公式中,x ᵢ 和y ᵢ 表示位置i 的输入和输出, 尽管它们实际上在卷积(例如像素)和注意力(例如补丁)的情况下可能不同。此外,L(i)表示 i的局部邻域(例如 3 x 3 网格),G表示全局空间空间。
作者介绍了卷积/自注意力操作的优缺点如下。
- 注意权重 Aᵢⱼ 取决于输入,这可能有助于模型捕获图像中的复杂交互,而卷积核与输入无关
- Self-attention有全局感受野,有利于信息抽取,而Convolution有局部感受野。
- 卷积算子是平移等价的,可以缓解网络在有限数据量下的泛化性能,而self-attention则不然。
为了利用每种方法的“唯一”优势,作者建议修改自注意力计算如下:
现在,注意力权重 Aᵢⱼ 是根据输入自适应自注意力和具有翻译等效性的 wᵢⱼ 计算的。没有 softmax 项,yₚₒₛₜ 变得与具有全局感受野的卷积运算相同。同时,作者采用了 yₚᵣₑ,因为它对应于相对位置编码(仅供参考,它类似于 T5,但没有 w 的跨层共享)
为了进一步利用网络,作者建议在 transformer 块之前添加卷积层。除了仅使用变压器块的 VITᵣₑₐ₩ 外,网络由以下 5 个阶段构建。
S0:简单的 2 层卷积 Stem
S1 — S4:CCCC / CCCT / CCTT 或 CTTT
'C' 和 'T' 分别表示前面介绍的 MBConv 块和修改后的自注意力。在每个阶段开始时,空间大小总是减少 2 倍,通道数增加。
性能分析显示以下结果。
(在 Imagenet-1k 上训练时)
(在 JFT-300M 上训练时)
在 ImageNet 中,由于卷积的归纳偏差,仅由卷积层组成的网络具有最佳性能。然而,当数据集变大时,在 JFT-300M 中,CCTT 或 CTTT 变体具有最佳性能。值得注意的是,仅包含变压器的网络(即 VIT_REAL)并未达到最佳效果。最后,作者提出使用在 JFT-300 到 ImageNet 的可迁移性测试中表现最好的 CCTT 变体,并将其命名为 CoAtNet。
CoAtNet 及其变体可以总结在下表中。
L 表示每个阶段堆叠了多少层,D 表示特征中的通道数。CoAtNet 达到了 86.0% 的 ImageNet top-1 准确率。在 ImageNet-21K 中进行预训练时,准确度可以提高到 88.56%,在 JFT-3B 数据集中进行预训练时,准确度可以提高到 90.88%。
迈向“MetaFormer”结构
MLP-混合器
论文:MLP-Mixer:视觉的全 MLP 架构 [16]
最近,CNN 和 ViT 在视觉上形成了两个架构流。人们普遍认为,ViT 的强大性能和高容量来自 self-attention,这是 transformer 架构的关键。在本文中,作者提出了一种基于 MLP 的简单架构,该架构在 ImageNet 基准测试中取得了有竞争力的结果,对此提出了质疑。
MLP-mixer(简称Mixer)的灵感来自于视觉模型中的图像处理可以分为token混合和channel混合。令牌混合是捕获图像像素(或块)之间的相互关联,而通道混合则捕获通道之间的相关性。在大多数 ConvNets(例如 ResNet[6])中,这两个过程是通过使用尺寸大于 1 × 1 的过滤器同时完成的。另一方面,在深度可分离卷积[8]中,它们通过深度卷积分离用于通道混合的令牌混合和逐点卷积。通过使用同时进行令牌混合和通道混合的self-attention和进行通道混合的MLP-block,Transformers可以属于这一类。
综合这一点,作者建议通过多层感知器对除以补丁嵌入的输入进行令牌和通道混合。在使用 MLP 层进行类似于变压器的通道混合时,MLP 混合器通过在转置输入上应用 MLP 层进一步进行令牌混合。
上图说明了 MLP 混合器的块。首先,将 MLP 层应用于嵌入矩阵的列向量以进行标记混合,这可以通过在转置输入上应用标准 MLP 来实现。这可能被“极端地”解释为应用全感受野和参数共享的深度卷积。通过在嵌入矩阵上应用通用 MLP 来进行通道混合。注意,在嵌入矩阵中,每个行向量表示对应空间位置的通道,因此列向量可以看作是整个图像对应通道的特征图。
最后,通过堆叠多个相同大小的 MLP 块来构建 MLP 混合器,这些块由令牌混合层和通道混合层组成。前者作用于 X 的列并在所有列之间共享,而后者作用于 X 的行,表示为
其中S表示图像块的数量,C是嵌入维度,σ表示非线性激活函数(论文使用GeLU)。LN 和 skip connections 也适用于每个操作。另外,Mixer引入了超参数D_s和D_c,分别是token混合和channel混合中中间激活的维度。为了在更高分辨率下进行微调,将原始权重作为其块分量的新块对角线权重矩阵用于令牌混合。
最后,作者提出了模型的以下变体。
结果,在 JFT-300M 数据集上预训练的 Mixer-H/14 在 ImageNet 中达到了 87.94% 的准确率,比 BiTResNet152x4 高 0.5%,仅比 ViT-H/14 低 0.5%。
转换混合器
论文:你只需要补丁吗?[17]
在本文中,作者提出仅使用补丁嵌入和卷积操作来修改 ViT 架构,其动机是 MLP-mixer [16]。生成的模型 ConvMixer 优于 ViT 和 MLP-mixer。鉴于如此出色的性能,作者认为最近 ViT 架构 [2, 3, 14, 15] 的性能改进可能源于补丁嵌入,而不是自注意力操作。
ConvMixer 的架构很简单,如下图所示。
通过应用补丁嵌入,具有 c × n × n 大小的图像被缩小为 h × n/p × n/p,其中 h 和 p 分别表示嵌入维度和补丁大小。请注意,补丁嵌入层可以通过固定为 p 的相同滤波器大小和步幅的卷积运算来实现。生成的张量通过 GELU 激活函数,然后应用 BN。最后,ConvMixer Block 是通过深度卷积构建的,使用非常大的滤波器大小(默认为 7)进行令牌混合,然后使用逐点卷积进行通道混合。与 MLP-mixer 类似,ConvMixer 在所有层上保持相同的分辨率和宽度,即所谓的各向同性。对于次要的细节,深度卷积有一个残差连接,并且在每个操作之后应用 BN。
最终的 Convmixer 模型取决于四个参数,宽度 h(即补丁嵌入的维度)、深度 d、补丁大小 p 和内核大小 k。作者通过将每个模型称为 ConvMixer-h/d 来提出以下变体。
仅在 ImageNet 数据集上训练时,ConvMixer-1536/20 可以达到 81.4% 的 top-1 准确度,而 ConvMixer-768/32 可以达到 80.2% 的准确度。
变形器
论文:MetaFormer 实际上是您实现愿景所需要的[12]
在本文中,作者构建了 MetaFormer 架构,该架构将补丁嵌入应用于输入,然后是令牌混合器和通道混合 MLP。在 MetaFormer 中,令牌混合器部分可以是任何字面意思,如下图所示。
为了测试 MetaFormer 架构的纯粹有效性,作者提出了 PoolFormer,这是一种使用池作为令牌混合方法的变体。虽然这非常简单,但 PoolFormer 在 ImageNet-1k 中达到了 82.1% 的准确率,超过了 ViT 和 MLP-mixer 等经过良好调整的架构。在此之后,他们声称 ViT 及其变体 [2, 3, 14, 15] 的成功可能归因于使用 MetaFormer 架构,而不是特定的令牌混合算法(例如自注意力),这也非常支持 ConvMixer 中的论点.
我们现在详细描述架构。首先,MetaFormer 块由以下公式表示。
在这里,我表示由嵌入层处理的输入。然后,令牌混合器和通道混合 MLP 依次应用于嵌入矩阵,在每个操作的输入之前进行跳跃连接和归一化(例如 LN 或 BN)。该论文对 PoolFormer 的令牌混合器使用了步长为 1 的 3 × 3 平均池化操作,解释为通过取其平均值来混合多个令牌。请注意,同时应用适当的填充操作不会改变分辨率。最后,作者采用了具有 4 级分辨率的分层架构,H/4 × H/4,H/8 × H/8,H/16 × H/16,H/32 × H/32,用于原始输入大小H×W。在实际实现中,7×7卷积操作stride 4用于初始patch embedding(即 overlapping patch division)和步幅为2的3×3卷积用于每个阶段之间的下采样操作。PoolFormer 块的数量按每个阶段的 L/6、L/6、L/2 和 L/6 分布,其中 L 表示块的总数。
最后,作者提出了 PoolFormer 模型的五个变体,以 S12、S24、S36、M36 和 M48 为代表,其中 S 表示小型模型,每个阶段的嵌入维度为 (64, 128, 320, 512),M表示嵌入尺寸为 (96, 192, 384, 768) 的中型模型。此外,后缀的数字表示总块数。对于训练,ImageNet-1k 数据集与 Mixup、CutMix、CutOut 和 RandAugment 以及随机深度和层尺度等次要技术一起使用。因此,PoolFormer-M48 达到了 82.1% 的 top-1 精度,超过了类似 Transformer/MLP 的基线,同时保持了 35%/52% 的参数和 50%/62% 的 MAC。
ConvNeXt
论文:2020 年代的 ConvNet [1]
自 ViT 出现以来,基于 Transformer 的架构在分类 [2, 4]、目标检测 [3, 5] 和分割 [3, 5] 等主要任务中的表现优于卷积网络。然而,这些架构中有一些技术或动机可能并不局限于 ViT。使用这些技术,作者“现代化”了最流行的 ConvNet 模型 ResNet-50,同时保持了 ConvNet 的简单性,实现了 87.8% 的 ImageNet top-1 准确率,并因此在对象检测和分割方面优于 SwinT。最终模型被命名为 ConvNeXt。
由于训练技术也会影响最终性能,因此在引入架构更改之前,作者在 DeiT [4] 和 SwinT 的推动下对 ResNet50 的训练过程进行了如下修改。
- 训练 epoch 从 90 epochs 扩展到 300 epochs
- 使用 AdamW
- 应用数据增强,例如 Mixup、Cutmix、RandAugment 和 Random Erasing
- 应用随机深度 [9] 和标签平滑等技术
就其本身而言,这些训练改进可以将 ResNet50 在 ImageNet 中的性能从 76.1% 提高到 78.8% (+2.7%)。
对于架构更改或小技巧,作者提出以下建议。
- 更改阶段计算比率。
在采用 4 种分辨率的 ResNet50 中,我们可以表示用于每种分辨率的块的比例,如 (3, 4, 6, 3)。在 ConvNeXt 中,作者建议将这个比率更改为 (3, 3, 9, 3),遵循 SwinT-Tiny 模型[3],将 ImageNet 准确率从 78.8% 提高到 79.4%。
- “修补”输入词干
由于自然图像中的冗余,ConvNet 中的输入词干通常通过应用大下采样来实现。在视觉转换器中,更积极地使用了非重叠的 patch-wise 下采样,它由具有相同内核大小和步幅的卷积层实现。按照这种方法,作者建议使用 4 × 4 尺寸和步幅为 4 的卷积层作为输入词干,将 ImageNet 准确率从 79.4% 提高到 79.5%
– 使用深度卷积
作者建议在 SwinT-Tiny 实现后使用深度卷积 [8],网络宽度从 64 增加到 96。随着 FLOPs (5.3G) 的增加,这将准确度提高到 80.5%。
– 倒瓶颈
在 transformer 架构中,MLP 层使用倒置瓶颈,将隐藏维度增加到比输入维度宽 4 倍。按照这种方法,作者提出了以下架构。
这里,(a) 表示 ResNeXt 块,而 (b) 和 (c) 是倒置的瓶颈块。由于下采样残差块的快捷 1×1 Conv 层显着减少了 FLOPs,当我们使用(b)块时,倒置瓶颈机制将 FLOPs 从 5.3G 减少到 4.6G,在(c)块的情况下减少到 4.1G
– 更大的内核大小
作者建议使用较大的内核大小来减少每个卷积操作的“局部性”,并为最终选项选择 7 × 7 过滤器(性能饱和超过此大小)。最后,(c) 块被用于倒置瓶颈,因为它具有最少的 FLOP,并且更类似于 ViT 的倒置块。这些组合变化导致 ImageNet 的准确率为 80.6%。
相对于每一层但不改变整个架构的其他小变化如下。
使用 GeLU[10] 而不是 ReLU:准确性保持不变,尽管可以证明它们是可切换的。
更少的激活函数:两个 1×1 卷积之间的每个 ConvNeXt 块仅使用一个 GeLU 函数,这将性能从 80.6% 提高到 81.3%。
更少的归一化层:层归一化应用在 7 x 7 卷积和 1 x 1 卷积之间,而之前的方法在每个卷积操作之后应用批归一化。作者确认 LN 在这里表现出比 BN 更好的性能,尽管直接应用 LN 而不进行上述更改可能会产生次优性能。
单独的下采样层: 作者建议通过在 ConvNeXt 块之间添加步幅为 2 的 2 × 2 conv 层来进行下采样,这本身可以根据经验显示不稳定的训练。为此,提出了一种在空间分辨率发生变化时添加归一化的修改,尤其是在每个下采样层之前,在stem之后,以及在最终的全局平均池化之后,可以将准确度提高到82.0%,超过SwinT的81.3%。
最终模型是通过总结上面所做的所有更改而制成的,并被称为 ConvNeXt,具有以下 4 个变体(上面的解释是基于 ConNeXt-T)。
这里,C 和 D 代表每个分辨率(即阶段)的通道数和块“数”。例如,ConvNeXt-B 在 38⁴² 分辨率下的准确率为 85.1%,比 SwinT-B 高 0.6%,但推理吞吐量高出 12.5%。其他实验结果也可参见论文[1]。
汇总表
最后,我们给出了一个表格,将上述架构按 4 个项目进行分类,每个项目是 (i) patch embedding 的使用,(ii) token 混合算法,(iii) 通道混合算法,(iv) 分层架构的使用(即分辨率按层变化)或各向同性架构(即分辨率保持不变)。我们还添加了经典 CNN(例如 ResNet[6])和现代 CNN(例如 EfficientNet[18])的案例以进行比较。