AI 模型与平台

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

mm
将 Unite.AI 添加到您在 Google 上的首选来源

由于其高模型容量,Vision Transformer 模型在最近的时间里取得了巨大的成功。尽管其性能,视觉变换器模型有一个主要缺陷:其显著的计算能力带来了高计算成本,这也是为什么视觉变换器不是实时应用的首选原因。为了解决这个问题,一组开发人员推出了 EfficientViT,一种高速度视觉变换器家族。

在 EfficientViT 上工作时,开发人员观察到当前变换器模型的速度往往受到低效内存操作的限制,特别是在 MHSA 或多头自注意力网络中的元素级函数和张量重塑。为了解决这些低效内存操作,EfficientViT 开发人员致力于使用一种新的构建块,采用三明治布局,即 EfficientViT 模型使用单个内存绑定多头自注意力网络在高效的 FFN 层之间,帮助提高内存效率,并增强整个通道通信。此外,模型还发现注意力图通常具有高相似性,在头部之间,导致计算冗余。为了解决冗余问题,EfficientViT 模型提出了一种级联组注意力模块,向注意力头提供不同特征的分割。这种方法不仅可以节省计算成本,还可以提高注意力多样性。

综合实验在 EfficientViT 模型上进行,表明 EfficientViT 模型在计算机视觉任务中优于现有的高效模型,同时在准确率和速度之间取得了良好的平衡。因此,让我们更深入地了解 EfficientViT 模型。

EfficientViT 和视觉变换器介绍

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

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

模型是 EfficientViT 研究工作的最终结晶。模型具有一个新的构建块,采用三明治布局,即 EfficientViT 模型使用单个内存绑定多头自注意力网络在高效的 FFN 层之间,帮助提高内存效率,并增强整个通道通信。模型还使用了一种新的 CGA 或级联组注意力模块,旨在使计算更加有效,通过减少注意力头和增加网络深度来提高模型容量。最后,模型扩大了关键网络组件的通道宽度,例如值投影,同时缩小了不重要的模块的通道宽度,以重新分配框架中的参数。

如上图所示,EfficientViT 框架在准确率和速度方面优于当前的最先进 CNN 和 ViT 模型。但是,EfficientViT 框架如何优于一些当前的最先进框架呢?让我们找出答案。

提高视觉变换器的效率

EfficientViT 模型旨在通过三个视角提高现有视觉变换器模型的效率,

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

模型旨在找到上述参数如何影响视觉变换器模型的效率,并如何解决它们以获得更好的结果和更好的效率。让我们更深入地了解它们。

内存访问和效率

影响模型速度的一个基本因素是内存访问开销或 MAO。如图所示,变换器中的几个运算符,包括元素级加法、归一化和频繁重塑,是低效的内存操作,因为它们需要访问不同的内存单元,这是一个耗时的过程。

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

另一方面,EfficientViT 框架旨在通过减少框架中的低效内存操作数量来降低内存访问成本。模型将 DeiT-T 和 Swin-T 缩小到具有更高干扰吞吐量的子网络,并比较这些子网络的性能与 MHSA 层的比例。如图所示,采用这种方法可以提高 MHSA 层的准确率约 20-40%。

计算效率

MHSA 层倾向于将输入序列嵌入到多个子空间或头中,并单独计算注意力图,这种方法可以提高性能。然而,注意力图的计算成本并不低廉,EfficientViT 模型探索如何在较小的 ViT 模型中减少冗余注意力。模型通过训练宽度下降的 DeiT-T 和 Swim-T 模型来测量每个头和剩余头之间的最大余弦相似度。如图所示,头部之间存在高相似性,这表明模型由于多个头倾向于学习相同的全特征投影而产生计算冗余。

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

参数效率

平均 ViT 模型继承了其设计策略,例如使用等宽的投影,设置 FFN 中的扩张比为 4,并在阶段中增加头部数量。这些组件的配置需要在轻量级模块中仔细重新设计。EfficientViT 模型采用泰勒结构剪枝来自动找到 Swim-T 和 DeiT-T 层中的基本组件,并进一步探索参数分配的基本原则。在某些资源约束下,剪枝方法删除不重要的通道并保留关键通道,以确保最高可能的准确率。图中比较了在 Swim-T 框架中剪枝前后的输入嵌入与通道的比率。结果表明:基准准确率:79.1%;剪枝准确率:76.5%。

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

高效视觉变换器:架构

基于上述分析的见解,开发人员致力于创建一个新的分层模型,提供快速的干扰速度,即 EfficientViT 模型。让我们更深入地了解 EfficientViT 框架的结构。下图提供了 EfficientViT 框架的一般概念。

EfficientViT 框架的构建块

更高效的视觉变换器网络的构建块如图所示。

框架由一个级联组注意力模块、内存高效的三明治布局和一个参数重新分配策略组成,分别侧重于提高模型在计算、内存和参数方面的效率。让我们更深入地了解它们。

三明治布局

模型使用一种新的三明治布局来构建一个更有效和更高效的内存块。三明治布局使用较少的内存绑定自注意力层,并使用更多的内存高效的前馈网络进行通道通信。更具体地说,模型在 FFN 层之间应用单个自注意力层进行空间混合。这种设计不仅可以减少自注意力层的内存时间消耗,还可以通过使用 FFN 层实现不同通道之间的有效通信。模型还在每个前馈网络层之前应用一个额外的交互令牌层,使用 DWConv 或欺骗卷积,并通过引入局部结构信息的归纳偏差来增强模型容量。

级联组注意力

MHSA 层的一个主要问题是注意力头的冗余,这使得计算更加低效。为了解决这个问题,模型提出了一种新的注意力模块,称为级联组注意力,用于视觉变换器,这种方法从高效 CNN 中的组卷积中汲取灵感。在这种方法中,模型将全特征的分割馈送到个别头部,显式地将注意力计算分解到头部。将特征分割而不是将全特征馈送到每个头部,可以节省计算,并使过程更加高效,模型继续通过鼓励层学习更丰富的特征来提高准确率和容量。

参数重新分配

为了提高参数效率,模型通过扩大关键模块的通道宽度并缩小不重要模块的通道宽度来重新分配网络中的参数。基于泰勒分析,模型要么为每个头的投影设置小的通道维度,要么允许投影具有与输入相同的维度。前馈网络的扩张比也从 4 降低到 2,以帮助其参数冗余。EfficientViT 框架实施的参数重新分配策略为重要模块分配更多的通道,以便它们可以在高维空间中学习表示,从而最小化特征信息的损失。此外,为了加速干扰过程并进一步提高模型的效率,模型自动删除不重要模块中的冗余参数。

上图概述了 EfficientViT 框架,其中包括,

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

 

EfficientViT:网络架构

上图总结了 EfficientViT 框架的网络架构。模型引入了重叠的 patch 嵌入 [20,80],将 16×16 的 patch 嵌入到 C1 维度的令牌中,增强了模型在低级视觉表示学习中的能力。模型的架构由三个阶段组成,每个阶段堆叠了 EfficientViT 框架的提议构建块,并且每个子采样层(2× 分辨率的子采样)的令牌数量减少 4 倍。为了使子采样更加高效,模型提出了一个子采样块,该块具有提议的三明治布局,除了注意力层被反转残余块替换以减少信息损失。另外,模型使用批量归一化(BN)代替传统的层归一化(LN),因为 BN 可以被折叠到前面的线性或卷积层中,从而在运行时具有优势。

 

EfficientViT 模型家族

EfficientViT 模型家族由 6 个具有不同深度和宽度的模型组成,并为每个阶段分配了一个固定的头部数量。模型使用比最后阶段少的块,并且宽度在阶段中增加一个小因子,以减少最后阶段的冗余。下表提供了 EfficientViT 模型家族的架构细节,其中 C、L 和 H 分别代表宽度、深度和每个阶段的头部数量。

EfficientViT:模型实现和结果

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

ImageNet 上的结果

为了分析 EfficientViT 的性能,它被与当前的 ViT 和 CNN 模型在 ImageNet 数据集上进行了比较。比较结果如图所示,EfficientViT 模型家族在大多数情况下优于当前的框架,并在准确率和速度之间取得了良好的平衡。

与高效 CNN 和高效 ViT 的比较

模型首先将其性能与 EfficientNet 和 MobileNets 等高效 CNN 进行比较。如图所示,与 MobileNet 框架相比,EfficientViT 模型获得了更好的 top-1 准确率分数,并且在 Intel (INTC ) CPU 和 V100 GPU 上分别运行 3.0 倍和 2.5 倍更快。

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

下游图像分类

EfficientViT 模型被应用于各种下游任务,以研究模型的迁移学习能力,下图总结了实验结果。如图所示,EfficientViT-M5 模型在所有数据集上都取得了更好的或相似的结果,同时保持了更高的吞吐量。唯一的例外是 Cars 数据集,其中 EfficientViT 模型未能提供准确率。

对象检测

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

最后的思考

在本文中,我们讨论了 EfficientViT,一种使用级联组注意力和内存高效操作的快速视觉变换器家族。对 EfficientViT 的性能进行的广泛实验表明,EfficientViT 模型在大多数情况下优于当前的 CNN 和视觉变换器模型,并且我们还尝试分析了影响视觉变换器干扰速度的因素。

专业为工程师,心为作家。 Kunal是一名技术作家,对AI和ML有着深厚的热爱和理解,致力于通过其引人入胜和信息丰富的文档来简化这些领域中的复杂概念。