【北上广深杭大厂AI算法面试题】深度学习篇...Squeeze Excitation(SE)网络结构详解,附代码。(二)

【北上广深杭大厂AI算法面试题】深度学习篇…Squeeze Excitation(SE)网络结构详解,附代码。(二)

【北上广深杭大厂AI算法面试题】深度学习篇…Squeeze Excitation(SE)网络结构详解,附代码。(二)


文章目录

  • 【北上广深杭大厂AI算法面试题】深度学习篇...Squeeze Excitation(SE)网络结构详解,附代码。(二)
  • Squeeze Excitation(SE)网络结构详解(附代码实现)
    • 4. SE 模块如何嵌入 CNN
    • 5. SE 网络的优缺点
      • ✅ 优点
        • 提高特征表达能力:
        • 计算开销小:
        • 可插拔性:
      • ❌ 缺点
        • 仅关注通道注意力:
    • 6. SE 网络的实际应用
    • 7. 结合互联网大厂 AI 算法面试题
      • 为什么要用 SE?
      • SE 计算量大吗?
      • SE 还能优化吗?
      • SE 和 Self-Attention 的区别?
    • 8. 总结


欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/145551342


Squeeze Excitation(SE)网络结构详解(附代码实现)

4. SE 模块如何嵌入 CNN

SE 模块通常被嵌入到ResNet、MobileNet等网络中。例如,在 ResNet 残差块后面加上 SE 模块:

class SEResidualBlock(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1, reduction=16):
        super(SEResidualBlock, self).__init__()

        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=stride, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.relu = nn.ReLU(inplace=True)
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channels)

        # SE 模块
        self.se = SqueezeExcitation(out_channels, reduction)

        # 残差连接
        self.shortcut = nn.Sequential()
        if stride != 1 or in_channels != out_channels:
            self.shortcut = nn.Sequential(
                nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(out_channels)
            )

    def forward(self, x):
        out = self.relu(self.bn1(self.conv1(x)))
        out = self.bn2(self.conv2(out))

        # 插入 SE 模块
        out = self.se(out)

        # 残差连接
        out += self.shortcut(x)
        return self.relu(out)

# 测试 SEResNet 残差块
x = torch.randn(1, 64, 32, 32)  # 假设输入通道 64
se_res_block = SEResidualBlock(64, 64)
y = se_res_block(x)
print(y.shape)  # 预计输出: torch.Size([1, 64, 32, 32])

5. SE 网络的优缺点

✅ 优点

提高特征表达能力:
  • 通过通道注意力机制,增强重要通道的权重。
计算开销小:
  • 仅增加了一些全连接计算,但计算量较小(约占总计算量的 0.02%)。
可插拔性:
  • 可直接嵌入到ResNet、VGG、MobileNet、DenseNet等 CNN 中,提升性能。

❌ 缺点

仅关注通道注意力:
  • 忽略了空间注意力,无法关注局部空间特征。
  • 解决方案:CBAM(通道 + 空间注意力)。

6. SE 网络的实际应用

SE 模块被广泛应用于:

  • ImageNet 分类任务(SE-ResNet)。
  • 目标检测(Object Detection)(SE-YOLO)。
  • 语音识别(SE-LSTM)。

在 ImageNet 上,SE-ResNet 在几乎不增加计算量的情况下,提升了 ResNet 的分类准确率。

7. 结合互联网大厂 AI 算法面试题

在大厂 AI 面试中,SE 模块常涉及:

为什么要用 SE?

  • 通过通道注意力机制增强特征表示,提升模型性能。

SE 计算量大吗?

  • 计算量增加很少(约 0.02%),但提升效果明显。

SE 还能优化吗?

  • 可以结合空间注意力(如 CBAM)。

SE 和 Self-Attention 的区别?

  • SE 关注通道注意力,适用于 CNN。
  • Self-Attention 关注全局特征关系,适用于 Transformer。

8. 总结

  • SE 网络通过 Squeeze(全局特征压缩)→ Excitation(计算注意力)→ Scale(通道加权) 机制,实现通道注意力。
  • 可嵌入ResNet、MobileNet等 CNN,提高分类准确率。
  • 计算量增加极小,但性能提升显著。
  • 在 AI 面试中,SE 网络是一个高频考点,建议熟练掌握其结构、原理和代码实现。

如果你准备大厂面试,一定要掌握 SE 模块的实现和优化思路!

你可能感兴趣的:(AI算法题库,人工智能,算法,深度学习,神经网络,cnn)