0.前言

  • 相关资料:

  • 论文基本信息:

    • 发表时间:arxiv2022(2022.6.21)

1.针对的问题

  视觉transformer计算复杂度和内存占用都是二次的,这主要是softmax归一化导致的,这使其无法处理高分辨率图像或细粒度图像patch。

2.主要贡献

  (1)提出了一种新的线性视觉自注意模型,该模型在线性视觉transformer中引入了基于二维曼哈顿距离的局部性偏差。

  (2)提出了一种新的多头自注意模块——邻近注意块,以实现邻近注意所需的假设。该算法包含特征缩减注意力(feature reduction attention, FRA)模块和特征保持连接(feature preserving connection, FPC)模块,以控制计算开销和提高特征提取能力。

  (3)构造了邻近视觉Transformer(Vicinity Vision Transformer, VVT),它作为通用的视觉骨干,易于应用于视觉任务。大量的实验验证了VVT在各种计算机视觉基准上的有效性。

3.方法

  1.将softmax替换成一个与序列长度N成线性关系的函数,具体来说就是把相似度函数softmax换成一个可分解的相似度函数,找到一个核函数φ(ReLU),使得先算注意力矩阵A=∈RN×N变为先算φ(K)TV∈Rd×d。2.使序列长度N远大于特征维数。3.利用曼哈顿距离加入局部性偏置。

  在NLP领域出现了很多将自注意力进行分解以将其计算复杂度降低为线性的方法,但是这些方法在视觉领域效果不好,作者经过研究认为局部性偏置对于视觉来说是一个很重要的性质,所以作者提出基于相邻图像块测量的二维曼哈顿距离,对每个图像块调整其注意力权重,在这种情况下,相邻的patch会比距离较远的patch获得更强的注意力。也就是论文中的re-weighting机制。

  线性化可以通过选取一个可分解的相似函数S(·)来满足来实现,其中φ(·)为核函数。给定这样一个核函数,可以将self-attention模块的输出写为:

  标准自注意力中相似度函数S(·)是softmax函数,输出O=Att(x)=AV,A∈RN×N,时空复杂度关于N都是二次,现在不计算注意力矩阵A∈RN×N,而是先计算φ(K)TV∈Rd×d,即,使O(N2d)运算转换为O(Nd2)运算

  softmax归一化是自注意力算法二次复杂度的根源。线性化的关键在于用另一个相似度函数代替标准的softmax操作。

  这种方法与序列长度N成线性关系。且保留了标准自注意的两个重要特性:(1)它始终是正的,避免了负相关信息的聚集。(2)所有元素都位于[0,1]之间。

  此外,还需要加入局部性偏置,,G生产距离权重。这里的G不能直接使用欧几里得距离,因为其不能分解为关于i和j的两项,这里用qi和kj分别代表来自Q和K的一个token,u表示在2D特征图的第几行,r代表列。2D曼哈顿距离虽然可以很容易地解耦到两个方向,但是绝对值操作依旧无法分解。这里作者假设给定大小为m×n的特征图,通过下面两个等式得到一个可分解的相似度函数S(Qi,Kj)。

  标准自注意力与线性自注意力对比如下:

  此外,与基于vanilla transformer的方法相比,当序列长度远大于特征维数时,邻近注意力算法表现出效率优势。为了满足这一要求,本文提出了一种新的邻近注意力块,在不牺牲性能的前提下降低了特征维数。包括一个特征缩减注意力(Feature Reduction Attention, RFA)模块和一个特征保持连接(Feature Preserving Connection, FRC)模块,RFA模块将输入特征维数降低一半,FRC模块恢复原始特征分布并增强表示能力。最后采用金字塔结构的邻近注意力块构造了一个名为邻近视觉Transformer(Vicinity Vision Transformer, VVT)的骨干网络。

  输入X∈RN×d,通过FRA模块将其投影成Q∈RN×d/2, K∈RN×2/d, V∈RN×2/d,并降低了特征维数。然后通过局部分解和re-weighting得到Q'∈ RN×2d, K'∈ RN×2d用于计算线性自注意力,由于自注意力是在更低的维度计算的,在上面添加了一个叫做FRC的跳跃连接,包括一个平均池化操作和两个线性层来保持原始特征分布并增强表示能力。

  得到的最终骨干网络如下:

  采用渐进式收缩金字塔结构,有四个阶段,生成不同的尺度的特征图。每个阶段包含一个patch embedding层和多个Vicinity Transformer块。

最新文章

  1. 4_STL设计理念_算法
  2. 将插入的新行放入dataGridView的第一行
  3. js 判断微信浏览器
  4. 神奇的 echo 命令
  5. ASP.NET MVC 5改进了基于过滤器的身份验证
  6. 如何在Linux上安装Tomcat
  7. NSS_01 开始
  8. rank() over(partition)的使用
  9. 【网络流#2】hdu 1533 - 最小费用最大流模板题
  10. 使用元组Tuple,返回多个不同类型的值
  11. 恢复Windows 10自带的微软正黑字体
  12. POJ 3080 Blue Jeans(Java暴力)
  13. c# windows服务如何获取自己的安装路径
  14. P1072Hankson的趣味题
  15. webpack接上一篇
  16. AutoCompleteTextView 简单用法
  17. tomcat 闪退处理
  18. 阿里云esc云服务器IP不能访问的解决办法
  19. 如何使cmd窗口正确显示utf-8编码的文字
  20. 百度定位api 定位不准修正

热门文章

  1. uniapp中封装一个弹框组件
  2. 火山引擎DataLeap数据调度实例的 DAG 优化方案
  3. 光速上手k8s(2023)(containerd)(未完待续)
  4. python进阶之路10之函数
  5. [C++]std::sort()函数使用总结
  6. ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析
  7. Ubuntu 配置 Oh-my-zsh
  8. 图文并茂strapi 4.5.5自定义搭建指南以及数据库字段名接口返回mapping分析
  9. 穿透的switch语句-循环概述与基本组成部分
  10. java应用定位高cpu占用几步操作