第二十八篇 SeNet模型解析

SENet是一种创新的神经网络结构,通过Squeeze-and-Excitation模块学习特征通道的权重,增强了模型对特征的利用率。该模型在ImageNet竞赛中取得显著成果,能有效建模通道间依赖,且易于融入其他网络架构,如ResNet。SE模块包括全局平均池化、全连接层和Sigmoid激活,以实现特征的重标定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SENet概述

​ Squeeze-and-Excitation Networks(简称 SENet)是 Momenta 胡杰团队(WMW)提出的新的网络结构,利用SENet,一举取得最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军,在ImageNet数据集上将top-5 error降低到2.251%,原先的最好成绩是2.991%。

作者在文中将SENet block插入到现有的多种分类网络中,都取得了不错的效果。作者的动机是希望显式地建模特征通道之间的相互依赖关系。另外,作者并未引入新的空间维度来进行特征通道间的融合,而是采用了一种全新的「特征重标定」策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

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

### SENet模型工作原理详解 #### 1. 背景介绍 SENet(Squeeze-and-Excitation Network)首次提出于2017年,旨在革新传统神经网络对特征处理的方式。不同于常规的前馈结构,SENet通过引入注意力机制,在每个卷积块后添加一个轻量级的模块来动态调整各个通道的重要性[^2]。 #### 2. Squeeze操作 Squeeze阶段的目标是从输入特征图中提取全局信息。具体来说,对于给定的一个大小为 \(H \times W \times C\) 的特征图,Squeeze操作会对其进行全局平均池化(Global Average Pooling, GAP),得到一个长度为C的一维向量。这个过程有效地压缩了空间维度,保留了每个通道的信息: \[ z_i = f_{sq}(U) = \frac{1}{HW} \sum_{h=1}^{H}\sum_{w=1}^{W} u_{i,h,w}, i\in[1,C] \] 其中\(u_{i,h,w}\)表示第i个通道在位置(h,w)处的激活值[^3]。 #### 3. Excitation操作 接着进入Excitation阶段,该部分负责基于前面获得的全局描述符计算各通道的重要程度。这通常由两个全连接层完成,中间夹带ReLU激活函数以及sigmoid激活函数作为最终输出,形成所谓的门控机制。这样做的目的是为了生成一组介于0到1之间的权重系数,用于后续调节原始特征图中相应通道的重要性: ```python def excitation(squeezed_features, reduction_ratio): reduced_dim = squeezed_features.shape[-1] // reduction_ratio fc1_output = tf.keras.layers.Dense(reduced_dim)(squeezed_features) relu_output = tf.nn.relu(fc1_output) fc2_output = tf.keras.layers.Dense(squeezed_features.shape[-1])(relu_output) sigmoids = tf.sigmoid(fc2_output) return sigmoids ``` 上述代码展示了如何构建excitation子模块,这里采用了两层全连接网络并设置了reduction ratio参数控制降维比例。 #### 4. 特征重标定 最后一步是将上一步产生的权重视作缩放因子应用回原特征图上,即乘法运算。经过此步处理后的特征图能够更好地突出那些有助于当前任务的关键区域或对象特性,同时削弱无关紧要的部分的影响。这种自适应地增强有益特征的方法使得整个框架更加鲁棒且高效。 ```python scaled_feature_maps = feature_maps * excitation_weights[:, None, None, :] ``` 这段简单的Python代码片段说明了如何利用广播机制实现特征重标定的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI智韵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值