自注意力机制

      在神经网络中,注意力机制通常是一个额外的神经网络,能够硬性的选择输入的某些部分,或者是给输入的不同部分分配不同的权重。注意力机制能够从大量的信息中筛选出重要的信息。并且引用的注意力机制有很多方法,可以在空间维度增加引入注意力机制,也可以在通道维度增加注意力机制(SE),当然也有混合维度(CBAM)即空间维度和通道维度增加注意力机制。

1.通道注意力机制(SENet)

SE注意力机制在通道维度增加注意力机制,一共分为三个步骤:

 (1)squeeze(Fsq):通过全局平均池化,将每个通道的二位特征(H*W)压缩为1个实数,将特征图从(C*H*W)压缩为(1*1*C)

(2)excitation(Fex): 给每个特征通道生成一个权重值,论文中通过两个全连接层构建通道间的相关性,输出权重数目和输入特征图的通道数相同。

   其中SERatio是一个缩放参数,这个参数的目的是为了减少通道个数从而降低计算量。 第一个全连接层有C*SERatio个神经元,输入为1×1×C,输出1×1×C×SERadio。 第二个全连接层有C个神经元,输入为1×1×C×SERadio,输出为1×1×C。

(3)scale操作:将归一化权重和原输入特征图逐通道相乘,生成加权后的特征图。

(h*w*c)*(1*1*c)==>(H*W*C)

SEnet的和核心思想是通过全连接根据Loss损失来自动学习特征权重,而不是直接根据特征通道的数值分配来判断,使有效的特征通道的权重大。

pytorch 实现SE模块

import torch
from torch import nn
class SE(nn.Module ):
    def __init__(self,ch_in,reduction=16):
        super(SE, self).__init__()
        self.avg_pool=nn.AdaptiveAvgPool2d(1)
        self.fc=nn.Sequential(
            nn.Linear(ch_in, ch_in // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(ch_in // reduction, ch_in,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)  # 注意力作用在每一个通道上
net=SE(64,32)   #(输入尺寸,比率)
print(net)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值