三、Self-Attn 与 Deformable-Attn

1、Deformable Attention 的理解

    Deforable Attention,是Deforable DETR 架构中使用的一个注意力模块,与传统Transformer 查询所有空间位置不同,Deformable Attention 只关注 参考点(reference Points) 附近的一组关键采样点,无需考虑特征图的大小。

2、单尺度的 Deformable Attention

    首先给出 MultiHead Attn 和 Deformable Attn 的公式,对于给定输入特征图 \(x \in \mathbb{R}^{C \times H \times W}\),有:

\[\begin{aligned} MultiHeadAttn(z_q, x) = \sum_{m=1}^M W_m [\sum_{k\in \Omega_k} A_{mqk}\cdot W_m^{'} x_k] \end{aligned}\]

    在 Self Attn 中,\(m\) 表示多头注意力中的第 \(m\) 个头,\(z \in \mathbb{R}^{C \times H \times W}\)\(query\) 的输入特征, 可分解为\(N \times W\)\(z_q \in \mathbb{R}^{C}\)\(x \in \mathbb{R}^{C \times H \times W}\)\(key\)\(value\) 的输入特征, 可分解为\(N \times W\)\(x_k \in \mathbb{R}^{C}\)\(q\)\(query\) 的索引,\(k\)\(key\) 的索引。
    \(W_m^{'} \in \mathbb{R}^{C_v \times C}\) (其中\(C_v = C/M\),分为多头) 是输入特征 \(x_k\)\(value\) 的转移矩阵(通常和生成 \(query\) 方式一样,也是线性变换),\(W_m \in \mathbb{R}^{C_v \times C}\) 是对注意力施加在 \(value\) 后的结果进行线性变换从而得到不同头部的输出结果。

\[\begin{aligned} DeformAttn(z_q, p_q, x) = \sum_{m=1}^M W_m [{\color{blue}{\sum_{k=1}^K}} A_{mqk}\cdot W_m^{'} x({\color{red}{p_q + \Delta p_{mqk}}})] \end{aligned}\]

    对比下这两个公式,在 MultiHeadAttn 中:

    红色部分\(p_q \in \mathbb{R}^2\) 代表 \(z_q\) 的位置,即参考点 (reference points)\(\Delta p_{mqk} \in \mathbb{R}^2\) 表示第 \(m\) 个注意力头中的第 \(k\)采样集合点相对参考点的位置偏移(offsets)

    蓝色部分\(K\) 表示采样的 \(key\) 的总数,\(k \in [1,K](K<<HW)\), 即每个 \(query\) 在每个注意力头中采样 \(K\) 个位置,只需要和这些位置的特征进行交互,不需要和 Transformer 一样从全局位置开始学习才能逐步关注到局部、稀疏的位置。\(x(p_q + \Delta p_{mqk})\) 即为基于采样点通过 双线性插值(bilinear interpolation) 转为 \(feature\) \(map\) 上的特征点得到的 \(value\)

    其中,位置偏移 \(\Delta p_{mqk}\) 是可学习的,由 \(query\) 特征 \(z_q \in \mathbb{R}^C\) 经过全连接层得到,注意力权重同样由 \(query\) 特征 \(z_q \in \mathbb{R}^C\) 通过全连接层得到,同时在 \(K\) 个采样点之间归一化,而非像 Transformer 是由 \(query\)\(key\) 交互计算得出的, \(A_{mpk} \in [0,1]\),并且 \(\sum_{k=1}^K A_{mqk}=1\).

img

TODO

3、多尺度的 Deformable Attention

4、源码注释

posted @ 2023-05-15 21:40  Abyss_J  阅读(1111)  评论(0)    收藏  举报