【即插即用】SE通道注意力机制(附源码)

原文地址:

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)

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值