23年7月来自阿联酋、韩国、瑞典和美国多家机构的论文“SwiftFormer: Efficient Additive Attention for Transformer-based Real-time Mobile Vision Applications“。
在各种视觉应用中,自注意已经成为捕捉全局上下文的一种实际选择。然而,相对于图像分辨率的二次计算复杂度,限制了其的实时应用,尤其是在资源受限的移动设备部署。尽管已经提出了混合方法来结合卷积和自注意的优点,实现更好的速度-精度权衡,但自注意中昂贵的矩阵乘法运算仍然是一个瓶颈。这项工作引入了一种新的高效加性注意机制,该机制用线性元素乘法有效地取代了二次矩阵乘法运算。该设计表明,在不牺牲任何精度的情况下,可以用线性层代替K-V交互。与以前方法不同,该高效的自注意,能够在网络的所有步使用。利用提出的高效加性注意,作者建立了一系列名为“SwiftFormer”的模型,该模型在准确性和移动推理速度方面都达到了最先进的性能。小规模模型的变型,在iPhone 14上仅用0.8毫秒的延迟就实现了78.5% ImageNet-1K的top-1准确率,与MobileViT-v2相比,它更准确,速度快2倍。
高效CNN:近年来,为移动视觉应用设计高效的CNN受到了广泛关注。MobileNet架构[15,16,39]提出了深度可分离卷积以及高效的逆向残差块,提高各种视觉任务的性能。其他方法旨在利用深度膨胀卷积[32]、通道混洗和逐点组卷积[27,59]、网络修剪[12,50]、低比特-宽度[1,17]和神经架构搜索[15,41]来提高效率。基于CNN的方法性能良好、高效且快速地在边缘设备上进行训练和运行,因此在行业中得到了广泛使用。然而,它们在空间上是局部的,并且在特征之间缺乏全局交互,这严重影响了它们的性能。
高效Transformer:ViTs[9]已被广泛用于许多视觉任务,并在数据效率[22,44]、Transformer架构[3,20,30,56]和token机制[43,52]方面取得了重大进展。减少可视化token的数量是对 Transformer架构的一个重大修改,实现高效部署。一些方法不是在整个体系结构中使用固定的特征表示,而是采用分层设计,其中分辨率在各个阶段逐渐降低,包括下采样技术[10,14,38,40]和金字塔结构[47,49]。最近,一些方法[11,34,37]提出了仅对最大信息量token的子集进行编码的token稀疏化技术。
最近提出了许多方法,计算其近似变型来降低自注意的二次复杂度,这是基于Transformer架构的计算瓶颈[5,19,29,31,34,45,46]。EdgeViT[34]使用只关注少数token的全局稀疏注意模块来提高效率,而[48]对token和 K-V向量进行下采样,从而实现更好的效率-准确性权衡。EdgeNeXt[29]采用转置自注意运算来计算跨通道维度而非空间维度的注意图,然后进行token混合,具有相对于token数量的线性复杂度。Reformer[19]将点积注意替换为对局部敏感的哈希来对token进行分组,并将复杂性从O(n2)降低到O(nlogn)。然而,这种设计只对较长的序列有效,而ViT通常不是这样。LinFormer[46]是一种低秩矩阵分解方法,它用低秩矩阵逼近自注意矩阵,将复杂度从O(n2)降低到O(n)。尽管矩阵分解方法在理论上降低了自注意的复杂性,但用昂贵的投影来计算注意,这可能无法将FLOPS和参数的减少反映为移动平台上的实际速度。
尽管这些方法在理论上降低了自注意的复杂性,但足以降低移动端部署的推理速度。由于与最后阶段相比,多头自注意(MHSA)在早期阶段的复杂性更高,EfficientFormer[20]在最后阶段结合MHSA,仅用于从高级特征中学习上下文信息,而不会显著提高推理速度。最近,MobileViT-v2[31]提出了可分离的自注意,该方法使用逐元素运算而不是点积来计算具有线性复杂度的注意图。
有效的全局上下文建模:如前所述,大多数现有方法要么使用标准MHSA,要么使用近似变型来学习全局上下文。然而,在资源受限的设备上,它们很难像MobileNets那样快速运行。这可能是由于保持计算过程中的计算密集型乘法运算,或者这些方法中依赖于高级的整形和索引运算。例如,最近的MobileViT-v2[31]比MobileNet-v2[39]慢2倍。用有效的加性注意设计对全局上下文进行编码可以减少与token数量有关的操作,而不是使用矩阵乘法。预计这将有助于以类似的速度和模型大小进行操作,同时实现与MobileNets相比更高的准确性。
重新思考K-V交互:除了注意计算过程中的乘法运算外,最近在NLP领域探索了加性注意[51]。然而,在标准形式中,它执行三步处理,对Q、K和V交互进行建模。每个步骤馈入下一个步骤,因此需要顺序处理。在这里,通过减少计算K-V之间显式交互的需要,重新思考视觉任务的加性注意。从经验上讲,消除K-V互动并用简单的线性变换代替,可以编码更好的上下文表征。设计只对全局Q和K交互进行编码,学习全局上下文信息,然后进行线性变换,计算全局上下文-觉察的注意权重。
一致的混合设计:大多数现有方法在最后步使用MHSA或近似变型,同时避免在早期阶段使用。这是因为MHSA的计算复杂性随着token的长度呈二次方增长,使得在初始中采用变得不切实际。这种限制增加了设计的复杂性,需要仔细选择可以应用MHSA的阶段。相比之下,SwiftFormer模块具有相对于token长度的线性复杂性,并且可以被纳入所有阶段,以在每个尺度上学习一致的全局上下文。这种一致性提高了模型性能,使其更具通用性和可扩展性,适用于高分辨率图像。
如图是不同的自注意模块之间比较。(a) 是ViTs中使用的一种典型的自注意[9]。(b) 是EdgeNeXt[29]中使用的转置自注意,其中自注意操作应用于通道特征维度(d×d)而不是空间维度(n×n)。(c) 是MobileViT-v2[31]的可分离自注意,它用逐元素运算根据Q和K矩阵交互计算上下文向量。然后,将上下文向量乘以V矩阵以产生最终输出。(d) 有效的加性自注意。这里,将查询矩阵乘以可学习权重,并进行池化生成全局查询。然后,矩阵K按元素乘以广播的全局查询,得到全局上下文表示。
SwiftFormer是基于最近推出的EfficientFormer[20]。EfficientFormer的主要思想是引入基于PoolFormer[53]的4D MetaBlocks来有效地学习局部表示,同时使用基于自注意的3D MetaBlocks来编码全局上下文。然而,EfficientFormer的性能受到两种设计选择的限制。首先,它使用了无效的token混合,其次,由于MHSA的二次复杂度,它在最后阶段只使用了3D MetaBlocks。这可能会导致上下文表述不一致和不充分。为了解决这些限制,SwiftFormer用简单有效的卷积编码器改进了token混合。此外,引入了有效的加性注意模块,可以被纳入所有阶段。这导致了对局部-全局表示的更一致的学习。值得一提的是,EfficientFormer采用了延迟驱动的精简方法来获得其模型变型的最佳配置,从而使速度最大化。相比之下,SwiftFormer模型是在不使用神经架构搜索的情况下构建的。
在网络开始时,大小为H×W×3的输入图像通过补丁嵌入层馈送,由两个步长为2的3×3卷积组成,得到H/4×W/4×C1特征图。然后,输出的特征图被输入到第一步,第一步从卷积编码器开始提取空间特征,然后是SwiftFormer来学习局部-全局信息。在两个连续步之间,有一个下采样层来增加通道维度并减少token长度。接下来,所得到的特征图随后被馈送到架构的第二、第三和第四步,分别产生H/8×W/8×C2、H/16×W/16×C3和H/32×W/32×C4特征图。因此,每步在输入图像的不同尺度上学习局部-全局特征,这允许网络具有丰富的表示。
高效卷积编码器:基线方法EfficientFormer[20]采用3×3平均池化层作为本地token混合器,类似于PoolFormer(MetaFormer)[53]。尽管PoolFormer层以其快速的推理速度而闻名,但用深度卷积代替它们并不会增加延迟。此外,它在不增加参数和延迟的情况下提高了性能。具体而言,将特征图馈送到3×3深度卷积(DWConv)中,然后进行批量归一化(BN)。然后,将得到的特征与GeLU激活一起馈送到两个卷积(Conv1)中。最后,引入一个跳连接,使信息能够在网络中流动。
SwiftFormer编码器:该模块经过精心设计,可在每步高效编码丰富的局部-全局表示。SwiftFormer编码器的初始块由3×3深度卷积和点卷积组成,这使模块能够学习空间信息并对局部表示进行编码。然后,将得到的特征图输入到有效的加性注意块中,该块旨在学习输入大小在每个尺度上的上下文信息。最后,将输出的特征图输入到线性块中,线性块由两个1×1逐点卷积层、批量归一化和GeLU激活组成,生成非线性特征。
SwiftFormer的直观图如图所示:上图是架构概述,输入图像馈送到补丁嵌入层,随后是四个不同尺度的分层步{1/4、1/8、1/16、1/32}。每步都是一致的,由卷积编码器块和SwiftFormer编码器组成。在两个连续步之间,结合下采样层,将空间大小减少两倍,并增加特征维度。底图:展示了卷积编码器(左)和SwiftFormer编码器(右)的设计。卷积编码器设计用于学习有效的局部表示,由3×3深度卷积和两个点卷积组成,用于通道混合。SwiftFormer编码器旨在学习丰富的局部-全局表示。它从局部卷积层开始提取局部特征,然后是有效的加性注意模块和线性层。