注意机制(CBAM)理解

论文题目:《CBAM: Convolutional Block Attention Module》
论文地址:https://arxiv.org/pdf/1807.06521.pdf
原文链接:https://blog.csdn.net/Roaddd/article/details/114646354
参考:https://blog.csdn.net/kangyi411/article/details/78969642

文章目录

  • 一、前言
  • 二、注意力机制(CBAM)
  • 2.1 Channel Attention Module(CAM)
  • 2.1.1(多层感知机)MLP
  • 1.什么是激活函数
  • 2. 为嘛使用激活函数?
  • 3.激活函数需要具备以下几点性质:
  • pooling的使用
  • Spatial Attention Module(SAM)
  • CAM和SAM的组合形式
  • CBAM可视化

一、前言

论文(2018年)提出了一种轻量的注意力模块( CBAM,Convolutional Block Attention Module ),可以在通道和空间维度上进行 Attention 。论文在 ResNet 和 MobileNet 等经典结构上添加了 CBAM 模块并进行对比分析,同时也进行了可视化,发现 CBAM 更关注识别目标物体,这也使得 CBAM 具有更好的解释性。

二、注意力机制(CBAM)

这是一种用于前馈卷积神经网络的简单而有效的注意模块。 给定一个中间特征图,我们的模块会沿着两个独立的维度(通道和空间)依次推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征修饰。 由于CBAM是轻量级的通用模块,因此可以以可忽略的开销将其无缝集成到任何CNN架构中,并且可以与基础CNN一起进行端到端训练。
注意机制(CBAM)理解_第1张图片

2.1 Channel Attention Module(CAM)

通道上的Attention模块以及具体计算如下图所示:
注意机制(CBAM)理解_第2张图片
注意机制(CBAM)理解_第3张图片

具体流程如下:
将输入的特征图F(H×W×C)分别经过基于width和height的global max pooling(全局最大池化)和global average pooling(全局平均池化),得到两个1×1×C的特征图,接着,再将它们分别送入一个两层的神经网络(MLP),第一层神经元个数为 C/r(r为减少率),激活函数为 Relu,第二层神经元个数为 C,这个两层的神经网络是共享的。而后,将MLP输出的特征进行基于element-wise的加和操作,再经过sigmoid激活操作,生成最终的channel attention feature,即M_c。最后,将M_c和输入特征图F做element-wise乘法操作,生成Spatial attention模块需要的输入特征。

2.1.1(多层感知机)MLP

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:
注意机制(CBAM)理解_第4张图片
从上图可以看到,多层感知机层与层之间是全连接的。多层感知机最底层是输入层,中间是隐藏层,最后是输出层。

隐藏层的神经元怎么得来?首先它与输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出就是 f ( W 1 X W_1X W1X+ b 1 b_1 b1), W 1 W_1 W1是权重(也叫连接系数), b 1 b_1 b1是偏置,函数f 可以是常用的sigmoid函数或者tanh函数:

1.什么是激活函数

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function:
注意机制(CBAM)理解_第5张图片

2. 为嘛使用激活函数?

  • 不使用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
  • 使用激活函数,能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以利用到更多的非线性模型中。

3.激活函数需要具备以下几点性质:

  • 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
  • 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
  • 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

点击查看常见的几种激活函数

pooling的使用

注意机制(CBAM)理解_第6张图片
在channel attention中,表1对于pooling的使用进行了实验对比,发现avg & max的并行池化的效果要更好。这里也有可能是池化丢失的信息太多,avg&max的并行连接方式比单一的池化丢失的信息更少,所以效果会更好一点。

Spatial Attention Module(SAM)

空间上的Attention模块以及具体计算如下图所示:
注意机制(CBAM)理解_第7张图片
注意机制(CBAM)理解_第8张图片
具体流程如下:
将Channel attention模块输出的特征图F‘作为本模块的输入特征图。首先做一个基于channel的global max pooling 和global average pooling,得到两个H×W×1 的特征图,然后将这2个特征图基于channel 做concat操作(通道拼接)。然后经过一个7×7卷积(7×7比3×3效果要好)操作,降维为1个channel,即H×W×1。再经过sigmoid生成spatial attention feature,即M_s。最后将该feature和该模块的输入feature做乘法,得到最终生成的特征。

CAM和SAM的组合形式

通道注意力和空间注意力这两个模块能够以并行或者串行顺序的方式组合在一块儿,关于通道和空间上的串行顺序和并行作者进行了实验对比,发现先通道再空间的结果会稍微好一点。具体实验结果如下:
注意机制(CBAM)理解_第9张图片
从表中可以看出,在ResNet50的基准架构尚,两个attetnion子模块的连接顺序里面的确是channel + spatial的要更好一些,也要好于标准的SENet的通道attention。

CBAM可视化

注意机制(CBAM)理解_第10张图片
利用 Grad-CAM 对不一样的网络进行可视化后,能够发现,引入 CBAM 后,特征覆盖到了待识别物体的更多部位,而且最终判别物体的几率也更高,这代表注意力机制的确让网络学会了关注重点信息。

你可能感兴趣的:(目标检测,深度学习,神经网络,pytorch)