SENet论文笔记

《Squeeze-and-Excitation Networks》

该文章提出了一种新颖的网络结构,用于对每个通道的特征进行加权处理。在网络的训练过程中,会得到不同数量通道特征,在进行识别的过程中,每一个通道的特征的重要性都被视为是相同的来参与接下来的计算。SENet将不同特征通道的全局池化信息融合到了神经网络的训练过程中,从而能够利用网络的代价函数来对不同通道的权重进行训练。

网络结构:

这里写图片描述

结构解释

首先对于一个H×W×CH′×W′×C′的特征输入XX,进行Ftr操作,也就是常规的卷积操作,得到待处理的W×H×CW×H×C的特征图UU。接着对得到的U分别进行两种操作:FsqFsqFscaleFscale

首先是FsqFsq操作。作者在这里对于每一个通道都采用了一种全局平均池化的操作,即将特征图UUC个通道分别进行全局平均池化的操作,得到了一个1×1×C1×1×C的特征图zz。数学表达形式如下:

zc=Fsq(uc)=1H×Wi=1Hj=1Wuc(i,j)

其中,ucuc表示的是UU的第c个通道。
接着,就是SENet思想最关键的部分了,即SENet将zz作为一个全连接神经网络的输入,该神经网络的权重为WFex(,W)Fex(∗,W)表示的是一个全连接层的计算过程。

作者将Fex(,W)Fex(∗,W)的计算分成了两个部分,直观来看就是先对第一个全连接层进行计算,接着对第二个全连接层进行计算并输出结果为1×1×C1×1×C的特征图。具体公式如下所示:

s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))

其中δδ表示的是RELURELU函数,W1RCr×CW1∈RCr×C,且W2RRC×CrW2∈RRC×Cr。计算得到的ss就是我们要求的不同通道特征图的权重系数。

得到了这个系数以后,通过与U对应通道上的特征图进行相乘,以此来表示不同通道的特征图的重要性程度。具体形式如下式所示:

Xc~=Fscale(uc,sc)=scucXc~=Fscale(uc,sc)=sc⋅uc

其中Xc~=[x1~,x2~,...,xc~]Xc~=[x1~,x2~,...,xc~]。函数FscaleFscale表示的是将每个通道的权重值scRsc∈R与对应通道的特征图ucRH×Wuc∈RH×W相乘。

与其他网络结构进行组合

与GoogleNet的Inception网络结构组合,得到的网络结构如下图所示:
这里写图片描述

与ResNet网络的Block进行组合得到的网络结构如下图所示:
这里写图片描述

结论

加入该网络结构后,可以提高网络的性能。

SENet(Squeeze-and-Excitation Networks)的概念首次被提出是在2017年的论文《Squeeze-and-Excitation Networks》中,这篇论文由Jie Hu等人撰写,并在CVPR 2018上发表[^1]。该论文详细介绍了如何通过引入通道注意力机制来改进卷积神经网络的表现。 以下是获取SENet相关论文的一些方法: ### 方法一:访问官方出版平台 论文最初发布于IEEE Xplore Digital Library以及arXiv预印本服务器。可以通过以下链接下载: - IEEE Xplore: [https://ieeexplore.ieee.org/document/8578913](https://ieeexplore.ieee.org/document/8578913) - arXiv: [https://arxiv.org/abs/1709.01507](https://arxiv.org/abs/1709.01507)[^2] ### 方法二:学术搜索引擎 除了直接从上述网站下载外,还可以利用Google Scholar等学术搜索引擎输入关键词"Squeeze-and-Excitation Networks Jie Hu"进行检索。这通常会提供多种免费或付费的下载选项[^3]。 ### PyTorch 实现示例 对于希望快速验证SENet效果的研究者来说,下面是一个简单的SE Block实现代码片段供参考: ```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) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值