Vicinity Vision Transformer概述
0.前言
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块。
Vicinity Vision Transformer概述的更多相关文章
- ICCV2021 | Vision Transformer中相对位置编码的反思与改进
前言 在计算机视觉中,相对位置编码的有效性还没有得到很好的研究,甚至仍然存在争议,本文分析了相对位置编码中的几个关键因素,提出了一种新的针对2D图像的相对位置编码方法,称为图像RPE(IRPE). ...
- ICCV2021 | 渐进采样式Vision Transformer
前言 ViT通过简单地将图像分割成固定长度的tokens,并使用transformer来学习这些tokens之间的关系.tokens化可能会破坏对象结构,将网格分配给背景等不感兴趣的区域,并引 ...
- ICCV2021 | Tokens-to-Token ViT:在ImageNet上从零训练Vision Transformer
前言 本文介绍一种新的tokens-to-token Vision Transformer(T2T-ViT),T2T-ViT将原始ViT的参数数量和MAC减少了一半,同时在ImageNet上从 ...
- VIT Vision Transformer | 先从PyTorch代码了解
文章原创自:微信公众号「机器学习炼丹术」 作者:炼丹兄 联系方式:微信cyx645016617 代码来自github [前言]:看代码的时候,也许会不理解VIT中各种组件的含义,但是这个文章的目的是了 ...
- vision transformer
VIT 总览 Step1 Step2
- ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征
前言 人脸表情识别(FER)在计算机视觉领域受到越来越多的关注.本文介绍了一篇在人脸表情识别方向上使用Transformer来学习关系感知的ICCV2021论文,论文提出了一个TransFER ...
- ICCV2021 | PnP-DETR:用Transformer进行高效的视觉分析
前言 DETR首创了使用transformer解决视觉任务的方法,它直接将图像特征图转化为目标检测结果.尽管很有效,但由于在某些区域(如背景)上进行冗余计算,输入完整的feature maps ...
- ICCV2021 | Swin Transformer: 使用移位窗口的分层视觉Transformer
前言 本文解读的论文是ICCV2021中的最佳论文,在短短几个月内,google scholar上有388引用次数,github上有6.1k star. 本文来自公众号CV技术指南的论文分享系 ...
- ICCV2021 | SOTR:使用transformer分割物体
前言 本文介绍了现有实例分割方法的一些缺陷,以及transformer用于实例分割的困难,提出了一个基于transformer的高质量实例分割模型SOTR. 经实验表明,SOTR不仅为实例分割提供了 ...
- ICCV2021 | 用于视觉跟踪的学习时空型transformer
前言 本文介绍了一个端到端的用于视觉跟踪的transformer模型,它能够捕获视频序列中空间和时间信息的全局特征依赖关系.在五个具有挑战性的短期和长期基准上实现了SOTA性能,具有实时性,比 ...
随机推荐
- jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析
jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析 在日常开发中存在着调度延时任务.定时任务的需求,而jdk中提供了两种基于内存的任务调度工具,即相对早期的java ...
- 浅谈promise对象
背景: 最近项目在做小程序的开发,涉及设计一个统一的登录公共方法,当实现时涉及到多个异步请求,那么问题来了,如何让多个异步请求先后同步进行呢?很多人会想到使用多层嵌套套来实现,就像这样: functi ...
- Python 文件操作(IO 技术)
目录 Python 文件操作(IO 技术) 文本文件和二进制文件 文件操作相关模块概述 建文件对象 open() 文本文件的写入 write()/writelines()写入数据 close()关闭文 ...
- 基于Chromium开发的称重软件,集称重、计价、打印于一体,支持耀华、顶尖等多个厂家设备型号
技术方案: 1.运行时使用.Net Framework4.6框架,界面使用WPF与Chromium. 2.上位机与下位机使用串口对接每家设备协议,上位机与UI使用WebSocket通讯. 3.数据库使 ...
- elasticsearch之单请求多查询
一.需要解决的问题 有的时候我们需要同时执行多个查询,并且需要得到每个单独查询的搜索结果,elasticsearch提供了multi search此需求的支持: 二.elasticsearch mul ...
- 为测试管理正名,华为云CodeArts TestPlan的守护之道
摘要:华为云CodeArts TestPlan既有公有云版本,也有下沉到私有云的版本. 本文分享自华为云社区<为测试管理正名,华为云CodeArts TestPlan的守护之道>,作者:云 ...
- 通过rpm安装postgresql-9.6无法远程连接的问题
1.停止postgresql服务 service postgresql-9.6 stop 2.修改postgresql.conf vi /var/lib/pgsql/9.6/data/postgres ...
- 主线程-创建Thread类的子类
主线程 Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码.Jav ...
- touchke变化值小的解决办法
方法一,提高主频 方法二,减小充电时间. 方法三,充电电流减半(具体看RM手册touchkey章节) 建议测试时采样值维持在3000-4000 其实以上操作就是增大Y轴间隔,以增大按下和未按下时的采样 ...
- pnpm
一.概念 performant npm ,意味"高性能的 npm".pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景.被 ...