CVPR2023:BiFormer阅读笔记

目录

  • 前言
  • 1. 模型的特点
  • 2. 双层路由注意力机制(BRA)
  • 3. BiFormer的结构

前言

BiFormer是CVPR2023的一篇文章,文中提出自注意力机制作为Transformer的核心模块,可以帮助网络捕捉长距离上下文依赖,但是这种结构也有两个缺点:

  1. 内存占用大
  2. 计算代价高

有许多研究针对上述缺点进行优化:

  1. 将注意力操作局限在局部窗口内,如图(b)。例如:Swin transformer
  2. 将注意力操作局限在横向条纹内,如图(c)。
  3. 将注意力操作局限在空洞窗口内,如图(d)。

CVPR2023:BiFormer阅读笔记_第1张图片

然后上述研究有两个共性的问题:

  1. 使用手工制作的静态模式(无法自适应)
  2. 所有Query共享相同的K / V对(无法做到互不干扰)

与上述研究不同,作者提出了一种新的动态稀疏注意力机制,通过双层路由来实现更灵活的算力分配,让每个Query处理语义上最相关的K-V对的一小部分。在此基础上,提出的BiFormer具有良好的性能和较高的计算效率。如图(f)。

计算复杂度由原来的 o ( ( H W ) 2 ) o((HW)^2) o((HW)2)降到了 o ( ( H W ) 4 3 ) o((HW)^{\frac{4}{3}}) o((HW)34)

1. 模型的特点

为了让每个Query处理语义上最相关的K-V对,首先面临的问题就是如何找到这些需要关注的K-V对

一种方法是逐一为每个Query选择K-V对,那么就需要计算所有Query和所有Key之间的相关性,复杂性和原来的自注意力机制就相同了。

另一种方法是基于每个Query的局部上下文来预测注意力偏移量,如图(e),这虽然降低了计算复杂性,但会影响长距离依赖关系的建模。

为了解决这个问题,作者提出双层路由注意力机制(Bi-level Routing Attention, BRA)。核心思想是先在粗粒度区域级别过滤掉最不相关的键-值对,然后再去计算剩下的区域中的token-to-token注意力。

首先构造一个区域级关联图,然后对其进行修剪,使每个节点只保留前k个连接。因此每个区域只需要关注前k个路由区域。确定了参与区域后,下一步是应用token-to-token的注意,这是非常重要的,因为现在假定键值对在空间上是分散的。

2. 双层路由注意力机制(BRA)

CVPR2023:BiFormer阅读笔记_第2张图片

输入一张图片, X ∈ R H × W × C X \in \mathbb R^{H \times W \times C} XRH×W×C,首先将其划分为 S × S S \times S S×S个不同的区域,其中每个区域包含 H W S 2 \frac{HW}{S^2} S2HW个特征向量。即将 X X X变为 X r ∈ R S 2 × H W S 2 × C X^r \in \mathbb R^{S^2 \times \frac{HW}{S^2} \times C} XrRS2×S2HW×C

然后,通过线性映射获得 Q , K , V ∈ R S 2 × H W S 2 × C Q,K,V \in \mathbb R^{S^2 \times \frac{HW}{S^2} \times C} Q,K,VRS2×S2HW×C

Q = X r W q , K = X r W k , V = X r W v Q=X^rW^q,K=X^rW^k,V=X^rW^v Q=XrWq,K=XrWk,V=XrWv

其中, W q , W k , W v ∈ R C × C W^q,W^k,W^v \in \mathbb R^{C \times C} Wq,Wk,WvRC×C分别是query,key,value的投影权重。

使用有向图的region-to-region路由

通过构造一个有向图来找到每个给定区域应该参与的区域。

首先计算每个区域中Q和K的平均值,得到 Q r , K r ∈ R S 2 × C Q^r,K^r \in \mathbb R^{S^2 \times C} Qr,KrRS2×C

然后计算 Q r Q^r Qr K r K^r Kr的区域间相关性的邻接矩阵:

A r = Q r ( K r ) T A^r=Q^r(K^r)^T Ar=Qr(Kr)T

然后只保留每个区域的前k个连接来修剪相关性图。有路由索引矩阵 I r ∈ N S 2 × k I_r \in \mathbb N^{S^2 \times k} IrNS2×k,逐行保存前k个连接的索引。

I r = t o p k I n d e x ( A r ) I^r=topkIndex(A^r) Ir=topkIndex(Ar)

I r I^r Ir的第i行包含第i个区域的前k个最相关区域的索引。

token-to-token的注意力机制

利用区域到区域路由索引矩阵 I r I_r Ir我们可以计算细粒度的token-to-token注意力 。对于区域i中的每个Query token,它将关注k个路由区域的并集中的所有键-值对,索引为 I ( i , 1 ) r , I ( i , 2 ) r , … , I ( i , k ) r I^r_{(i,1)},I^r_{(i,2)},\ldots,I^r_{(i,k)} I(i,1)r,I(i,2)r,,I(i,k)r。然而,要有效地实现这一步骤并不容易,因为这些路由区域将分散在整个特征图中,而GPU依赖于一次加载数十个连续字节的块的合并内存操作。因此,我们首先聚集key和value的tensor,即,

K g = g a t h e r ( K , I r ) , V g = g a t h e r ( V , I r ) K^g=gather(K,I^r),V^g=gather(V,I^r) Kg=gather(K,Ir),Vg=gather(V,Ir)

其中, K g K^g Kg V g V^g Vg是聚集后的key和value的tensor,然后对聚集后的K-V对使用注意力操作:

O = A t t e n t i o n ( Q , K g , V g ) + L C E ( V ) O = Attention(Q,K^g,V^g)+LCE(V) O=Attention(Q,Kg,Vg)+LCE(V)

此处,引入了一个局部上下文增强项 L C E ( ( V ) ) LCE((V)) LCE((V)),如论文Shunted Self-Attention via Multi-Scale Token Aggregation中所述。函数 L C E ( ⋅ ) LCE(\cdot) LCE()用深度可分离卷积进行参数化,我们将卷积核大小设置为5。

3. BiFormer的结构

BiFormer结构如下图所示。

CVPR2023:BiFormer阅读笔记_第3张图片

在第i个stage中,使用重叠的patch embedding(i=1时)或使用patch merging(i=2,3,4时)模块来降低输入空间分辨率,同时增加通道数量。然后使用使用 N i N_i Ni个相连的BiFormer块来对输入特征进行transformer操作。

BiFormer块的细节结构如下图。先使用 3 × 3 3 \times 3 3×3卷积隐式编码相对位置信息。然后,依次使用BRA模块和一个2层的膨胀率为e的MLP模块进行跨位置关系建模和逐位置嵌入。
CVPR2023:BiFormer阅读笔记_第4张图片
作者通过缩放网络宽度(即基本通道的数量 C C C)和深度(即每个阶段使用的BiFormer块的数量 N i , i = 1 , 2 , 3 , 4 N_i,i=1,2,3,4 Ni,i=1,2,3,4),实例化了3个不同大小的BiFormer,如下表所示。其他结构保持一致。我们将每个注意力头设为32个通道,MLP扩展比e=3。对于BRA,由于输入分辨率不同,4个阶段我们使用 t o p k = 1 , 4 , 16 topk=1,4,16 topk=1,4,16,区域划分因子S = 7/8/16进行分类/语义分割/目标检测任务。

CVPR2023:BiFormer阅读笔记_第5张图片

你可能感兴趣的:(笔记,深度学习,人工智能)