CBAM: Convolutional Block Attention Module------论文理解

参考博客:https://blog.csdn.net/u013738531/article/details/82731257

pytorch代码:https://github.com/luuuyi/CBAM.PyTorch

1. 概述

本论文提出了一种简单但有效的注意力网络---Convolutional Block Attention Module(CBAM)。给定一个中间的特征图,我们的模块沿着两个不同的维度依次计算注意力图,分别是通道上和空间上,然后将输出的注意力图与输入的特征图相乘,这样做是为了可以自适应特征改进。由于CBAM是轻量级的,因此它可以融合到任何一个CNN架构中,并且有可忽略不计的开销。


卷积神经网络在很大程度上推动了计算机视觉任务的发展,最近的研究主要研究了网络的三个重要因素:深度,宽度,维度
深度的代表:VGG,ResNet;宽度的代表:GoogLeNet;维度的代表: Xception, ResNeXt。

除了上述三点,我们研究了架构设计的不同方面:注意力。注意力不仅告诉我们要注意到哪块,而且提高感兴趣区域的代表性。我们的目标是通过使用注意机制来增加表现力:注意到重要的特征同时压缩不必要的特征

由于卷积运算通过将跨通道和空间信息混合在一起来提取信息特征,我们采用本文提出的CBAM模块来强调这两个主要维度的有意义的特征:通道维度和空间维度。

2. Convolutional Block Attention Module

CBAM: Convolutional Block Attention Module------论文理解_第1张图片

图1是对CBAM模块总体的概览。特征图依次通过通道注意力模块和空间注意力模块,最终得到细化后的特征图。总体看统一用公式来描述。F为输入。F'为经过通道注意模块的输出。Mc为一维的通道注意力图Ms为二维的空间注意力图。F''为CBAM模块最终细化后的输出。

2.1 通道注意力模块

类似SENet。但不同的一点是文中同时使用平均池化和最大池化。因为作者认为最大池化可以收集到难区分物体之间更重要的线索来推断更详细的通道注意力。实验证明,结合两种池化比单独使用一种能更大程度提高网络的代表能力。过程是:首先分别对特征图进行最大池化和平均池化,生成两个一维注意力图,,再分别进行降维和升维的处理(详细过程参考SENet),然后对两个注意力图逐元素相加,最后与输入特征图相乘得到经过通道注意力模块的特征图。详细的图片和公式如下。

CBAM: Convolutional Block Attention Module------论文理解_第2张图片

2.2 空间注意力模块

该模块充分利用了特征图内部空间之间的关系。与通道注意力不同的是,空间注意主要能注意到有效信息部分的位置。计算空间注意力过程如下:首先在通道维度上对特征图分别做最大池化和平均池化操作,得到两个二维(HxW)的特征图,,然后经过拼接和一标准7x7卷积,得到二维注意力图。详细的图示和公式如下。

CBAM: Convolutional Block Attention Module------论文理解_第3张图片

注:由于两个模块的连接方式既可以平行连接也可以顺序连接。文中经过实验证明,顺序排列比并行排列提供更好的结果。且通道注意在前比空间注意在前效果更好。

SA模块代码:

'''
使用torch.mean函数在通道维数上进行平均池化和最大池化。
'''
class SpatialAttention(nn.Module):
    def __init__(self, kernel_size=7):
        super(SpatialAttention, self).__init__()

        assert kernel_size in (3, 7), 'kernel size must be 3 or 7'
        padding = 3 if kernel_size == 7 else 1

        self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        avg_out = torch.mean(x, dim=1, keepdim=True)
        max_out, _ = torch.max(x, dim=1, keepdim=True)
        x = torch.cat([avg_out, max_out], dim=1)
        x = self.conv1(x)
        return self.sigmoid(x)

3. 实验

3.1 通道注意力模块

CBAM: Convolutional Block Attention Module------论文理解_第4张图片

3.2 空间注意力模块

使用通道维度的池化(最大池化和平均池化)和7x7的卷积效果最好。

CBAM: Convolutional Block Attention Module------论文理解_第5张图片

3.3 联合通道注意和空间注意

CBAM: Convolutional Block Attention Module------论文理解_第6张图片

3.4 目标检测数据集上的实验效果

coco数据集:

CBAM: Convolutional Block Attention Module------论文理解_第7张图片

voc2007数据集:

CBAM: Convolutional Block Attention Module------论文理解_第8张图片

你可能感兴趣的:(深度学习,目标检测,计算机视觉)