LeViT

LeViT: a Vision Transformer in ConvNet’s Clothing for Faster Inference

https://github.com/facebookresearch/LeViT

https://mp.weixin.qq.com/s/XPN_9w8doyAdGQJft6BR1Q

https://arxiv.org/abs/2104.01136v2

摘要:我们设计了一系列图像分类架构,优化了在高速状态下准确度和效率之间的权衡。我们的工作利用了基于注意的架构的最新发现,这种架构在高度并行处理硬件上具有竞争力。我们回顾了卷积神经网络大量文献中的原理,将其应用于Transformer,特别是分辨率降低的激活图。我们还介绍了注意力偏置,这是一种在视觉Transformer中整合位置信息的新方法。

因此,我们提出了LeVIT:一种用于快速推理图像分类的混合神经网络。我们考虑不同的硬件平台上的不同的效率措施,以便最好地反映广泛的应用场景。我们的大量实验验证了我们的技术选择,并表明它们适用于大多数架构。总体而言,LeViT在速度/精度权衡方面明显优于现有的ConvNet和vision transformers。例如,在80%的ImageNet top-1精度下,LeViT比CPU上的EfficientNet快5倍

1    引言

Transformer神经网络最初用于自然语言处理应用[1]。目前,它们在该领域的大多数应用中占据主导地位。他们处理可变大小的token 嵌入序列,这些序列被馈送到残差的架构。该模型包括两类残差块:多层感知器(MLP)和原始类型的层:自注意,它允许通过两个线性函数组合输入中的所有token对。这与仅限于固定大小邻域的一维卷积方法形成对比。

最近,vision transformer(ViT)架构[2]在与大规模数据集预训练的速度-精度权衡中获得了最新的图像分类结果。仅在ImageNet[4]上训练ViT模型时,数据高效图像Transformer[3]获得了具有竞争力的性能。它还引入了适用于高通量推理的较小模型。

在本文中,我们探索了设计空间,以便在中小型架构领域提供比ViT/DeiT模型更好的折衷方案。我们特别感兴趣的是优化性能-精度折衷,如图1所示的Imagenet-1k-val的吞吐量(图像/秒)性能[5]。

虽然许多工作[6、7、8、9、10]旨在减少分类器和特征提取器的内存占用,但推理速度同样重要,高吞吐量对应更好的能效。在这项工作中,我们的目标是开发一个基于Vision Transformer的模型系列,在GPU、常规Intel CPU和移动设备中常见的ARM硬件等高并行架构上具有更好的推理速度。我们的解决方案重新引入卷积组件,代替学习卷积特性的Transformer组件。特别是,我们将Transformer的统一结构替换为具有池化的金字塔,类似于LeNet[11]架构。因此我们称之为LeViT。

对于给定的计算复杂度,Transformer比卷积结构更快,这有令人信服的原因。大多数硬件加速器(GPU、TPU)都经过优化以执行大型矩阵乘法。在Transformer中,注意和MLP块主要依赖于这些操作。相反,卷积需要复杂的数据访问模式,因此它们的操作通常受到IO限制。这些注意事项对于我们探索速度/精度权衡非常重要。

这篇论文的贡献是使ViT模型在宽度和空间分辨率方面缩小的技术:

•    多级Transformer结构,将注意力用作下采样机制;

•    计算效率高的图块描述符(descriptor),可减少第一层中的特征数量;

•    可学习的、每头平移不变的注意偏差,取代ViT的位置嵌入;

•    重新设计的注意力MLP块,在给定计算时间内提高网络容量。

2    相关工作

从LeNet[11]衍生出来的卷积网络随着时间的推移已经发生了实质性的演变[12,13,14,15,16,17]。最新的架构系列侧重于在效率和性能之间找到一个良好的平衡点[18,17,19]。例如,EfficientNet[17]家族是通过仔细设计单个组件,然后在FLOPs约束下搜索超参数而发现的。

Transformer。

Vaswani等人[1]首先为机器翻译引入了transformer架构。Transformer编码器主要依赖于与前馈层结合的自注意操作,为学习长距离依赖提供了一种强大而明确的方法。Transformer随后被用于NLP任务,在各种基准上提供最先进的性能[20,21]。已经有很多尝试将transformer架构应用于图像[22,23],首先是将其应用于像素。由于二次计算复杂性和注意机制涉及的参数数量,大多数作者[23,24]最初考虑的是小尺寸图像,如CIFAR或Imagenet64[25]。混合文本和图像嵌入已经使用带有检测边界框的Transformer作为输入[26],即大部分图像处理在卷积域中完成。

视觉Transformer(ViT)[2]。

有趣的是,这种Transformer架构非常接近最初的NLP版本,没有显式卷积(只是将固定大小的图像块线性化为向量),但它在图像分类方面与最先进的技术竞争。ViT在JFT300M(非公开,尽管在Imagenet-21k上的训练也会产生有竞争力的结果)等大型标记数据集上进行预训练时,可获得良好的性能。

除了强大的数据增强外,这种预训练的必要性可归因于Transformer的built-in结构比卷积少,特别是它们没有归纳偏置来聚焦附近的图像元素。作者假设需要一个大而多样的数据集来正则化训练。

在DeiT[3]中,对大型预训练数据集的需求被学生-教师设置和更强的数据增强和正则化所取代,如随机深度[27]或重复扩充[28,29]。教师是一个卷积神经网络,“帮助”学生网络获得卷积的归纳偏差。此后,视觉Transformer已成功应用于更广泛的计算机视觉任务,包括目标检测[30]、语义分割[31]和图像检索[32]。

位置编码。

Transformer以一个集合作为输入,因此对输入的顺序是不变的。然而,无论是在语言还是在图像中,输入都来自于一个顺序很重要的结构。原始Transformer[1]将绝对非参数位置编码与输入合并。其他作品已经用参数编码[33]取代了它们,或者采用了基于傅立叶的核化版本[22]。绝对位置编码对输入集强制执行固定大小,但有些作品使用相对位置编码[34],对token之间的相对位置进行编码。在我们的工作中,我们将这些显式位置编码替换为隐式编码空间信息的位置偏差。

沿着其它机制的注意力。

有几项工作包括了为视觉设计的神经网络结构中的注意机制[35,36,37,38]。该机制用于按通道捕获补充卷积层的交叉特征信息[39、40、41],选择网络不同分支中的路径[42],或将两者结合起来[43]。例如,Hu等人[44]的SE网络有一个类似注意的模块,用于模拟层特征之间的通道关系。Li等人[37]利用网络分支之间的注意机制来适应神经元的感受野。

最近,Transformer的出现导致了混合架构,受益于其他模块。Bello[45]提出了一种带有位置注意成分的近似内容注意。Child等人[23]观察到网络中的许多早期层学习本地连接的模式,类似于卷积。这表明,由transformers和convnets设计的混合架构是一个引人注目的设计选择。最近的一些作品为不同的任务探索了这一途径[46,47]。在图像分类方面,最近与我们并行的一项工作是金字塔视觉Transformer(PVT)[48],其设计深受ResNet的启发。它主要用于处理对象和实例分割任务。

与我们的工作同时,Yuan等人[49]提出了Tokens-to-Tokens-ViT(T2T-ViT)模型。与PVT类似,它的设计依赖于在每一层之后通过聚合相邻的token来重新标记输出,这样token的数量会逐渐减少。此外,Yuan等人[49]研究了CNN[44、50、51]中架构设计选择的集成,这可以提高视觉Transformer的性能和效率。正如我们将看到的,这些最新的方法没有我们在准确性和推理时间之间的权衡上的工作那么集中。他们在这一平衡方面没有竞争力。

3    动机

在本节中,我们将讨论Transformer图块投影层的seemly卷积行为。然后,我们在标准卷积结构(ResNet-50)上进行Transformer(DeiTS)的“嫁接实验”。该分析得出的结论将激励我们在第4节中进行后续设计选择。

3.1 ViT架构中的卷积

ViT的patch extractor是一个16x16卷积,步幅为16。此外,图块提取器的输出乘以可学习的权重,以形成第一层自注意的、和嵌入,所以我们可以认为这些也是输入的卷积函数。像DeiT[3]和PVT[48]这样的变体也是如此。在图2中,我们将DeiT的注意力权重的第一层可视化,按注意力头进行分解。这比Dosovitskiy等人[2]描述的主成分更直接。人们可以观察到卷积结构固有的典型模式:注意力集中在特定的模式(低频颜色/高频灰度),这些模式类似于Gabor滤波器。

在卷积mask有重叠(编者注:卷积核大小>滑动步幅)的卷积中,卷积mask的空间平滑度来自重叠:附近的像素接收大致相同的梯度。对于ViT卷积,没有重叠(编者注:ViT中,核=16,滑动步幅=16)。平滑度mask可能是由数据增加引起的:当图像显示两次时,稍微平移,相同的梯度通过每个滤波器,因此它学习这种空间平滑度。因此,尽管Transformer结构中没有“归纳偏置”,但训练确实产生了类似于传统卷积层的滤波器。

3.2    初步实验:嫁接

ViT图像分类器[2]的作者尝试将Transformer层堆叠在传统的ResNet-50上。在这种情况下,ResNet充当Transformer层的特征提取器,梯度可以通过两个网络传播回来。然而,在他们的实验中,Transformer层数是固定的(例如,12层用于ViT-base)。

在本小节中,我们研究了在类似计算预算下,将Transformer与卷积网络混合的可能性:我们探讨了在改变卷积阶段数和Transformer层的数量时获得的权衡。我们的目标是在控制运行时间时评估卷积和Transformer混合的变化。

嫁接。

嫁接结合了ResNet-50和DeiT-Small。这两个网络具有相似的运行时。

我们裁剪了ResNet-50的上层,同样减少了DeiT层的数量(同时保持Transformer和MLP块的数量相同)。由于裁剪后的ResNet生成的激活映射比DeiT输入的14×14激活映射更大,因此我们在它们之间引入了一个池化层。在初步实验中,我们发现平均池的性能最好。在卷积层和Transformer层堆栈的接口处引入了位置嵌入和分类标记(classification token)。对于ResNet-50阶段,我们使用ReLU激活单元[52]和批量标准化[53]。

结果。

表1总结了结果。嫁接的架构比单独使用DeiT和ResNet-50产生更好的结果。参数最少而模型最高的模型是具有两个阶段的ResNet50,因为它没有包括计算量很大的卷积第三阶段。请注意,在本实验中,训练过程类似于DeiT:300时代,我们在ImageNet上测量top-1验证精度,并将速度作为一个GPU每秒可以处理的图像数。

我们在图3中所示的一个有趣的观察结果是,训练期间嫁接模型的收敛似乎类似于早期时期的convnet,然后切换到类似于DeiT-S的收敛速度。一个假设是卷积层由于其强烈的归纳偏置(明显的平移不变性),有能力在前几层更高效地学习到low-level信息的表示。它们快速依赖于有意义的图块嵌入,这可以解释第一个epoch的更快收敛。

讨论。

在运行时控制的情况下,在Transformer下方插入卷积级似乎是有益的。对于嫁接架构的最精确变体,大部分处理仍在Transformer堆栈中完成。因此,下一节的重点是降低Transformer的计算成本。为此,Transformer架构需要与卷积阶段更紧密地合并,而不仅仅是嫁接。

4    模型

在本节中,我们将描述LeViT架构的设计过程以及所采取的权衡。图4总结了该架构。

4.1 LeViT的设计原则

LeViT建立在ViT[2]架构和DeiT[3]训练方法的基础上。我们合并了被证明对卷积架构有用的组件。第一步是获得兼容的表示。不考虑分类嵌入的作用,ViT是一个处理激活映射的层堆栈。实际上,中间的“token”嵌入可以看作是FCN架构(BCHW格式)中的传统C×H×W激活映射。因此,应用于激活映射(池、卷积)的操作可以应用于DeiT的中间表示。

在这项工作中,我们优化了计算的架构,不一定要最小化参数的数量。使ResNet[14]系列比VGG网络[13]更高效的设计决策之一是在其前两个阶段应用强大的分辨率降低,且计算预算相对较小。当激活映射到达ResNet的参数量很多的第三阶段时,其分辨率已经缩小到足以将卷积应用于小激活映射,从而降低了计算成本。

4.2     LeViT部件

图块嵌入(Patch embedding)。

第3节中的初步分析表明,当对Transformer组的输入应用小型convnet时,可以提高精度。

在LeViT中,我们选择对输入应用4层3×3卷积(步幅2),以执行分辨率降低。通道数为C=3、32、64、128、256。这减少了Transformer下层的激活映射输入,而不会丢失显著信息。LeViT-256的图块提取器将图像形状(3,224,224)转换为(256、14、14),具有184 MFLOP。为了进行比较,ResNet-18的前10层使用1042 MFLOP执行相同的降维。

没有分类token。

为了使用BCHW张量格式,我们删除了分类标记。与卷积网络类似,我们将其替换为最后一个激活映射上的平均池化,从而生成用于分类器的嵌入。对于训练期间的蒸馏,我们为分类和蒸馏任务分别训练头。在测试时,我们平均两个头的输出。实际上,LeViT可以使用BNC或BCHW张量格式实现,以更高效的为准。

归一化层和激活。

ViT架构中的FC层相当于1×1卷积。ViT在每个注意和MLP单元之前使用layer norm。对于LeViT,每次卷积后都会进行batch nom。在[54]之后,与残差连接相连的每个批标准化权重参数都初始化为零。batch nom可以与前面的卷积合并进行推理,这是相对于layer norm的运行时优势(例如,在EfficientNet B0上,此融合将GPU上的推理速度提高了一个因子2)。虽然DeiT使用GELU函数,但LeViT的所有非线性激活都是Hardswish[19]。

多分辨率金字塔。

卷积架构构建为金字塔,其中激活映射的分辨率随着处理期间通道数量的增加而降低。在第3节中,我们使用ResNet-50级对Transformer堆栈进行预处理。

LeViT将ResNet阶段集成到Transformer架构中。在阶段内部,该架构类似于一个视觉Transformer:一个具有交替MLP和激活块的残差结构。在下文中,我们回顾了与经典设置相比,注意块(图5)的修改[1]。

下采样。

在LeViT阶段之间,收缩注意块(shrink attention block)减小激活图的大小:在变换之前应用下采样,然后传播到软激活的输出。这将大小为的输入张量映射为大小为且的输出张量。由于尺度的变化,使用此注意块时没有残差连接。为了防止信息丢失,将注意头的数量定为。

用注意偏置取代位置嵌入

Transformer结构中的位置嵌入是一个位置相关的可训练参数向量,在将标记嵌入输入Transformer块之前添加到标记嵌入中。如果不存在,则Transformer输出将独立于输入标记的排列。位置嵌入的烧蚀导致分类精度急剧下降[55]。

然而,位置嵌入仅包含在注意块序列的输入上。因此,由于位置编码对于更高的层也很重要,因此它很可能保留在中间表示中,并且不必要地使用表示容量。

因此,我们的目标是在每个注意块中提供位置信息,并在注意机制中显式地注入相对位置信息:我们只需在注意映射中添加注意偏差。一个注意力头中,两个像素和之间的标量注意力值计算为:

    

第一个项是经典注意。第二个是平移不变的注意力偏置。对应于不同的像素偏移,每个头有个参数。将差异和对称化鼓励模型使用翻转不变性进行训练。

更小的键

偏置项减少了对键进行位置信息编码的压力,因此我们减小了键矩阵相对于值矩阵的大小。如果键的维度是,那么值的维度是。限制键的维度可以减少计算key product所需的时间。

对于没有残差连接的下采样层,我们将的维度设置为,以防止信息丢失。

注意激活。

在使用常规的线性投影组合不同头的输出之前,我们对乘积使用Hardwish激活函数。这类似于ResNet瓶颈残差块,即V是1×1卷积的输出,对应于空间卷积,投影是另一个1×1卷积。

减少MLP块。

ViT中的MLP残差块是一个线性层,它将嵌入维度增加了因子4,接着应用非线性,然后再使用另一个非线性将维度缩减回原来大小。对于vision架构,MLP在运行时和参数方面通常比注意块更昂贵。对于LeViT,“MLP”是一个1×1卷积,然后是通常的批量归一化。为了降低该阶段的计算成本,我们将卷积的展开因子从4减少到2。一个设计目标是注意块和MLP块消耗大约相同数量的FLOPs。

4.3 LeViT系列模型

LeViT模型可以通过改变计算阶段的大小来产生一系列速度-精度权衡。我们通过输入到第一个Transformer的通道数来识别它们,例如,LeViT-256在Transformer级的输入上有256个通道。表2显示了如何为我们在本文中评估的模型设计阶段。

表2:LeViT模型。每个阶段由若干对注意块和MLP块组成。 :头数, :通道数量, : 和 运算符的输出维数。将阶段分开的是收缩注意块,其值 、 分别取自上面和下面的行。概率为 的Drop path应用于每个残差连接。步幅为2的块中的 值为 ,以弥补残差连接的不足。每个注意块后面都有一个扩展因子为2的MLP






5个实验

5.1实验背景

数据集和评估。

我们在最接近我们的方法的DeiT工作上模拟我们的实验。它建立在Pytork[56]和Timm库[57]的基础上。我们在ImageNet-2012数据集上进行训练,并对其验证集进行评估。我们不会在这项工作中使用更多的训练数据。

资源消耗。

普遍接受的推断速度度量单位是乘加运算(又称触发器),因为浮点矩阵乘法和卷积可以表示为乘加运算。

但是,某些操作,尤其是非线性激活,不执行乘加操作。在触发器计数(或计数为单个触发器)中,它们通常被忽略,因为假定它们的成本可以忽略,即高阶矩阵乘法和卷积的成本。然而,对于少数通道,像GELU这样复杂激活的运行时间与卷积的运行时间相当。此外,根据所使用的硬件和API,使用相同数量的触发器的操作效率可能会有所不同。

因此,我们还报告了参考硬件上的原始计时,如最近的论文[2,58]。Transformer的效率几乎完全依赖于大降维矩阵乘法。

硬件。

在这项工作中,我们在PyTorch中运行所有实验,因此我们依赖于该API中可用的优化。为了获得更多的客观计时,我们在三个不同的硬件平台上计时推断,每个平台对应一个用例:

•一个16GB NVIDIA Volta GPU(峰值性能为12 TFLOP/s)。这是一个典型的训练加速器。

•2.0GHz的Intel Xeon 6138 CPU。这是数据中心中的典型服务器,对传入图像流执行特征提取。PyTorch使用MKL和AVX2指令(16个矢量寄存器,每个256位)对此配置进行了优化。

•ARM重力2 CPU(亚马逊C6g实例)。对于移动电话和其他边缘设备正在运行的处理器类型来说,它是一个很好的模型。Gravion2有32个内核,支持带有32个128位向量寄存器(NEON)的NEON向量指令集。

在GPU上,我们在大图像批上运行计时,因为这对应于典型的用例;在DeiT之后,我们使用适合内存的两个batchsize的最大功率。在CPU平台上,我们在单个线程中测量推断时间,模拟多个线程处理单独的输入图像流的设置。

很难分离硬件和软件的影响,因此我们使用标准PyTorch工具(justin time编译器,不同的优化配置文件)试验了几种优化网络的方法。

5.2训练LeViT

我们使用32个GPU,在3到5天内完成1000次训练。这比卷积网络的常规计划要多,但视觉Transformer需要长时间的训练,例如,1000个历元的训练DeiT在300个历元中提高了2个top-1精度点。为了使训练正规化,我们使用蒸馏驱动训练,类似于DeiT。这意味着LeViT使用两个具有交叉熵损失的分类头进行训练。第一个负责人接受groundtruth课程的监督,第二个负责人接受ImageNet上训练的RegNetY-16GF[18]模型的监督。事实上,LeViT的训练时间主要取决于教师的推理时间。

5.3速度-精度权衡

表3显示了我们通过LeViT获得的速度精度折衷,图1中绘制了一些显著的数字。我们将其与最新技术中的两种竞争性架构进行比较:作为强卷积基线的效率网[17],以及类似地,作为强仅Transformer架构的效率网[3]。这两条基线都在以下条件下进行训练,以最大限度地提高其准确性。例如,我们将其与1000个时代训练的神进行比较。

在操作点的范围内,我们认为,LeVIT架构远远优于Transformer和卷积变体。LeViT-384在精确度上与Deit不相上下,但使用了一半的失败次数。差距扩大,以获得更快的操作点:LeViT-128S与DeiT Tiny不相上下,使用的触发器数量减少了4倍。

运行时度量密切跟踪这些趋势。例如,LeViT-192和LeViT-256的精度与EfficientNet B2和B3大致相同,但在CPU上分别快5倍和7倍。在ARM平台上,float32操作的优化程度不如Intel。然而,速度-精度的权衡仍然对LeViT有利。

5.4与最新技术的比较

表4报告了其他基于Transformer的架构的结果,以与LeViT进行比较(表3)。由于我们的方法专门用于高通量模式,因此我们不包括非常大和缓慢的模型[61,62]。

我们在FLOPs精度权衡方面进行了比较,因为其他工作都是最新的,不一定提供参考模型,我们可以根据这些模型对推断进行计时。所有Token-to-Token ViT[49]变型比LeViT-384多5倍的触发器,比LeViT的精度更高的参数。瓶颈Transformer[46]和“视觉Transformer”[47](不要与ViT混淆)都是通用架构,也可用于检测和对象分割。在相当的精度下,两者都比LeViT-192慢5倍左右。金字塔视觉Transformer[48]也是如此(表中未报告),但其设计目标不同。与这些架构相比,LeViT的优势在于它受益于类似于DeiT的蒸馏,这使得它在仅在ImageNet上进行训练时更加准确。与LeViT相近的两种架构是基于池的vision transformer(PiT)[59]和CvT[60],ViT的变体具有金字塔结构。PiT是最有希望的一种,它包含了许多DeiT的优化成分,但仍然比LeViT慢1.2到2.4倍。

交互评估。

在表3中,我们评估了替代测试集、Imagenet Real[63]和Imagenet V2匹配频率[64]上的LeViT。这两个数据集使用与ImageNet相同的类集和训练集。Imagenet Real重新评估了标签,每个图像可能有几个类别。Imagenet-V2(在我们的例子中是匹配频率)使用不同的测试集。测量两者的性能以验证hyperparameters调整没有导致过拟合到ImageNet的验证集是很有趣的。因此,对于在ImageNet验证中具有同等精度的模型,我们在替代测试集上测量分类性能。LeViT-256和EfficientNet B3:LeViT变体在-Real上获得相同的分数,但在-V2上稍差(-0.6)。LeViT-384和DeiT Small:LeViT在-Real(-0.2)和-V2(-0.4)上稍差。尽管在这些评估中,LeViT的准确度相对较低,但与EfficientNet和DeiT相比,速度-准确度权衡仍然成立。

5.5烧蚀

为了评估LeViT的性能,我们使用默认设置进行实验,并一次替换一个参数。我们训练LeViT-128S模型和许多变体,以评估与ViT/DeiT相关的设计变更。实验只进行了100次训练,以扩大差异并缩短训练时间。对于更大的模型和更长的训练计划,结论仍然存在。我们一次更换一个组件,当网络需要返工时,我们确保触发器计数保持大致相同(详见附录a.2)。表5显示,所有更改都会降低精度:

A1-

没有金字塔形状的烧蚀会直接堆积注意力和MLP(像DeiT)。然而,为了保持触发器计数与基线相似,网络宽度减小,导致网络具有少量参数,导致最终精度非常低。这表明LeViT中分辨率的降低是控制计算复杂度的主要工具。

A2-

没有PatchConv:我们用一个大小为16的卷积来移除四个预处理卷积。这对参数的数量几乎没有影响,但触发器的数量减少了10%。这对准确性有很大的负面影响。这可以解释,因为在低容量区域,卷积是压缩3·162=768维图块输入的有效方法。

A3-

在没有BatchNorm的情况下,我们将BatchNorm替换为在ViT/DeiT架构中使用的预激活的LayerNorm。这稍微减慢了模型的速度,因为需要在测试时计算批次统计数据。删除BatchNorm也会删除残差连接的零初始化,这会中断训练。

A4-

从RegNetY-16GF教师模型中删除硬蒸馏的使用会降低性能,如DeiT所示。

A5-

无注意偏差烧蚀将注意偏差组件替换为Transformer堆栈(如DeiT)输入上添加的经典位置嵌入。让每一个注意力集中的人学习一种独立的偏见似乎是有用的。

A6-

我们使用DeiT样式块,即Q、K和V都具有尺寸D=C/N,MLP块具有膨胀系数4。

A7-

除了softmax非线性之外,LeViT还增加了额外的Hardswish非线性。除去它,无注意激活消融会降低性能,表明额外的非线性有助于学习分类类别边界。

6结论

本文介绍了LeViT,一种受卷积方法启发的Transformer结构。LeViT的准确性主要源于DeiT中的训练技术。它的速度来自一系列精心控制的设计选择。与其他用于数据中心或移动电话特征提取的高效神经网络相比,LeViT在可比精度下的速度快1.5到5倍。因此,据我们所知,它在高速领域的精确性和精确性之间的权衡方面开创了一种新的技术状态。相应的PyTorch代码和型号可在https://github.com/ facebookresearch/LeViT

在本附录中,我们报告了更多细节和结果。附录A详细说明了组成块的时间安排,并提供了有关消融的更多细节。我们在附录B中提供了注意力偏差的可视化。

附录

详细分析

A.1分组计时

在本节中,我们将从详细的运行时分析的角度比较DeiT和LeViT块之间的设计差异。我们在补充表6中并排测量其组成部分的运行时间。对于DeiT Tiny,我们将GELU激活替换为Hardswish,否则它将主宰运行时。

对于DeiT,我们考虑了一个从DeiT极小的街区。对于LeViT,我们考虑从LeVIT256的第一阶段的块。虽然LeViT宽33%(C=256 vs C=192),但两者都以14×14的分辨率运行,运行时间也相当。请注意,阶段1是LeViT-256最昂贵的部分。在第2和第3阶段,由于分辨率降低,成本较低(参见主要论文的图4)。

LeViT计算注意力QKT的时间较少,但在随后的矩阵积AV上花费的时间较多。尽管具有更大的块宽度C,LeViT在MLP组件上花费的时间更少,因为扩展因子从4降低到2。

A.2关于我们消融的更多细节

在这里,我们在主要论文的第5.6节和表4中给出了烧蚀实验的更多细节。

A1–没有金字塔形状。

我们测试了LeViT金字塔结构的效果,我们用分辨率为14×14的深度为11的单级替换了三级。

为了保持触发器计数,我们取D=19,N=3,C=2=114。

A6–无更宽的挡块。

与DeiT相比,LeViT块相对较宽,具有较小的键数和MLP扩展因子。为了测试这一变化,我们修改了LeViT-128S,使其具有更传统的块,同时保留了触发器的数量。因此,对于这三个阶段,我们取Q,K,V的维数D=30,C=ND=120,180,240。与DeiT一样,MLP膨胀比为4。在子采样层中,我们分别使用N=4C/D=16和24。

视觉化:注意偏差

注意偏差映射自Eqn。本文中的1只是二维地图。因此,我们可以将它们可视化,见图6。它们可以被解读为处于某个相对位置的两个像素之间的注意量。偏置的最低值足够低(-20)以抑制两个像素之间的注意,因为它们被输入到softmax。我们可以观察到,一些头部是相当均匀的,而其他头部则专注于附近的像素(例如,大多数注意力缩小的头部)。一些是明显定向的,例如,阶段2/块1的头1和4分别处理垂直和水平相邻的像素。第2级块4的头1具有特定的周期2模式,这可能是由于其输出被馈送到下一个收缩块中的子采样滤波器。

你可能感兴趣的:(LeViT)