用于视觉的MetaFormer基线模型

摘要

https://arxiv.org/pdf/2210.13452
摘要——MetaFormer,即Transformer的抽象架构,已被发现在实现竞争性能中发挥着重要作用。在本文中,我们再次通过将研究重点从令牌混合器(token mixer)设计转移开,来进一步探索MetaFormer的潜力:我们在MetaFormer框架下引入了几个使用最基本或最常见混合器的基线模型,并展示了它们令人满意的性能。我们的观察结果总结如下:

(1)MetaFormer确保了坚实的性能下限。仅通过将恒等映射作为令牌混合器,MetaFormer模型(称为IdentityFormer)在ImageNet-1K上实现了超过80%的准确率。

(2)MetaFormer与任意令牌混合器配合良好。即使将令牌混合器指定为随机矩阵来混合令牌,由此产生的模型RandFormer也能达到超过81%的准确率,优于IdentityFormer。当采用新的令牌混合器时,可以确信MetaFormer的结果。

(3)MetaFormer轻松提供最先进的结果。仅使用五年前的常规令牌混合器,从MetaFormer实例化的模型就已经超越了最先进的水平。

(a)ConvFormer优于ConvNeXt。以常见的深度可分离卷积作为令牌混合器,该模型(称为ConvFormer,可视为纯卷积神经网络)在性能上超过了强大的卷积神经网络模型ConvNeXt。

(b)CAFormer在ImageNet-1K上创下了新纪录。通过在底层阶段简单地应用深度可分离卷积作为令牌混合器,在顶层阶段应用普通的自注意力机制,由此产生的模型CAFormer在ImageNet-1K上创下了新纪录:在无需外部数据或知识蒸馏的正常监督训练下,它在224×224分辨率下达到了85.5%的准确率。

在探索MetaFormer的过程中,我们还发现了一种新的激活函数StarReLU,与常用的GELU相比,它在激活过程中减少了71%的浮点运算量(FLOPs),同时实现了更好的性能。具体来说,StarReLU是Squared ReLU的一种变体,专门用于缓解分布偏移。我们期望StarReLU在MetaFormer类模型以及其他神经网络中找到巨大的潜力。代码和模型可在https://github.com/sail-sg/metaformer获取。

1 引言

近年来,Transformer [9] 在各种计算机视觉任务中 [10]、[11]、[12]、[13] 取得了前所未有的成功。Transformer的能力长期以来一直归功于其注意力模块。因此,为了加强视觉Transformer(ViTs)[11],已经提出了许多基于注意力的令牌混合器[4]、[5]、[14]、[15]、[16]。然而,一些工作[17]、[18]、[19]、[20]、[21]发现,通过将Transformer中的注意力模块替换为简单的运算符,如空间MLP [17]、[22]、[23]或傅里叶变换[18],得到的模型仍然能产生令人鼓舞的性能。

沿着这一思路,工作[24]将Transformer抽象为一个称为MetaFormer的通用架构,并假设正是MetaFormer在模型中实现竞争性能方面发挥着重要作用。为了验证这一假设,[24]采用了极其简单的运算符——池化,作为令牌混合器,并发现PoolFormer有效地优于精致的ResNet/ViT/MLP类基线模型[1]、[2]、[4]、[11]、[17]、[22]、[25]、[26],这证实了MetaFormer的重要性。
在这里插入图片描述

在本文中,我们再次通过故意将注意力从令牌混合器上移开,进一步探索MetaFormer的边界。我们的目标是基于MetaFomer的极限,从而对其能力有一个全面的了解。为此,我们采用了最基本或最常见的令牌混合器,并研究了所得MetaFormer模型在大规模ImageNet-1K图像分类任务上的性能。具体来说,我们研究了令牌混合器是裸运算符(如恒等映射或全局随机混合)以及多年前就已存在的常见技术(如可分离卷积[6]、[7]、[8]和普通自注意力[9]),如图2所示。我们在图1中总结了我们的关键实验结果,主要观察结果如下。

  • MetaFormer确保了坚实的性能下限。通过将令牌混合器指定为最简单的运算符——恒等映射,我们构建了一个名为IdentityFormer的MetaFormer模型来探究性能下限。这个粗糙的模型令人惊讶地已经达到了令人满意的准确度。例如,在73M参数和11.5G MACs下,IdentityFormer在ImageNet-1K上达到了80.4%的top-1准确度。IdentityFormer的结果表明,即使涉及最低程度的令牌混合,MetaFormer也确实是一个能够保证良好性能的可靠架构。

  • MetaFormer与任意令牌混合器配合良好。为了探索MetaFormer对令牌混合器的通用性,我们进一步将令牌混合器设置为随机,这样令牌之间的信息传递是启用的但很大程度上是任意的。具体来说,我们在前两个阶段为令牌混合器配备了随机混合,并在后两个阶段保留了恒等映射,以避免带来过高的计算成本和冻结参数。得到的模型,称为RandFormer,证明是有效的,并且比IdentityFormer提高了1.0%,达到了81.4%的准确度。这一结果验证了MetaFormer与令牌混合器的普遍兼容性。因此,当引入奇异的令牌混合器时,请放心MetaFormer的性能。

  • MetaFormer 轻松提供最先进的性能。我们进一步尝试将更多信息丰富的算子注入到 MetaFormer 中,以探究其性能。同样,在不引入新型令牌混合器的情况下,配备有多年前发明的“老式”令牌混合器的 MetaFormer 模型,包括倒置可分离卷积 [6]、[7]、[8] 和普通自注意力 [9],轻松实现了最先进的性能。具体来说,

    • ConvFormer 优于 ConvNeXt。通过将令牌混合器实例化为可分离的深度卷积,得到的模型称为 ConvFormer,可以视为没有通道或空间注意力 [9]、[11]、[27]、[28] 的纯卷积神经网络(CNN)模型。实验结果表明,ConvFormer 在性能上始终优于强大的纯 CNN 模型 ConvNeXt [3]。
    • CAFormer 在 ImageNet-1K 上创下了新纪录。如果我们通过采用普通自注意力 [9] 将注意力引入 ConvFormer,得到的模型称为 CAFormer,在 ImageNet-1K 上轻松实现了创纪录的性能。具体来说,CAFormer 用普通自注意力替换了 ConvFormer 在前两个阶段的令牌混合器,并在 ImageNet-1K 上以 224x224 分辨率在正常监督设置(没有额外数据或知识蒸馏)下达到了 85.5% 的 top-1 准确率,创下了新纪录。

这些使用最基本或常用令牌混合器的 MetaFormer 模型,很容易成为视觉应用领域中可靠且具有竞争力的基线。当引入精细的令牌混合器或先进的训练策略时,我们毫不惊讶地看到类似 MetaFormer 的模型将创下新的性能纪录。在我们的探索过程中,我们还发现了一种新的激活函数 StarReLU,与常用的 GELU 相比,StarReLU 的激活浮点运算量(FLOPs)减少了高达 71%。StarReLU 是 Squared ReLU 的一种变体,但特别设计用于缓解分布偏移。在我们的实验中,具体来说,StarReLU 在 ConvFormer-S18 和 CAFormer-S18 上分别比 GELU 高出 0.3% 和 0.2% 的准确率。因此,我们期待 StarReLU 在类似 MetaFormer 的模型以及其他神经网络中找到巨大的潜力。

2 方法

2.1 回顾 MetaFormer 的概念

MetaFormer [24] 是一个通用架构而不是特定模型,它是从 Transformer [9] 中抽象出来的,没有指定令牌混合器。具体来说,首先将输入嵌入为特征序列(或称为令牌) [9]、[11]:

X = InputEmbedding ⁡ ( I ) X=\operatorname{InputEmbedding}(I) X=InputEmbedding(I)

然后,将长度为 N N N 和通道维度为 C C C 的令牌序列 X ∈ R N × C X \in \mathbb{R}^{N \times C} XRN×C 输入到重复的 MetaFormer 块中,其中一个块可以表示为

X ′ = X +  TokenMixer  ( Norm ⁡ 1 ( X ) ) X ′ ′ = X ′ + σ ( Norm ⁡ 2 ( X ′ ) W 1 ) W 2 \begin{array}{l} X^{\prime}=X+\text { TokenMixer }\left(\operatorname{Norm}_{1}(X)\right) \\ X^{\prime \prime}=X^{\prime}+\sigma\left(\operatorname{Norm}_{2}\left(X^{\prime}\right) W_{1}\right) W_{2} \end{array} X=X+ TokenMixer (Norm1(X))X′′=X+σ(Norm2(X)W1)W2

其中 Norm ⁡ 1 ( ⋅ ) \operatorname{Norm}_{1}(\cdot) Norm1() Norm ⁡ 2 ( ⋅ ) \operatorname{Norm}_{2}(\cdot) Norm2() 是归一化 [29]、[30];TokenMixer ( ⋅ ) (\cdot) () 表示令牌混合器,主要用于在令牌之间传播信息; σ ( ⋅ ) \sigma(\cdot) σ() 表示激活函数; W 1 W_{1} W1 W 2 W_{2} W2 是通道 MLP 中的可学习参数。通过指定具体的令牌混合器模块,MetaFormer 被实例化为具体模型。

2.2 IdentityFormer 和 RandFormer

遵循 [24],我们希望将令牌混合器实例化为基本运算符,以进一步探究 MetaFormer 的能力。我们首先考虑的是恒等映射,

IdentityMapping ⁡ ( X ) = X \operatorname{IdentityMapping}(X)=X IdentityMapping(X)=X

恒等映射不进行任何令牌混合,因此实际上不能被视为令牌混合器。为了方便起见,我们仍然将其视为一种令牌混合器来与其他混合器进行比较。

我们利用的另一个基本令牌混合器是全局随机混合,

RandomMixing ⁡ ( X ) = X W R \operatorname{RandomMixing}(X)=X W_{R} RandomMixing(X)=XWR

其中 X ∈ R N × C X \in \mathbb{R}^{N \times C} XRN×C 是序列长度为 N N N 和通道维度为 C C C 的输入, W R ∈ R N × N W_{R} \in \mathbb{R}^{N \times N} WRRN×N 是一个在随机初始化后冻结的矩阵。这个令牌混合器将带来与令牌数量成二次方的额外冻结参数和计算成本,因此不适合大量令牌。恒等映射和随机混合的 PyTorch 风格代码如算法 1 所示。

为了构建整体框架,我们简单地遵循 PoolFormer [24] 的 4 阶段模型 [1]、[31] 配置来构建不同大小的模型。具体来说,我们在所有四个阶段中将令牌混合器指定为恒等映射,并将得到的模型命名为 IdentityFormer。为了构建 RandFormer,考虑到随机混合的令牌混合器将为长令牌长度带来大量额外的冻结参数和计算成本,因此我们在前两个阶段保持恒等映射,但在最后两个阶段将全局随机混合设置为令牌混合器。
在这里插入图片描述

为了公平地比较 IdentityFormer/RandFormer 与 PoolFormer [24],我们还将上述技术应用于 PoolFormer 并将新模型命名为 PoolFormerV2。模型配置如表 1 所示,整体框架如图 2 所示。
在这里插入图片描述

2.3 ConvFormer 和 CAFormer

上一节利用基本令牌混合器来探究性能下限和模型在令牌混合器方面的通用性。在本节中,我们没有设计新颖的令牌混合器,而是将令牌混合器指定为常用运算符,以探究模型实现最先进性能的潜力。我们选择的第一个令牌混合器是深度可分离卷积 [6]、[7]。具体来说,我们遵循 MobileNetV2 [8] 中的倒置可分离卷积模块,其中 Conv ⁡ p w 1 ( ⋅ ) \operatorname{Conv}_{\mathrm{pw} 1}(\cdot) Convpw1() Conv ⁡ p w 2 ( ⋅ ) \operatorname{Conv}_{\mathrm{pw} 2}(\cdot) Convpw2() 是逐点卷积, Conv ⁡ d w ( ⋅ ) \operatorname{Conv}_{\mathrm{dw}}(\cdot) Convdw() 是深度卷积, σ ( ⋅ ) \sigma(\cdot) σ() 表示非线性激活函数。在实践中,我们按照 [3] 的设置将卷积核大小设置为 7,并将扩展比设置为 2。我们通过将令牌混合器指定为上述可分离卷积来将 MetaFormer 实例化为 ConvFormer。ConvFormer 也采用 4 阶段框架 [1]、[4]、[5](图 2),不同大小的模型配置如表 2 所示。
在这里插入图片描述

除了卷积之外,另一种常见的标记混合器是Transformer中使用的普通自注意力(vanilla self-attention)[9]。这种全局操作器预计能够更好地捕获长距离依赖性。然而,由于自注意力的计算复杂度与标记的数量呈二次方关系,因此在前两个拥有许多标记的阶段中采用香草自注意力会十分繁琐。相比之下,卷积是一个局部操作器,其计算复杂度与标记长度呈线性关系。受[11]、[12]、[24]、[32]的启发,我们采用了四阶段框架,并指定前两个阶段的标记混合器为卷积,最后两个阶段的标记混合器为注意力,以构建CAFormer,如图2所示。有关不同尺寸的模型配置,请参见表2。

2.4 改善MetaFormer的技术

本文没有引入复杂的标记混合器。相反,我们引入了一种新的激活函数StarReLU以及其他两种改进方法[33]、[34]、[35]来优化MetaFormer。

2.4.1 StarReLU

在普通Transformer[9]中,ReLU[36]被选为激活函数,可以表示为

ReLU ⁡ ( x ) = max ⁡ ( 0 , x ) \operatorname{ReLU}(x)=\max (0, x) ReLU(x)=max(0,x)

其中 x x x表示输入的任何一个神经单元。这个激活函数每个单元需要1次浮点运算(FLOP)。后来,GPT[37]使用GELU[38]作为激活函数,之后许多后续的Transformer模型(如BERT[39]、GPT-3[40]和ViT[11])都默认采用这种激活函数。GELU可以近似表示为

GELU ⁡ ( x ) = x Φ ( x ) ≈ 0.5 × x ( 1 + tanh ⁡ ( 2 / π ( x + 0.044715 × x 3 ) ) ) \begin{array}{l} \operatorname{GELU}(x)=x \Phi(x) \\ \approx 0.5 \times x\left(1+\tanh \left(\sqrt{2 / \pi}\left(x+0.044715 \times x^{3}\right)\right)\right) \end{array} GELU(x)=xΦ(x)0.5×x(1+tanh(2/π (x+0.044715×x3)))

其中 Φ ( ⋅ ) \Phi(\cdot) Φ()是高斯分布的累积分布函数(CDFGD)。虽然GELU的性能优于ReLU[24]、[41],但它大约需要14次FLOP,远高于ReLU的1次FLOP。为了简化GELU,[41]发现CDFGD可以用ReLU替换,

SquaredReLU ⁡ ( x ) = x ReLU ⁡ ( x ) = ( ReLU ⁡ ( x ) ) 2 \operatorname{SquaredReLU}(x)=x \operatorname{ReLU}(x)=(\operatorname{ReLU}(x))^{2} SquaredReLU(x)=xReLU(x)=(ReLU(x))2

这种激活函数被称为Squared ReLU[41],每个输入单元仅需要2次FLOP。尽管Squared ReLU很简单,但我们发现它在图像分类任务上的性能对于某些模型来说无法与GELU相媲美,如第3.4节所示。我们假设性能较差的原因可能是输出分布发生了偏移[43]。假设输入 x x x遵循均值为0、方差为1的正态分布,即 x ∼ N ( 0 , 1 ) x \sim N(0,1) xN(0,1),则有:

E ( ( ReLU ⁡ ( x ) ) 2 ) = 0.5 , Var ⁡ ( ( ReLU ⁡ ( x ) ) 2 ) = 1.25 \mathrm{E}\left((\operatorname{ReLU}(x))^{2}\right)=0.5, \quad \operatorname{Var}\left((\operatorname{ReLU}(x))^{2}\right)=1.25 E((ReLU(x))2)=0.5,Var((ReLU(x))2)=1.25

方程11的推导过程见附录。因此,可以通过以下方式解决分布偏移问题:

StarReLU ⁡ ( x ) = ( ReLU ⁡ ( x ) ) 2 − E ( ( ReLU ⁡ ( x ) ) 2 ) Var ⁡ ( ( ReLU ⁡ ( x ) ) 2 ) = ( ReLU ⁡ ( x ) ) 2 − 0.5 1.25 ≈ 0.8944 ⋅ ( ReLU ⁡ ( x ) ) 2 − 0.4472 \begin{aligned} \operatorname{StarReLU}(x) & =\frac{(\operatorname{ReLU}(x))^{2}-\mathrm{E}\left((\operatorname{ReLU}(x))^{2}\right)}{\sqrt{\operatorname{Var}\left((\operatorname{ReLU}(x))^{2}\right)}} \\ & =\frac{(\operatorname{ReLU}(x))^{2}-0.5}{\sqrt{1.25}} \\ & \approx 0.8944 \cdot(\operatorname{ReLU}(x))^{2}-0.4472 \end{aligned} StarReLU(x)=Var((ReLU(x))2) (ReLU(x))2E((ReLU(x))2)=1.25 (ReLU(x))20.50.8944(ReLU(x))20.4472
我们将上述激活函数命名为StarReLU,因为乘法(*)的使用非常频繁。然而,输入遵循标准正态分布的假设很强[43]。为了使激活函数能够适应不同的情况,比如不同的模型或初始化方式,可以将比例和偏置设置为可学习的参数[44]、[45]。我们将激活函数统一重写为

StarReLU ⁡ ( x ) = s ⋅ ( ReLU ⁡ ( x ) ) 2 + b \operatorname{StarReLU}(x)=s \cdot(\operatorname{ReLU}(x))^{2}+b StarReLU(x)=s(ReLU(x))2+b

其中 s ∈ R s \in \mathbb{R} sR b ∈ R b \in \mathbb{R} bR分别是比例和偏置的标量,它们对所有通道都是共享的,可以设置为常数或可学习的参数,以获得不同的StarReLU变体。StarReLU仅需要4次浮点运算(如果只有 s s s b b b,则为3次),远少于GELU的14次,但如第3.4节所示,它实现了更好的性能。为了方便起见,本文默认使用具有可学习比例和偏置的StarReLU作为激活函数,因为直觉上这种变体可以更广泛地适应不同的情况[44]、[45]。我们留待未来研究不同情况下StarReLU变体的选择。

2.4.2 其他改进

分支输出缩放。为了从深度上扩展Transformer模型的大小,[46]提出了LayerScale,它通过可学习的向量来缩放层的输出:

X ′ = X + λ l ⊙ F ( Norm ⁡ ( X ) ) X^{\prime}=X+\lambda_{l} \odot \mathcal{F}(\operatorname{Norm}(X)) X=X+λlF(Norm(X))

其中 X ∈ R N × C X \in \mathbb{R}^{N \times C} XRN×C表示输入特征,序列长度为 N N N,通道维度为 C C C Norm ⁡ ( ⋅ ) \operatorname{Norm}(\cdot) Norm()是归一化操作; F ( ⋅ ) \mathcal{F}(\cdot) F()表示标记混合器或通道多层感知机(MLP)模块; λ l ∈ R C \lambda_{l} \in \mathbb{R}^{C} λlRC表示可学习的LayerScale参数,初始化为一个小值,如 1 e − 5 1 \mathrm{e}-5 1e5 ⊙ \odot 表示元素乘法。类似于LayerScale,[33]、[47]、[48]尝试通过缩放残差分支(ResScale[33])来稳定架构:

X ′ = λ r ⊙ X + F ( Norm ⁡ ( X ) ) X^{\prime}=\lambda_{r} \odot X+\mathcal{F}(\operatorname{Norm}(X)) X=λrX+F(Norm(X))

其中 λ r ∈ R C \lambda_{r} \in \mathbb{R}^{C} λrRC表示初始化为1的可学习参数。显然,我们可以通过缩放所有分支来将上述两种技术合并为BranchScale:

X ′ = λ r ⊙ X + λ l ⊙ F ( Norm ⁡ ( X ) ) X^{\prime}=\lambda_{r} \odot X+\lambda_{l} \odot \mathcal{F}(\operatorname{Norm}(X)) X=λrX+λlF(Norm(X))

在这三种缩放技术中,根据我们在第3.4节中的实验,我们发现ResScale表现最佳。因此,本文默认采用ResScale[33]。

禁用偏置。遵循[34]、[35],我们在MetaFormer块中禁用了全连接层、卷积层(如果存在)和归一化层的偏置,发现这不会损害性能,甚至在某些模型的消融研究中还能带来轻微的性能提升。为了简化,我们默认在MetaFormer块中禁用偏置。

3 实验

3.1 图像分类

3.1.1 设置

我们利用ImageNet-1K [59] 图像分类来对这些基线模型进行基准测试。ImageNet-1K是计算机视觉领域使用最广泛的数据集之一,它包含训练集上1K类的大约130万张图像,验证集上5万张图像。对于ConvFormer-B36和CAFormer-B36,我们还在ImageNet-21K [59]、[60]上进行了预训练,这是一个包含约1400万张21841类图像的大型数据集,然后在ImageNet-1K上对预训练模型进行微调以进行评估。我们的实现基于PyTorch库[61]和Timm代码库[62],实验在TPU上运行。

在ImageNet-1K上的训练和微调。我们主要遵循DeiT [25]的超参数设置。具体来说,模型在 22 4 2 224^{2} 2242分辨率下训练300个周期。数据增强和正则化技术包括RandAugment [63]、Mixup [64]、CutMix [65]、Random Erasing [66]、权重衰减、Label Smoothing [67]和Stochastic Depth [68]。我们没有使用重复增强[69]、[70]和LayerScale [46],但在最后两个阶段使用了ResScale [33]。我们采用AdamW [71]、[72]优化器,对于大多数模型(除了CAFormer)的批量大小为4096,因为我们发现与批量大小为1024相比,CAFormer的性能略有下降。这个问题可能是由大批量大小引起的,因此我们对CAFormer使用大批量大小友好的优化器LAMB [73]。对于 38 4 2 384^{2} 3842分辨率,我们使用指数移动平均(EMA)[74]对在 22 4 2 224^{2} 2242分辨率下训练的模型进行30个周期的微调。超参数的详细信息在附录中给出。

在ImageNet-21K上的预训练和ImageNet-1K上的微调。为了探索使用更大数据集时的扩展能力,我们在ImageNet-21K上以 22 4 2 224^{2} 2242分辨率对ConvFormer和CAFormer进行90个周期的预训练。然后,在ImageNet-1K上以 22 4 2 224^{2} 2242 38 4 2 384^{2} 3842分辨率对预训练模型进行30个周期的微调,并使用EMA [74]。超参数的更多详细信息见附录。

鲁棒性评估。遵循ConvNeXt [3],我们还直接在几个鲁棒性基准上评估我们的ImageNet模型,即ImageNet-C [75]、ImageNet-A [76]、ImageNet-R [77]和ImageNet-Sketch [78]。请注意,我们没有采用额外的微调或任何专用模块。对于ImageNet-C,报告了平均损坏误差(mCE),对于其他所有数据集,报告了top-1准确率。
在这里插入图片描述

3.1.2 具有基本标记混合器的模型结果

表3展示了在ImageNet-1K上具有基本标记混合器的模型性能。令人惊讶的是,仅使用恒等映射作为标记混合器,IdentityFormer就已经表现非常出色,特别是对于小型模型尺寸。例如,IdentityFormer-S12/S24分别比RSB-ResNet 18/34 [1]、[2]高出 4.0 % / 2.7 % 4.0\%/2.7\% 4.0%/2.7%。我们进一步放大了IdentityFormer的模型尺寸,以查看它能达到什么准确率。通过将模型尺寸放大到约7300万个参数和约120亿次乘法累加操作(MACs),IdentityFormer-M48可以达到 80.4 % 80.4\% 80.4%的准确率。如果不考虑模型尺寸的可比性,该准确率已经超过了RSB-ResNet50的 79.8 % 79.8\% 79.8%。IdentityFormer的结果表明,MetaFormer确保了坚实的性能下限。也就是说,如果你采用MetaFormer作为开发自己模型的通用框架,在相似的参数数量和MACs下,准确率不会低于IdentityFormer-M48的 80 % 80\% 80%

在这里插入图片描述

为了探究IdentityFormer的惊人表现是否源自其层次结构,我们遵循ViT-S(DeiTS)的方法构建了等向IdentityFormer,结果如表4所示。等向IdentityFormer-S(iso.)能达到68.2%的准确率,而具有4个卷积层主干的等向IdentityFormer-S(iso.)甚至能获得75.4%的准确率。这些结果表明,等向IdentityFormer同样表现优异,证明了IdentityFormer的性能并非来自其层次结构。基于IdentityFormer-S(iso.)与IdentityFormer-S(iso.,conv stem)之间的显著提升,模型性能的一个重要因素是主干或下采样层的感受野。

另一个令人惊讶的发现是,通过在IdentityFormer的前两个阶段用随机混合替换令牌混合器,RandFormer能够一致地提升IdentityFormer的性能。例如,RandFormer-S12/M48分别获得了76.6%/81.4%的准确率,比IdentityFormer-S12/M48分别高出2.0%/1.0%。对于中等和大型模型尺寸,RandFormer也能达到与RSB-ResNet相当的准确率,如RandFormer-M36的81.2%与RSB-ResNet101的81.3%相近。RandFormer的出色表现,特别是它对IdentityFormer的一致提升,证明了MetaFormer可以与任意令牌混合器良好配合,验证了MetaFormer与令牌混合器的普遍兼容性。因此,当配备非传统令牌混合器时,可以放心MetaFormer的性能。

与基本令牌混合器为池化的PoolFormerV2[24]相比,IdentityFormer和RandFormer都无法匹敌其性能。IdentityFormer表现较差是合理的,因为恒等映射没有进行任何令牌混合。RandFormer与PoolFormerV2之间的性能差距可能源于池化的局部归纳偏差。

3.1.3 常用令牌混合器模型的结果

我们通过将MetaFormer中的令牌混合器指定为MobileNetV2[8]中使用的可分离卷积[6]、[7],构建了ConvFormer。同时,CAFormer是在前两个阶段使用可分离卷积作为令牌混合器,在后两个阶段使用普通自注意力构建的。在ImageNet-1K上训练的模型结果如表5所示。
在这里插入图片描述

ConvFormer实际上可以视为没有任何注意力机制的纯CNN模型[9]、[11]、[27]、[28]。可以看出,ConvFormer显著优于强大的CNN模型ConvNeXt[3]。例如,在224^2的分辨率下,ConvFormer-B36(1亿参数和22.6 G MACs)以0.5%的top-1准确率优势超越了ConvNeXt-B(1.98亿参数和34.4 G MACs),同时仅需要51%的参数和66%的MACs。与另一个强大的CNN模型EfficientNetV2-L[79](输入尺寸为480^2,1.2亿参数,53.0 G MACs,85.7%的top-1准确率)相比,输入尺寸为384^2的ConvFormer-B36能达到相同的准确率。

此外,ConvFormer还优于各种强大的基于注意力或混合模型。例如,ConvFormer-M36以35%/24%更少的参数和17%/18%更少的MACs,分别比Swin-B[5]/CoAtNet-2[32]高出1.0%/0.4%的准确率。

除了ConvFormer外,CAFormer的性能更为显著。尽管CAFormer只是在底层阶段配备了可分离卷积[6]、[7]、[8]作为令牌混合器,在顶层阶段使用了普通自注意力[9],但它已经在不同尺寸上一致地超越了其他模型,如图3所示。特别地,据我们所知,CAFormer在正常监督设置下(无外部数据或蒸馏模型),在ImageNet-1K上以224^2分辨率达到了85.5%的top-1准确率,创下了新纪录。
在这里插入图片描述

在ImageNet-21K上进行预训练(表7)后,模型性能得到进一步提升。例如,ConvFormer-B36和CAFormer-B36的性能分别飙升至87.0%和87.4%,与仅在ImageNet-1K上训练的结果相比,准确率分别提高了2.2%和1.9%。这两个模型均优于Swin-L[5]/ConvNeXtL[3],显示出在更大预训练数据集下具有出色的扩展能力。例如,ConvFormer-B36在参数减少49%、MACs减少34%的情况下,性能仍比ConvNeXt-L高出0.2%。与另一个强大的模型EfficientNetV2-XL(输入尺寸为 48 0 2 480^{2} 4802,94.0 G MACs,208 M参数,87.3%的top-1准确率)相比,ConvFormer-B36和CAFormer-B36分别以其一半的参数和71%/77%的MACs,实现了0.3%和0.8%的超越。
在这里插入图片描述

仅配备“老式”的标记混合器,从MetaFormer实例化而来的ConvFormer和CAFormer就已经能够取得显著的性能,特别是CAFormer在ImageNet-1K上创下了新纪录。这些结果表明,MetaFormer为实现最先进的性能提供了巨大的潜力。当引入先进的标记混合器或训练策略时,我们毫不惊讶地看到MetaFormer类模型的性能将创下新纪录。我们期待ConvFormer、CAFormer以及IdentityFormer和RandFormer成为未来神经网络架构设计的可靠基线。
在这里插入图片描述

3.1.4 常用标记混合器模型的鲁棒性

ConvFormer、CAFormer和其他SOTA模型的鲁棒性结果如表6所示。与Swin[5]和ConvNeXt[3]相比,ConvFormer表现出更好或具有竞争力的性能。例如,对于在ImageNet-1K上训练的模型,ConvFormer-S18在ImageNet-A[76]和ImageNet-R[77]上分别获得了25.3%和48.7%的准确率,分别比ConvNeXt-T高出1.1%和1.5%。CAFormer取得了更令人印象深刻的性能:它不仅始终优于Swin和ConvNeXt,还超越了SOTA鲁棒方法FAN[80]。例如,对于在ImageNet-1K上训练的模型,CAFormer-M36/CAFormer-B36在ImageNet-A[76]上分别获得了45.6%和48.5%的准确率,分别比FAN[80]高出8.4%/11.3%。

3.2 目标检测和实例分割

3.2.1 设置

我们在COCO[83]数据集上评估了ConvFormer和CAFormer,该数据集包含118K张训练图像和5K张验证图像。遵循Swin[5]和ConvNeXt[3]的做法,我们将在ImageNet-1K上预训练的ConvFormer和CAFormer作为Mask R-CNN[84]和Cascade Mask R-CNN[85]的骨干网络。由于图像分辨率较大,我们发现采用CAFormer会导致内存不足。为了解决这个问题,我们将CAFormer的注意力限制在滑动窗口[86]、[87]中。我们还采用了AdamW多尺度训练设置和 3 × 3 \times 3×训练计划,与Swin和ConvNeXt保持一致。

3.2.2 结果

表9展示了ConvFormer、CAFormer以及另外两个强大的骨干网络Swin和ConvNeXt在COCO目标检测和实例分割任务上的结果。以ConvFormer和CAFormer为骨干的网络在性能上始终优于Swin和ConvNeXt。例如,以CAFormer-S18为骨干的Cascade Mask R-CNN在box AP上大幅超越了以Swin-T/ConvNeXt-T为骨干的网络,分别为52.3 vs. 50.4/50.4,在mask AP上也以45.2 vs. 43.7/43.7领先。
在这里插入图片描述

3.3 语义分割

3.3.1 设置

我们还在ADE20K数据集[88]上评估了ConvFormer和CAFormer在语义分割任务上的表现。ADE20K包含训练集/验证集上的 20   K / 2   K 20 \mathrm{~K} / 2 \mathrm{~K} 20 K/2 K张图像,包括150个语义类别。遵循Swin和ConvNeXt的做法,我们将ConvFormer和CAFormer作为UperNet[89]的骨干网络。所有模型均使用AdamW优化器[71],[72]进行训练,批量大小为16,迭代次数为160K次。

3.3.2 结果

表10展示了不同骨干网络的UperNet的结果。与Swin和ConvNeXt相比,ConvFormer和CAFormer作为骨干网络时获得了更好的性能。例如,以CAFormer-S18为骨干的模型获得了 48.9 48.9 48.9 mIoU,比以Swin-T/ConvNeXt-T为骨干的模型分别高出 3.1 3.1 3.1/ 2.2 2.2 2.2
在这里插入图片描述
在这里插入图片描述

3.4 消融实验

本文没有设计新的令牌混合器,而是对MetaFormer应用了三种技术。因此,我们分别对它们进行了消融实验。以ImageNet-1K上的ConvFormer-S18和CAFormer-S18作为基线。结果如表8所示。当将StarReLU替换为ReLU[36]时,ConvFormerS18/CAFormer的性能显著下降,分别从 83.0 % 83.0\% 83.0%/ 83.6 % 83.6\% 83.6%降至 82.1 % 82.1\% 82.1%/ 82.9 % 82.9\% 82.9%。当激活函数为Squared ReLU[41]时,性能已经令人满意。但对于ConvFormer-18,其性能无法与GELU[38]相媲美。至于StarReLU,它不仅可以比GELU减少 71 % 71\% 71%的激活浮点运算量,而且还能分别为ConvFormer-S18/CAFormer-S18带来 0.3 % 0.3\% 0.3%/ 0.2 % 0.2\% 0.2%的精度提升。这一结果表明,StarReLU在MetaFormer类模型和其他神经网络中具有广阔的应用潜力。我们进一步观察了StarReLU的不同变体在ConvFormer-S18上的性能。我们默认采用带有可学习缩放和偏置的StarReLU,因为它不需要满足输入为标准正态分布的假设[43],并且可以方便地应用于不同的模型和初始化[44],[45]。但对于特定的ConvFormer-18模型,带有可学习或固定偏置的StarReLU就足够了,因为它已经可以达到默认StarReLU版本的精度。我们将在未来进一步研究StarReLU变体的选择。

对于其他技术,我们发现ResScale[33]在分支输出缩放技术中表现最佳;在每个块中禁用偏置[34],[35]不会影响ConvFormer-S18的性能,并且可以为CAFormer-S18带来 0.1 % 0.1\% 0.1%的提升。因此,我们默认采用ResScale并禁用每个块的偏置。

3.5 基准速度

我们首先在NVIDIA A100 GPU上对提出的StarReLU和常用的GELU[38]进行了速度基准测试,结果如表11所示。可以看出,与GELU(公式9)相比,StarReLU具有显著的速度优势,在NVIDIA A100 GPU上实现了 1.7 × 1.7 \times 1.7×的加速。我们还注意到,StarReLU比GELU(PyTorch API)慢,因为当前StarReLU的实现未经过CUDA优化。一旦优化,我们预计StarReLU将实现更进一步的加速,可能是显著的。
在这里插入图片描述

然后,我们进一步对ConvFormer、CAFormer和其他强大模型(Swin[5]和ConvNeXt[3])进行了基准测试。为了公平比较,我们将ConvFormer和CAFormer中的StarReLU替换为GELU。结果如表12所示。可以看出,在模型大小和MACs相似的情况下,ConvNeXt的吞吐量最高。这是因为ConvNeXt块只有一个残差连接,而MetaFormer块有两个。然而,ConvFormer和CAFormer在这些模型中获得了更高的精度,并且相对于Swin和MaxViT也实现了相对较高的吞吐量,从而在精度和吞吐量之间实现了更好的权衡,如图4所示。
在这里插入图片描述

4 相关工作

自引入以来[9],Transformer已成为自然语言处理[34],[37],[40],[90],[91]、计算机视觉[4],[5],[10],[11],[14],[25]和其他领域[92],[93],[94],[95],[96],[97],[98]中各种任务的流行骨干网络。在计算机视觉中,iGPT[10]和ViT[11]引入了纯Transformer用于自监督学习和监督学习,引起了研究界对进一步改进Transformer的极大关注。Transformer的成功长期以来一直归因于注意力模块,因此许多研究努力都集中在改进基于注意力的令牌混合器上[4],[5],[14]。然而,MLP-Mixer[17]和FNet[18]表明,通过将Transformer中的注意力替换为空间MLP[23]和傅里叶变换,所得模型仍然可以取得具有竞争力的结果。沿着这一思路,[24]将Transformer抽象为一个称为MetaFormer的通用架构,并提出了一个假设,即MetaFormer在实现有前景的性能方面起着至关重要的作用。为此,[24]将令牌混合器指定为尽可能简单的池化操作,并观察到所得模型PoolFormer超越了经过良好调整的ResNet/ViT/MLP类基线[1],[2],[4],[11],[17],[22],[25],[26]。MetaFormer的强大功能也可以通过最近采用MetaFormer作为通用架构但具有不同基于注意力[49],[99],[100]、基于MLP[17],[22],[101],[102],[103]、基于卷积[51],[56],[104],[105],[106]、混合[32],[54],[55],[58]或其他类型[107],[108]令牌混合器的模型来验证。与这些工作不同,我们并不尝试引入新的令牌混合器,而是仅将令牌混合器指定为最基本或最常用的运算符,以探究MetaFormer的能力。

5 结论

在本文中,我们致力于研究MetaFormer(Transformer的抽象架构)的能力。我们不再局限于token-mixer的设计,而是仅依赖多年前就已存在的最基本或“老式”的token mixer来构建MetaFormer模型,即IdentityFormer、RandFormer、ConvFormer和CAFormer。前两个模型,基于恒等映射和随机混合,展示了MetaFormer的坚实下界及其对token mixer的通用性;后两个模型,基于常规的可分离卷积和香草自注意力,轻易地实现了创纪录的结果。在我们的研究中,我们还发现了一种新的激活函数StarReLU,与GELU相比,它不仅实现了更好的性能,还大大减少了激活函数的浮点运算量(FLOPs)。我们期待MetaFormer在未来工作中找到其更广泛的视觉应用领域,并愉快地邀请读者尝试我们提出的MetaFormer基线。

致谢

本项目得到了新加坡国立大学高级研究与技术创新中心(ARTIC)(项目编号:A-0005947-21-00,项目参考:ECT-RP2)、新加坡教育部学术研究基金一级(WBS:A-0009440-0100)以及新加坡国家研究基金会(NRF)在新加坡人工智能计划(奖项编号:AISG2RP-2021-023)下的支持。余伟豪和王新超感谢TRC计划和GCP研究积分对部分计算资源的支持。我们要感谢独立研究者Fredo Guan和Hugging Face的Ross Wightman将MetaFormer代码合并到pytorch-image-models代码库中。

附录

附录A

Squared ReLU的期望和方差
假设Squared ReLU[41]的输入x服从均值为0、方差为1的正态分布,即x \sim N(0,1),我们有:
E ( x 2 ) = Var ⁡ ( x ) = 1 E ( ( ReLU ⁡ ( x ) ) 2 ) = 1 2 E ( x 2 ) = 0.5 E ( x 4 ) = 1 2 π ∫ − ∞ + ∞ z 4 exp ⁡ ( − z 2 2 ) d z = − 1 2 π ∫ − ∞ + ∞ z 3 d ( exp ⁡ ( − z 2 2 ) ) = ( − z 3 1 2 π exp ⁡ ( − z 2 2 ) ) ∣ − ∞ + ∞ + 3 ∫ − ∞ + ∞ z 2 1 2 π exp ⁡ ( − z 2 2 ) d z = 0 + 3 E ( x 2 ) = 3 E ( ( ReLU ⁡ ( x ) ) 4 ) = 1 2 E ( x 4 ) = 1.5 Var ⁡ ( ( ReLU ⁡ ( x ) ) 2 ) = E ( ( ReLU ⁡ ( x ) ) 4 ) − ( E ( ( ReLU ⁡ ( x ) ) 2 ) ) 2 = 1.5 − 0. 5 2 = 1.25 \begin{aligned} \mathrm{E}\left(x^{2}\right) & =\operatorname{Var}(x)=1 \\ \mathrm{E}\left((\operatorname{ReLU}(x))^{2}\right) & =\frac{1}{2} \mathrm{E}\left(x^{2}\right)=0.5 \\ \mathrm{E}\left(x^{4}\right) & =\frac{1}{\sqrt{2 \pi}} \int_{-\infty}^{+\infty} z^{4} \exp \left(-\frac{z^{2}}{2}\right) d z \\ & =-\frac{1}{\sqrt{2 \pi}} \int_{-\infty}^{+\infty} z^{3} d\left(\exp \left(-\frac{z^{2}}{2}\right)\right) \\ & =\left.\left(-z^{3} \frac{1}{\sqrt{2 \pi}} \exp \left(-\frac{z^{2}}{2}\right)\right)\right|_{-\infty} ^{+\infty}+ \\ 3 & \int_{-\infty}^{+\infty} z^{2} \frac{1}{\sqrt{2 \pi}} \exp \left(-\frac{z^{2}}{2}\right) d z \\ & =0+3 \mathrm{E}\left(x^{2}\right)=3 \\ \mathrm{E}\left((\operatorname{ReLU}(x))^{4}\right) & =\frac{1}{2} \mathrm{E}\left(x^{4}\right)=1.5 \\ \operatorname{Var}\left((\operatorname{ReLU}(x))^{2}\right) & =\mathrm{E}\left((\operatorname{ReLU}(x))^{4}\right)-\left(\mathrm{E}\left((\operatorname{ReLU}(x))^{2}\right)\right)^{2} \\ & =1.5-0.5^{2}=1.25 \end{aligned} E(x2)E((ReLU(x))2)E(x4)3E((ReLU(x))4)Var((ReLU(x))2)=Var(x)=1=21E(x2)=0.5=2π 1+z4exp(2z2)dz=2π 1+z3d(exp(2z2))=(z32π 1exp(2z2)) +++z22π 1exp(2z2)dz=0+3E(x2)=3=21E(x4)=1.5=E((ReLU(x))4)(E((ReLU(x))2))2=1.50.52=1.25
其中, E ( ⋅ ) \mathrm{E}(\cdot) E() Var ⁡ ( ⋅ ) \operatorname{Var}(\cdot) Var()分别表示期望和方差。因此,我们可以得到期望 E ( ( ReLU ⁡ ( x ) ) 2 ) = 0.5 \mathrm{E}\left((\operatorname{ReLU}(x))^{2}\right)=0.5 E((ReLU(x))2)=0.5和方差 Var ⁡ ( ( ReLU ⁡ ( x ) ) 2 ) = 1.25 \operatorname{Var}\left((\operatorname{ReLU}(x))^{2}\right)=1.25 Var((ReLU(x))2)=1.25

附录B

可分离卷积的代码
算法2展示了MobileNetV2[8]中倒置可分离卷积的PyTorch风格代码。

附录C

超参数
在ImageNet-1K[59]上训练的IdentityFormer、RandFormer和PoolFormerV2的超参数如表13所示,ConvFormer和CAFormer的超参数如表14(针对ImageNet-1K的训练)和表15(针对ImageNet-1K的预训练和微调)所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/885763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode每日一题day19(24.9.29)——买票需要的时间

思路:对于位置k在队伍最末尾时,位置k前的人对于某一个人需要等的时间为 ​​​​​​​min(tickets[k],tickets[i]) 对于当前的人前方的的人可以使用上述策略,但对于后方由于当前的人有更高的优先,而导致情况有所不…

51单片机应用开发---keil 创建一个新工程并用Protues 8仿真(以点亮LED为例)

实现目标 1、掌握keil V5软件 创建一个新工程; 2、具体目标:1.会新建一个工程;2.编程实现点亮开发板的LED1. 一、新建工程步骤 1.1 在桌面上新建一个名字为 LED的文件夹 1.2 双击打开Keil uVision5 软件,点击 Project —>…

目标检测技术的发展:从R-CNN、YOLO到DETR、DINO

“深度人工智能”是成都深度智谷科技旗下的人工智能教育机构订阅号,主要分享人工智能的基础知识、技术发展、学习经验等。此外,订阅号还为大家提供了人工智能的培训学习服务和人工智能证书的报考服务,欢迎大家前来咨询,实现自己的…

修改Kali Linux的镜像网站

由于官方的镜像可能会出现连接不上的问题导致无法安装我们所需要的包,所以需要切换镜像站为国内的,以下是一些国内常用的Kali Linux镜像网站,它们提供了与Kali Linux官方网站相同的软件包和资源,但访问速度更快: #官方…

【CKA】二、节点管理-设置节点不可用

2、节点管理-设置节点不可用 1. 考题内容: 2. 答题思路: 先设置节点不可用,然后驱逐节点上的pod 这道题就两条命令,直接背熟就行。 也可以查看帮助 kubectl cordon -h kubectl drain -h 参数详情: –delete-empty…

User-Agent在WebMagic爬虫中的重要性

对于需要从网站上抓取数据的开发者来说,WebMagic是一个强大的工具。它是一个简单灵活的Java爬虫框架,用于抓取网页数据。在爬虫技术中,User-Agent(用户代理)是一个关键的HTTP请求头,它告诉服务器关于客户端…

LeetCode 面试经典150题 50.Pow(x,n)

题目&#xff1a;实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c; &#xff09;。 思路&#xff1a; 代码&#xff1a; class Solution {public double myPow(double x, int n) {double ans 1;long N n;if (N < 0) {N -N;x 1 / x;}…

YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

一、本文介绍 本文记录的是改进YOLOv11的损失函数&#xff0c;将其替换成Shape-IoU。现有边界框回归方法通常考虑真实GT&#xff08;Ground Truth&#xff09;框与预测框之间的几何关系&#xff0c;通过边界框的相对位置和形状计算损失&#xff0c;但忽略了边界框本身的形状和…

机器学习模型评估

前言 承接上篇讲述了机器学习有哪些常见的模型算法&#xff0c;以及适用的场景&#xff0c;本篇将继续讲述如何评估模型。模型评估的目的是选出泛化能力强的模型。泛化能力强表示模型能很好地适用于未知的样本&#xff0c;模型的错误率低、精度高。本文将从评估方法和评估指标…

汽车3d动画渲染选择哪个?选择最佳云渲染解决方案

面临汽车3D动画渲染挑战&#xff1f;选择正确的云渲染服务至关重要。探索最佳解决方案&#xff0c;优化渲染效率&#xff0c;快速呈现逼真动画。 汽车3d动画渲染选择哪个&#xff1f; 对于汽车3D动画渲染&#xff0c;选择哪个渲染器取决于你的项目需求、预算和期望的效果。Ble…

计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

<<机器学习实战>>10-11节笔记:生成器与线性回归手动实现

10生成器与python实现 如果是曲线规律的数据集&#xff0c;则需要把模型变复杂。如果是噪音较大&#xff0c;则需要做特征工程。 随机种子的知识点补充&#xff1a; 根据不同库中的随机过程&#xff0c;需要用对应的随机种子&#xff1a; 比如 llist(range(5)) random.shuf…

Ubuntu下安装向日葵:闪退

下载 https://sunlogin.oray.com/download 初次安装 $ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 234281 个文件和目录。) 准备解压 SunloginClient_15.2.0.63064_amd64.deb ..…

助农小程序|助农扶贫系统|基于java的助农扶贫系统小程序设计与实现(源码+数据库+文档)

助农扶贫系统小程序 目录 基于java的助农扶贫系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 5.1.1 农户管理 5.1.2 用户管理 5.1.3 订单统计 5.2.1 商品信息管理 5.3.1 商品信息 5.3.2 订单信息 5.3.3 商品评价 5.3.4 商品退货 四、数据库设计 1、…

帝都程序猿十二时辰

前言 2019年度国产剧《长安十二时辰》火了&#xff0c;其口碑榜首、节奏紧凑、贴合原著、电影质感&#xff0c;都是这部剧的亮点。而最令人震撼的还是剧中对大唐盛世的还原&#xff0c;长安街坊的市容市貌、长安百姓的生活日常、长安风情的美轮美奂……而关于十二时辰的话题也接…

ubuntu18.04 Anconda安装及使用

1、安装Anaconda 1)下载&#xff1a; 下载链接&#xff1a;https://www.anaconda.com/download#downloads 点击图中Free Download&#xff0c;登录并下在 下载对应版本 2&#xff09;安装 sudo bash Anaconda3-2024.06-1-Linux-x86_64.sh输入后&#xff0c;直接回车安装。 出…

大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【SQL】筛选字符串与正则表达式

目录 语法 需求 示例 分析 代码 语法 SELECT column1, column2, ... FROM table_name WHERE condition; WHERE 子句用于指定过滤条件&#xff0c;以限制从数据库表中检索的数据。当你执行一个查询时&#xff0c;WHERE 子句允许你筛选出满足特定条件的记录。如果记录满…

UE学习篇ContentExample解读------Blueprints Advanced-下

文章目录 总览描述批次阅览2.1 Timeline animation2.2 Actor tracking2.3 Button Trigger using a blueprint interface2.4 Opening door with trigger2.5 Child Blueprints 概念总结致谢&#xff1a; 总览描述 打开关卡后&#xff0c;引入眼帘的就是针对关卡的总体性文字描述&…

五子棋双人对战项目(1)——WebSocket介绍

目录 一、项目介绍 如何实现实时同步对局&#xff1f; 二、WebSocket 1、什么是WebSocket&#xff1f; 2、WebSocket的报文格式 opcode payload len payload data 3、WebSocket握手过程 4、WebSocket代码的简单编写 三、WebSocket 和 HTTP的关系 1、相同点&#xf…