再看SENet

博客介绍了SENet(Squeeze - and - Excitation Networks),先进行全局平均池化,输出经两级全连接限制在[0,1]范围后作为scale乘到通道上。第一个全连接压缩通道降计算量,第二个恢复通道。还提及SENet与ResNet和Inception结合,并给出了Keras代码。

SENet(Squeeze-and-Excitation Networks)

先做一个全局平均池化Global Average Pooling,输出的1x1xC的数据经过两级全连接限制到[0,1]范围内,再把这个值作为scale乘到U的C个通道上,作为下一级的输入数据。

第一个全连接把C个通道压缩成C/r个通道来降低计算量后面带Relu,第二个全连接再回复为C个通道后面跟了sigmoid,r是压缩比例。

SENet与ResNet和Inception结合

keras代码

squeeze = GlobalAveragePooling2D()(x)
        
excitation = Dense(units=out_dim // self.ratio)(squeeze)
excitation = self.activation(excitation)
excitation = Dense(units=out_dim)(excitation)
excitation = self.activation(excitation, 'sigmoid')
excitation = Reshape((1,1,out_dim))(excitation)
        
scale = multiply([x,excitation])

 

### SE Net 深度学习架构简介 SENet(Squeeze-and-Excitation Network)是一种用于提升卷积神经网络性能的深度学习架构,它通过引入一种称为“通道注意力机制”的方式来增强特征表示能力[^1]。具体来说,SENet通过对不同通道上的特征图赋予不同的权重,使得模型能够更加关注重要的特征。 #### 架构组成 SENet的核心思想可以分为三个部分: 1. **Squeeze(压缩)**:全局平均池化操作被用来获取每个通道上特征图的空间信息,并将其转换为一维向量。这一步骤减少了计算复杂度并保留了重要信息[^3]。 2. **Excitation(激励)**:通过全连接层和激活函数构建一个小型子网络,该子网络会生成一组权重值,这些权重反映了各个通道的重要性程度。 3. **Reweight(重加权)**:最后将得到的权重重新作用于原始输入张量中的对应位置,从而实现动态调整各通道贡献的效果。 以下是基于 PyTorch 的简单实现代码示例: ```python import torch.nn as nn class SELayer(nn.Module): def __init__(self, channel, reduction=16): super(SELayer, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channel, channel // reduction, bias=False), nn.ReLU(inplace=True), nn.Linear(channel // reduction, channel, bias=False), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x).view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * y.expand_as(x) # 将 SEBlock 添加到 ResNet 中的一个例子 def se_resnet_block(): block = nn.Sequential( nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.ReLU(), SELayer(channel=64), # 插入 SE Layer nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.ReLU() ) return block ``` 上述代码展示了如何创建一个基本的 Squeeze-and-Excitation 层以及如何将其嵌入到现有的 CNN 结构中[^2]。 #### 使用教程 为了更好地理解 SENet 并实际运用到项目当中,可以从以下几个方面入手: 1. 学习官方论文《Squeeze-and-Excitation Networks》及其背后的理论基础; 2. 参考已有的开源实现案例,比如 GitHub 上由 `moskomule` 提供的 PyTorch 版本 或者 Keras 社区分享的文章; 3. 实践过程中注意调试超参数设置,例如缩减比例 (`reduction`) 对最终效果的影响。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值