1.Non-local Neural Networks
从Non-local Neural Networks 开始计算机视觉中使用attention开始火热,这是一种基于空间注意力机制的网络。
Non-local Neural Network主要解决的问题:
当图像中两个特征距离比较远时,浅层卷积无法覆盖全部特征,特征提取很难提取到完整的信息。
传统的解决方案:
传统CNN通过堆叠多个卷积模块来形成大感受野,使用大感受野来覆盖到全部的特征信息。这样做主要有三个缺点:
(1) 捕获距离远的特征,效率较低;
(2) 由于网络很深,参数较多,模块设计需要谨慎,防止过拟合;
(3)较远位置特征之间传递消息时,局部操作困难.
Non-local解决方案:
Non-local借鉴了非局部均值滤波的思想。非局部均值滤波在图像中构造一块区域,比较相邻区域与本区域的相似性(欧式距离),相似性大的赋予更大的权重,相似性小的赋予较小的权重,这样可以突出共性,消除差异。非局部均值滤波如下图所示。
在深度学习中非局部操作可以表达为:
i是输出特征图的其中一个位置,通用来说这个位置可以是时间、空间和时空。j是所有可能位置的索引,x是输入信号,可以是图像、序列和视频,通常是特征图。y是和x尺度一样的输出图,f是配对计算函数,计算第i个位置和其他所有位置的相关性,g是一元输入函数,目的是进行信息变换,C(x)是归一化函数,保证变换前后整体信息不变。
网络在进行特征提取后进入注意力机制模型,此时特征图上的某一个点对应原图的一片区域,通过对特征图上这些点进行比较即可以看作对原图上区域间的相似性对比;之后进行一个1*1卷机的非线性变换;最后进行归一化输出
Non-local模块依然存在以下的不足:
(1)只单纯的位置注意力模块,没有涉及通道注意力机制
(2)特征图较大时,特征图中每个点的比较是非常耗内存和计算量
2.SENet
SENet是一个通道注意力机制网络,它的核心思想在于通过损失函数去学习特征权重,使得有效的feature map权重大,效果小的feature map权重小。以达到网络关注重要特征的效果。
SENet解决方案:
- 对特征提取后的fearture map在高和宽的维度上进行全局平均池化,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野;()
- 通过参数 w 来为每个特征通道生成权重,w 学习征通道间的相关性;
- 通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
两个细节:
- 全局平均池化之后,接两个全连接。首先将特征维度降低到输入的 1/16,然后经过 ReLu 激活后再通过一个 Fully Connected 层升回到原来的维度。这样可以,具有更多的非线性,更好地拟合通道间复杂的相关性;极大地减少了参数量和计算量。
- 全连接之后痛过sigmod获得归一化的权重。特别在残差网络中sigmod在addition 前对分支上残差特征进行了特征重标定;如果在addition之后,等于主干网上存在0~1的加权操作,在网络较深BP 优化时就会在靠近输入层的地方出现梯度消散,导致模型难以优化。
不足:
- 网络在特定数据下效果非常好,通用性较差
- 额外增加大量的参数,影响模型速度
3.CBAM
CBAM使用了空间注意力和通道注意力两种机制。CBAM模块沿着两个独立的维度(通道和空间)依次推断注意力图,然后将注意力图与输入特征图相乘以进行自适应特征优化。
CBAM解决方案:
通道注意力模块如上图子图1所示。将输入的特征图,分别经过基于width和height的global max pooling 和global average pooling,然后分别经过共享的全连接。将全连接输出的特征进行加和操作,再经过sigmoid激活操作,生成最终的通道注意力feature map。细节:平均值池化对特征图上的每一个像素点都有反馈,而最大值池化在进行梯度反向传播计算时,只有特征图中响应最大的地方有梯度的反馈。
空间注意力模块如上图子图2所示。将通道模块输出的特征图作为本模块的输入特征图。首先做一个基于channel的global max pooling 和global average pooling,然后将这2个结果基于channel 做concat操作。然后经过一个卷积操作,降维为1个channel。再经过sigmoid生成空间注意力 feature。最后将该feature和该模块的输入feature做乘法,得到最终生成的特征。