目录
二、通道注意力模块(Channel Attention Module)
三、空间注意力模块(Spatial Attention Module)
四、CBAM(Convolutional Block Attention Module)
写在前面
CBAM论文地址:https://arxiv.org/abs/1807.06521
CBAM(Convolutional Block Attention Module)是2018年被提出的,不同于ViT的Attention,CBAM是为CNN量身定做的Attention模块,实现简单、效果好,你值得拥有。
为了提高CNN的性能,我们可以从深度(depth)、宽度(width)和基数(cardinality)三个方面入手。深度很好理解,就是模型的层数,层数越多模型越深。下面说一说基数和宽度的区别。
一、基数和宽度
基数(cardinality):指的是并行分支的数量。
宽度(width):指每一层卷积的卷积核数量(即输出特征图的通道数)。
举个GoogLeNet的例子:
GoogLeNet 的设计中,Inception模块通过组合多个不同大小的卷积核(例如 1x1、3x3、5x5)和池化操作来提取不同尺度的特征。
增加“宽度”的效果: 我们有一个 Inception 模块,包含 1x1、3x3 和 5x5 的卷积层,以及一个 3x3 的最大池化层。如果我们在该 Inception 模块中增加每个卷积操作的通道数,例如将 1x1 卷积层的输出通道数从 32 增加到 64,将 3x3 卷积层的输出通道数从 64 增加到 128,这种操作就增加了网络的“宽度”。增加“宽度”意味着每个 Inception 模块可以提取更多的特征信息,但同时也增加了计算成本。
增加基数: 如果我们将每个卷积和池化操作进一步拆分为多个组,例如在每个卷积操作中使用组卷积(group convolution),那么这些并行组卷积操作的数量就类似于增加了“基数”。每个组卷积操作都是一个独立的路径,这些路径的数量增加就代表了基数的增加。基数不仅节省了参数的总数,而且比深度和宽度这两个因素具有更强的表示能力。
可以看下图,蓝色的线表示模型的基数,红色的数字表示宽度。
CBAM由两个顺序的子模块组成:通道注意力模块(Channel Attention Module)和空间注意力模块(Spatial Attention Module)。CAM解决的问题是重要的信息是什么(‘what’ is meaningful given an input image)、SAM解决重要的信息在哪里(‘where’ is an informative part)。这两个模块都使用了增加基数的方式,提升模型的表达能力。
二、通道注意力模块(Channel Attention Module)
&