一、Non-local

原文链接:Non-local Neural Networks | IEEE Conference Publication | IEEE Xplore

1.公式

y_i=\frac{1}{C(x)}\sum_{\forall j}f(x_i,x_j)g(x_j)

其中g(x_j)=W_gx_j

        f的形式可以不同,如

        (1)Gaussian

f(x_i,x_j)=e^{x_i^\mathrm{T}x_j}

C(x)=\sum_{\forall j}f(x_i,x_j)

        (2)Embedded Gaussian:

f(x_i,x_j)=e^{\theta(x_i)^\mathrm{T}\phi(x_j)}

C(x)=\sum_{\forall j}f(x_i,x_j)


自注意力(self-attention)是non-local在Embedded Gaussian中的特例。因为

\frac{1}{C(x)}f(x_i,x_j)

就是对给定的i,沿着维度j作softmax操作。

        (3)点积(embedded):

f(x_i,x_j)=\theta(x_i)^\mathrm{T}\phi(x_j)

C(x)=N

        (4)拼接:

f(x_i,x_j)=\mathrm{ReLU}(w^\mathrm{T}_f[\theta(x_i),\phi(x_j)])

C(x)=N

其中[\cdot ,\cdot ]表示拼接操作;w_f是将拼接后的向量转换为标量的权重向量。

2.Non-local块

z_i=W_zy_i+x_i

        上图为Non-local(embedded Gaussian)的结构。图中蓝色方块为1\times 1\times 1卷积;\oplus\otimes分别表示矩阵加法和矩阵乘法。1024和512代表通道数。softmax操作是对每一行做的。


如果去掉上图中的\theta\phi,就变为Gaussian结构;将softmax操作替换为乘以1/N,就变为点积结构。

        实际实施时,不改变性能,但减小计算量的方法:在_\phi__g_后加入最大池化层。

二、Criss-Cross

原文链接:CCNet: Criss-Cross Attention for Semantic Segmentation | IEEE Conference Publication | IEEE Xplore

网络结构:

1.Criss-Cross模块结构

        图中softmax在通道维度做。

2.Affinity操作

对于Q中每个位置u,可以得到其特征Q_u\in \mathbb{R}^{​{C}'};同时可以得到K中对应位置所在行和列的所有向量集合\Omega_u\in\mathbb{R}^{(H+W-1)\times {C}'}。设\Omega_{i,u}\Omega_u的第i个元素,则Affinity操作定义为

d_{i,u}=Q_u\Omega^{\mathrm{T}}_{i,u}

 记D为Affinity操作的输出矩阵(或A在softmax前的矩阵;其位置u处的第i个元素为d_{i,u}),则

上图中,左边的矩阵为H,上边的矩阵为K,下边的矩阵为Q,右边的矩阵为D\otimes表示Affinity操作。

3.Aggregation操作

对于V中每个位置u,可以得到其特征V_u\in \mathbb{R}^C和集合\Phi_u\in\mathbb{R}^{(H+W-1)\times C}(所在行和列的所有向量集合)。则Aggregation操作为

{H}'_u=\sum_{i\in \left |\Phi_u \right |}A_{i,u}\Phi_{i,u}+H_u


实际上就是线性组合(以Au位置向量(H+W-1维)的每个元素作为系数/权重,作用于\Phi_u中每一个位置的向量(C维),相乘相加,作为{H}'u位置元素向量(C维))。

三、Squeeze and Excitation(SE)

原文链接:Squeeze-and-Excitation Networks | IEEE Journals & Magazine | IEEE Xplore

上图中:

        F_{tr}为卷积、特征提取操作(不属于SE模块);

        F_{sq}为均值池化操作,输出为C维向量;

        F_{ex}为2层全连接层加sigmoid操作:

s=F_{ex}(z,W)=\sigma(g(z,W))=\sigma(W_2\delta(W_1z))

        F_{scale}s的每个元素作为权重乘上U的对应通道得到输出的每个通道:

\tilde{x}_c=F_{scale}(u_c,s_c)=s_cu_c

将SE嵌入到ResNet中:

四、CBAM

原文链接:https://arxiv.org/pdf/1807.06521.pdf

CBAM模块结构:

1.通道注意力模块结构

\begin{aligned} M_c(F)&=\sigma(\textup{MLP}(\textup{AvgPool}(F))+\textup{MLP}(\textup{MaxPool}(F)))\\ &=\sigma(W_1(W_0(F^c_{avg}))+W_1(W_0(F^c_{max}))) \end{aligned}

其中\sigma表示sigmoid函数,W_0\in\mathbb{R}^{C/r\times C}W_1\in\mathbb{R}^{C\times C/r}W_0后有ReLU激活函数。

2.空间注意力模块结构

 \begin{aligned} M_s(F)&=\sigma(f^{7 \times 7}([\textup{AvgPool}(F);\textup{MaxPool}(F)]))\\ &=\sigma(f^{7 \times 7}([F^c_{avg};F^c_{max}])) \end{aligned}

其中f^{7\times 7}表示核为7\times 7的卷积操作。

        将CBAM嵌入ResNet中:

 五、Dual-Attention

原文链接:Dual Attention Network for Scene Segmentation | IEEE Conference Publication | IEEE Xplore

网络结构:

1.位置注意力模块结构

图中B,C,D的维度与A相同;B,C,D的reshape表示将C\times H\times W的矩阵变为C\times N(其中N=HW);S\in \mathbb{R}^{N\times N}为attention map;\otimes表示矩阵乘法;最后的reshape表示将C\times N的矩阵变为C\times H\times W。最终

E_j=\alpha \sum_{i=1}^N(s_{ji}D_i)+A_j

其中\alpha为缩放因子,初始化为0,然后逐渐学习到更大的值;可知E的每个位置是所有位置特征和原始特征的加权和。

2.通道注意力模块结构

图中A的reshape表示将C\times H\times W的矩阵变为C\times N\otimes表示矩阵乘法; 最后的reshape表示将C\times N的矩阵变为C\times H\times W。最终

E_j=\beta \sum_{i=1}^C(x_{ji}A_i)+A_j

其中缩放参数\beta从0开始逐渐学习;可知E的每个通道是所有特征通道和原始通道的加权和。

3.Sum Fusion操作

        使用卷积层变换两个注意力模块的输出,然后进行矩阵求和。

注:self attention的permutation equivalent

如上图所示,输入交换次序,输出也会相应交换次序。