Attention

1. CBAM

Convolutional Block Attention Module (CBAM) 表示卷积模块的注意力机制模块。是一种结合了空间(spatial)和通道(channel)的注意力机制模块。

2. Channel Attention Module

我们知道一张图片经过几个卷积层会得到一个特征矩阵,这个矩阵的通道数就是卷积核的个数。那么,一个常见的卷积核经常达到1024,2048个,并不是每个通道都对于信息传递非常有用了的。因此,通过对这些通道进行过滤,也就是注意,来得到优化后的特征.

主要思路就是:增大有效通道权重,减少无效通道的权重
Attention
Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))=σ(W1(W0(Favgc))+W1(W0(Fmaxc))) \begin{aligned} \Large M_c(F)=& \Large\sigma(MLP(AvgPool(F))+MLP(MaxPool(F))) \\ \\ =&\Large\sigma (W_1(W_0(F_{avg}^c))+W_1(W_0(F_{max}^c))) \end{aligned}
上面输出出来的Tensor的shape是 batch_size×channel×1×1batch\_size \times channel \times 1 \times 1,它是每一个通道的权重,对应层要乘以这个权重得到这层新的feature map

注意,在MLP之前两个池化结果是分开的,经过MLP之后将这两个加起来,再sigmoid

3. Space Attention Module

注意力主要分布在空间中,又被称为空间注意力,表现在图像上就是对图像上不同位置的关注程度不同。反映在数学上就是指:针对某个大小为H×W×C的特征图,有效的一个空间注意力对应一个大小为H×W的矩阵,每个位置对原特征图对应位置的像素来说就是一个权重,计算时做pixel-wise multiply。

Attention

Ms(F)=σ(f7×7([AvgPool(F);MaxPool(F)]))=σ(f7×7([Favgs;Fmaxs])) \begin{aligned} \Large M_s(F)=& \Large\sigma\bigg(f^{7\times 7}\Big([AvgPool(F);MaxPool(F)]\Big)\bigg) \\ \\ =&\Large\sigma\bigg(f^{7\times 7}\Big([F_{avg}^s;F_{max}^s]\Big)\bigg) \end{aligned}

  • 输入一个特征图
    • 基于channel进行global max pooling和global average pooling
    • 将上述的结果基于channel做concat
    • 将concat后的结果经过一个same卷积操作,channel降为1
    • 将结果经过sigmoid生成spatial attention feature,可以与输入的特征图做乘法,为feature增加空间注意力

4.不正经的summary

  • Inception模块中是same卷积

  • Inception模块可以加入残差

  • Inception模块是用来替代一般卷积用的,可以看成Conv2d函数的地位

  • Attention模块其实就是对特征图的权重调整

  • Attention模块可以结合残差

    Attention

  • 残差注意力+残差Inception交替使用,中间学习GoogLeNet的辅助分类;注意力用来调整输入到卷积中的feature map,Inception负责特征选择

  • 特别地,可以Inception * 2->Attention->池化

5. 并联的CBAM——BAM

Attention

  • 这里注意,空间注意力那块,中间用了空洞卷积,但是H * W可是没变的,所以应该是用了padding进行了same卷积