LeViT: aVision Transformer in ConvNet‘s Clothing for Fast in
2021/5/30 10:23:02
本文主要是介绍LeViT: aVision Transformer in ConvNet‘s Clothing for Fast in,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
摘要
我们设计了一系列图像分类架构,可以在高速模式下优化精度和效率之间的平衡。我们的工作利用了基于注意力的体系结构的最新发现,这种体系结构在高度并行处理硬件上具有竞争力。我们重温了大量文献中关于卷积神经网络的原理,并将其用于transformer,特别是分辨率不断降低的激活图。我们还引出了注意力的偏置bias。这是一种在vision transformer整合位置信息的新方法。
因此,我们提出LeViT:一种用于快速推理图像分类的混合神经网络。我们在不同的硬件平台上考虑不同的效率度量,以便更好地反映广泛的应用场景。我们大量的实验从经验上验证了我们的技术选择,并表明他们适用于大多数架构。总体而言,LeViT在速度/精度权衡方面优于现有的convnet和vision transformer。Levit效率是efficient Net网络的五倍。
code
1.介绍
变压器神经网络最初是为自然语言处理应用而引入的[1]。它们现在在该领域的大多数应用中占主导地位。它们操纵可变大小的令牌嵌入序列,这些序列被馈送到residual architecture。该模型包括两种剩余块:多层感知器(MLP)和原始类型的层:自我注意,它允许输入中的所有标记对通过双线性函数进行组合。这与局限于固定大小邻域的1D卷积方法形成对比。
最近,视觉转换器VIT架构在大规模数据集上进行预训练时,在速度和精度之间取得了最先进的图像分类结果。当仅在ImageNet培训VIT模型时。data efficient Image Transformer 可以获得竞争优势。它还引入了适用于高通量推理的较小的模型。
在本文中,我们探索了在中小型架构中提供比ViT和DeiT 更好的权衡的设计空间。我们特别感兴趣的是优化性能与精度的权衡,例如图1中针对Imagenet-1k-val 描述的吞吐量性能。
虽然很多工作旨在减少分类器和特征提取器的内存占用,但推理速度同样重要,高吞吐量对应于更好的能效。在这项工作中,我们的目标是开发一个基于视觉转换器的模型家族,并在高并行架构(如GPU、常规因特尔CPU和移动设备中常见的ARM硬件)上具有更好的interence speed 我们的解决方案重新引入了卷积组件来代替学习卷积类特征的transformer组件。特别是,我们用一个带金字塔pooling的统一结构,类似于LeNet架构。因此我们称之为LeViT。
对于给定的计算复杂度,transformer比卷积架构更快是有令人信服的原因的。大多数硬件加速器(GPU, TPU)都经过优化,可以执行大型矩阵乘法。在transformer中,注意力和MLP区块主要依靠这些操作。相比之下,卷积需要复杂的数据访问模式,因此他们的操作通常是受到输入输出的限制的。这些考虑我们探索速度/精度的权衡非常重要。
本文的贡献在允许VIT模型在宽度和空间分辨率方面缩小的技术:
1.使用注意力作为下采样机制的多级transformer架构;
2.计算效率高的片面描述符,可减少第一层中的特征数量,
3.一种可以学习到的、每个头翻译的不变注意力偏向,取代了ViT的位置嵌入。
4.重新设计的注意力-MLP模块,在给定的计算时间内提高网络容量。
2.相关工作
从LeNet [11]发展而来的卷积网络随着时间的推移已经有了很大的发展[12,13,14,15,16,17]。最近的体系结构系列侧重于寻找效率和性能之间的良好平衡[18,17,19]。例如,效率网[17]系列是通过仔细设计单个组件,然后在FLOPs约束下进行超参数搜索而发现的。
transforners transformer 架构最初是Vaswani等人为机器翻译而引入的。transformer encoder 主要依靠自关注操作和前馈层,为学习长期相关性提供了一种强大而明确的方法。transformer 随后被用于自然语言处理任务,在各种基准上提供了最先进的性能。已经有很多的尝试来使得transformer架构适用于图像,首先通过他们应用于像素。由于二次计算的复杂性和由张力机制所涉及的参数数量,大多数作者最初考虑像CIFAR或者Imagenet64 中那样的小尺寸图像。混合文本和图像嵌入已经适用带有检测边框的转换器作为输入,即大部分图像处理是在卷积域中完成的。
视觉转换器Vision Transformer 有趣的是,这种transformer architecture 非常接近初始的NLP版本,没有显式卷积(只是将固定大小的图像块线性化为向量),但它与图像分类的技术水平相竞争。Vit在大型标签数据集(如JFT300M)上进行预训练时,可以获得出色的性能,(非公开,但在Imagenet-21k上也有很不错的结果)。
这种预先训练的需要,除了强有力的数据增强之外,还可以归因于这样一个事实,也就是transformer比卷积有更好的内部结构,特别是他们没有聚焦于附近图像元素的感应偏差。作者假设需要一个大而多样的数据集来规范训练。
在DeiT中,对大型预训练数据集的需求被student-teacher 设置和更强的数据增强和正则化所取代,例如随机深度【27】或者重复增强[28,29]。教师是一个卷积神经网络,可以帮助学生网络获得卷积归纳的偏差。此后,vision Transformer成功地被更广泛的计算机视觉任务采用,包括对象检测、语义分割和图像检索。
位置编码 transformer 将一个集合作为输入,因此不随输入的顺序变换而变换。然而埋在语言和图像中,输入来自顺序很重要的结构。
初始的transformer 将绝对非参数位置编码与输入结合在了一起。其他作品已经用参数编码或者采用基于傅里叶的内核版本取代了他们。绝对位置编码对输入集实施固定大小,但有些作品使用相对位置编码,对标记之间的相对位置进行编码。在我们的工作中,我们用隐含编码空间信息的位置偏差来代替这些显式位置编码。
注意力其他机制 几项工作包括为视觉设计的神经网络结构中的注意力机制。该机制按照信道使用,以捕捉补充卷积层的交叉特征信息,选择网络不同分支中的路径,或组合二者。例如,胡等人有类squeeze and excite 网络 有一个类似的注意的模块,用于模拟层之间的通道关系。李等人 利用网络分支之间的注意力机制来使用神经元感受野。
最近 transformer的出现导致混合架构受益于其他模块。北洛提出了一种具有位置注意力成分的近似内容注意力。child等人观察到网络中的许多早期层学习类似卷积的局部连接模式。这表明,收到变压器和卷积网络的混合架构是一种极具吸引力的设计选择。最近的一些作品为不同的任务探索了这条路径。在图像分类中,最近我们与作品平行出现是金字塔视觉转换器PVT,其设计深受ResNet的启发。它主要是为了解决对象和实力分割任务。
同时,元等人提出了 token-token Vit模型。与PVT相似,他的设计依赖于在每一层之后的输出的再标记化,通过聚集相邻的标记,标记的数量逐渐减少。此外,yuan等人研究了来自CNN的架构设计选择的集成,其可以提高视觉转换器的性能和效率。正如我们将看到的,这些最近的方法不如我们在准确性和推理时间之间的权衡上的工作那么集中。他们在妥协方面没有竞争力。
3.动机
在这一节中,我们讨论了transformer 切片投影 层 看似卷积行为。然后,我们在标准卷积结构ResNet50上做嫁接实验。这一分析得出结合轮将激发我们在第四节中的后续设计选择。
3.1 Vit架构中的卷积
VIT‘s 的 patch extractor 是一个 16x16的卷积,步长为16。此外,补丁提取器的输出与学习权重相乘,以形成第一个自关注层的Q,K,V嵌入,因此我们可以认为这些也是输入的卷积函数。像DeiT和PVT这样的变体也是如此。在图2中,我们设想了DeiT的第一层注意力权重,按照注意力头细分。这比Dosovitskiy描述的主要成分更直接。人们可以观察到卷积结构固有的经典模式:注意力集中在特定模式(低频颜色/高频灰度级),这些模式类似Gabor滤波器。
在卷积掩模明显重叠的卷积中,掩模的空间平滑度来自重叠:附近的像素接收到近似相同的梯度。VIT卷积没有重叠。平滑蒙版很可能是由数据增加引起的:当图像被呈现两次,稍微平移,相同的梯度通过每个滤波器,所以它学习这个空间平滑度。
因此尽管变压器结构不存在 inductive 偏置 但训练确实产生了类似于传统卷积层的滤波器。
3.2初步实验:嫁接
VIT图像分类器的作者尝试在传统的ResNet-50上堆叠的transformer层。在这种情况下,ResNet冲到transformer的特征提取器。梯度可以通过两个网络传播回来。然而,在他们的实验中,变压器的层数是固定的VIT-Base的12层
在这一小节中,我们研究了在相似的计算预算下混合变压器和卷积网络的可能性:我们研究了当改变卷积级数和变压器层数时所获得的权衡。我们的目标是控制运行时间的同时,评估卷积和transformer混合的变化。
嫁接 嫁接的是ResNet-50 和 DeiT-Small。这两个网络运行时相似。
我们裁剪了ResNet-50的上层,同样减少了DeiT层的数量(同时保持变压器和MLP模块的数量不变)。由于裁剪后的ResNet生成的激活图比DeiT消耗的14x14激活图大,因此我们在他们之间引入了一个池化层。在初步试验中,我们发现平均池化性能最好。位置嵌入和分类标记被引入到卷积和变换层堆栈之间接口。对于ResNet-50阶段,我们使用ReLU激活单元和批处理规范化。
结果 :表1总结了结果。嫁接的架构比DeiT和ResNet-50单独使用产生更好的结果。ResNet-50的两级参数数量最少,精度最高,因为这不包括ConvNet的第三级。请注意,在这个实验中,训练过程中类似于DeiT:300纪元,我们测量ImageNet上前1名的验证京珠,速度是一个GPU每秒可以处理的图像数量。
我们在图3中显示的一个有趣的观察结果是,在训练期间,嫁接模型的收敛似乎类似于早期阶段的卷积网络。然后切换到类似的DeiT-S收敛速度。一个假设是,卷积层具有更有效的学习早期层中低级信息的表示能力,因为他们具有很强的归纳偏差,特别是他们的平移不变性。他们很快依赖于有意义的补丁嵌入,这可以解释第一个时代更快的融合。
讨论似乎在运行时控制状态下,在transformer下面加入卷积层是有益的。对于嫁接结构的精确变体,大部分处理仍然在转换器堆栈中完成。因此,下一节的重点是降低变压器的计算成本。为此,变压器架构需要与卷积级更紧密的合并,而不是仅仅嫁接。
4.模型
在这一节中,我们描述了LeVit架构的设计过程以及采取的折中方案。图4总结了该体系结构。
4.1 LeViT 的设计原则
LeViT建立在ViT架构和DeiT 训练方法的基础上,我们合并了被证明对卷积结构有用的组件。第一步是获得一个兼容的表示。不考虑分类嵌入的作用,ViT是一个处理activation maps的stack layer。 事实上,中间的令牌嵌入可以看作是FCN体系中传统的CxHxW激活映射。因此适用于激活映射 的操作应用于DeiT的中间表示。
在这项工作中,我们优化了计算结构,不一定是为了最小化参数的数量。使ResNet系列比VGG网络更搞笑的设计决策之一是在前两个阶段采用相对较小的计算预算来大幅降低分辨率。当激活图到达ResNet的第三个大阶段时,其分辨率已经缩小到足以将卷积应用于小的激活图,这降低了计算成本。
4.2 LeViT component
patch embedding在 第三节中的初步分析表明,当在Transformer stack 的输入端应用一个小转化器时,可以提高精确度。在LeViT中,我们选择对输入应用4层3X3卷积(步长为2)来执行分辨率降低。通道数C = 3 , 32 , 64 , 128 , 256这减少了对transformer较低层的activation map 的输入,而不会丢失显著信息。LeVIT-256的patch提取器将图像的形状从(3,224,224)转化为(256,14,14)和184个微操作。相比之下,ResNet-18的前10层使用1042个多维度数据集执行相同的降维。
没有分类令牌 为了使用BCHW张量格式,我们移除了分类标记,类似于卷积神经网络,我们用最后一个激活图上的平均池化来代替它,这产生了一个用于分类器的嵌入。对于训练中的整流,我们为分类和蒸馏任务训练单独的head。在测试时,我们对两个磁头的输出进行平均。在实践过程中LeViT可以实现BNC或者BCHW张量格式,这样更有效。
正则化层和激活函数 ViT架构中的FC层相当于1x1的卷积。ViT在每个注意力和MLP单位之前使用层标准化。对LeViT,每个卷积后都有一个批量归一化。在【54】之后,与剩余连接结合的每个batch的标准化参数都被初始化为0。批量归一化可以与前面的卷积合并进行推理,这是层归一化的运行时优势,例如在EfficientNet B0中这种融合将GPU的推理速度提高了两倍,DeiT使用GELU函数而LeViT的所有非线性激活都是hardwish。
多分辨率金字塔 卷积架构被构建为金字塔,在金字塔中,激活图的分辨率随着处理期间信道数量的增加而降低。在第三节中,我们使用ResNet-50阶段对transformer组进行预处理。LeViT将ResNet级集成到转换器架构中。在stage内部,结构类似于视觉transformer:一个残差架构 和 可选择的MLP 和激活块。在接下来我们使用了注意力模块的修改。
下采样 在LeViT阶段之间,缩小的关注块减少了激活图的大小:在Q变换之前应用二次采样,然后传播到软激活的输出。这将一个大小为(C, H , W)的 输入张量映射到一个大小为(C0 , H/ 2 , W/2 )的输出张量,其中C0> C . 由于比例的变化,这个注意力块在没有剩余连接的情况下使用。为了防止信息都是我们将注意力头改成C/D。
注意力bias而不是positional embedding transformer架构中的位置嵌入式一个位置相关的可训练参数向量,在将token嵌入到transformer模块之前,将其添加到令牌嵌入之中。如果不存在,转换器输出将独立于输入令牌的排列。位置嵌入的消融导致分类精度急剧下降。然而,位置嵌入只包含在注意力块序列的输入中。因此,由于位置编码对于更高层也很重要,所以它可能会保留在中间表示中。并且不必要地使用表示容量。
因此,我们的目标是提供每个注意力块内的位置信息,并在注意力机制中明确注入相对位置信息:我们只需要在注意力图中添加一个注意偏差。一个标度关注值 在(x,y) ∈[H]X[W] 和 (x’,y’)∈[H]x[W] 标量关注值如下公式。
第一项是经典注意力。第二个是翻译不变的注意力偏向。每个头都是对应不同像素偏移量的HxW参数。将差异x-x’ 和 y-y’对称化有助于模型以翻转不变性进行训练。
更小的键 偏置项觉少了键编码位置的压力,因此我们相对于V矩阵减少了键矩阵的大小。如果键的大小为D∈ {16,32}, V就会有2D通道。限制秘钥的大小可以较少计算秘钥产品QK所需的时间。
对于没有剩余连接的下采样层,我们将维设置为4D,以防止信息丢失。
注意力激活 我们适应常规线性投影来组合不同的头部输出之前,我们对生成 AhV 应用Hardwish激活。这类似于ResNet的bottleneck剩余块,因为V是1x1卷积的输出,AhV对应于空间卷积,投影是另一个1X1的卷积。
减少MLP块 VIT中的MLP残差块是一个线性层,它将嵌入维度数增加了4倍,应用了一个非线性,并用另一个非线性将其降低回原始嵌入维数。对于视觉架构而言,MLP通常在运行时间和参数方面比注意力块更加昂贵。对于LeViT,“MLP”是1X1的卷积,然后是通常的批量归一化。为了降低该阶段的计算成本,我们将卷积的展开因子从4降低到2.一个设计目标是注意力和MLP块消耗大约相同数量的浮点运算。
4.3 LeViT家族模型
LeViT模型可以通过改变计算阶段的大小来产生一系列速度-精度权衡。我们通过输入到第一个变压器的通道数来识别他们,例如LeVit-256在变压器级的输入端有256个通道。在表2显示了如何为我们在文本中评估模型设计阶段。
这篇关于LeViT: aVision Transformer in ConvNet‘s Clothing for Fast in的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享