前言 

在计算机视觉中,相对位置编码的有效性还没有得到很好的研究,甚至仍然存在争议,本文分析了相对位置编码中的几个关键因素,提出了一种新的针对2D图像的相对位置编码方法,称为图像RPE(IRPE)。

本文来自公众号CV技术指南的论文分享系列

关注公众号CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

代码:https://github.com/microsoft/Cream/tree/main/iRPE

Background


Transformer的核心是self-attention,它能够按顺序对tokens之间的关系进行建模。然而,self-attention有一个固有的缺陷-它不能捕获输入tokens的顺序。因此,合并位置信息的显式表示对于Transformer特别重要,因为模型在其他方面完全不受序列排序的影响,这对于对结构化数据进行建模是不可取的。

transformer位置表示的编码方法主要有两类。一个是绝对的,另一个是相对的。

绝对方法将输入tokens的绝对位置从1编码到最大序列长度。也就是说,每个位置都有单独的编码向量。然后将编码向量与输入Tokens组合,以将位置信息输入给模型。

相对位置方法对输入tokens之间的相对距离进行编码,并学习tokens之间的成对关系。相对位置编码(relative position encoding, RPE)通常通过具有与self-attention模块中的 query 和 key 交互的可学习参数的查询表来计算。这样的方案允许模块捕获Tokens之间非常长的依赖关系。

相对位置编码在自然语言处理中被证明是有效的。然而,在计算机视觉中,这种效果仍然不清楚。最近很少有文献对其进行阐述,但在Vision Transformer方面却得出了有争议的结论。

例如,Dosovitski等人观察到相对位置编码与绝对位置编码相比没有带来任何增益。相反,Srinivaset等人发现相对位置编码可以诱导明显的增益,优于绝对位置编码。此外,最近的工作声称相对位置编码不能和绝对位置编码一样好用。这些工作对相对位置编码在模型中的有效性得出了不同的结论,这促使我们重新审视和反思相对位置编码在Vision Transformer中的应用。

另一方面,语言建模采用原始相对位置编码,输入数据为一维单词序列。但对于视觉任务,输入通常是2D图像或视频序列,其中像素具有高度空间结构。目前尚不清楚:从一维到二维的扩展是否适用于视觉模型;方向信息在视觉任务中是否重要?

Contributions


本文首先回顾了现有的相对位置编码方法,然后针对二维图像提出了新的编码方法。做了以下贡献。

1.分析了相对位置编码中的几个关键因素,包括相对方向、上下文的重要性、query、key、value和相对位置嵌入之间的交互以及计算代价。该分析对相对位置编码有了全面的理解,并为新方法的设计提供了经验指导

2.提出了一种高效的相对编码实现方法,计算成本从原始O()降低到O(nkd)(其中k<<n),适用于高分辨率输入图像,如目标检测、语义分割等Tokens数可能非常大的场合。

3.综合考虑效率和通用性,提出了四种新的vision transformer的相对位置编码方法,称为image RPE(IRPE)。这些方法很简单,可以很容易地插入self-attention层。实验表明,在不调整任何超参数和设置的情况下,该方法在ImageNet和COCO上分别比其原始模型DeiTS和DETR-ResNet50提高了1.5%(top-1ACC)和1.3%(MAP)。

4.实验证明,在图像分类任务中,相对位置编码可以代替绝对编码。同时,绝对编码对于目标检测是必要的,其中像素位置对于目标定位是重要的

Methods


首先,为了研究编码是否可以独立于输入嵌入,论文引入了两种相对位置模式:偏置模式(Bias Mode)和上下文模式(Contextual Mode)。与传统的裁剪函数(Clip function)不同,论文提出了一种分段函数(Piecewise function)来将相对位置映射到编码。之后,为了研究方向性的重要性,论文设计了两种非定向方法和两种定向方法。

Bias Mode和Contextual Mode

以前的相对位置编码方法都依赖于输入嵌入。它带来了一个问题,即编码是否可以独立于输入?论文引入了相对位置编码的偏置模式和上下文模式来研究这一问题。前者与输入嵌入无关,后者考虑与query、key或value的交互。

用一个统一的公式来表示,即

其中b_ij是2D相对位置编码,用来定义偏置或上下文模式。

对于偏置模式,b_ij = r_ij,其中r_ij是可学习标量,并且表示位置i和j之间的相对位置权重。

对于上下文模式,

其中r_ij是与query嵌入交互的可训练向量。上下文模式有多个变体,这里不一一例举,有需要者请看论文。

Piece Index Function

在描述二维相对位置权值之前,首先引入一个多对一函数,将一个相对距离映射为有限集合中的一个整数,然后以该整数为索引,在不同的关系位置之间共享编码。这样的索引函数可以极大地减少长序列(例如高分辨率图像)的计算成本和参数数量。

尽管在[18]中使用的裁剪函数h(X)=max(−β,min(β,x))也降低了成本,但是将相对距离大于β的位置分配给相同的编码。这种方法不可避免地遗漏了远程相对位置的上下文信息。

论文引入了一个分段函数g(x):R→{y∈Z|−β≤y≤β},用于索引到相应编码的相对距离。该函数基于一个假设,即较近的邻居比较远的邻居更重要,并通过相对距离来分配注意力。它表示为

其中[·]是舍入运算,Sign()确定数字的符号,即正输入返回1,负输入返回-1,反之返回0。α确定分段点,β控制输出在[−β,β]范围内,γ调整对数部分的曲率。

将分段函数h(X)与剪裁函数h(X)=min(−β,max(β,x))进行比较。在图2中,裁剪函数h(X)分布均匀的注意力,省略远距离的位置,但分段函数g(x)根据相对距离分布不同的注意力水平。作者认为应该保留远程位置的潜在信息,特别是对于高分辨率图像或需要远程特征依赖的任务,因此选择g(X)来构造映射方法。

2D相对位置计算

1.欧氏距离方法(Euclidean Method):计算两个相对位置的欧氏距离,将距离通过一个可学习的偏置标量或上下文向量映射到相应的编码。

2.量化方法(Quantization Method ):在上述欧氏距离方法中,较近的两个相对距离不同的邻居可以映射到同一个索引中,例如二维相对位置(1,0)和(1,1)都映射到索引1中,而应该将最近的邻居分开。因此,需要将欧式距离量化,即不同的实数映射成不同的整数。

quant(·)将一组实数{0,1,1.41,2,2.24,...}映射为一组整数{0,1,2,3,4,...}。此方法也是非定向的。

3.交叉法(Cross Method)。像素的位置方向对图像也很重要,因此提出了有向映射方法。这种方法被称为Cross方法,它分别在水平和垂直方向上计算编码,然后对它们进行汇总。该方法如下给出,

其中p˜xi(i,j)和p˜yi(i,j)在偏置模式下都是可学习标量,或者在上下文模式下都是可学习向量。与SASA中的编码类似,相同的偏移量在x轴或y轴上共享相同的编码,但主要区别在于我们使用分段函数根据相对距离来分配注意力。

4.乘积法(Product Method)。如果一个方向上的距离相同,无论是水平距离还是垂直距离,交叉方法都会将不同的相对位置编码到同一嵌入中。此外,交叉法带来额外的计算开销。为了提高效率和包含更多的方向性信息,论文设计了乘积方法,其公式如下

一个高效的实现方法

在上下文模式中,以上所有的方法都有一个共同的部分:。

计算这个部分需要时间复杂度O(),其中n和d分别表示输入序列的长度和特征通道的数目。由于I(i,j)的多对一特性,集合I(i,j)的大小K通常小于vision transformer。因此,论文提供如下高效实现:

它花费O(nkd)的时间复杂度预计算所有的z_i,t,然后通过映射t=i(i,j)将zi_,t赋给那个共同表达式。赋值运算的时间复杂度为O(N^2),其代价比预计算过程小得多。因此,相对位置编码的计算成本也从原来的 O() 降低到 O(nkd)。

Conclusion


1. 四种方法的两种模式之间的比较。

在vision transformer中,有向方法(交叉和乘积)通常比无向方法(欧式距离和量化)表现得更好。这一现象说明了方向性对于vision transformer是很重要的,因为图像像素具有高度的结构化和语义相关性

无论使用哪种方法,上下文模式都实现了优于偏置模式的性能。潜在的原因可能是上下文模式改变了带有输入特征的编码,而偏置模式保持静态

2.相对位置编码可以在不同头部之间共享或不共享的结果比较。

对于偏置模式,当在头部之间共享编码时,准确度会显著下降。相比之下,在上下文模式下,两个方案之间的性能差距可以忽略不计。这两种方法的平均TOP-1准确率都达到了80.9%。

论文推测,不同的头部需要不同的相对位置编码(RPE)来捕捉不同的信息。在上下文模式下,每个头部可以通过公式计算自己的RPE。当处于偏置模式时,共享RPE强制所有头部对patches给予相同的关注。

3.分段函数和裁剪函数的比较

在图像分类任务中,这两个函数之间的性能差距非常小,甚至可以忽略不计。然而,在目标检测任务中,裁剪函数比分段函数差。其根本原因在于,当序列长度较短时,这两个函数非常相似。分段函数是有效的,特别是当序列大小远远大于buckets的数量时。(注:作者把P_I(i,j)作为一个bucket(桶),用于存储相对位置权重)

与分类相比,目标检测使用分辨率高得多的输入,导致输入序列长得多。因此,推测当输入序列较长时,应该使用分段函数,因为它能够将不同的注意力分配到距离相对较大的位置,而当相对距离大于β时,裁剪函数分配相同的编码。

4.在ImageNet上与其它SOTA模型的比较

 欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

在公众号中回复关键字 “入门指南“可获取计算机视觉入门所有必备资料

​​

其它文章

ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征

2021-视频监控中的多目标跟踪综述

统一视角理解目标检测算法:最新进展分析与总结

图像修复必读的 10 篇论文|    HOG和SIFT图像特征提取简述

全面理解目标检测中的anchor|    实例分割综述总结综合整理版

单阶段实例分割综述|    小目标检测的一些问题,思路和方案

目标检测中回归损失函数总结|    小目标检测常用方法总结

视觉Transformer综述|    2021年小目标检测最新研究综述

Siamese network综述|    姿态估计综述|    语义分割综述

CVPR2021 | SETR: 使用 Transformer 从序列到序列的角度重新思考语义分割

深度学习模型大小与模型推理速度的探讨

视频目标检测与图像目标检测的区别

CV算法工程师的一年工作经验与感悟

视频理解综述:动作识别、时序动作定位、视频Embedding

从CVPR 2021的论文看计算机视觉的现状

ICCV2021 | MicroNet:以极低的 FLOPs 改进图像识别

ICCV2021 | 深度理解CNN

ICCV2021 | 重新思考视觉transformers的空间维度

CVPR2021 | TransCenter: transformer用于多目标跟踪算法

CVPR2021 | 开放世界的目标检测

CVPR2021 | TimeSformer-视频理解的时空注意模型

CVPR2021 | 一个高效的金字塔切分注意力模块PSA

CVPR2021 | 特征金字塔的新方式YOLOF

经典论文系列 | 胶囊网络:新的深度学习网络

经典论文系列 | 重新思考在ImageNet上的预训练

经典论文系列 | Group Normalization & BN的缺陷

经典论文系列 | 目标检测--CornerNet  & 又名 anchor boxes的缺陷

经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择

ICCV2021 | Vision Transformer中相对位置编码的反思与改进的更多相关文章

  1. ICCV2021 | 渐进采样式Vision Transformer

    ​  前言  ViT通过简单地将图像分割成固定长度的tokens,并使用transformer来学习这些tokens之间的关系.tokens化可能会破坏对象结构,将网格分配给背景等不感兴趣的区域,并引 ...

  2. ICCV2021 | Tokens-to-Token ViT:在ImageNet上从零训练Vision Transformer

    ​  前言  本文介绍一种新的tokens-to-token Vision Transformer(T2T-ViT),T2T-ViT将原始ViT的参数数量和MAC减少了一半,同时在ImageNet上从 ...

  3. ICCV2021 | Swin Transformer: 使用移位窗口的分层视觉Transformer

    ​  前言  本文解读的论文是ICCV2021中的最佳论文,在短短几个月内,google scholar上有388引用次数,github上有6.1k star. 本文来自公众号CV技术指南的论文分享系 ...

  4. 中文NER的那些事儿5. Transformer相对位置编码&TENER代码实现

    这一章我们主要关注transformer在序列标注任务上的应用,作为2017年后最热的模型结构之一,在序列标注任务上原生transformer的表现并不尽如人意,效果比bilstm还要差不少,这背后有 ...

  5. 第五课第四周实验一:Embedding_plus_Positional_encoding 嵌入向量加入位置编码

    目录 变压器预处理 包 1 - 位置编码 1.1 - 位置编码可视化 1.2 - 比较位置编码 1.2.1 - 相关性 1.2.2 - 欧几里得距离 2 - 语义嵌入 2.1 - 加载预训练嵌入 2. ...

  6. 【译】在Transformer中加入相对位置信息

    目录 引言 动机 解决方案 概览 注释 实现 高效实现 结果 结论 参考文献 本文翻译自How Self-Attention with Relative Position Representation ...

  7. [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer

    对于Transformer模型的positional encoding,最初在Attention is all you need的文章中提出的是进行绝对位置编码,之后Shaw在2018年的文章中提出了 ...

  8. [NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL

    参考: 1. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context https://arxiv.org/pdf ...

  9. 浅析白盒审计中的字符编码及SQL注入

    尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...

随机推荐

  1. TypeScript 条件类型精读与实践

    在大多数程序中,我们必须根据输入做出决策.TypeScript 也不例外,使用条件类型可以描述输入类型与输出类型之间的关系. 本文同步首发在个人博客中,欢迎订阅.交流. 用于条件判断时的 extend ...

  2. Java初步学习——2021.10.11每日总结,第六周周一

    (1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天继续学习菜鸟教程Java实例 字符串 9.字符串小写转大写--toUpperCase方法 public class Ma ...

  3. NX9.0和NX10.0做自定义操作可以用的函数

    NX9.0:LIBUFUNX.DLL int UF_OPER_ask_check_geom(void *,int *,unsigned int * *) int UF_OPER_ask_first_o ...

  4. 更好的 java 重试框架 sisyphus 的 3 种使用方式

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...

  5. 【数据结构与算法Python版学习笔记】图——词梯问题 广度优先搜索 BFS

    词梯Word Ladder问题 要求是相邻两个单词之间差异只能是1个字母,如FOOL变SAGE: FOOL >> POOL >> POLL >> POLE > ...

  6. Spring Security Resource Server的使用

    Spring Security Resource Server的使用 一.背景 二.需求 三.分析 四.资源服务器认证流程 五.实现资源服务器 1.引入jar包 2.资源服务器配置 3.资源 六.测试 ...

  7. 使用registry搭建docker私服仓库

    使用registry搭建docker私服仓库 一.拉取 registry镜像 二.根据镜像启动一个容器 1.创建一个数据卷 2.启动容器 三.随机访问一个私服的接口,看是否可以返回数据 四.推送一个镜 ...

  8. Linux Ubuntu stty 使用

    stty(set tty)命令用于显示和修改当前注册的终端的属性. 该命令是一个用来改变并打印终端行设置的常用命令. stty -a #将所有选项设置的当前状态写到标准输出中 old_stty_set ...

  9. 加法运算替代 牛客网 程序员面试金典 C++ Python

    加法运算替代 牛客网 程序员面试金典 题目描述 请编写一个方法,实现整数的乘法.减法和除法运算(这里的除指整除).只允许使用加号. 给定两个正整数int a,int b,同时给定一个int type代 ...

  10. 字符串匹配 ?kmp : hash

    给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字. 模板串P在模式串S中多次作为子串出现. 求出模板串P在模式串S中所有出现的位置的起始下标. 输入格式 第一行输入整 ...