EfficientViT: 高效视觉transformer与级联组注意力

2023-10-28 16:59

本文主要是介绍EfficientViT: 高效视觉transformer与级联组注意力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 摘要
  • 1、简介
  • 2、用视觉transformer加速
    • 2.1. 内存效率
    • 2.2. 计算效率
    • 2.3. 参数效率
  • 3、高效视觉Transformer
    • 3.1、EfficientViT的构建块
    • 3.2、EfficientViT网络架构
  • 4、实验
    • 4.1、实现细节
    • 4.2、ImageNet上的结果
    • 4.3、迁移学习结果
    • 4.4、 消融实验
  • 5、相关工作
  • 6、结论

摘要

2305.07027.pdf (arxiv.org)

由于视觉transformers具有高度的模型能力,因此它们在视觉任务上取得了巨大的成功。然而,这种出色的性能同时也伴随着沉重的计算成本,使得它们不适合用于实时应用。在这篇文章中,我们提出了一种名为EfficientViT的高效transformers系列。我们发现,现有transformer模型的运行速度通常受到内存效率低下的操作的限制,特别是多头自注意力机制(MHSA)中的张量重塑和逐元素函数。因此,本文设计了一种新的夹层布局的构建块,即在高效的FFN层之间使用单一的内存bound MHSA,在提高内存效率的同时增强了信道通信。此外,我们还发现,不同的注意力头产生的注意力图之间具有很高的相似性,这导致了计算冗余。为了解决这个问题,我们提出了一种级联组注意力模块,它以不同的方式将全部特征分割并输入到注意力头中,这不仅节省了计算成本,而且提高了注意力的多样性。全面的实验结果表明,EfficientViT比现有的高效模型表现得更出色,在速度和精度之间达到了良好的平衡。例如,我们的EfficientViT-M5在准确率上超过了MobileNetV3-Large 1.9%,同时在Nvidia V100 GPU和Intel Xeon CPU上的吞吐量分别提高了40.4%和45.2%。与最近的的高效模型MobileViT-XXS相比,EfficientViT-M2在准确率上提高了1.8%,同时在GPU / CPU上的运行速度提高了5.8×/3.7×,并且在转换为ONNX格式时速度提高了7.4×。相关的代码和模型可以在https://github.com/microsoft/Cream/tree/main/EfficientViT获取。

1、简介

由于视觉transformers(ViTs)具有高度的模型能力和出色的性能表现,它们在计算机视觉领域中引起了极大的热潮[18, 44, 69]。然而,不断提高的准确率是以模型尺寸增加和计算开销增大为代价的。例如,SwinV2使用了3.0B个参数,而V-MoE使用了14.7B个参数,在ImageNet上达到了当前最佳的性能表现[17]。如此大的模型尺寸以及伴随而来的沉重的计算成本使得这些模型不适合具有实时要求的应用场景[40, 78, 86]。

最近有一些工作设计了轻量级和高效的视觉transformer模型[9,19,29,49,50,56,79,81]。然而,这些方法中的大多数旨在减少模型参数或浮点运算次数(Flops),它们是衡量速度的间接指标,并不能反映模型的的实际推理吞吐量。例如,MobileViT-XS [50]使用700M Flops,在Nvidia V100 GPU上比使用1,220M Flops的DeiT-T [69]慢很多。尽管这些方法已经通过更少的Flops或参数取得了良好的性能,但与标准的同构或层次转换器(例如DeiT [69]和Swin [44])相比,它们中的许多并没有显示出明显的时钟速度优势,并且并没有得到广泛应用。

为了解决这个问题,在本文中,我们探索如何让视觉transformer更快,旨在找到设计高效的transformer架构的原理。基于流行的视觉transformers DeiT [69]和Swin [44],我们系统地分析了影响模型推理速度的三个主要因素,包括内存访问、计算冗余和参数使用。特别是,我们发现transformer模型的运行速度通常受到内存限制。换句话说,内存访问延迟阻碍了GPU/CPU计算能力的充分利用[21, 32, 72],对transformer的运行时间产生了极为负面的影响[15, 31]。最内存效率低下的操作是多头自注意力(MHSA)中的频繁张量重塑和逐元素函数。我们观察到,通过适当调整MHSA层和前馈网络(FFN)层之间的比率,可以显著减少内存访问时间,同时不损害性能。此外,我们发现一些注意力头倾向于学习相似的线性投影,导致注意力图中的冗余。分析表明,通过向它们提供不同的特征来显式地分解每个头的计算,可以缓解这个问题,同时提高计算效率。此外,现有轻量级模型往往忽略了不同模块中的参数分配,因为它们主要遵循标准transformer模型[44,69]的配置。为了提高参数效率,我们使用结构化剪枝[45]来识别最重要的网络组件,并总结了模型加速的参数重新分配的经验指南。

根据分析和研究结果,我们提出了一系列名为EfficientViT的内存高效transformer模型。具体而言,我们设计了一个具有夹心布局的新块来构建模型。夹心布局块在FFN层之间应用单一的内存受限MHSA层。这减少了MHSA中内存受限操作引起的时间成本,并应用了更多的FFN层,以允许不同通道之间的通信,从而更具内存效率。然后,我们提出了一个新的级联组关注(CGA)模块来提高计算效率。核心思想是增强输入到注意力头的特征的多样性。与先前使用相同特征的所有头部的自注意力相比,CGA将不同的输入分割馈送到每个头部,并将输出特征级联到头部。这个模块不仅减少了多头注意力中的计算冗余,还通过增加网络深度提高了模型容量。最后但同样重要的是,我们通过扩展关键网络组件(如值投影)的通道宽度,同时缩小FFN中的隐藏维度等不太重要的组件,来重新分配参数。这个重新分配最终提高了模型参数的效率。

在这里插入图片描述

实验证明,我们的模型在速度和准确性方面均明显优于现有的高效CNN和ViT模型,如图1所示。例如,我们的EfficientViT-M5在Nvidia V100 GPU上以每秒10,621张图像的吞吐量获得了77.1%的ImageNet top-1准确性,在Intel Xeon E5-2690 v4 CPU @ 2.60GHz上则为每秒56.8张图像,准确性优于MobileNetV3-Large [26] 1.9%,GPU推理速度提高了40.4%,CPU速度提高了45.2%。此外,EfficientViT-M2获得了70.8%的准确性,超越了MobileViT-XXS [50] 1.8%,在GPU/CPU上运行速度分别提高了5.8倍和3.7倍,并在转换为ONNX [3]格式时提高了7.4倍。当部署到移动芯片上,例如iPhone 11中的Apple A13 Bionic芯片上,EfficientViT-M2模型比MobileViT-XXS [50]在CoreML [1]上运行快2.3倍。

总结一下,这项工作的贡献有两个方面:

  1. 我们对影响视觉transformer推理速度的因素进行了系统分析,并得出了一组有效模型设计准则。
  2. 我们设计了一系列新的视觉transformer模型,它们在效率和准确性之间取得了良好的平衡。这些模型还在多种下游任务上展现出良好的迁移能力。

2、用视觉transformer加速

在这一节中,我们从三个角度探讨如何提高视觉transformer的效率:内存访问、计算冗余和参数使用。我们试图通过经验研究来确定潜在的速度瓶颈,并总结有用的设计准则。

2.1. 内存效率

内存访问开销是影响模型速度的关键因素[15,28,31,65]。在transformer中有许多运算操作[71],如频繁的重塑、逐元素相加和归一化,这些操作在内存上效率低下,需要耗费时间进行跨不同内存单元的访问,如图2所示。尽管已经提出了一些方法来解决这个问题,例如简化标准softmax自注意力计算的稀疏注意力[34, 57, 61, 75]和低秩逼近[11,51,74],但它们通常会以准确性下降和加速有限的代价为代价。
在这里插入图片描述

在这项工作中,我们通过减少内存效率低下的层来降低内存访问成本。最近的研究发现,内存效率低下的操作主要位于MHSA层,而不是FFN层[31, 33]。然而,大多数现有的ViT模型[18, 44, 69]在这两种层中使用了相等数量的操作,这可能无法实现最佳效率。因此,我们探索了在具有快速推理的小型模型中MHSA层和FFN层的最佳分配。具体来说,我们将Swin-T [44]和DeiT-T [69]缩小到具有1.25×和1.5×更高推理吞吐量的几个小型子网络中,并比较具有不同比例MHSA层的子网络的性能。如图3所示,具有20%-40% MHSA层的子网络往往具有更好的准确性。这种比例远小于采用50% MHSA层的典型ViT模型。此外,我们测量了内存绑定操作的时间消耗,以比较内存访问效率,包括重塑、逐元素相加、复制和归一化。在具有20% MHSA层的Swin-T-1.25×中,内存绑定操作占总运行时间的44.26%。这一观察也适用于DeiT和具有1.5×加速的较小模型。这表明,适当减少MHSA层的利用率可以提高内存效率,同时提高模型性能。

在这里插入图片描述

2.2. 计算效率

MHSA将输入序列嵌入到多个子空间(头部)中,并分别计算注意力图,已被证明在提高性能方面是有效的[18, 69, 71]。然而,注意力图的计算成本很高,研究表明其中许多并不是至关重要的[52, 73]。为了节省计算成本,我们探索了如何在小型ViT模型中减少冗余的注意力。我们训练了宽度缩小的Swin-T [44]和DeiT-T [69]模型,具有1.25×的推理速度提升,并测量了每个头部与每个块内其余头部的最大余弦相似度。从图4中,我们观察到在注意力头之间存在高度相似性,特别是在最后的块中。这一现象表明,许多头部学习了相似的完整特征的投影,并引起了计算冗余。为了明确地鼓励头部学习不同的模式,我们采用了一种直观的方法,即只将每个头部馈送给完整特征的一个分割,这类似于[10, 87]中的组卷积的思想。我们训练了带有修改后的MHSA的缩小模型的变种,并在图4中计算了注意力相似性。结果表明,在不同的头上使用不同的特征通道分割,而不是像MHSA那样在所有头上使用相同的完整特征,可以有效地减少注意力计算冗余。

在这里插入图片描述

2.3. 参数效率

典型的ViT主要继承了自NLP变换器[71]的设计策略,例如,在Q、K、V投影中使用等宽度,逐渐增加头部数量,并在FFN中将扩展比设置为4。对于轻量级模型,这些组件的配置需要经过精心重新设计[7, 8, 39]。受[45, 82]的启发,我们采用了Taylor结构剪枝[53]来自动找到Swin-T和DeiT-T中的重要组件,并探索参数分配的基本原则。剪枝方法在一定资源限制下移除不重要的通道,保留最关键的通道以最大程度地保持准确性。它使用梯度和权重的乘积作为通道重要性,这近似表示了在移除通道时的损失波动[38]。

图5中绘制了剩余输出通道与输入通道之间的比率,同时也给出了未剪枝模型中的原始比率作为参考。可以观察到:1)前两个阶段保留了更多的维度,而最后一个阶段保留的维度要少得多;2)Q、K和FFN的维度被大幅剪裁,而V的维度几乎保持不变,只是在最后几个块中才有所减少。这些现象表明,1)典型的通道配置,即每个阶段加倍通道[44]或对所有块使用等效通道[69],可能会在最后几个块中产生大量的冗余;2)当Q、K与V具有相同维度时,Q、K的冗余要比V大得多,V更倾向于具有相对较大的通道,接近输入嵌入维度。

3、高效视觉Transformer

根据上述分析,在本节中,我们提出了一种名为EfficientViT的分层模型,该模型具有快速推断能力。其体系结构概述如图6所示。
在这里插入图片描述

3.1、EfficientViT的构建块

我们提出了一种新的视觉transformer的高效构建块,如图6(b)所示。它由一个内存高效的夹层布局、一个级联组注意力模块和一个参数重新分配策略组成,分别关注于从内存、计算和参数方面提高模型的效率。

夹心布局。为构建一个内存高效的块,我们提出了一种夹心布局,它使用了更少的内存受限的自注意层和更具内存效率的FFN层进行通道通信。具体而言,它应用一个自注意层 $\Phi_{i}^{\mathrm{A}} $用于空间混合,位于FFN层 Φ i F \Phi_{i}^{\mathrm{F}} ΦiF之间。计算可以表达为:
X i + 1 = ∏ N Φ i F ( Φ i A ( ∏ N Φ i F ( X i ) ) ) , (1) X_{i+1}=\prod^{\mathcal{N}} \Phi_{i}^{\mathrm{F}}\left(\Phi_{i}^{\mathrm{A}}\left(\prod^{\mathcal{N}} \Phi_{i}^{\mathrm{F}}\left(X_{i}\right)\right)\right), \tag{1} Xi+1=NΦiF(ΦiA(NΦiF(Xi))),(1)

其中 X i X_{i} Xi是第 i 个块的完整输入特征。在单个自注意层之前和之后,该块通过 N \mathcal{N} N 个FFN将 X i X_{i} Xi转化为 X i + 1 X_{i+1} Xi+1。这种设计降低了模型中自注意层引起的内存时间消耗,并应用了更多的FFN层,以有效实现不同特征通道之间的通信。我们还在每个FFN之前应用了一个额外的token交互层,使用深度卷积(DWConv)[27]。它引入了局部结构信息的归纳偏差,以增强模型的能力[14]。

级联组注意力。在MHSA中,注意力头冗余是一个严重的问题,导致计算效率低下。受到高效CNNs中组卷积的启发[10, 37, 64, 87],我们提出了一种新的视觉变换器注意力模块,称为级联组注意力(CGA)。它将每个头部与完整特征的不同分割连接起来,因此明确地将注意力计算分解到各个头部。形式上,这个注意力可以表示为:
X ~ i j = Attn ⁡ ( X i j W i j Q , X i j W i j K , X i j W i j V ) X ~ i + 1 = Concat ⁡ [ X ~ i j ] j = 1 : h W i P (2) \begin{aligned} \widetilde{X}_{i j} & =\operatorname{Attn}\left(X_{i j} W_{i j}^{\mathrm{Q}}, X_{i j} W_{i j}^{\mathrm{K}}, X_{i j} W_{i j}^{\mathrm{V}}\right) \\ \widetilde{X}_{i+1} & =\operatorname{Concat}\left[\widetilde{X}_{i j}\right]_{j=1: h} W_{i}^{\mathrm{P}} \end{aligned} \tag{2} X ijX i+1=Attn(XijWijQ,XijWijK,XijWijV)=Concat[X ij]j=1:hWiP(2)
其中,第 j 个头部计算了对输入特征分割 X i j X_{i j} Xij 的自注意力,即 X i = [ X i 1 , X i 2 , … , X i h ] X_{i}= \left[X_{i 1}, X_{i 2}, \ldots, X_{i h}\right] Xi=[Xi1,Xi2,,Xih],其中 1 ≤ j ≤ h 1 ≤ j ≤ h 1jh。这里 h 是头部的总数, W i j Q , W i j K 和 W i j V W_{i j}^{\mathrm{Q}}, W_{i j}^{\mathrm{K}} 和 W_{i j}^{\mathrm{V}} WijQ,WijKWijV 是将输入特征分割映射到不同子空间的投影层, W i P W_{i}^{\mathrm{P}} WiP 是一个线性层,将连接的输出特征投影回与输入一致的维度。

尽管对于每个头部使用特征分割而不是完整特征更加高效并减少了计算开销,但我们仍然通过鼓励 Q、K、V 层学习富信息特征的投影来提高其容量。我们以级联方式计算每个头部的注意力图,如图6(c)所示,它将每个头部的输出添加到后续头部,逐渐改进特征表示:
X i j ′ = X i j + X ~ i ( j − 1 ) , 1 < j ≤ h , (3) X_{i j}^{\prime}=X_{i j}+\tilde{X}_{i(j-1)}, \quad 1<j \leq h, \tag{3} Xij=Xij+X~i(j1),1<jh,(3)
其中, X i j ′ X_{i j}^{\prime} Xij 是第 j 个输入分割 X i j X_{i j} Xij 和由公式 (2) 计算的第 (j-1) 个头部输出 X ~ i ( j − 1 ) \widetilde{X}_{i(j-1)} X i(j1)相加。在计算自注意力时,它替代了 X i j X_{i j} Xij作为第 j 个头部的新输入特征。此外,在 Q 投影之后应用了另一个token交互层,它使自注意力能够联合捕获局部和全局关系,进一步增强了特征表示。

这种级联设计具有两个优势。首先,将不同特征分割馈送到每个头部可以提高注意力图的多样性,正如在第2.2节中验证的那样。类似于组卷积[10, 87],级联组关注可以通过 h× 减少QKV层中的输入和输出通道,从而节省Flops和参数。其次,级联注意力头允许增加网络深度,进一步提高模型容量,而不引入任何额外的参数。它只会引入较小的延迟开销,因为每个头部中的注意力图计算使用较小的QK通道维度。

参数重新分配。为了提高参数的效率,我们通过扩展关键模块的通道宽度,同时缩小不重要的模块,来重新分配网络中的参数。具体来说,基于第2.3节中的Taylor重要性分析,我们为所有阶段中的每个头部的Q和K投影设置了较小的通道维度。对于V投影,我们允许它具有与输入嵌入相同的维度。由于参数冗余,FFN中的扩展比也从4减小到2。采用提出的重新分配策略,重要模块具有更多的通道来学习高维空间中的表示,从而防止特征信息的丢失。同时,不重要模块中的冗余参数被移除,以加速推理并增强模型的效率。

3.2、EfficientViT网络架构

EfficientViT网络架构如图6(a)所示。具体来说,我们引入了重叠的图像块嵌入[20, 80],将16×16的图像块嵌入到具有C1维度的标记中,从而增强了模型在低级别视觉表示学习方面的能力。该架构包括三个阶段。每个阶段堆叠了提出的EfficientViT构建块,每个子采样层(分辨率的2倍子采样)将标记数量减少了4倍。为了实现高效的子采样,我们提出了一个EfficientViT子采样块,它也具有夹心布局,不同之处在于自注意力层被一个反向残差块所替代,以减少子采样过程中的信息丢失[26, 63]。值得注意的是,我们在整个模型中采用BatchNorm(BN)[30]而不是LayerNorm(LN)[2],因为BN可以折叠到前面的卷积或线性层中,这在运行时优于LN。我们还使用ReLU [54]作为激活函数,因为通常使用的GELU [25]或HardSwish [26]速度较慢,有时在某些推理部署平台上得不到很好的支持[1, 3]。

我们构建了一个包含六种不同宽度和深度比例的模型系列,并为每个阶段设置了不同数量的头部。与MobileNetV3 [26]和LeViT [20]类似,我们在早期阶段使用较少的块,而在后期阶段使用较多的块,因为在较大分辨率的早期阶段进行处理更加耗时。我们逐渐增加阶段的宽度,采用小因子 ( ≤ 2 ) (\leq 2) (2)来减轻后期阶段的冗余,如第2.3节所分析。我们的模型系列的架构细节如表1所示。 C i C_{i} Ci L i L_{i} Li H i H_{i} Hi分别表示第 i阶段的宽度、深度和头数。
在这里插入图片描述

4、实验

4.1、实现细节

在ImageNet-1K[17]上进行图像分类实验。模型使用PyTorch 1.11.0[59]和Timm 0.5.4[77]构建,并使用AdamW[46]优化器和余弦学习率调度器在8块Nvidia V100 gpu上从头训练300次。我们将总batchsize设置为2048。输入的图像被调整大小并随机裁剪成224×224。初始学习率为1×10−3,权重衰减为2.5×10−2。我们使用与[69]相同的数据增强,包括Mixup[85]、自动增强[13]和随机擦除[88]。此外,我们还提供了在不同硬件上的吞吐量评估。对于GPU,我们在Nvidia V100上测量吞吐量,内存中的最大批处理大小为2的幂次[20,69]。对于CPU和ONNX,我们在Intel Xeon E5-2690 v4 @ 2.60 GHz处理器上测量运行时,batchsize为16,并在[20]之后的单线程中运行模型。还测试了EfficientViT在下游任务上的可迁移性。对于下游图像分类的实验,我们使用批量大小256、学习率1×10−3和权重衰减1×10−8的AdamW[46]对模型进行了300 epoch的微调[86]。在COCO[42]上使用RetinaNet[41]进行目标检测,在mmdetection[6]上使用与[44]相同的设置对模型进行12个epoch (1× schedule)的训练。例如分割,请参阅补充说明。

4.2、ImageNet上的结果

在ImageNet[17]上将EfficientViT与流行的高效CNN和ViT模型进行了比较,结果见表2和图1。结果表明,在大多数情况下,EfficientViT在不同的评估设置中实现了最佳的精度和速度权衡。

在这里插入图片描述

与高效CNN模型的比较。首先,我们将EfficientViT与普通的CNN模型进行比较,如MobileNets [26, 63]和EfficientNet [67]。具体来说,与MobileNetV2 1.0× [63]相比,EfficientViT-M3在V100 GPU上运行速度提高了2.5倍,在Intel CPU上提高了3.0倍,同时获得了1.4%更高的top-1准确性。与最先进的MobileNetV3-Large [26]相比,EfficientViT-M5获得了更高的准确性,例如,在V100 GPU上快了40.5%,在Intel CPU上快了45.2%,但在ONNX模型上慢了11.5%。这可能是因为ONNX实现中的重塑操作较慢,而在计算自注意力时不可避免。此外,EfficientViT-M5在V100 GPU/Intel CPU上以及ONNX模型上都比EfficientNet-B0 [67]获得了可比的准确性,但速度分别快了2.3倍/1.9倍和2.1倍。尽管我们的模型使用了更多的参数,但它减少了影响推理速度的内存效率低下的操作,并实现了更高的吞吐量。

与高效的ViTs的比较。我们还将我们的模型与最近的高效视觉transformer[5, 9, 50, 51, 56]进行比较,如表2所示。特别是,当在ImageNet-1K [17]上获得类似的性能时,我们的EfficientViT-M4在经过测试的CPU和GPU设备上分别比最近的EdgeViT-XXS [56]快了4.4倍和3.0倍。即使转换为ONNX运行格式,我们的模型仍然获得了3.7倍的更高速度。与最先进的MobileViTV2-0.5 [51]相比,我们的EfficientViT-M2在具有更高吞吐量的情况下实现了略微更好的性能,例如,在GPU和CPU设备上测试时,吞吐量分别提高了3.4倍和3.5倍。此外,我们还与最先进的大型ViTs的微小变种进行了比较,如表3所示。PoolFormer-12S [83]在准确性上与EfficientViT-M5相当,但在V100 GPU上运行速度较慢,慢了3.0倍。与Swin-T [44]相比,EfficientViT-M5的准确性稍逊,但在Intel CPU上快了12.3倍,展示了所提出设计的效率。此外,我们在附录材料中提供了关于移动芯片上的速度评估和比较。

在这里插入图片描述

在更高分辨率上进行微调。最近关于ViTs的研究表明,使用更高分辨率进行微调可以进一步提高模型的容量。我们也将我们最大的模型EfficientViT-M5微调到更高分辨率。EfficientViT-M5↑384在V100 GPU上的吞吐量为3,986张图像/秒,达到了79.8%的top-1准确性,而EfficientViT-M5↑512将top-1准确性进一步提高到80.8%,展示了在处理更高分辨率图像时的效率和良好的模型容量。

4.3、迁移学习结果

为了进一步评估迁移能力,将EfficientViT应用于各种下游任务。

下游图像分类。将EfficientViT迁移到下游图像分类数据集,以测试其泛化能力:1)CIFAR-10和CIFAR100 [36];2)细粒度分类:Flowers [55], Stanford Cars [35], Oxford-IIIT Pets[58]。我们将结果报告在表4中。与现有的高效模型[18,26,27,63,89]相比,EfficientViT-M5在所有数据集上都实现了相当或略高的精度,具有更高的吞吐量。汽车是个例外,我们的模型在精度上稍差一些。这可能是因为类之间的细微差异更多地存在于局部细节中,因此更容易用卷积捕获。

物体检测。在COCO[42]物体检测任务上,我们将EfficientViT-M4与高效模型[12,22,26,63,66,68]进行了比较,结果见表5。具体来说,EfficientViT-M4比MobileNetV2[63]高出4.4% AP,但同样失败。与搜索的SPOS[22]方法相比,EfficientViT-M4使用的Flops减少了18.1%,同时实现了2.0%的AP提高,展示了其在不同视觉任务中的能力和泛化能力。

4.4、 消融实验

在本节中,我们消融了ImageNet-1K[17]上提出的EfficientViT中的重要设计元素。所有模型都进行了100次训练,以放大差异并减少训练时间[20]。表6给出了结果。

在这里插入图片描述

夹心布局块的影响。首先,我们进行了一个剔除研究,以验证所提出的夹心布局设计的效率,将夹心布局块替换为原始的Swin块 [44]。为了进行公平比较,深度调整为{2, 2, 3},以保证与EfficientViTM4具有类似的吞吐量。在类似的速度下,top-1准确性下降了3.0%,验证了相对于内存受限的MHSA,应用更多的FFN对于小型模型更有效。此外,为了分析自注意力之前和之后的FFN数量N的影响,我们将数量从1增加到2和3。相应地减少块的数量以保持类似的吞吐量。如表6所示(#3和#4),进一步增加FFN的数量并不有效,因为缺乏长距离的空间关系,N =1获得了最佳的效率。

级联组注意力的影响。我们已经提出了CGA来提高MHSA的计算效率。如表6所示(#5和#6),将CGA替换为MHSA会降低准确性1.1%和ONNX速度5.9%,表明解决头部冗余有助于提高模型的效率。对于没有级联操作的模型,其性能与MHSA相当但差于CGA,证明了增强每个头部的特征表示的有效性。

参数重新分配的影响。我们的EfficientViTM4的top-1准确性比没有进行QKV通道维度重新分配或FFN比例降低的模型分别提高了1.4%/1.5%,GPU吞吐量提高了4.9%/3.8%,表明参数重新分配的有效性(#1与#7、#8相比)。此外,我们研究了每个头部的QK维度和V维度与输入嵌入之间的比例选择,如图7所示。结果显示,随着QK维度从4增加到16,性能逐渐提高,但进一步增加它会导致性能下降。此外,当将V维度与输入嵌入之间的比例从0.4增加到1.0时,性能从70.3%提高到71.3%。当进一步增加比率到1.2时,只有0.1%的改善。因此,将V的通道设置为接近输入嵌入的最佳参数效率,这符合我们在第2.3节中的分析和设计策略。

在这里插入图片描述

其他组件的影响。我们消除了使用DWConv进行token交互、规范化层和激活函数的影响,如表6所示(#9、#10和#11)。使用DWConv时,准确率提高了1.4%,延迟开销较小,证明了引入局部结构信息的有效性。用LN替换BN会使精度降低0.9%,GPU速度降低2.9%。使用HardSwish代替ReLU将准确率提高0.9%,但会导致nx速度大幅下降20.0%。激活函数是元素级操作,在GPU/CPU上占用了大量的处理时间[15,48,72],因此使用ReLU代替更复杂的激活函数具有更好的效率。
在这里插入图片描述

1000次训练和蒸馏的结果。表7显示了在ImageNet-1K[17]和ImageNet-ReaL[4]上的[20]之后,使用RegNetY-16GF[60]作为教师模型进行1000次训练和知识蒸馏的结果。与levit128s[20]相比,EfficientViT-M4在ImageNet-1K和ImageNetReaL上分别超过了0.5%和1.0%。在推理速度方面,该模型在ONNX上的吞吐量提高了34.2%,在其他场景下也表现出了优越性。结果表明,EfficientViT强大的性能和泛化能力可以在更长的训练计划下进一步发掘。

5、相关工作

高效CNN。随着在资源受限的场景中部署CNN的需求,高效CNN已经在文献中进行了深入研究 [23, 24, 26, 48, 63, 67, 87]。Xception [10]提出了一个由深度可分离卷积构建的架构。MobileNetV2 [63]构建了一个倒转的残差结构,将输入扩展到更高的维度。MobileNetV3 [26]和EfficientNet [67]采用神经架构搜索技术来设计紧凑型模型。为了在硬件上提高实际速度,ShuffleNetV2 [48]引入了通道分离和洗牌操作,以改善通道组之间的信息传递。然而,卷积核的空间局部性阻碍了CNN模型捕捉长距离依赖关系,从而限制了它们的模型容量。

高效的ViTs。ViT及其变体[18, 44, 69, 76]在各种视觉任务上取得了成功。尽管性能优越,但它们中的大多数在推理速度上不如典型的CNN。最近提出了一些高效的变换器,它们分为两个阵营:1)高效的自注意力;和2)高效的架构设计。高效的自注意方法通过稀疏注意[34, 57, 61, 75]或低秩逼近[11, 51, 74]来减少softmax注意的成本。然而,它们在与softmax注意[71]相比的推理加速上性能下降不大或适度。另一方面的工作将ViTs与轻量级CNN结合起来构建高效的架构[9, 47, 49, 50, 81]。LVT [81]提出了增强的注意机制,采用扩张卷积来改善模型性能和效率。Mobile-Former [9]设计了一个并行的CNN-transformer块,用于编码局部特征和全局交互。然而,它们中的大多数旨在最小化Flops和参数[16],这些参数可能与实际推理延迟[70]的相关性较低,并且在速度方面仍然不如高效的CNN。与它们不同,我们通过直接优化不同硬件和部署设置上的吞吐量来探索具有快速推理的模型,并设计了一系列层次模型,速度和准确性之间取得了良好的折衷。

6、结论

在本文中,我们对影响视觉transformer推理速度的因素进行了系统分析,并提出了一种新的快速视觉transformer家族,具有内存高效操作和级联组注意力,名为EfficientViT。大量实验证明了EfficientViT的有效性和高速性,还展示了它在各种下游基准测试中的优越性。

局限性。EfficientViT的一个局限性是,尽管其推理速度很快,但由于引入了额外的FFNs,与最先进的高效CNN [26]相比,模型大小略大。此外,我们的模型是根据构建高效视觉transformer的指导原则手动设计的。在未来的工作中,我们有兴趣减小模型大小,并采用自动搜索技术来进一步提高模型的容量和效率。

致谢。Yuan教授部分得到了香港研究资助局(RGC)的支持,项目编号为11211221,以及创新及科技署-创新及科技基金的支持,项目编号为ITS/100/20。

这篇关于EfficientViT: 高效视觉transformer与级联组注意力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

【Tools】大模型中的注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 在大模型中,注意力机制是一种重要的技术,它被广泛应用于自然语言处理领域,特别是在机器翻译和语言模型中。 注意力机制的基本思想是通过计算输入序列中各个位置的权重,以确

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者