【深度学习注意力机制系列】—— SENet注意力机制(附pytorch实现)

深度学习中的注意力机制(Attention Mechanism)是一种模仿人类视觉和认知系统的方法,它允许神经网络在处理输入数据时集中注意力于相关的部分。通过引入注意力机制,神经网络能够自动地学习并选择性地关注输入中的重要信息,提高模型的性能和泛化能力。

卷积神经网络引入的注意力机制主要有以下几种方法:

  • 在空间维度上增加注意力机制
  • 在通道维度上增加注意力机制
  • 在两者的混合维度上增加注意力机制

我们将在本系列对多种注意力机制进行讲解,并使用pytorch进行实现,今天我们讲解SENet注意力机制

SENet(Squeeze-and-Excitation Networks)注意力机制通道维度上引入注意力机制,其核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。SE block嵌在原有的一些分类网络中不可避免地增加了一些参数和计算量,但是在效果面前还是可以接受的 。Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中。

在这里插入图片描述

以上是SENet的结构示意图, 其关键操作为squeeze和excitation. 通过自动学习获得特征图在每个通道上的重要程度,以此为不同通道赋予不同的权重,提升有用通道的贡献程度.

实现机制:

  1. Squeeze: 通过全剧平均池化层,将每个通道大的二维特征(h*w)压缩为一个实数,维度变化: (C, H, W) -> (C, 1, 1)
  2. Excitation: 给予每个通道的一个特征权重, 然后经过两次全连接层的信息整合提取,构建通道间的自相关性,输出权重数目和特征图通道数一致, 维度变化: (C, 1, 1) -> (C, 1, 1)
  3. Scale: 将归一化后的权重加权道每个通道的特征上, 论文中使用的是相乘加权, 维度变化: (C, H, W) * (C, 1, 1) -> (C, H, W)

pytorch实现:

class SENet(nn.Module):
    def __init__(self, in_channels, ratio=16):
        super(SENet, self).__init__()
        self.in_channels = in_channels
        self.fgp = nn.AdaptiveAvgPool2d((1, 1))
        self.fc1 = nn.Linear(self.in_channels, int(self.in_channels / ratio), bias=False)
        self.act1 = nn.ReLU()
        self.fc2 = nn.Linear(int(self.in_channels / ratio), self.in_channels, bias=False)
        self.act2 = nn.Sigmoid()

    def forward(self, x):
        b, c, h, w = x.size()
        output = self.fgp(x)
        output = output.view(b, c)
        output = self.fc1(output)
        output = self.act1(output)
        output = self.fc2(output)
        output = self.act2(output)
        output = output.view(b, c, 1, 1)
        return torch.multiply(x, output)
<think>好的,我现在需要帮助用户解决如何用Visio绘制CBAM注意力机制架构图的问题。首先,我需要回忆一下CBAM的基本结构。CBAM是卷积块注意力模块,包含通道注意力和空间注意力两个部分。通道注意力使用全局平均池化和最大池化,然后通过MLP生成权重;空间注意力则是沿着通道轴进行池化,再通过卷积层生成空间权重。接下来,我需要考虑Visio的绘图功能,用户可能需要的步骤包括创建基本模块、添加连接线、标注关键操作等。 用户可能对Visio不太熟悉,所以步骤要详细。首先,建议他们先规划结构,画出两个主要部分:通道和空间注意力。然后,每个部分内部的组件,比如池化层、共享的MLP、卷积层等,需要用不同的形状来表示,比如矩形或圆形。颜色区分可能有助于区分不同类型层,比如池化层用蓝色,全连接层用绿色。连接线方面,要注意箭头方向,表示数据流向。 同时,用户可能需要示意图的例子,比如通道注意力的结构图,空间注意力的结构图,以及整体集成到ResNet中的方式。此外,生成相关问题可以引导他们深入理解,比如CBAM的作用、与SE模块的区别、参数设置等。需要注意引用格式,但用户提供的引用信息中没有具体的来源,可能需要忽略或标注为假设引用。最后,确保所有数学公式用正确的LaTeX格式,比如$GAP$和$GMP$用$符号包裹,独立公式用$$,但根据用户示例,似乎行内公式使用单$即可,可能不需要独立公式。需要检查是否符合用户给定的系统级指令,特别是LaTeX格式和中文回答的要求。</think>### 如何用Visio绘制CBAM注意力机制的架构图? #### 1. **理解CBAM结构** CBAM(Convolutional Block Attention Module)包含两个子模块:**通道注意力**和**空间注意力**。 - **通道注意力**:对输入特征图进行全局平均池化($GAP$)和全局最大池化($GMP$),通过共享的MLP生成通道权重[^1]。 - **空间注意力**:沿通道轴进行平均池化和最大池化,拼接后通过卷积层生成空间权重[^2]。 #### 2. **Visio绘制步骤** **步骤1:创建基础模块** - 使用矩形表示卷积层、池化层、MLP等组件。 - 用箭头连接模块,标明数据流向(如$H \times W \times C$表示特征图尺寸)。 **步骤2:绘制通道注意力** 1. 添加两个并行池化层($GAP$和$GMP$),标注公式: $$ \text{通道权重} = \sigma(MLP(GAP(X)) + MLP(GMP(X))) $$ 2. 用“加法”符号合并结果,后接Sigmoid激活($\sigma$)。 **步骤3:绘制空间注意力** 1. 沿通道轴对特征图做平均和最大池化,得到$H \times W \times 2$。 2. 添加卷积层($7 \times 7$核)生成空间权重: $$ \text{空间权重} = \sigma(f^{7 \times 7}([AvgPool(X); MaxPool(X)])) $$ **步骤3:整合模块** - 将通道权重与输入相乘,输出传递到空间注意力模块,再与空间权重相乘。 - 使用颜色区分不同操作(如蓝色表示池化,绿色表示全连接层)。 #### 3. **示意图示例** ``` [输入特征图] → [通道注意力] → [×权重] → [空间注意力] → [×权重] → [输出特征图] ``` #### 4. **Visio技巧** - 使用“形状”库中的流程图符号,自定义图标表示特殊操作(如池化)。 - 添加注释说明公式,例如:$MLP$的结构为$C \to C/r \to C$。 - 导出为矢量图(如SVG)保证清晰度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卖报的大地主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值