SENet:通道注意力

源码、配套笔记&讲解视频,点击文末名片获取

  1. 研究背景和动机
    (1)CNN 的进步与瓶颈
    在 ResNet、Inception、MobileNet 等卷积神经网络出现后,模型的深度和结构设计越来越强大,分类和检测精度不断提升。
    👉 但是,传统卷积操作主要关注 空间维度(比如卷积核在图像上滑动,提取边缘、纹理等特征),而对 通道维度(每个 feature map 的“重要性”)的建模非常有限。
    换句话说,模型能学到“哪里有东西”,但不太会判断“哪些通道更关键”。

(2)通道信息的重要性
举个直观的例子:

  • 在彩色图像中,红、绿、蓝三个通道分别代表不同颜色信息,但并不是每个任务都同等重要。
    • 比如识别人脸时,可能“红色通道(肤色信息)”更重要;
    • 而识别森林图像时,“绿色通道”贡献更大。
      然而,以往 CNN 的卷积核在处理时,把所有通道几乎一视同仁,缺乏一种机制去“挑重点”。

(3)SENet 的动机
SENet 的作者提出:
👉 是否可以让网络自己学会“给通道分配权重”,自动强调有用的通道,抑制无关的通道?
这就像:

  • 在工厂生产线上,每个工人(通道)都在干活,但有些工人做的零件特别关键。
  • 如果工厂经理(SENet)能识别出关键工人,并给他们更多资源和关注,那么整个工厂的产能和产品质量就会提升。

✅ 因此,SENet 的核心出发点是:
通过“挤压与激励”机制(Squeeze & Excitation),显式建模通道之间的关系,让 CNN 学会通道注意力,从而提升特征表达能力。

  1. SENet 的创新点
    (1)提出了通道注意力机制(Channel Attention)
  • 传统 CNN 更关注“空间特征”(卷积核在图像上滑动提取边缘、纹理),但忽略了 通道之间的重要性差异。
  • SENet 首次显式建模 通道之间的依赖关系,让网络能够自动学习“哪些通道更重要”。
    👉 类比:
    好比一个交响乐团,虽然有很多乐器(通道),但在不同的乐章里,有的乐器需要突出(小提琴),有的需要弱化(打击乐)。SENet 就像一个指挥家,动态调整音量,让乐团整体表现更完美。

(2)Squeeze(挤压):全局信息压缩

  • 对每个通道做 全局平均池化,把空间信息“压缩”成一个全局描述。
  • 相当于总结这个通道整体“有没有用”,而不是只看某个小区域。
    👉 类比:
    就像工厂老板巡视生产线时,不是看每个工人每分钟做什么,而是看整体产出情况,做一个总评分。

(3)Excitation(激励):学习通道权重

  • 通过一个小的全连接网络(两个 FC 层 + 激活函数),学到每个通道的“权重”。
  • 这个权重就像一个“开关”,决定哪些通道要加强,哪些要弱化。
    👉 类比:
    好比老板发现有些工人做的零件特别关键,于是给他们更多奖金(提升权重);而那些贡献小的工人,就减少他们的工作强度(降低权重)。

(4)Recalibration(特征重标定)

  • 把学到的通道权重重新乘回原特征图,完成“特征重标定”。
  • 最终模型得到的是 “重点突出、无关压缩” 的新特征图。
    👉 类比:
    就像工厂在老板分配资源后,产线重新调整,重要零件被高质量生产,次要零件减少浪费。最终产品更优。

  • 轻量:SE 模块只需要极少的额外参数和计算量。
  • 通用:可以插入到任意 CNN 结构中(ResNet、Inception、MobileNet、ShuffleNet…)。
  • 效果显著:在 ImageNet 上,SENet 拿下 2017 年冠军(Top-5 error 仅 2.25%)。

3、SENet 的网络结构
[图片]

图2:SE-Inception
左图:原版 Inception 模块

  • 上方 X → Inception → X̂:输入进 Inception,多分支卷积后合并,得到输出。没有“权重调节”的步骤。
    你可以把 Inception 理解为“并排的多个工位(3×3、5×5、1×1、池化分支等)一起干活,最后把产物拼在一起”。
    右图:SE-Inception 模块(关键是 Inception 后接一个 SE)
  1. Inception(W×H×C)
  • 仍然是多分支 → 合并;得到一张 W×H×C 的特征图。
  • 这一步跟原版完全一样。
  1. Global pooling(全局平均池化) → 1×1×C
  • 把每个通道在整张图上的“总体表现”压成一个数;得到 C 个分数的草稿。
  • 作用:从“全局角度”看每条生产线到底有多重要。
  1. FC(全连接,降一小步) → 1×1×(C/r)
  • 进入第一间“小会议室”:先把信息挤一挤(常用 r=16),成本更低,还能学到非线性组合。
  1. ReLU
  • 给“分数草稿”一次非线性变换,相当于“进一步筛选要点”。(依然在小会议室里)
  1. FC(全连接,拉回原通道数) → 1×1×C
  • 第二间“小会议室”:把分数还原到 C 个通道,每个通道都有自己的评分。
  1. Sigmoid(把评分压到 0~1)
  • 让每条生产线的“音量旋钮”落在 0~1 之间,便于当作权重使用。
  1. Scale(按通道缩放) → W×H×C
  • 把这 C 个权重逐通道乘回到 Inception 的输出上:有用的放大,不重要的压低。尺寸还是 W×H×C,只是“每条线的音量”被调过了。
    为什么放在 Inception 的“合并之后”?
  • Inception 的强项是“多分支/多尺度”。等分支合并后再统一打权,等于对所有尺度做一次总评,更符合模块级语义。
    开销如何?
  • 只多了两层很小的全连接和一次通道乘法;额外算力极小,却能带来可观提升。

图3:SE-ResNet
[图片]

左图:原版 ResNet 模块

  • 结构:捷径(恒等/投影) 直接绕过;卷积分支(1×1→3×3→1×1)产生“新信息”。
  • 两路在底部的 ⊕ 处相加。这就是经典的残差。
    右图:SE-ResNet 模块(把 SE 放在“相加前”的卷积分支末尾)
  1. Residual(卷积分支输出,W×H×C)
  • 先按原来的 1×1→3×3→1×1 计算,得到“新信息”。
  1. Global pooling(看全局) → 1×1×C
  • 为卷积分支的每个通道做一份全局成绩单。
  1. FC(降) → ReLU → FC(升) → Sigmoid
  • 两间“小会议室”里商量出每个通道的权重(0~1)。
  • 和图2完全同款流程,只是作用对象不同:这里只处理“卷积分支”的输出。
  1. Scale(按通道缩放) → W×H×C
  • 给“新信息”调音量。此时捷径分支还没动。
  1. Add(与捷径相加) → 输出
  • 现在再和捷径合并。
  • 这么做的好处:你只是在新加的信息上做取舍,不破坏捷径这条稳定的“直达通路”,训练更稳、更有效。论文的消融研究也证实“相加前”最好。
    开销与收益
  • 以 ResNet-50 为例:3.86 → 3.87 GFLOPs(仅 +0.26%),但精度接近更深的 ResNet-101;CPU 上推理也只多了几毫秒。
    [图片]

4、SENet 的致命缺陷

🔴 SENet 的最大问题:只关注通道关系,忽略空间信息

  • SENet 的 SE 模块做的事情,本质上是:
    1. 把整张特征图“压缩”为一个全局平均值(每个通道一个数)。
    2. 通过全连接层学出通道权重,决定“哪个通道重要”。
    3. 用这些权重重新缩放通道。
  • 问题在于:
    这样做完全 丢弃了空间位置的信息 —— 每个通道里,左上角的像素和右下角的像素,在 SE 眼里是“完全一样”的。

📌 举个形象化的例子
想象你有一群工人(通道),SENet 就像一个经理:

  • 它只统计“每个工人平均干了多少活”。
  • 决定奖励谁、冷落谁。
  • 但它根本不看工人在哪条流水线上干活、具体负责哪个零件。
    结果就是:
  • 虽然知道哪些工人更重要,但完全没法细致地调度“哪个岗位更需要加强”。
  • 如果一个工人只在局部区域特别重要(比如图像的一个小角落),SENet 就“看不到”了。

📊 后续研究怎么解决?
很多改进版注意力机制正是为了填补这个缺陷:

  • CBAM (Convolutional Block Attention Module, 2018):在 SE 的通道注意力之外,再加一个空间注意力,让网络知道“图像的哪个位置更重要”。
  • ECA-Net (2020):简化通道建模,用卷积取代全连接,减少参数和过拟合风险。
  • Coordinate Attention (2021):同时建模通道和坐标方向,让网络既看重“谁重要”,又看重“在哪个位置重要”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值