SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型

本文主要是介绍SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自注意力已经成为各种视觉应用中捕获全局上下文的默认选择。然而,相对于图像分辨率来说,它的二次计算复杂性限制了它在实时应用中的使用,尤其是在资源受限的移动设备上的部署。尽管已经提出了混合方法来结合卷积和自注意力的优点以获得更好的速度-精度权衡,但自注意力的昂贵的矩阵乘法操作仍然是一个瓶颈。在这项工作中,我们引入了一种新型的有效加性注意力机制,该机制通过线性元素乘法有效地替换了二次矩阵乘法操作。我们的设计表明,键-值交互可以用一个线性层来替换,而不会牺牲任何精度。与之前的最先进的方法不同,我们有效的自注意力公式使其可以在网络的各个阶段使用。使用我们提出的有效的加性注意力,我们建立了一系列名为“SwiftFormer”的模型,该模型在准确性和移动推理速度方面都达到了最先进水平。我们的较小的版本在iPhone 14上实现了78.5%的ImageNet1K top-1准确率,只有0.8 ms的延迟,与MobileViT-v2相比,它更准确,速度提高了2倍。代码:https://github.com/Amshaker/SwiftFormer。

1、简介

近年来,变压器模型在各种视觉应用中显示出了显著的成功,如分类[9, 10, 23, 24, 44]、检测[2, 28, 33, 58, 61]和分割[4, 40]。然而,由于这些模型的固有复杂性,将这些模型部署到资源有限的移动设备上进行实时应用仍然具有挑战性[20, 29]。具体来说,视觉变压器(ViTs)依赖于全局自注意力,而全局自注意力相对于输入图像分辨率具有二次复杂性,使得在低功耗移动设备上的部署不切实际[31]。因此,卷积神经网络(CNNs)仍然是移动设备上实时部署的首选,主要是因为卷积操作计算效率高[15, 39]。然而,CNN的一个主要限制是它们依赖于局部连接和固定权重,这可能限制了它们适应变输入分辨率和捕获数据中长程依赖性的能力。因此,开发更高效、更灵活的模型,结合CNN和变压器的优点,对于计算资源有限的移动设备尤为重要。

为了实现这一目标,已经提出了几种混合方法,这些方法在高分辨率的早期阶段使用轻量级CNN模块,在低分辨率的后期阶段使用自注意力[20,29,57]。这种方法有效地增加了网络的接收场,并努力在速度和精度之间取得平衡。此外,已经提出了几种不同的高效计算自注意力的变体来降低模型复杂性。其中包括跨特征维度计算注意力以隐式地建模全局上下文[29],在本地窗口内计算注意力[24],在应用自注意力之前对空间特征进行池化处理[10],以及对一定数量的令牌进行稀疏关注[34],等等。

尽管这些方法有效地降低了网络复杂性,但它们仍然涉及效率低下的矩阵乘法操作,这对移动设备的延迟产生显著影响。为了解决这个问题,Mehta等人[31]提出了一种可分离的自注意力机制,用元素乘法操作取代矩阵乘法操作。这是通过将查询投影到上下文分数,然后与键进行元素乘法来计算用于编码全局上下文的上下文向量实现的。

在这项工作中,我们提出了有效的加性注意力机制,以消除计算自注意力时昂贵的矩阵乘法操作的需要。此外,我们提出仅通过查询-键交互然后进行线性变换来计算全局上下文,而不需要显式的键-值交互。这显著降低了计算复杂性,并使我们能够在网络的各个阶段使用所提出的注意力块。我们的贡献如下:

  • 引入了有效的加性注意力机制,这是一种新的计算视觉主干中自注意力的方法,无需昂贵的矩阵乘法操作,显著降低了模型的计算复杂性。
  • 与之前的方法不同,我们提出的有效的注意力设计可以应用于网络的各个阶段,从而实现更有效的上下文信息捕捉,并实现优越的速度-精度权衡。
  • 我们构建了一系列高效通用的分类模型,名为“SwiftFormer”,这些模型利用了我们提出的有效的加性注意力机制。我们的小型模型在iPhone 14上实现了78.5%的ImageNet-1K [8]准确率,同时运行延迟只有0.8 ms。此外,我们的大型模型实现了83.0%的准确率,延迟只有1.9 ms。我们的模型达到了最先进的性能水平,在准确率和延迟之间的权衡上优于最近的MobileViTv2 [31]和EfficientFormer [20](参见图1)。

2. 相关研究

高效的卷积神经网络(CNNs):近年来,为移动视觉应用设计高效的CNNs受到了广泛关注。MobileNet架构[15, 16,39]提出了深度可分离卷积和高效的倒置残差块,以在各种视觉任务上提高性能。其他方法通过利用深度膨胀卷积[32]、通道洗牌和点组卷积[27,59]、网络剪枝[12,50]、低比特宽度[1,17]和神经架构搜索[15,41]来提高效率。基于CNN的方法表现良好、高效且在边缘设备上训练和运行速度快,因此在业界得到了广泛应用。然而,它们在空间上是局部的,缺乏特征之间的全局交互,这严重影响了它们的性能。

高效的Transformer:ViTs[9]已被广泛应用于许多视觉任务中,并且在数据效率[22,44]、Transformer架构[3,20,30,56]和令牌机制[43,52]方面取得了重大进展。减少视觉令牌的数量是Transformer架构中用于高效部署的主要修改。一些方法采用分层次的设计,其中分辨率通过各个阶段逐渐降低,包括降采样技术[10,14,38,40]和金字塔结构[47,49]。最近,一些方法[11,34,37]提出了令牌稀疏化技术,以仅对最具信息量的子集进行编码。

最近已经提出了许多方法来通过计算其近似变体来降低基于Transformer架构中自注意力的二次复杂度,这是计算效率的瓶颈[5,19,29,31,34,45,46]。EdgeViT[34]使用全局稀疏注意力模块来关注少数令牌以提高效率,而[48]对键和值向量进行下采样,从而获得更好的效率和精度权衡。EdgeNeXt[29]采用转置自注意力操作来沿通道维度计算注意力图而不是空间维度,并随后进行令牌混合,以使复杂度与令牌数量呈线性关系。Reformer[19]用局部敏感哈希来替换点积注意力,以将令牌分组并将复杂度从O(n^2)降低到O(n log n)。然而,这种设计仅在较长的序列上才有效,ViTs的情况通常不是这样。LinFormer[46]是一种低秩矩阵分解方法,它将自注意力矩阵近似为低秩矩阵,将复杂度从O(n^2)降低到O(n)。尽管矩阵分解方法在理论上降低了自注意力的复杂度,但它们使用昂贵的投影来进行注意力计算,这可能不会将FLOPs和参数的减少反映到移动平台上的实际速度上。

尽管这些方法具有很大的潜力,并且已经从理论上降低了自注意力的复杂度,但它们不足以减少移动部署的推理速度。由于多头自注意力(MHSA)在前几阶段的复杂度高于最后阶段,EfficientFormer [20]只在最后阶段结合了MHSA,以从高级特征中学习上下文信息,而不会显着增加推理速度。最近,MobileViT-v2 [31]提出了可分离自注意力,使用逐元素操作而不是点积来计算具有线性复杂度的注意力图。与现有方法不同,我们提出了一种一致的混合设计,其中包括高效的加性注意力机制,以线性复杂度对上下文信息进行建模。我们不是使用点积来捕获键、查询和值之间的成对交互,而是使用带可学习注意力权重的逐元素操作来仅对查询和键之间的交互进行建模,从而带来更好的推理速度。

3. 方法

动机:为了推动我们的方法,我们首先区分在为资源受限的移动设备设计高效且准确的方案时要考虑的三个期望特性。
高效的全局上下文建模:如前所述,大多数现有方法要么采用标准的MHSA或其近似变体来学习全局上下文。然而,它们在资源受限设备上的运行速度很难与MobileNets相媲美。这可能是由于这些方法在注意力计算期间进行计算密集型乘法操作,或依赖于先进重塑和索引操作。例如,最近的MobileViT-v2 [31]比MobileNetv2 [39]慢2倍。而不是使用矩阵乘法,我们提出使用高效的加性注意力设计来编码全局上下文,以减少与令牌数量相关的操作。预计这将有助于以相当的速度和模型大小进行操作,同时比MobileNets获得更高的精度。

重新思考键-值交互:除了注意力计算期间的乘法操作外,最近在NLP领域还探索了加性注意力 [51]。然而,在标准形式下,它采用三步处理来建模查询、键和值之间的交互。每个步骤都会影响后续步骤,因此需要顺序处理。在这里,我们重新思考视觉任务中的加性注意力,通过减轻计算键-值之间明确交互的需要来减轻这一点。我们认为消除键-值交互并用简单的线性变换替换它们可以更好地编码上下文表示。我们的设计只对全局查询和键交互进行编码以学习全局上下文信息,然后通过线性变换来计算全局上下文感知注意力权重。

一致混合设计:大多数现有作品在最后阶段采用MHSA或其近似变体,避免在早期阶段使用它。这是因为MHSA的计算复杂度随着令牌长度的增加而呈二次增长,使得在初始阶段加入变得不切实际。这种限制增加了设计的复杂性,并要求仔细选择可以应用MHSA的阶段。相比之下,我们提出的SwiftFormer模块具有与令牌长度成线性关系的复杂度,并且可以融入所有阶段以在每个尺度上学习一致的全局上下文。这种一致性提高了模型性能,并使其更具一般性和可扩展性,适用于高分辨率图像。

3.1.注意力模块概述

视觉Transformer模型基于自注意力(请参阅图2(a)),它可以有效地建模输入令牌之间的交互。具体来说,自注意力的输入是 x \mathbf{x} x,其中 x ∈ R n × d \mathbf{x} \in \mathbb{R}^{n \times d} xRn×d,包括 n 个具有 d 维嵌入向量的令牌。输入 x \mathbf{x} x 通过三个矩阵 W Q 、 W K 和 W V \mathbf{W}_{\mathbf{Q}}、\mathbf{W}_{\mathbf{K}} 和 \mathbf{W}_{\mathbf{V}} WQWKWV 投影得到查询( Q \mathbf{Q} Q)、键( K \mathbf{K} K)和值( V \mathbf{V} V)。每个自注意力层包括 h 个头,使模型能够关注输入的不同视图。自注意力的可描述为:
x ^ = Softmax ⁡ ( Q ⋅ K ⊤ d ) ⋅ V .  (1) \hat{\mathbf{x}}=\operatorname{Softmax}\left(\frac{\mathbf{Q} \cdot \mathbf{K}^{\top}}{\sqrt{d}}\right) \cdot \mathbf{V} \text {. } \tag{1} x^=Softmax(d QK)V(1)

在计算过程中,注意力分数通过点积操作计算出每对令牌之间的交互作用,然后通过归一化处理和Softmax函数进行归一化,以加权令牌之间的相互作用。最后,通过点积操作将加权相互作用与 V \mathbf{V} V相乘以产生最终加权输出。总体而言,自注意力的复杂度为 O ( n 2 ⋅ d ) O(n^{2}·d) O(n2d),其中n是令牌数量,d是隐藏维度。随着令牌数量的增加, Q ⋅ K ⊤ \mathbf{Q}·\mathbf{K}^{\top} QK的计算和内存需求呈二次增长,导致推断速度变慢且内存使用率较高,使得在长序列中实时运行不切实际。

为了缓解这个问题,[29]提出了转置自注意力(参见图2(b)),以将复杂度从二次降低到与令牌数量成线性关系。在这里,点积操作应用于通道维度而不是空间维度。这允许模型学习具有隐式上下文表示的特征图。注意可以描述为:
x ^ = V ⋅ Softmax ⁡ ( Q ⊤ ⋅ K d ) . (2) \hat{\mathbf{x}}=\mathbf{V} \cdot \operatorname{Softmax}\left(\frac{\mathbf{Q}^{\top} \cdot \mathbf{K}}{\sqrt{d}}\right) . \tag{2} x^=VSoftmax(d QK).(2)

转置自注意力具有计算复杂度O(n·d²)。尽管该复杂度与令牌数量n成线性关系,但相对于特征维度d仍然呈二次关系。此外,查询和键矩阵之间仍然使用点积运算。

可分离自注意力机制(见图2(c))旨在解决标准自注意力的瓶颈问题。在这里,查询( Q \mathbf{Q} Q)、键( K \mathbf{K} K)和值( V \mathbf{V} V)之间的交互作用使用逐元素运算进行编码。首先,将查询矩阵 Q \mathbf{Q} Q投影以产生维度为 n×1 的向量 q \mathbf{q} q,然后将其输入到 Softmax 中以生成上下文分数,该分数捕捉每个查询元素的重要性。然后,将上下文分数与键矩阵 K \mathbf{K} K相乘并进行池化以计算上下文向量,该向量编码上下文信息。最后,将上下文向量与值矩阵 V \mathrm{V} V 逐元素相乘以传播上下文信息并产生最终输出 x ^ \hat{\mathbf{x}} x^。可以将其总结为:
x ^ = V ∗ ∑ K ∗ Softmax ⁡ ( q ) . (3) \hat{\mathbf{x}}=\mathbf{V} * \sum \mathbf{K} * \operatorname{Softmax}(\mathbf{q}) . \tag{3} x^=VKSoftmax(q).(3)

在这里,*表示逐元素相乘操作。

3.2. 高效的加性注意力

自然语言处理中的典型加性注意力机制通过利用令牌之间的逐元素相乘来捕获全局上下文,而不是使用点积操作。它基于三个注意力组件( Q , K , V \mathbf{Q},\mathbf{K} ,V QKV)之间的相互作用对输入序列的上下文信息的相关性分数进行编码。相反,我们发现可以去除键值交互而不会牺牲性能,并且仅关注通过融入一个线性投影层来有效编码查询-键交互就足以学习令牌之间的关系(参见图2(d))。这种方法被命名为高效的加性注意力,具有更快的推理速度,并产生更具鲁棒性的上下文表示,如在图像分类、目标检测和分割任务上的性能表现(第4节)。具体来说,输入嵌入矩阵x通过两个矩阵 W q 和 W k \mathbf{W}_{\mathbf{q}}和\mathbf{W}_{\mathbf{k}} WqWk转换为查询(Q)和键(K),其中 Q 和 K ∈ R n × d , W q 和 W k ∈ R d × d \mathbf{Q}和\mathbf{K} \in \mathbb{R}^{n \times d},\mathbf{W}_{\mathbf{q}}和\mathbf{W}_{\mathbf{k}} \in \mathbb{R}^{d \times d} QKRn×dWqWkRd×d。接下来,查询矩阵\mathbf{Q}乘以可学习的参数向量 w a ∈ R d \mathbf{w}_{a} \in \mathbb{R}^{d} waRd以学习查询的注意力权重,生成全局注意力查询向量 α ∈ R n \alpha \in \mathbb{R}^{n} αRn,如下所示:
α = Q ⋅ w a / d (4) \alpha=\mathbf{Q} \cdot \mathbf{w}_{a} / \sqrt{d} \tag{4} α=Qwa/d (4)

随后,根据所学习的注意力权重对查询矩阵进行池化,得到单个全局查询向量 q ∈ R d \mathbf{q} \in \mathbb{R}^{d} qRd ,如下所示:
q = ∑ i = 1 n α i ∗ Q i . (5) \mathbf{q}=\sum_{i=1}^{n} \alpha_{i} * \mathbf{Q}_{\mathbf{i}} . \tag{5} q=i=1nαiQi.(5)

接下来,全局查询向量 q ∈ R d \mathbf{q} \in \mathbb{R}^{d} qRd 和键矩阵 K ∈ R n × d \mathbf{K} \in \mathbb{R}^{n \times d} KRn×d 之间使用逐元素乘法进行编码以形成全局上下文( R n × d \mathbb{R}^{n \times d} Rn×d)。该矩阵与MHSA中的注意力矩阵相似,捕获每个令牌的信息,并具有灵活的学习输入序列中相关性的能力。然而,与MHSA相比,它的计算成本相对较低,并且与令牌长度呈线性复杂度。受Transformer架构的启发,我们采用线性变换层对查询-键交互进行编码以学习令牌的隐藏表示。高效加性注意力的输出 \hat{\mathrm{x}} 可以描述为:

x ^ = Q ^ + T ( K ∗ q ) . (6) \hat{\mathbf{x}}=\hat{\mathbf{Q}}+\mathbf{T}(\mathbf{K} * \mathbf{q}) . \tag{6} x^=Q^+T(Kq).(6)

其中 \hat{\mathbf{Q}} 表示归一化后的查询矩阵, \mathbf{T} 表示线性变换。

3.3. SwiftFormer 架构

我们的 SwiftFormer 基于最近提出的 EfficientFormer [20]。EfficientFormer 的主要思想是引入基于 PoolFormer [53] 的 4D MetaBlocks,以有效地学习局部表示,同时使用基于自注意力的 3D MetaBlocks 来编码全局上下文。然而,EfficientFormer 的性能受到两个设计选择的限制。首先,它使用无效的令牌混合,其次,由于 MHSA 的二次复杂性,它只在最后阶段使用 3D MetaBlocks。这可能导致不一致和不足的上下文表示。为了解决这些限制,我们的 SwiftFormer 通过使用简单但有效的 Conv. Encoder 来改进令牌混合。此外,我们引入了有效的加性注意力模块,可以纳入所有阶段(第3.2节)。这有助于更加一致地学习局部-全局表示。值得注意的是,EfficientFormer 采用以延迟为导向的瘦身方法为其模型变体获得最佳配置,从而最大限度地提高速度。相反,我们的 SwiftFormer 模型是在不使用任何神经架构搜索的情况下构建的。

图3显示了我们提出的架构的概览。主要组件为:(i)有效的Conv. Encoder和(ii)SwiftFormer Encoder。与其他混合设计不同,该架构是一致的,所有阶段都有Conv. Encoder和SwiftFormer Encoder。我们的架构在四个阶段中提取四种不同尺度的分层特征。在网络开始时,尺寸为 H × W × 3 的输入图像通过 Patch Embedding 层进行处理,使用两个 3 × 3 的卷积,步长为 2,结果为 H 4 × W 4 × C 1 \frac{H}{4} × \frac{W}{4} × C_{1} 4H×4W×C1 特征图。然后,输出特征图被送入第一阶段,该阶段首先使用 Conv. Encoder 提取空间特征,然后使用 SwiftFormer 学习局部-全局信息。在两个连续阶段之间,存在一个下采样层,以增加通道维度并减小令牌长度。接下来,生成的feature map依次送入第二、第三和第四阶段的结构中,分别产生 H 8 × W 8 × C 2 、 H 16 × W 16 × C 3 和 H 32 × W 32 × C 4 \frac{H}{8} × \frac{W}{8} × C_{2}、\frac{H}{16} × \frac{W}{16} × C_{3} 和 \frac{H}{32} × \frac{W}{32} × C_{4} 8H×8W×C216H×16W×C332H×32W×C4 维度的特征图。因此,每个阶段在不同的输入图像尺度上学习局部-全局特征,这使得网络具有丰富的表示能力。

有效Conv. Encoder:基准EfficientFormer [20]采用3 × 3平均池化层作为本地令牌混合器,类似于PoolFormer [53]。虽然PoolFormer层以其快速的推断速度而闻名,但用深度卷积替换它们并不会增加延迟。此外,它在不增加参数和延迟的情况下提高了性能。具体来说,特征图 X i \mathcal{X}_{i} Xi被送入3 × 3深度卷积(DWConv)后进行批量归一化(BN)。然后,将产生的特征馈入两个逐点卷积( ( C o n v 1 ) \left(\mathrm{Conv}_{1}\right) (Conv1))以及GeLU激活。最后,我们加入一个跳级连接以使信息在网络中流动。Conv. Encoder定义为:
X ^ i = Conv ⁡ 1 ( Conv ⁡ 1 , G ( DWConv ⁡ B N ( X i ) ) ) + X i . (6) \hat{\mathcal{X}}_{i}=\operatorname{Conv}_{1}\left(\operatorname{Conv}_{1, G}\left(\operatorname{DWConv}_{B N}\left(\mathcal{X}_{i}\right)\right)\right)+\mathcal{X}_{i} . \tag{6} X^i=Conv1(Conv1,G(DWConvBN(Xi)))+Xi.(6)
其中 X i \mathcal{X}_{i} Xi指输入特征, Conv ⁡ 1 , G \operatorname{Conv}_{1, G} Conv1,G指逐点卷积后 G e L U , D W C o n v B N GeLU,DWConv\ _{B N} GeLUDWConv BN指深度卷积后批量归一化, X ^ i \hat{\mathcal{X}}_{i} X^i指输出特征图。

SwiftFormer Encoder:该模块经过精心设计,可高效地编码每个阶段中丰富的局部-全局表示。如图3所示,SwiftFormer Encoder的初始模块由3 × 3深度卷积后逐点卷积组成,使该模块能够学习空间信息并编码局部表示。然后,产生的特征图被送入高效加性注意力块,旨在学习输入尺度的每个尺度的上下文信息。最后,输出特征图被送入一个线性块,该块由两个1×1逐点卷积层、批量归一化和GeLU激活组成,以生成非线性特征。SwiftFormer Encoder的描述如下:
X ^ i = Conv ⁡ 1 ( DWConv ⁡ B N ( X ^ i ) ) , X ^ i = QK ⁡ ( X ^ i ) + X ^ i , X ^ i + 1 = Conv ⁡ 1 ( Conv ⁡ B N , 1 , G ( X ^ i ) ) + X ^ i . (7) \begin{array}{c} \hat{\mathcal{X}}_{i}=\operatorname{Conv}_{1}\left(\operatorname{DWConv}_{B N}\left(\hat{\mathcal{X}}_{i}\right)\right), \\ \hat{\mathcal{X}}_{i}=\operatorname{QK}\left(\hat{\mathcal{X}}_{i}\right)+\hat{\mathcal{X}}_{i}, \\ \hat{\mathcal{X}}_{i+1}=\operatorname{Conv}_{1}\left(\operatorname{Conv}_{B N, 1, G}\left(\hat{\mathcal{X}}_{i}\right)\right)+\hat{\mathcal{X}}_{i} . \end{array} \tag{7} X^i=Conv1(DWConvBN(X^i)),X^i=QK(X^i)+X^i,X^i+1=Conv1(ConvBN,1,G(X^i))+X^i.(7)

其中\operatorname{Conv}_{B N, 1, G}指批量归一化后1 × 1的卷积层再接着GeLU,而QK指高效加性注意力(详见第6节)。

4、实验

我们在四个下游任务上评估了SwiftFormer模型:ImageNet-1K上的分类[8],MS-COCO 2017上的对象检测和实例分割[21],以及ADE20K上的语义分割[60]。

4.1. 实现细节

ImageNet-1K[8]:我们所有的模型都是在ImageNet-1K数据集上从头开始训练300个epoch,使用AdamW优化器[26]和余弦学习率调度器,初始学习率为1e−3。我们使用5个周期的线性热身。我们使用224×224的图像分辨率进行训练和测试。根据[20]的训练配方,我们使用相同的教师模型进行蒸馏[36]。实验使用PyTorch 1.12[35],使用8个NVIDIA A100 gpu。使用iPhone 14 (iOS 16)测量延迟,使用A100 40 GB GPU测量吞吐量。对于延迟测量,我们使用CoreML库[6]编译模型,并以批大小为1执行推理。对于A100上的吞吐量,使用128的批大小执行推理。

MS-COCO 2017[21]:我们使用我们的ImageNet预训练模型作为Mask-RCNN框架的主干,在MS-COCO 2017数据集上进行对象检测和实例分割。该数据集包含118K张训练图像和5K张验证图像。接下来[20],我们使用AdamW优化器对图像大小为1333 × 800,批大小为32的12个epoch的模型进行了微调。我们使用2e-4的学习率,并根据平均精度(mAP)报告检测和实例分割的性能。

ADE20K:该数据集包含20K训练和2K验证图像,并包含150个类别用于场景解析。类似于[20],我们使用在ImageNet上预训练的模型来提取图像特征,并使用语义FPN [18]作为解码器进行分割。该模型以512 × 512的图像大小训练40K次迭代,使用批量大小为32的AdamW优化器。我们使用多项学习率调度,初始学习率为2e−4。我们报告语义分割性能的平均交并比(mIoU)。

4.2. 基线比较

表1说明了将我们提出贡献整合到EfficientFormer-L1 [20]模型的基线模型中对ImageNet-1K top-1准确率和推理速度的影响。第一行展示了基线模型的结果,该模型只包括网络最后一个阶段的基于自注意力的Transformer块,其在iPhone 14移动设备上的延迟为1.1 ms,top-1准确率为79.2%。第二行将基线模型中的池混合器替换为本文提出的Conv. Encoder,在保持相同延迟的同时,性能提高到79.9%。第三行将基线模型中Transformer块中的自注意力替换为我们提出的高效加性注意力模块。尽管性能下降了0.2%,但推理速度提高了0.1 ms,并且该模型具有与令牌数量线性相关的复杂性。这使得我们能够将基于高效加性注意力的SwiftFormer Encoder整合到所有阶段中,并实现了更好的性能,同时保持与基线相同的推理速度(第一行与最后一行)。

4.3. 图像分类

表2给出了所提出的SwiftFormer模型(XS、S、L1和L3)与之前最先进的ConvNets、基于transformer的模型和混合模型的比较。所提出模型设置了新的最先进的结果,并在所有模型变体中都优于最近引入的EfficientFormer[20]和MobileViT-v2[31]。综合评估表明,所提出的模型在移动设备上的准确性和延迟方面都具有优势。

与ConvNets的比较:SwiftFormer模型在top-1精度方面明显超过了广泛使用的轻量级cnn对应模型,同时在iPhone 14移动设备上的运行速度比高度优化的MobileNet-v2和MobileNetv3更快。具体来说,我们的SwiftFormer-XS的运行速度比MobileNet-v2×1.0和MobileNet-v3-Large×0.75快0.1 ms,并实现了更好的top-1准确率,分别为3.9%和2.4%。SwiftFormer-S的运行速度比EfficientNet-b0[42]快1.6倍,top-1准确率提高了1.4%。此外,SwiftFormer-L3在top1精度上分别比ResNet-50和ConvNeXt-T提高了4.5%和0.9%,同时运行的延迟与ResNet-50相同,比ConvNeXt-T快1.3倍。这表明,所提出的SwiftFormer模型在所提出的高效附加注意力支持下,在移动设备上比轻量级CNN模型运行得更快,并实现了卓越的性能。最近对基于cnn的模型进行的设备级优化,如对具有批量规范化和非线性的卷积的专用硬件实现,可能有助于A100上完全基于cnn的模型的高吞吐量。

与transformer模型的比较:尽管transformer模型在准确性方面通常优于基于cnn的模型,但在资源受限的移动设备上运行时,它们往往存在高延迟。例如,DeiT-S的模型大小与ResNet50相似,其top-1准确率更高,为3.3%,但ResNet50在iPhone 14移动设备上的运行速度约为5.2倍。相比之下,SwiftFormer-L3模型的准确率比DeiT-S高1.2%,同时运行速度与ResNet-50相同。此外,我们的SwiftFormer-S模型在iPhone 14移动设备上的运行速度大约是DeiT-T的4.7倍,准确率提高了6.3%。

与混合模型的比较:尽管大多数现有混合方法相对于其轻量级CNN对应方法在准确性方面取得了更高的准确性,但由于多头自注意力的二次复杂性,它们在延迟方面仍然不如完全基于CNN的模型。例如,EdgeViT-XXS相对于MobileNet-v3-Large×0.75的运行速度大约慢2倍。另一方面,与轻量级CNN相比,我们的SwiftFormer-XS具有更好的延迟,并且比EdgeViT-XXS和MobileViT-XS大约快2倍,整体top-1准确率分别高1.3%和0.9%。此外,我们的SwiftFormer-L1模型比最先进的MobileViT-v2×1.5快3倍,top-1准确率高0.5%。我们的SwiftFormer-L3模型达到83.0%的top-1准确率,运行速度为1.9 ms,比MobileViT-v2×2.0快2.6倍,绝对准确率提高1.8%。

4.4. 目标检测和实例分割

表3比较了不同轻量级骨干网Mask-RCNN的目标检测和实例分割结果。我们的SwiftFormer-L1骨干网取得了41.2的AP box,比轻量级的ResNet18和PoolFormer-S12骨干网分别高出7.2和3.9分。此外,它的表现还比之前的最佳EfficientFormer-L1骨干网高出3.3 AP box。对于实例分割,我们的方法取得了38.1的AP mask分数,比之前的最佳方法高出2.7分。对于SwinftFormerL3骨干网,也观察到类似趋势,它在AP box和mask上分别比之前的最佳EfficientFormer-L3骨干网高出1.3点和1.0点。下游检测和实例分割任务的改进说明了SwiftFormer骨干网模型对于密集预测任务的有效性。

4.5. 语义分割

表3显示了基于SwiftFormer backbone的模型与之前提出的backbone的语义分割结果。使用SwiftFormer-L1实现了对联合的41.4%的平均交叉分数,超过了ResNet18 8.5%, PoolFormer-S12 4.2%,和最先进的EfficientFormer-L1 2.5%。同样,基于SwiftFormer-L3 backbone的分割模型达到了43.9 mIoU,超过了之前的所有方法。

5. 结论

由于Transformer中自注意力的有效使用,它们在视觉应用中已经变得流行。然而,由于自注意力的二次计算性质,它们在移动视觉应用中的使用具有挑战性,因为这在移动设备上计算代价昂贵。为了解决这个问题,已经提出了许多混合方法和自注意力的有效变体。在这项工作中,我们提出了一种新的有效加性注意力,用元素乘法取代昂贵的矩阵乘法操作,并消除了显式的键-值交互。我们提出的注意力与输入令牌线性相关,并且可以用于网络的各个阶段。我们在图像分类、目标检测和分割基准测试中展示了最佳结果。

这篇关于SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/216091

相关文章

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像