一、SE 模块的结构

SE 模块主要包含 Squeeze 和 Excitation 两部分。W,H 表示特征图宽,高。C 表示通道数,输入特征图大小为 W×H×C。
1、压缩(Squeeze)
第一步是压缩(Squeeze)操作,如下图所示:

这个操作就是一个
全局平均池化(global average pooling)。经过压缩操作后特征图被压缩为1×1×C向量。
2、激励(Excitation)
接下来就是激励(Excitation)操作,如下图所示:

由两个全连接层组成,其中SERatio是一个缩放参数,这个参数的目的是为了
减少通道个数从而降低计算量。
第一个全连接层有C*SERatio个神经元,输入为1×1×C,输出1×1×C×SERadio。
第二个全连接层有C个神经元,输入为1×1×C×SERadio,输出为1×1×C。
3、scale 操作
最后是 scale 操作,在得到 1×1×C 向量之后,就可以对原来的特征图进行 scale 操作了。很简单,就是通道权重相乘,原有特征向量为W×H×C,将SE模块计算出来的各通道权重值分别和原特征图对应通道的二维矩阵相乘,得出的结果输出。
这里我们可以得出SE模块的属性:
参数量 = 2×C×C×SERatio
计算量 = 2×C×C×SERatio
总体来讲SE模块会增加网络的总参数量,总计算量,因为使用的是全连接层计算量相比卷积层并不大,但是参数量会有明显上升
二、SE 模块的结构
SE 模块根据注意的方面不同分为通道注意力 CAM 和空间注意了 SAM,一个关注“what”,一个关注“where”,两者可以并行或者串行使用。
1、通道注意力 CAM
通道注意力通过混合通道维度的信息来进行特征提取。

对于输入的 feature map F,首先在每个空间位置上应用 MaxPooling、AvgPooling,得到两个 C11 的向量,然后分别送入一个共享的包含两层 FC 的 MLP,最后将两者相加融合,经过一个激活函数,得到通道注意力 CAM,其公式表达为:

Pytorch 实现:
class ChannelAttention(nn.Module):
def __init__(self, in_planes, ratio=16

本文详细介绍了SE模块的结构和原理,包括Squeeze和Excitation两部分,并解析了SE模块的参数量和计算量。同时,文章还探讨了SE模块的两种形式——通道注意力CAM和空间注意力SAM,以及结合两者的CBAM模块。
最低0.47元/天 解锁文章
1747





