特征图注意力_CBAM:卷积块注意力模块

特征图注意力_CBAM:卷积块注意力模块_第1张图片

特征图注意力_CBAM:卷积块注意力模块_第2张图片
---ECCV2018 论文地址​arxiv.org

该论文来自ECCV2018。提出了卷积块注意力模块(CBAM),这是一种简单有效的卷积神经网络注意模块。在给定一个中间特征图(intermediate feature map)的情况下,我们的模块沿着通道和空间两个单独的维度依次生成注意力映射,然后将注意图乘到输入特征图中进行自适应特征细化。因为CBAM是一个轻量级的通用模块,它可以无缝地集成到任何CNN架构中,计算成本可以忽略不计,并且可以与常见CNN一起进行端到端培训。

1 Introduction

卷积神经网络(Convolutional neural networks, CNNs)以其丰富的表示能力,显著提升了视觉任务的性能。为了提高CNNs的性能,近年来的研究主要针对网络的三个重要因素: 深度、宽度和基数。

从LeNet到ResNet,网络变得更深,其提取特征的能力也更加强。VGGNet表明相同形状的堆码块(stacking blocks)具有较好的效果,其均采用3 X 3的卷积核,实验证明采用这种较小的卷积核在提取特征的能力上表现的非常优秀。ResNet将残差块相互堆叠,以构建一个非常深的体系结构,实验证明该网络的迁移性非常好。GoogLeNet表明,宽度是提高网络模型性能的另一个重要因素。并且他们已经证明,在CIFAR基准测试中,一个28层的增加宽度的ResNet可以胜过一个深度非常深的1001层的ResNet。提出了Xception和ResNeXt来增加网络的基数。经验表明,基数不仅节省了参数的总数,而且比深度和宽度这两个因素具有更强的表示能力。

除了这些因素,还有另一个考虑因素——关注。注意力不仅告诉你应该关注哪里,还能提高兴趣区域的表达。我们的目标是通过使用注意机制来增加表征能力: 关注重要的特性并抑制不必要的特性。本文提出了一种新的网络模块——卷积块注意模块(CBAM)。由于卷积运算通过混合跨通道和空间信息来提取信息特征,因此我们采用我们的模块来强调这两个主要维度上有意义的特征: 通道和空间轴。为了达到这个目的,我们依次应用通道和空间注意模块(如下图所示),这样每个分支就可以分别在通道和空间轴上学习注意什么和注意哪里。因此,我们的模块通过学习哪些信息需要强调或抑制,从而有效地帮助网络中的信息流。

特征图注意力_CBAM:卷积块注意力模块_第3张图片
图一:The overview of CBAM

本文的贡献主要有三个方面:

  1. 提出了一种简单而有效的注意模块(CBAM),可广泛应用于提高CNNs的表示能力。
  2. 我们通过广泛的消融研究来验证我们的注意力模块的有效性。
  3. 通过插入我们的轻量级模块,我们验证了各种网络的性能在多个基准测试(ImageNet-1K、MS COCO和VOC 2007)上有了很大的提高。

接下来我们来看一下CBAM的具体结构和工作细节:

给定一个中间层的feature map作为输入,命名为F,其维数是C X H X W。CBAM依次生成一个1维的通道注意力映射(维数为Mc

C X 1 X1)和一个2维的空间注意力映射(维数为Ms
1 X H X W)。总体结构图课查看上图图一。整体的注意力过程可以用一下公式概括:

fdde29f3aa913cde358f016bc5ba7568.png
具体字母代表什么意思可查看上文。

其中⊗代表对应元素一一相乘,在乘法过程中,对注意值进行相应的广播(复制):信道注意值沿空间维度广播,反之亦然。F''是最终的将注意力权重的输出。关于 本文网络架构为什么没有平行两种注意力模块,而是采用通道注意力在前,空间注意力在后这种设计。文中解释通过消融实证明,这种结构实验结果最好。下图描述了每个注意图的计算过程。下面描述每个注意力模块的细节。

特征图注意力_CBAM:卷积块注意力模块_第4张图片
Diagram of each attention sub-module

Channel attention module:

在通道注意力模块中,利用特征图之间的通道间关系,生成通道注意了图。由于feature map的每个通道都被认为是一个特征检测器,所以通道注意力在给定输入图片“是什么”这个问题上是非常有帮助的。本文通过压缩空间维度使通道注意力行之有效。即用目前常用的平均池化(average-pooling),也用到了不常用的最大池化(max-pooling)对每一张feature map进行空间维度压缩。之前一些通道注意力机制算法往往采用平均池化进行空间压缩,认为该池化可以有效学习目标对象的范围。作者创新式的同时采用最大池化,认为最大池化可以收集一个关于具有区分性特征的重要线索,以此推断出一个更有效的注意力通道。作者也通过实验证明了该方法行之有效,相较于只采用平均池化。下面描述具体细节:

  1. 首先我们使用两种池化方法对feature map进行空间汇集。生成两种通道注意力向量,我们用Fcavg,Fcmax表示。
  2. 分别将这两个向量输入到一个由一个隐藏层组成的共享的MLP(Multi-Layer Perception)网络,并生成两个维数为C X 1 X 1的注意力向量。(MLP可以看成一个三层的全连接神经网络?)
  3. 将上面得到的两种向量对应位置相加,通过一个sigmoid函数,最后生成一个维数为C X 1 X 1的通道注意力向量,命名为Mc。

值得注意的是在多层感知器(MLP)中,考虑到计算成本而减少参数量,把隐藏激活大小被设置为C/r X 1 X 1。简单来说就是把中间层的神经元节点见到了C/r个,其中r为减少率。到输出层在把神经元增加到C个,以获得和feature map通道数相同的注意力向量维数。这样处理既可以获得全连接网络的非线性,又减少了全连接网络的参数个数。这种处理方法在2017年ImageNet获得冠军的SENet中就有使用。

具体Mc生成公式为:

101293994e6049fd4394200e8fff342e.png

其中W0权重就是第一层与第二层共享的权重,其维数为:

c83ef75651e7d413c91876f7f4624ae5.png

同理,W1维数为:

64f5db4a6156ecc4a538ae5f26a8fde2.png

这两个权重都是共享的。

Spatial attention module:

利用特征间的空间关系生成空间注意图。空间注意不同于渠道注意,它侧重于具有区分特征的位置,是对渠道注意的补充。总结操作为:把feature map输入到新的(区别于主干网络)卷积层中,得到一个与原特征图维数相同的空间注意力权重矩阵。然后回乘到原特征图上。具体细节如下:

  1. 在得到上面带有通道注意力权重的特征图后,也同时采用两种池化方法(平均池化和最大池化),得到两个维数相同的feature map。命名为Fsavg,Fsmax,其维数为1 X H X W。
  2. 然后把得到Fsavg、Fsmax串行的拼接在一起。得到一个特殊的feature map。
  3. 再利用一个7*7的卷积对这个feature map进行卷积。后接一个sigmoid函数。得到一个语言特征图维数相同的加上空间注意力权重的空间矩阵。
  4. 最后把得到的空间注意力矩阵对应相乘的原特征图上。得到的新的特征图命名为Ms。

具体Ms生成公式为:

740b70c9d71fa98250e1b1ae95c5c29e.png

Arrangement of attention modules:

给定一个输入图像,两个注意模块,通道和空间,计算互补注意,分别聚焦于”是什么“和”在哪里“。考虑到这一点,两个模块可以以并行或顺序的方式放置。本文发现顺序排列比并行排列的结果更好。对于序列过程的安排,本文实验结果也表明,先进行通道注意力比先进行空间注意力稍好。

下面贴出几张实验结果:

特征图注意力_CBAM:卷积块注意力模块_第5张图片
Classification results on ImageNet-1K. Single-crop validation errors are reported.

特征图注意力_CBAM:卷积块注意力模块_第6张图片
: Object detection mAP(%) on the MS COCO validation set.

特征图注意力_CBAM:卷积块注意力模块_第7张图片
Object detection mAP(%) on the VOC 2007 test set.

你可能感兴趣的:(特征图注意力,通道注意力机制,cnn,keras)