EfficientViT:具有级联组注意力的高效内存视觉Transformer
原文链接:https://openaccess.thecvf.com/content/CVPR2023/papers/Liu_EfficientViT_Memory_Efficient_Vision_Transformer_With_Cascaded_Group_Attention_CVPR_2023_paper.pdf
EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention
摘要
视觉Transformer因其高模型能力而取得了巨大成功。然而,其显著的性能伴随着沉重的计算成本,这使得它们不适用于实时应用。在本文中,我们提出了一系列名为EfficientViT的高速视觉Transformer模型。
-
我们发现现有Transformer模型的速度通常受到内存效率低下操作的限制,特别是在多头自注意力机制(MHSA)中的张量重塑和逐元素函数。
-
因此,我们设计了一种新的构建模块,采用了夹心布局。
- 在高效的前馈神经网络(FFN)层之间使用单一的内存限制的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倍
1. 引言
视觉Transformer(ViTs)以其高模型能力和优越的性能而在计算机视觉领域引起了轰动。然而,不断提高的准确性是以增加模型大小和计算开销为代价的。
例如,SwinV2使用了30亿个参数,而V-MoE使用了147亿个参数,在ImageNet上实现了最先进的性能。
这样庞大的模型大小和伴随而来的沉重计算成本使得这些模型不适用于实时要求的应用。
有几项最近的工作致力于设计轻量高效的视觉Transformer模型。不幸的是,大多数这些方法旨在减少模型参数或Flops,这些都是间接衡量速度的指标,不能反映模型的实际推断吞吐量。
例如,使用700M Flops的MobileViT-XS在Nvidia V100 GPU上运行速度远慢于使用1,220M Flops的DeiT-T。
尽管这些方法通过减少Flops或参数取得了良好的性能,但许多方法在标准的同构或分层Transformer模型(如DeiT和Swin)中并未显示出明显的时钟速度提升,并且未得到广泛采用。
为了解决这个问题,在本文中,我们探讨了如何通过视觉Transformer实现更快的推断速度,寻找设计高效Transformer架构的原则。
基于流行的视觉Transformer模型DeiT和Swin,我们系统地分析了影响模型推断速度的三个主要因素,包括内存访问、计算冗余和参数使用。
特别是,我们发现Transformer模型的速度通常受到内存限制。换句话说,内存访问延迟阻碍了GPU/CPU中计算能力的充分利用,对Transformer的运行时速度产生了极其负面的影响。
最不经济的操作是多头自注意力(MHSA)中频繁的张量重塑和逐元素函数。
我们观察到通过适当调整MHSA和FFN(前馈网络)层之间的比例,可以显著减少内存访问时间,而不影响性能。
此外,我们发现一些注意力头倾向于学习相似的线性投影,导致注意力图中的冗余。
分析表明,通过将每个头的计算显式分解并用不同的特征来提供给它们,可以缓解这个问题同时提高计算效率。
此外,不同模块中的参数分配通常被现有的轻量级模型忽视,因为它们主要遵循标准Transformer模型的配置。
为了提高参数效率,我们使用结构化剪枝来识别最重要的网络组件,并总结参数重新分配的经验指导以加速模型。
基于分析和发现,我们提出了一系列名为EfficientViT的内存高效Transformer模型。
具体地,我们设计了一个新的块,采用夹心布局来构建模型。夹心布局块在FFN层之间应用了一个单一的内存限制的MHSA层。它减少了MHSA中内存限制操作造成的时间成本,并应用更多的FFN层来允许不同通道之间的通信,这更加内存高效。
然后,我们提出了一个新的级联组注意力(CGA)模块来提高计算效率。其核心思想是增强输入到注意力头部的特征的多样性。与以往使用相同特征给所有头部的自注意力相比,CGA将每个头部与不同的输入划分配对,并将输出特征级联到各头部。这个模块不仅减少了多头注意力中的计算冗余,还通过增加网络深度提升了模型容量。
最后,我们通过扩展关键网络组件(如值投影)的通道宽度来重新分配参数,同时缩小FFN中较低重要性的隐藏维度。这种重新分配最终提升了模型参数的效率。
实验证明,我们的模型在速度和准确性方面明显优于现有的高效CNN和ViT模型。
-
我们的EfficientViT-M5在ImageNet上实现了77.1%的top-1准确率,
-
在Nvidia V100 GPU上的吞吐量为10,621张图像/秒,
-
在Intel Xeon E5-2690 v4 CPU @ 2.60GHz上为56.8张图像/秒,
-
在准确性上超过了MobileNetV3-Large 1.9%,
-
在GPU推理速度上提高了40.4%,
-
在CPU速度上提高了45.2%。
此外,EfficientViT-M2达到了70.8%的准确率,超过了MobileViT-XXS 1.8%,同时在GPU/CPU上运行速度分别提高了5.8倍/3.7倍,在转换为ONNX格式时速度提高了7.4倍。
当部署在移动芯片上,即iPhone 11中的Apple A13 Bionic芯片上时,EfficientViT-M2模型比使用CoreML的MobileViT-XXS快2.3倍。
总之,本工作的贡献有两个方面:
- 我们对影响视觉Transformer推断速度的因素进行了系统分析,并得出了一套高效模型设计的指导原则。
- 我们设计了一系列新的视觉Transformer模型,这些模型在效率和准确性之间取得了良好的平衡。这些模型在各种下游任务上也展现出良好的迁移能力。
2. 使用视觉Transformer加速
在本节中,我们从三个角度探讨如何提高视觉Transformer的效率:内存访问、计算冗余和参数使用。我们通过经验研究来识别潜在的速度瓶颈,并总结出有用的设计准则。
2.1. 内存效率
内存访问开销是影响模型速度的关键因素。Transformer中的许多操作,例如频繁的重塑、逐元素加法和归一化,都是内存效率低下的,需要在不同的内存单元之间进行耗时的访问。
虽然有一些方法提出通过简化标准softmax自注意力的计算来解决这个问题,例如稀疏注意力和低秩逼近,但它们往往会以精度降低和加速受限为代价。
在这项工作中,我们通过减少内存效率低下的层来降低内存访问成本。
最近的研究表明,内存效率低下的操作主要位于MHSA而不是FFN层。然而,大多数现有的ViT模型都使用了相同数量的这两种层,这可能无法实现最佳效率。
因此,我们探索了在具有快速推断能力的小型模型中分配MHSA和FFN层的最佳比例。
具体来说,我们将Swin-T和DeiT-T缩减为具有1.25倍和1.5倍推断吞吐量的几个小型子网络,并比较具有不同比例MHSA层的子网络的性能。
如图3所示,具有20%至40% MHSA层的子网络倾向于获得更好的准确性。这些比例远远小于采用50% MHSA层的典型ViT。此外,我们测量了与内存绑定操作相关的时间消耗,包括重塑、逐元素加法、复制和归一化。在具有20% MHSA层的Swin-T-1.25×中,内存绑定操作仅占总运行时间的44.26%。
这一观察结果也适用于具有1.5倍加速的DeiT和较小模型。实验证明,适当减少MHSA层利用率可以提高内存效率,同时改善模型性能。
2.2. 计算效率
多头自注意力(MHSA)将输入序列嵌入多个子空间(头部)并分别计算注意力图,已被证明可以有效提高性能。
然而,注意力图的计算代价很高,研究表明其中许多并不是至关重要的。
为了节省计算成本,我们探索如何在小型ViT模型中减少冗余的注意力。
我们训练了宽度缩减的Swin-T和DeiT-T模型,推断速度提高了1.25倍,并测量了每个块内每个头部与其余头部之间的最大余弦相似度。
从图4中可以看出,注意力头之间存在很高的相似性,特别是在最后的块中。这种现象表明,许多头学习了相同全特征的相似投影,并产生了计算冗余。
为了明确地鼓励头部学习不同的模式,我们采用了一个直观的解决方案,即将每个头部仅用全特征的一个切分作为输入,这类似于[10,87]中组卷积的思想。我们训练了修改后的MHSA的缩减模型的变体,并在图4中计算了注意力的相似性。
结果表明,在不同头部中使用特征的不同通道切分,而不是像MHSA那样将同样的全特征用于所有头部,可以有效地减少注意力计算的冗余。
2.3. 参数效率
典型的ViT主要继承了NLP Transformer的设计策略,例如在Q、K、V投影中使用相同宽度,逐步增加头部,以及在FFN中将扩张比例设置为4。对于轻量级模型,这些组件的配置需要仔细重新设计。
受[45,82]的启发,我们采用Taylor结构化剪枝来自动找到Swin-T和DeiT-T中的重要组件,并探索参数分配的潜在原则。
剪枝方法在一定资源约束下移除不重要的通道,并保留最关键的通道以最佳地保持准确性。它使用梯度和权重的乘积作为通道重要性,这近似于移除通道时损失的波动。
图5中绘制了剩余输出通道与输入通道之间的比例,并为参考给出了未剪枝模型的原始比例。
观察到:
1)前两个阶段保留了更多的维度,而最后一个阶段保留的维度较少;
2)Q、K和FFN的维度被大幅裁剪,而V的维度几乎保持不变,只在最后几个块中减少。
这些现象表明:
1)典型的通道配置,即每个阶段翻倍通道[44]或所有块使用等效通道[69],可能会在最后几个块中产生实质性的冗余;
2)当Q、K具有相同维度时,Q、K的冗余远大于V。V更倾向于相对较大的通道,接近输入嵌入的维度。
3. 高效视觉Transformer
基于以上分析,在本节中,我们提出了一种具有快速推断的新的分层模型,名为EfficientViT。其架构概览如图6所示。
3.1. EfficientViT构建模块
我们提出了一种新的视觉Transformer的高效构建模块,如图6(b) 所示。它由一个内存高效的夹心布局、一个级联组注意力模块和一个参数重新分配策略组成,分别致力于在内存、计算和参数方面提高模型的效率。
夹心布局 。为了构建一个内存高效的模块,我们提出了一种夹心布局,它采用了更少的内存限制的自注意力层和更多内存高效的前馈网络(FFN)层进行通道通信。具体来说,它应用了一个自注意力层ΦAi进行空间混合,该层被夹在FFN层ΦFi之间。计算可以表示为:
X
i
+
1
=
∏
N
Φ
i
F
(
Φ
i
A
(
∏
N
Φ
i
F
(
X
i
)
)
)
,
X_{i+1} = \prod ^\mathcal{N} Φ^F_i(Φ^A_i(\prod ^\mathcal{N}Φ^F_i(X_i))),
Xi+1=∏NΦiF(ΦiA(∏NΦiF(Xi))),
其中,
X
i
X_i
Xi是第
i
i
i个块的完整输入特征。该块在单个自注意力层之前和之后通过
N
\mathcal{N}
N个FFN将
X
i
X_i
Xi转换为
X
i
+
1
X_{i+1}
Xi+1。这种设计减少了模型中自注意力层导致的内存时间消耗,并且应用更多的FFN层,有效地允许不同特征通道之间的通信。我们还在每个FFN之前应用了一个额外的token交互层,使用深度可分离卷积(DWConv)。它引入了局部结构信息的归纳偏差,以增强模型的能力。
级联组注意力 。自注意力中的注意力头冗余是一个严重的问题,会导致计算效率低下。受高效CNN中的组卷积的启发,我们提出了一种名为级联组注意力(CGA)的新的注意力模块,用于视觉Transformer。它将每个注意力头部与全特征的不同切分配对,从而明确地将注意力计算分解到各个头部之间。形式上,这个注意力可以表示为:
X
~
i
j
=
A
t
t
n
(
X
i
j
W
i
j
Q
,
X
i
j
W
i
j
K
,
X
i
j
W
i
j
V
)
,
X
~
i
+
1
=
C
o
n
c
a
t
[
X
~
i
j
]
j
=
1
:
h
W
i
P
,
\tilde{X}_{ij} = Attn(X_{ij}W^Q_{ij} , X_{ij}W^K_{ij} , X_{ij}W^V_{ij} ),\\ \tilde{X}_{i+1} = Concat[\tilde{X}_{ij} ]_{j=1:h}W^P_i,
X~ij=Attn(XijWijQ,XijWijK,XijWijV),X~i+1=Concat[X~ij]j=1:hWiP,
其中,第
j
j
j个头部计算
X
i
j
{X}_{ij}
Xij的自注意力,其中
X
i
j
{X}_{ij}
Xij是输入特征
X
i
{X}_{i}
Xi的第
j
j
j个切分,即
X
i
=
[
X
i
1
,
X
i
2
,
.
.
.
,
X
i
h
]
X_i = [X_{i1}, X_{i2}, . . . , X_{ih}]
Xi=[Xi1,Xi2,...,Xih],
1
≤
j
≤
h
1 ≤ j ≤ h
1≤j≤h。
h
h
h是注意力头的总数,
W
i
Q
W^Q_i
WiQ,
W
i
K
W^K_i
WiK和
W
i
V
W^V_i
WiV是将输入特征切分映射到不同子空间的投影层,而
W
i
p
W^p_i
Wip是一个线性层,将拼接后的输出特征投影回与输入一致的维度。
虽然对每个头部使用特征切分而不是全特征更高效并节省了计算开销,但我们继续通过鼓励Q、K、V层学习对具有更丰富信息的特征进行投影来提高其容量。我们以级联 的方式计算每个头部的注意力图,如图6( c) 所示,将每个头部的输出加到后续头部中以逐步改进特征表示:
X
i
j
′
=
X
i
j
+
X
~
i
(
j
−
1
)
,
1
<
j
≤
h
,
X^{'}_{ij} = X_{ij} + \tilde{X}_{i(j−1)}, 1 < j ≤ h,
Xij′=Xij+X~i(j−1),1<j≤h,
其中,
X
i
j
′
X^{'}_{ij}
Xij′是第
j
j
j个输入切分
X
i
j
X_{ij}
Xij和由公式(2)计算得到的
(
j
−
1
)
(j−1)
(j−1)头输出
X
i
(
j
−
1
)
′
X^{'}_{i(j-1)}
Xi(j−1)′的加法。当计算自注意力时,它取代
X
i
j
X_{ij}
Xij作为第
j
j
j个头部的新输入特征。此外,在
Q
Q
Q投影后应用了另一个token交互层,使自注意力能够共同捕获局部和全局关系,并进一步增强特征表示。
这样的级联设计具有两个优势。
首先,将每个头部与不同的特征切分配对可以提高注意力图的多样性,这在第2.2节中得到验证。类似于组卷积,级联组注意力可以通过 h h h倍节省Flops和参数,因为 Q K V QKV QKV层中的输入和输出通道减少了 h h h倍。
其次,级联注意力头允许增加网络深度,进一步提升模型容量而不引入额外的参数。它只会带来较小的延迟开销,因为每个头部中的注意力图计算使用较小的 Q K QK QK通道维度。
参数重新分配 。为了提高参数效率,我们通过扩展关键模块的通道宽度并缩小不重要的模块来重新分配网络中的参数。
具体来说,基于第2.3节中的Taylor重要性分析,我们为所有阶段的每个头部的 Q Q Q和 K K K投影设置了较小的通道维度。对于 V V V投影,我们允许其与输入嵌入的维度相同。
由于参数的冗余性,FFN中的扩张比率也从4降至2。通过提出的重新分配策略,重要的模块具有更多的通道数量,以学习高维空间中的表示,从而防止特征信息的丢失。
与此同时,不重要模块中的冗余参数被移除,以加速推断并提高模型的效率。
3.2. EfficientViT网络架构
我们的EfficientViT的整体架构如图6(a) 所示。
具体来说,我们引入了重叠补丁嵌入,将16×16的补丁嵌入到具有C1维度的token中,从而增强了模型在低级视觉表示学习方面的能力。
该架构包含三个阶段。每个阶段堆叠了提出的EfficientViT构建模块,并且在每个下采样层(分辨率下采样2倍)时,token数量减少4倍。为了实现高效的下采样,我们提出了一个EfficientViT下采样块,它也具有夹心布局,只是将自注意力层替换为倒残差块,以减少下采样期间的信息损失。
-
值得注意的是,我们在整个模型中采用BatchNorm(BN)而不是LayerNorm(LN),因为BN可以折叠到前面的卷积或线性层中,这在运行时比LN具有优势。
-
我们还使用ReLU作为激活函数,因为常用的GELU或HardSwish速度慢得多,并且有时不受某些推理部署平台的良好支持。
我们使用六种不同的宽度和深度比例构建了我们的模型系列,并为每个阶段设置了不同数量的头部。
与MobileNetV3和LeViT类似,我们在早期阶段使用较少的块,因为处理具有较大分辨率的早期阶段更耗时。
我们在各个阶段上使用了较小的因子(≤2)增加宽度,以减轻后期阶段的冗余,正如在第2.3节中所分析的那样。我们的模型系列的架构细节如表1所示。 C i C_i Ci、 L i L_i Li和 H i H_i Hi分别指第 i i i个阶段的宽度、深度和头部数量。
4.实验
4.1. 实现细节
我们在ImageNet-1K上进行图像分类实验。
-
模型使用PyTorch 1.11.0和Timm 0.5.4构建,并在8个Nvidia V100 GPU上使用AdamW优化器和余弦学习率调度器从头开始训练300个epochs。
-
我们将总批量设置为 2,048。
-
输入图像被调整大小并随机裁剪为 224×224。
-
初始学习率为 1 × 1 0 ( − 3 ) 1×10^{(-3)} 1×10(−3),权重衰减为 2.5 × 1 0 ( − 2 ) 2.5×10^{(-2)} 2.5×10(−2)。
-
我们使用与[69]相同的数据增强,包括Mixup、自动增强和随机擦除。
此外,我们在不同的硬件上提供吞吐量评估。
-
对于GPU,我们在Nvidia V100上测量吞吐量,使用符合内存的最大2的幂批量大小。
-
对于CPU和ONNX,我们在Intel Xeon E5-2690 v4 @ 2.60 GHz处理器上测量运行时间,批量大小为16,并在单个线程中运行模型。
我们还测试了EfficientViT在下游任务上的迁移性。
-
对于下游图像分类实验,我们使用AdamW进行微调,批量大小为256,学习率为 1 × 1 0 ( − 3 ) 1×10^{(-3)} 1×10(−3),权重衰减为 1 × 1 0 ( − 8 ) 1×10^{(-8)} 1×10(−8),并进行300个epochs的训练。
-
对于COCO上的目标检测,我们使用相同设置在mmdetection上进行12个epochs(1×调度)的训练。对于实例分割,请参阅补充材料。
4.2. 在ImageNet上的结果
我们将EfficientViT与目前流行的高效CNN和ViT模型在ImageNet上进行比较,并在表2和图1中报告结果。
结果显示,在大多数情况下,我们的EfficientViT在不同的评估设置下实现了最佳的准确性和速度权衡。
与高效CNN的比较。
我们首先将EfficientViT与普通的CNN模型进行比较,例如MobileNets和EfficientNet。具体来说,与MobileNetV2 1.0×相比,EfficientViT-M3在V100 GPU和Intel CPU上分别以2.5×和3.0×的速度更快运行,并获得了1.4%更高的top-1准确率。
与MobileNetV3-Large相比,EfficientViT-M5的准确率提高了1.9%,同时在V100 GPU上运行速度更快,例如在V100 GPU上更快了40.5%,在Intel CPU上更快了45.2%,但在ONNX模型上慢了11.5%。这可能是因为在ONNX实现中,重塑操作较慢,在计算自注意力时是不可避免的。
此外,EfficientViT-M5的准确率与搜索得到的EfficientNet-B0模型相当,但在V100 GPU/Intel CPU上分别快了2.3×/1.9×,在ONNX模型上快了2.1×。
尽管我们的模型使用了更多的参数,但它减少了影响推断速度的内存效率低下的操作,并实现了更高的吞吐量。
与高效ViTs的比较。
我们还将我们的模型与最近的高效视觉Transformer进行比较。
具体来说,在ImageNet-1K上获得类似性能时,我们的EfficientViT-M4在经过测试的CPU和GPU设备上分别比最近的EdgeViT-XXS快了4.4×和3.0×。即使转换为ONNX运行时格式,我们的模型仍然获得了3.7×更高的速度。
与最先进的MobileViTV2-0.5相比,我们的EfficientViT-M2在GPU和CPU设备上分别获得了略好的性能,例如,在经过测试的GPU和CPU设备上,吞吐量分别提高了3.4×和3.5×。
此外,我们还与最先进的大型ViTs的微小变体进行了比较。PoolFormer-12S的准确性与EfficientViT-M5相当,但在V100 GPU上运行速度慢3.0×。
与Swin-T相比,EfficientViT-M5的准确率低4.1%,但在Intel CPU上快了12.3×,显示了所提出设计的效率。此外,我们在附录中提供了移动芯片组的速度评估和比较。
用更高分辨率进行微调。
最近的ViTs相关工作表明,使用更高分辨率进行微调可以进一步提高模型的容量。我们还将我们最大的模型EfficientViT-M5微调到更高的分辨率。
EfficientViT-M5↑384在V100 GPU上达到了79.8%的top-1准确率,吞吐量为3,986张图像/秒,而EfficientViT-M5↑512将top-1准确率进一步提高到了80.8%,显示了处理更高分辨率图像的效率和良好的模型容量。
4.3. 迁移学习结果
为了进一步评估迁移能力,我们将EfficientViT应用于各种下游任务。
下游图像分类。
我们将EfficientViT迁移到下游图像分类数据集上,以测试其泛化能力:
1)CIFAR-10和CIFAR-100;
2)细粒度分类:Flowers,Stanford Cars和Oxford-IIIT Pets。
我们在表4中报告结果。与现有的高效模型相比,我们的EfficientViT-M5在所有数据集上实现了可比或稍好的准确率,并具有更高的吞吐量。
唯一的例外是Cars数据集,我们的模型在准确性上略逊一筹。这可能是因为类别之间的细微差别更多地体现在局部细节上,因此更容易通过卷积进行捕捉。
目标检测。
我们将EfficientViT-M4与COCO对象检测任务上的高效模型进行比较,并在表5中呈现结果。
具体来说,EfficientViT-M4的AP值超过MobileNetV2,而Flops相当。
与搜索方法SPOS相比,我们的EfficientViT-M4在使用更少的Flops的同时实现了更高的AP,表明了其在不同视觉任务中的容量和泛化能力。
4.4. 消融研究
在本节中,我们对提出的EfficientViT中的重要设计元素进行了消融分析。所有模型均在ImageNet-1K上训练100个时期,以放大差异并缩短训练时间。表6报告了结果。
三明治布局块的影响。
我们首先进行了消融研究,以验证提出的三明治布局设计的效率,通过将三明治布局块替换为原始的Swin块。
为了进行公平比较,将深度调整为{2, 2, 3},以保证与EfficientViT-M4类似的吞吐量。准确率下降了3.0%,速度相似,验证了使用更多FFN而不是受内存限制的MHSA对于小模型更为有效。
此外,为了分析在自注意力之前和之后的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差,证明了增强每个头部的特征表示的有效性。
参数重新分配的影响。
我们的EfficientViT-M4相比没有 Q K V QKV QKV通道维度重分配或FFN比例减少的模型,分别获得了1.4%/1.5%更高的top-1准确率,GPU吞吐量提高了4.9%/3.8%,表明参数重新分配的有效性(#1 vs. #7,#8)。
此外,我们在图7中研究了每个头部中 Q K QK QK维度和 V V V维度与输入嵌入之间的比例的选择。
结果显示,随着 Q K QK QK维度从4增加到16,性能逐渐提高,但进一步增加会导致性能下降。
此外,将 V V V维度与输入嵌入之间的比例从0.4增加到1.0时,性能从70.3%提高到71.3%。
当将比例进一步增加到1.2时,仅获得0.1%的改善。
因此,将 V V V的通道设置为接近输入嵌入的最佳参数效率,符合我们在第2.3节的分析和设计策略。
其他组件的影响。
我们消融了使用DWConv进行标记交互、归一化层和激活函数的影响,如表6中所示(#9,#10和#11)。
使用DWConv,准确率提高了1.4%,并带来了较小的延迟开销,证明了引入局部结构信息的有效性。
将BN替换为LN会使准确率下降0.9%,GPU速度下降2.9%。
使用HardSwish代替ReLU会使准确率提高0.9%,但会导致ONNX速度下降20.0%。
激活函数是逐元素操作,在GPU/CPU上占用大量处理时间,因此使用ReLU而不是更复杂的激活函数效率更高。
1,000个训练时期和蒸馏的结果。
表7显示了在ImageNet-1K和ImageNet-ReaL上使用1,000个训练时期和知识蒸馏(使用RegNetY-16GF作为教师模型)的结果。
与LeViT-128S相比,EfficientViT-M4分别在ImageNet-1K和ImageNet-ReaL上提高了0.5%和1.0%。对于推理速度,我们的模型在ONNX上的吞吐量提高了34.2%,在其他设置上也表现出优势。
这些结果表明,EfficientViT的强大能力和泛化能力可以通过更长的训练周期进一步探索。
5. 相关工作
5.1. 高效卷积神经网络
随着将卷积神经网络(CNN)部署到资源受限场景的需求增加,高效CNN已经在文献中得到了深入研究。Xception提出了一种使用深度可分离卷积构建的架构。MobileNetV2构建了一个反向残差结构,将输入扩展到更高的维度。MobileNetV3和EfficientNet利用神经架构搜索技术设计紧凑的模型。为了在硬件上提高实际速度,ShuffleNetV2引入了通道分割和混洗操作,以改善通道组之间的信息传递。然而,卷积核的空间局部性阻碍了CNN模型捕获长距离依赖关系,从而限制了它们的模型容量。
5.2. 高效ViT
ViT及其变体已在各种视觉任务中取得成功。尽管性能优越,但大多数模型在推理速度上不及典型的CNN。
最近提出了一些高效的Transformer,它们可以分为两类:
1)高效的自注意力;
2)高效的架构设计。
高效的自注意力方法通过稀疏注意力或低秩逼近降低了softmax注意力的成本。
然而,它们在性能上存在下降,并且在与softmax注意力相比的推理加速方面几乎没有或有轻微的改进。
另一条研究路线将ViT与轻量级CNN结合起来构建高效的架构。
- LVT提出了增强的注意力机制,利用扩张卷积来提高模型的性能和效率。
- Mobile-Former设计了并行的CNN-Transformer块来编码本地特征和全局交互。
然而,它们大多数旨在最小化Flops和参数,这可能与实际推理延迟的相关性较低,并且在速度上仍然不及高效的CNN。
与它们不同的是,我们通过直接优化不同硬件和部署设置上的吞吐量,探索了具有快速推理的模型,并设计了一系列分层模型,在速度和准确性之间取得了良好的平衡。
6. 结论
本文系统地分析了影响视觉Transformer推理速度的因素,并提出了一种名为EfficientViT的新型快速视觉Transformer家族,其中包含了内存高效操作和级联组注意力。大量实验证明了EfficientViT的高效性和高速度,并且还展示了它在各种下游基准测试中的优越性。
局限性 EfficientViT的一个局限性是,尽管它的推理速度很高,但与最先进的高效CNN相比,模型大小稍大,这是由于引入了夹心布局中的额外FFN。此外,我们的模型是基于构建高效的视觉Transformer的指导原则手动设计的。在未来的工作中,我们有兴趣减小模型大小,并结合自动搜索技术进一步提高模型的容量和效率。