Fast Vision Transformers with HiLo Attention

总结

提出了 HiLo Attention 机制:

  • 该机制将自注意力层分为两部分:Hi-Fi(高频注意力)Lo-Fi(低频注意力)
  • Hi-Fi 捕捉局部细节,通过在局部窗口内应用自注意力,减少了计算复杂度。
  • Lo-Fi 捕捉全局结构,利用低频特征实现全局注意力,并通过平均池化减少计算开销。
  • 通过这种分离方式,HiLo 在保持模型性能的同时,大幅度提高了计算效率,尤其是在高分辨率图像的处理上。
  • 将所有注意力层替换为 HiLo Attention,并在每个 FFN 中加入 3×3 深度卷积以提高位置编码效率。

Abstract

Vision Transformers (ViTs) 引发了计算机视觉的最新和重大突破。它们的高效设计主要是由计算复杂度的间接度量来指导的,即FLOPs,然而与吞吐量等直接度量有明显的差距。因此,我们建议在目标平台上使用直接速度评估作为高效 ViT 设计原则。特别是,我们引入了 LITv2,这是一种简单有效的 ViT,它在一系列不同模型大小上以更快的速度优于现有的最先进方法。LITv2 的核心是一种新颖的自注意力机制,我们称之为 HiLo。HiLo的灵感来自于这样一种观点,即图像中的高频捕捉局部精细细节,低频聚焦于全局结构,而多头自我注意层忽略了不同频率的特征。因此,我们建议通过将头部分为两组来解开注意力层中的高/低频模式,其中一组通过每个局部窗口内的自注意力对高频进行编码,另一组通过在每个窗口的平均值汇集的低频键和值以及输入特征图中的每个查询位置之间执行全局注意力来编码低频。得益于两组的高效设计,我们表明HiLo通过全面基准测试gpu和cpu上的FLOPs、速度和内存消耗,优于现有的注意机制。例如,HiLo 比空间缩减注意力快 1.4 倍,比 CPU 上的局部窗口注意力快 1.6 倍。由 HiLo 提供支持,LITv2 作为主流视觉任务的强大主干,包括图像分类、密集检测和分割。代码可在 https://github.com/ziplab/LITv2 获得。

1 Introduction

现实世界的应用程序通常需要模型在有限的计算预算(如无人机和自动驾驶)下具有最佳的速度和准确性权衡。这激发了高效视觉转换器(ViT)设计的大量工作,如PVT[51]、Swin[32]和Focal Transformer[60]等。为了衡量计算复杂度,最近ViT设计中广泛采用的度量是浮点操作的数量,即FLOPs。然而,FLOPs 是一个间接度量,不能直接反映目标平台上的真实速度。例如,Focal-Tiny 在 GPU 上比 Swin-Ti 慢得多,尽管它们的 FLOPs 具有可比性。

一般来说,最近vit中间接度量(FLOPs)和直接度量(速度)之间的差异可以归因于两个主要原因。首先,虽然自注意力在低分辨率特征图上是有效的,但由于内存访问成本的密集 [34],内存和时间的二次复杂度使得高分辨率图像上的速度较慢,其中从片外 DRAM 获取数据可能很耗时。其次,ViTs中的一些高效注意机制具有较低的理论复杂度保证,但由于特殊的操作不是硬件友好的,或者不能并行化,如多尺度窗口分区[60]、递归[44]和扩张窗口[20]。

在这里插入图片描述

图 1:HiLo 注意力的框架。Nh 是指该层自注意力头的总数。α 表示高频/低频头的拆分率。最好以彩色观看。

通过这些观察结果,在本文中,我们建议通过直接度量(即吞吐量)来评估ViT,而不仅仅是FLOPs。基于这一原理,我们引入了LITv2,这是一种新颖而准确的视觉转换器,在标准基准上优于大多数最先进的(SoTA) ViT,同时在gpu上实际上更快。LITv2 在 LITv1 [36] 上进行 bulit,这是一个简单的 ViT 基线,它在早期阶段删除所有多头自注意力层 (MSA),同时在后面的阶段应用标准 MSA。得益于这种设计,LITv1 比 ImageNet 分类中的许多现有工作更快,因为早期 MSA 没有计算成本,而后面的 MSA 只需要处理下采样的低分辨率特征图。然而,标准的MSA在高分辨率图像上仍然存在巨大的计算成本,特别是对于密集预测任务。

为了解决这个问题,我们提出了一种新颖的高效注意力机制,称为 HiLo。HiLo 的动机是自然图像包含丰富的频率,其中高/低频在编码图像模式(即局部精细细节和全局结构)方面发挥着不同的作用。典型的MSA层在不考虑不同底层频率的特征的情况下&

### HiLo 注意力机制概述 HiLo 注意力机制是一种用于提升深度学习模型性能的技术,特别是在计算机视觉领域。它通过结合高分辨率特征图和低分辨率特征图来增强网络对多尺度信息的理解能力[^1]。 #### 基本概念 HiLo 注意力机制的核心在于利用高低分辨率的信息互补特性。具体来说,该机制能够捕捉到图像中的全局上下文以及局部细节。这种设计使得模型能够在处理复杂场景时更加鲁棒,并能有效应对目标大小变化较大的情况。 #### 实现方法 以下是 HiLo 注意力机制的一种典型实现方式: 1. **特征提取** 首先从输入数据中分别获取高分辨率 (High-resolution, Hi) 和低分辨率 (Low-resolution, Lo) 的特征表示。这通常可以通过卷积神经网络的不同层完成,其中浅层提供高分辨率特征而深层则对应于低分辨率特征。 2. **跨分辨率交互** 使用特定操作(如上采样或下采样)使两种分辨率的特征具有相同的尺寸以便后续融合。例如,可以采用双线性插值法将低分辨率特征放大至与高分辨率一致;或者反之亦然,缩小高分辨率特征匹配低分辨率维度。 3. **注意力计算** 计算每种分辨率下的权重分布作为其重要性的度量标准之一。此过程一般涉及 softmax 函数标准化后的加权求和运算以突出显著区域并抑制不必要部分的影响。 4. **最终输出生成** 将经过上述步骤调整过的两组特征重新组合起来形成新的表达形式供下游任务使用。这一阶段可能还会加入额外的非线性变换进一步优化结果质量。 下面给出一段 Python 伪代码展示如何构建简单的 HiLo Attention Layer: ```python import torch.nn as nn import torch class HiLoAttention(nn.Module): def __init__(self, channels_high, channels_low): super(HiLoAttention, self).__init__() # 定义必要的组件 self.conv_h = nn.Conv2d(channels_high, channels_high//2, kernel_size=1) self.conv_l = nn.Conv2d(channels_low, channels_high//2, kernel_size=1) def forward(self, high_res_feat, low_res_feat): h_upsampled = nn.functional.interpolate(low_res_feat, size=(high_res_feat.size(2), high_res_feat.size(3)), mode='bilinear', align_corners=True) l_downsampled = nn.functional.adaptive_avg_pool2d(high_res_feat, output_size=(low_res_feat.size(2), low_res_feat.size(3))) atten_map_hi = torch.sigmoid(self.conv_h(h_upsampled)) atten_map_lo = torch.sigmoid(self.conv_l(l_downsampled)) enhanced_hi = high_res_feat * atten_map_hi enhanced_lo = low_res_feat * atten_map_lo return enhanced_hi, enhanced_lo ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值