深度学习篇---SENet
要理解 SENet(Squeeze-and-Excitation Networks),我们可以先给它贴个 “身份标签”:靠 “特征注意力” 精准筛选有用信息的 “智能特征管家”。2017 年由中国团队(胡杰等人)提出,凭借 “给特征通道加‘权重’” 的创新,一举拿下 ImageNet 竞赛冠军(Top-5 错误率仅 2.251%)。
它的设计思路像 “给 CNN 装了一个‘智能过滤器’”:传统 CNN 提取特征时,会平等对待所有通道的特征(比如 “猫的毛发纹理” 和 “背景噪音” 通道权重相同),而 SENet 通过 “压缩(Squeeze)→激励(Excitation)” 两步,给有用的特征通道赋高权重,给无用的通道赋低权重,让模型 “聚焦关键信息,忽略噪音”,用极小的计算量提升精度。
一、先搞懂:SENet 为什么会出现?
传统 CNN(如 ResNet、InceptionNet)的核心是 “设计更复杂的特征提取结构”(如残差连接、多分支卷积),但存在一个痛点:对特征通道的 “重要性区分不足”。
举个例子:当模型识别 “猫” 时,“猫的轮廓、眼睛” 等通道的特征对分类至关重要,而 “背景的墙壁纹理、无关杂物” 等通道的特征是冗余甚至干扰的。但传统 CNN 会把这些通道的特征 “一视同仁” 地传入下一层,导致有用信息被稀释,模型效率降低。
SENet 的目标就是 “让模型学会‘关注有用特征,忽略无用特征’”:它不改变原有的特征提取结构(可以嵌入任何 CNN),只在每个特征块后增加一个 “注意力模块”(SE 模块),通过学习通道权重,动态增强有用特征、抑制无用特征,实现 “用小成本换高精度”。
二、SENet 的核心:SE 模块(Squeeze-and-Excitation Module)
SE 模块是 SENet 的灵魂,本质是一个 “通道注意力模块”,通过 “压缩→激励→重标定” 三步,给每个特征通道分配一个权重。整个过程可以理解为 “先总结特征全局信息,再判断通道重要性,最后强化关键通道”。
1. 第一步:压缩(Squeeze)—— 总结全局信息
作用:将每个通道的 “局部特征” 压缩成一个 “全局特征值”,捕捉通道的全局信息(避免只看局部导致的判断偏差)。
操作:对输入的特征图(形状为H×W×C
,H=高度,W=宽度,C=通道数
)做全局平均池化(Global Average Pooling, GAP),将每个通道的H×W
个像素值平均成一个 scalar(标量)。
- 输入:
H×W×C
(比如 14×14×256,256 个通道,每个通道是 14×14 的特征图); - 输出:
1×1×C
(256 个标量,每个标量代表对应通道的 “全局信息强度”)。
通俗理解:就像给每个通道 “打一个总分”—— 比如 “猫眼睛” 通道的特征在全局都很明显,它的平均分就高;“背景噪音” 通道的特征只在局部有,平均分就低。
2. 第二步:激励(Excitation)—— 学习通道权重
作用:根据压缩得到的全局信息,学习每个通道的 “重要性权重”(让模型判断 “哪个通道有用,哪个没用”)。
操作:用两个全连接层(FC)构建一个 “门控机制”,先降维再升维,最终输出与通道数相同的权重值。
具体流程:
1×1×C
→ 全连接层 1(降维到1×1×C/r
,r
是降维系数,论文中r=16
) → ReLU 激活(增加非线性) → 全连接层 2(升维回1×1×C
) → Sigmoid 激活(将权重压缩到 0~1 之间)
- 降维的目的:减少计算量(比如 C=256,r=16 时,全连接层参数从 256×256=65536 减少到 256×16 + 16×256=8192,仅为原来的 12.5%);
- Sigmoid 的作用:确保权重在 0~1 之间,方便后续 “按权重调整特征”。
通俗理解:就像一个 “评委团”—— 先对 256 个通道的 “总分” 做简化分析(降维),再根据分析结果给每个通道打一个 “重要性分数”(0~1 分),比如 “猫眼睛” 通道得 0.9 分(非常重要),“背景噪音” 通道得 0.1 分(几乎无用)。
3. 第三步:重标定(Scale)—— 强化关键特征
作用:用学习到的通道权重,对原特征图的每个通道进行 “加权调整”,增强有用通道,抑制无用通道。
操作:将激励得到的1×1×C
权重,与原输入特征图H×W×C
进行 “通道级乘法”(每个通道的所有像素值都乘以该通道的权重)。
- 公式表达:
F_scaled = F × W
,其中F
是原特征图(H×W×C
),W
是学习到的权重(1×1×C
),×
是通道级广播乘法; - 结果:有用通道的特征被放大(乘以接近 1 的权重),无用通道的特征被削弱(乘以接近 0 的权重)。
通俗理解:就像 “按重要性调整音量”—— 把 “猫眼睛” 通道的 “音量” 调到最大,把 “背景噪音” 通道的 “音量” 调到最小,让下一层只关注清晰的关键特征。
4. SE 模块的完整流程(可视化)
输入特征图 (H×W×C)↓
Squeeze(全局平均池化) → 全局特征 (1×1×C)↓
Excitation(全连接+ReLU+全连接+Sigmoid) → 通道权重 (1×1×C)↓
Scale(通道级乘法) → 输出加权特征图 (H×W×C)
三、SENet 的核心优势:“轻量化 + 高兼容性”
SENet 之所以能成为竞赛冠军,关键在于它的 “低代价高收益” 特性:
- 计算量极小:SE 模块的计算量主要来自两个全连接层,对于一个 C=256 的特征块,r=16 时仅增加约 8k 个参数,相比 ResNet-50 的 2500 万参数,额外参数占比仅 0.03%;
- 兼容性极强:SE 模块可以嵌入任何 CNN 结构(ResNet、InceptionNet、MobileNet 等),只需在每个特征块(如 ResNet 的残差块、Inception 的分支块)后添加 SE 操作,无需改变原网络的主体结构;
- 精度提升明显:在 ImageNet 上,SE-ResNet-50 比普通 ResNet-50 的 Top-1 错误率降低 1.6%,SE-ResNeXt-101 比普通 ResNeXt-101 降低 2.0%,且在目标检测、分割等任务上同样有效。
四、SE 模块的典型嵌入方式(以 SE-ResNet 为例)
SE 模块最常用的嵌入场景是 ResNet(形成 SE-ResNet),我们以 ResNet 的 “瓶颈残差块”(Bottleneck Block)为例,看 SE 模块如何嵌入:
普通 ResNet 瓶颈块结构
输入 → 1×1 Conv(降维)→ BN → ReLU → 3×3 Conv(特征提取)→ BN → ReLU → 1×1 Conv(升维)→ 残差连接 → ReLU → 输出
SE-ResNet 瓶颈块结构(嵌入 SE 模块)
输入 → 1×1 Conv → BN → ReLU → 3×3 Conv → BN → ReLU → 1×1 Conv → 【SE模块】→ 残差连接 → ReLU → 输出
关键位置:在残差块的 “特征提取完成后、残差连接前” 嵌入 SE 模块 —— 先让 SE 模块对提取到的特征做权重调整,再与 shortcut 分支的特征相加,确保后续层接收的是 “加权后的优质特征”。
五、SENet 的应用场景和历史意义
1. 核心应用场景
- 图像分类:作为基础模型(如 SE-ResNet、SE-ResNeXt),在 ImageNet、CIFAR 等数据集上实现高精度分类;
- 目标检测与分割:作为 “特征提取 backbone”,嵌入 Faster R-CNN、Mask R-CNN 等模型,通过增强关键特征(如物体轮廓、纹理)提升检测 / 分割精度;
- 移动端场景:SE 模块计算量小,可嵌入 MobileNet、EfficientNet 等轻量化模型,在手机等资源受限设备上实现 “高精度 + 快速度”;
- 医学图像分析:在 X 光片、CT 图像的病灶识别中,SE 模块能增强病灶区域特征,抑制背景组织干扰,提升诊断准确率。
2. 历史意义
SENet 的出现,推动了 CNN 从 “单纯优化特征提取结构” 向 “优化特征利用效率” 的转变:
- 开创通道注意力先河:SE 模块是首个被大规模验证有效的 “通道注意力” 模块,后续的 ECA-Net(高效通道注意力)、CBAM(卷积块注意力模块)等都基于 SE 的思路改进;
- 证明 “注意力” 的价值:首次用实践证明,即使不改变特征提取结构,仅通过 “动态调整特征权重”,就能用极小代价大幅提升模型性能,为后续注意力机制在 CV 领域的普及奠定基础;
- 国产模型的里程碑:SENet 是首个由中国团队提出并获得 ImageNet 冠军的模型,标志着中国在 CV 领域的研究进入世界顶尖水平。
六、一句话总结 SENet
SENet 就像 CNN 的 “智能特征管家”—— 它通过 “压缩→激励→重标定” 的 SE 模块,给每个特征通道学习一个 “重要性权重”,动态增强有用特征、抑制无用特征,用几乎可以忽略的计算量,让任何 CNN 的精度都能 “再上一个台阶”,是深度学习中 “注意力机制” 的经典应用。