存根 EfficientViT:用于高分辨率计算机视觉的内存高效视觉转换器 - Unite.AI
关注我们.

人工智能

EfficientViT:用于高分辨率计算机视觉的内存高效视觉转换器

mm

发布时间

 on

由于其高模型容量,Vision Transformer 模型近年来取得了巨大的成功。 尽管具有出色的性能,但视觉变换器模型有一个主要缺陷:其卓越的计算能力需要高昂的计算成本,这就是视觉变换器不是实时应用程序的首选的原因。 为了解决这个问题,一组开发人员推出了 EfficientViT,一个高速视觉转换器系列。 

在使用 EfficientViT 时,开发人员观察到电流互感器模型的速度通常受到低效内存操作的限制,尤其是 MHSA 或多头自注意力网络中的逐元素函数和张量重塑。 为了解决这些低效的内存操作,EfficientViT 开发人员使用三明治布局开发了一种新的构建块,即 EfficientViT 模型在高效 FFN 层之间使用单个内存绑定多头自注意力网络,有助于提高内存效率,并且还加强了整体渠道沟通。 此外,该模型还发现注意力图通常在头部之间具有高度相似性,从而导致计算冗余。 为了解决冗余问题,EfficientViT 模型提出了一个级联的群体注意力模块,该模块为注意力头提供完整特征的不同分割。 该方法不仅有助于节省计算成本,而且提高了模型的注意力多样性。 

对 EfficientViT 模型在不同场景下进行的综合实验表明,EfficientViT 的性能优于现有的高效模型 计算机视觉 同时在准确性和速度之间取得良好的权衡。 因此,让我们更深入地研究 EfficientViT 模型。 

视觉转换器和 EfficientViT 简介

视觉 Transformers 仍然是计算机视觉行业中最受欢迎的框架之一,因为它们提供卓越的性能和高计算能力。然而,随着视觉变换器模型的准确性和性能不断提高,运营成本和计算开销也随之增加。例如,目前已知的在 ImageNet 数据集(如 SwinV2 和 V-MoE)上提供最先进性能的模型分别使用 3B 和 14.7B 参数。这些模型的庞大规模加上计算成本和要求使得它们实际上不适合实时设备和应用程序。 

EfficientNet模型旨在探索如何提高 视觉变压器模型,并找到设计高效且有效的基于变压器的框架架构背后涉及的原则。 EfficientViT模型基于Swim、DeiT等现有视觉转换器框架,分析了影响模型干扰速度的三个基本因素,包括计算冗余、内存访问和参数使用。 此外,该模型观察到视觉 Transformer 模型的速度受内存限制,这意味着内存访问延迟禁止或限制 CPU/GPU 中计算能力的充分利用,这会对 Transformer 的运行速度产生负面影响。 MHSA 或多头自注意力网络中的逐元素函数和张量整形是内存效率最低的操作。 该模型进一步观察到,优化调整 FFN(前馈网络)和 MHSA 之间的比率,可以帮助显着减少内存访问时间而不影响性能。 然而,由于注意力头倾向于学习类似的线性投影,该模型还观察到注意力图中存在一些冗余。 

该模型是 EfficientViT 研究工作期间发现的最终成果。 该模型采用新的黑色和三明治布局,在前馈网络或 FFN 层之间应用单个内存绑定的 MHSA 层。 该方法不仅减少了在 MHSA 中执行内存限制操作所需的时间,而且还通过允许更多 FFN 层促进不同通道之间的通信来提高整个过程的内存效率。 该模型还利用了新的 CGA 或级联组注意力模块,旨在通过减少注意力头中的计算冗余来提高计算效率,同时增加网络深度,从而提高模型容量。 最后,该模型扩大了包括价值投影在内的重要网络组件的通道宽度,同时缩小了前馈网络中隐藏维度等低价值的网络组件,以重新分配框架中的参数。 

从上图中可以看出,EfficientViT 框架在准确性和速度方面均优于当前最先进的 CNN 和 ViT 模型。 但是 EfficientViT 框架是如何超越当前一些最先进的框架的呢? 让我们找出答案。 

EfficientViT:提高视觉变压器的效率

EfficientViT模型旨在从三个角度提高现有视觉变压器模型的效率,

  1. 计算冗余。 
  2. 内存访问。 
  3. 参数使用。 

该模型旨在找出上述参数如何影响视觉Transformer模型的效率,以及如何解决它们以更好的效率获得更好的结果。 让我们更深入地讨论一下它们。 

内存访问和效率

影响模型速度的重要因素之一是 内存访问开销 或毛。 如下图所示,Transformer 中的多个运算符(包括逐元素加法、归一化和频繁整形)都是内存效率低下的操作,因为它们需要访问不同的内存单元,这是一个耗时的过程。 

尽管有一些现有的方法可以简化标准的 softmax 自注意力计算,例如低秩近似和稀疏注意力,但它们通常提供有限的加速,并降低准确性。 

另一方面,EfficientViT 框架旨在通过减少框架中内存低效层的数量来降低内存访问成本。 该模型将 DeiT-T 和 Swin-T 缩小为具有较高干扰吞吐量 1.25 倍和 1.5 倍的小型子网,并将这些子网的性能与 MHSA 层的比例进行比较。 如下图所示,实施后,该方法可将 MHSA 层的准确性提高约 20% 至 40%。 

计算效率

MHSA 层倾向于将输入序列嵌入到多个子空间或头中,并单独计算注意力图,这是一种已知可以提高性能的方法。 然而,注意力图的计算成本并不便宜,为了探索计算成本,EfficientViT 模型探索了如何减少较小 ViT 模型中的冗余注意力。 该模型通过以 1.25 倍推理加速训练宽度缩小的 DeiT-T 和 Swim-T 模型,测量每个块内每个头和其余头的最大余弦相似度。 如下图所示,注意力头之间存在大量相似性,这表明模型会产生计算冗余,因为许多头倾向于学习精确完整特征的相似投影。 

为了鼓励头部学习不同的模式,该模型明确应用了一种直观的解决方案,其中每个头部仅接收完整特征的一部分,这是一种类似于组卷积思想的技术。 该模型训练具有修改的 MHSA 层的缩小模型的不同方面。 

参数效率

平均 ViT 模型继承了它们的设计策略,例如使用等效宽度进行投影、将 FFN 中的扩展比设置为 4,以及增加 NLP 转换器的阶段头数。 这些组件的配置需要针对轻量级模块仔细重新设计。 EfficientViT模型部署泰勒结构剪枝以自动找到Swim-T和DeiT-T层中的基本组件,并进一步探索底层参数分配原则。 在一定的资源限制下,剪枝方法会删除不重要的通道,并保留关键的通道,以确保尽可能高的准确性。 下图比较了 Swin-T 框架上剪枝前后的通道与输入嵌入的比率。 观察结果: 基线准确度:79.1%; 剪枝准确率:76.5%。

上图表明框架的前两个阶段保留了更多的维度,而后两个阶段保留了更少的维度。 这可能意味着在每个阶段之后将通道加倍或对所有块使用等效通道的典型通道配置可能会导致最后几个块中存在大量冗余。 

高效视觉转换器:架构

根据上述分析中获得的经验教训,开发人员致力于创建一种新的分层模型,该模型可提供快速的干扰速度, 高效ViT 模型。 我们来详细看看EfficientViT框架的结构。 下图为您提供了 EfficientViT 框架的一般概念。 

EfficientViT 框架的构建块

下图说明了更高效的视觉变换器网络的构建块。 

该框架由级联组注意力模块、内存高效的三明治布局和参数重新分配策略组成,分别专注于提高模型在计算、内存和参数方面的效率。 让我们更详细地讨论它们。 

三明治布局

该模型使用新的三明治布局为框架构建更有效和高效的内存块。 三明治布局使用较少内存限制的自注意力层,并利用内存效率更高的前馈网络进行通道通信。 更具体地说,该模型应用夹在 FFN 层之间的单个自注意力层进行空间混合。 该设计不仅有助于减少由于自注意力层而导致的内存时间消耗,而且由于使用 FFN 层,还允许网络内不同通道之间的有效通信。 该模型还使用 DWConv 或欺骗卷积在每个前馈网络层之前应用额外的交互标记层,并通过引入局部结构信息的归纳偏差来增强模型容量。 

级联组注意力

MHSA 层的主要问题之一是注意力头的冗余,这使得计算效率更低。 为了解决这个问题,该模型提出了用于视觉变换器的 CGA(Cascaded Group Attention),这是一种新的注意力模块,其灵感来自高效 CNN 中的组卷积。 在这种方法中,模型向各个头部提供完整特征的分割,因此将注意力计算明确地分解到各个头部。 分割特征而不是向每个头提供完整特征可以节省计算量,并使过程更加高效,并且模型通过鼓励各层学习具有更丰富信息的特征的投影,继续致力于提高准确性和容量。 

参数重新分配

为了提高参数的效率,模型通过扩大关键模块的通道宽度,同时缩小不那么重要的模块的通道宽度来重新分配网络中的参数。 基于泰勒分析,模型要么在每个阶段为每个头中的投影设置小通道尺寸,要么模型允许投影具有与输入相同的尺寸。 前馈网络的扩展比也从 2 降至 4,以帮助其参数冗余。 EfficientViT 框架实现的建议重新分配策略为重要模块分配更多通道,使它们能够更好地学习高维空间中的表示,从而最大限度地减少特征信息的丢失。 此外,为了加快干扰过程并进一步提高模型效率,模型会自动删除不重要模块中的冗余参数。 

EfficientViT 框架的概述可以在上图中进行解释,其中的部件,

  1. EfficientViT的架构,
  2. 三明治布局块,
  3. 级联组注意力。

 

EfficientViT:网络架构

上图总结了EfficientViT框架的网络架构。 该模型引入了重叠补丁嵌入[20,80],将 16×16 补丁嵌入到 C1 维度标记中,从而增强了模型在低级视觉表示学习中表现更好的能力。 该模型的架构包括三个阶段,每个阶段都堆叠了 EfficientViT 框架的建议构建块,并且每个子采样层(分辨率的 2 倍子采样)的令牌数量减少了 4 倍。 为了使二次采样更加高效,该模型提出了一个二次采样块,它也具有所提出的三明治布局,不同之处在于用反向残差块代替了注意力层以减少采样期间的信息损失。 此外,该模型没有使用传统的 LayerNorm(LN),而是使用 BatchNorm(BN),因为 BN 可以折叠到前面的线性或卷积层中,这使其比 LN 具有运行时优势。 

 

EfficientViT 模型系列

EfficientViT 模型系列由 6 个具有不同深度和宽度比例的模型组成,并且为每个阶段分配了一定数量的头。 与最终阶段相比,模型在初始阶段使用的块更少,这一过程类似于 MobileNetV3 框架所遵循的过程,因为具有较大分辨率的早期处理过程非常耗时。 宽度随着阶段的增加而增加,以减少后面阶段的冗余。 下表提供了 EfficientViT 模型系列的架构细节,其中 C、L 和 H 指的是特定阶段的宽度、深度和磁头数量。 

EfficientViT:模型实施和结果

EfficientViT 模型的总批量大小为 2,048,使用 Timm 和 PyTorch 构建,使用 300 个 Nvidia V8 GPU 从头开始​​训练 100 个 epoch,使用余弦学习率调度器、AdamW 优化器,并在 ImageNet 上进行图像分类实验-1K。 输入图像被随机裁剪并调整为 224×224 的分辨率。 对于涉及下游图像分类的实验,EfficientViT 框架对模型进行了 300 个 epoch 的微调,并使用批量大小为 256 的 AdamW 优化器。该模型使用 RetineNet 在 COCO 上进行目标检测,并继续训练模型进一步 12 个 epoch。具有相同设置的纪元。 

ImageNet 上的结果

为了分析 EfficientViT 的性能,我们将其与 ImageNet 数据集上的当前 ViT 和 CNN 模型进行了比较。 比较结果如下图所示。 可以看出,EfficientViT模型族在大多数情况下都优于当前的框架,并成功地在速度和准确性之间实现了理想的平衡。 

与高效 CNN 和高效 ViT 的比较

该模型首先将其性能与 EfficientNet 等 Efficient CNN 和 MobileNets 等普通 CNN 框架进行比较。 可以看出,与 MobileNet 框架相比,EfficientViT 模型获得了更好的 top-1 准确度分数,同时在 Intel CPU 和 V3.0 GPU 上的运行速度分别快了 2.5 倍和 100 倍。  

上图将 EfficientViT 模型性能与在 ImageNet-1K 数据集上运行的最先进的大规模 ViT 模型进行了比较。 

下游图像分类

EfficientViT模型应用于各种下游任务,以研究模型的迁移学习能力,下图总结了实验结果。可以看出,EfficientViT-M5 模型设法在所有数据集上获得更好或相似的结果,同时保持更高的吞吐量。唯一的例外是 Cars 数据集,其中 EfficientViT 模型无法准确交付。 

物体检测

为了分析 EfficientViT 检测对象的能力,将其与 COCO 对象检测任务上的高效模型进行了比较,下图总结了比较结果。 

最后的思考

在本文中,我们讨论了 EfficientViT,这是一系列快速视觉变换器模型,它使用级联组注意力,并提供内存高效操作。 为分析 EfficientViT 的性能而进行的大量实验显示出有希望的结果,因为 EfficientViT 模型在大多数情况下优于当前的 CNN 和视觉 Transformer 模型。 我们还试图对影响视觉变压器干扰速度的因素进行分析。 

“职业工程师,心灵作家”。 Kunal 是一位技术作家,对人工智能和机器学习有着深厚的热爱和理解,致力于通过他引人入胜且信息丰富的文档来简化这些领域的复杂概念。