原文地址:
Squeeze-and-Excitation Networks
源码地址:
GitHub - hujie-frank/SENet: Squeeze-and-Excitation Networks
摘要简介:
卷积神经网络建立在卷积操作的基础上,它通过融合局部感受野内的空间信息和通道信息来提取有用的特征。近年来,为了提高网络的表示能力,多种方法显示出增强空间编码的好处。然而,在这项研究中,我们重点关注通道之间的关系,并提出了一种新型架构单元,我们称之为“压缩-激励”(SE)块。这个块通过显式地建模通道之间的相互依赖关系,自适应地重新校准通道特征响应。我们发现,通过将这些块堆叠在一起,我们可以构建出在各种具有挑战性的数据集上表现极好的SENet架构。
重要的是,我们发现SE块能够以极小的额外计算成本为现有的最先进的深度架构带来显著的性能提升。SENet构成了我们在ILSVRC 2017分类任务中提交的基础,该任务赢得了第一名,并将前5名的错误率显著降低至2.251%,相对于2016年的获奖者,有了大约25%的相对改进。
结构图:
Pytroch版源码:
import torch
import torch.nn as nn
import math
#SENet,通道注意力机制
class se_block(nn.Module):
def __init__(self, channel, ratio=16):
super(se_block, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(channel, channel // ratio, bias=False),
nn.ReLU(inplace=True),
nn.Linear(channel // ratio, 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
if __name__ == '__main__':
input = torch.randn(2, 32, 512, 512)
SE = se_block(channel=input.size(1))
output = SE(input)
print(output.shape)
标签:__,nn,self,SENet,源码,SE,E通,即插即用,channel
From: https://blog.csdn.net/weixin_45694817/article/details/137185056