Python Day49
Task:
1.通道注意力模块复习
2.空间注意力模块
3.CBAM的定义
1. 通道注意力模块(Channel Attention Module)
- 目的:动态调整各通道的权重,突出重要特征通道,抑制不相关信息。
- 结构:
- 双路池化:对输入特征图分别进行全局平均池化(GAP)和全局最大池化(GMP),得到两个1×1×C的向量。
- 共享MLP:将两个向量输入共享的全连接网络(MLP),结构为
C → C/r → C
(r为缩减比例,如16),使用ReLU激活中间层。 - 融合权重:将MLP的输出相加后通过Sigmoid函数,生成通道权重矩阵 ( M_c )。
- 特征调整:将权重 ( M_c ) 与输入特征图逐通道相乘,增强关键通道。
2. 空间注意力模块(Spatial Attention Module)
- 目的:关注特征图的重要空间区域,忽略无关区域。
- 结构:
- 跨通道池化:沿通道维度分别进行平均池化和最大池化,得到两个H×W×1的特征图。
- 特征拼接:将两个结果拼接为H×W×2的特征图。
- 卷积处理:应用7×7卷积(输出通道为1)融合空间信息,生成空间权重矩阵 ( M_s )。
- Sigmoid激活:对卷积结果使用Sigmoid函数,得到空间权重。
- 特征调整:将权重 ( M_s ) 与输入特征图逐位置相乘,强化重要区域。
3. CBAM(Convolutional Block Attention Module)
- 定义:串联通道注意力和空间注意力的轻量级模块,顺序为 通道→空间。
- 流程:
- 输入特征图 ( F ):形状H×W×C。
- 通道调整:( F’ = M_c(F) \otimes F )(( \otimes ) 为逐通道乘)。
- 空间调整:( F’’ = M_s(F’) \otimes F’ )。
- 优点:
- 即插即用:可嵌入CNN的任意位置(如ResNet块后)。
- 轻量化:参数少,计算开销低,性能提升显著。
- 双维度聚焦:通道与空间注意力互补,增强特征判别力。
示例:CBAM嵌入ResNet
- 步骤:在ResNet的残差块中,卷积层后接CBAM模块。
class CBAMResBlock(nn.Module):def __init__(self, in_channels, reduction_ratio=16):super().__init__()self.conv_layers = ... # 原有卷积层self.cbam = CBAM(in_channels, reduction_ratio)def forward(self, x):residual = xx = self.conv_layers(x)x = self.cbam(x)x += residual # 残差连接return x
关键点总结
- 通道注意力:综合GAP与GMP,MLP共享参数,生成通道权重。
- 空间注意力:跨通道池化拼接,大卷积核捕捉空间上下文。
- CBAM顺序:先通道后空间,实验验证顺序有效性。
- 应用效果:提升分类、检测等任务的精度,如ImageNet上ResNet-50的Top-1准确率提升约1-2%。
CBAM通过简洁的双注意力机制,实现了对特征图通道与空间维度的自适应优化,成为计算机视觉模型的常用增强模块。