当前位置:   article > 正文

经典网络模型-SENet注意力机制_senet是谁提出的

senet是谁提出的

 简介

SENet是由 Momenta 和 牛津大学 的 胡杰等人 提出的一种新的网络结构,目标是通过显式的建模 卷积特征通道 之间的 相互依赖关系 来提高网络的表示能力。在2017年最后一届 ImageNet 比赛 classification 任务上获得 第一名。

SENet网络的创新点在于关注channel之间的关系,希望模型可以自动学习到不同channel特征的重要程度。为此,SENet提出了Squeeze-and-Excitation (SE)模块。

SE模块首先对卷积得到的特征图进行Squeeze操作,得到channel级的全局特征,然后对全局特征进行Excitation操作,学习各个channel间的关系,也得到不同channel的权重,最后乘以原来的特征图得到最终特征。本质上,SE模块是在channel维度上做attention或者gating操作,这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。另外一点是SE模块是通用的,这意味着其可以嵌入到现有的网络架构中。

模型结构

Squeeze操作

特征U通过 squeeze 压缩操作,将跨空间维度H × W的特征映射进行聚合,生成一个通道描述符,HxWxC → 1x1xC ;将 全局空间信息 压缩到上述 通道描述符 中,使来这些 通道描述符 可以被 其输入的层 利用,这里采用的是 global average pooling实现

Excitation操作

为了降低模型复杂度以及提升泛化能力,这里采用包含两个全连接层的bottleneck结构。其中第一个FC层起到降维的作用,降维系数为r是个超参数,然后采用ReLU激活;最后的FC层恢复原始的维度,将学习到的各个channel的激活值(sigmoid激活,值0~1)乘以U上的原始特征。

整个操作可以看成学习到了各个channel的权重系数,从而使得模型对各个channel的特征更有辨别能力,是一种attention机制

应用于 非残差网络 Inception network 当中,形成 SE-Inception module:

应用于 残差网络 Residual network 当中,形成 SE-ResNet module

SE模块是一个即插即用的模块

SE模块实现代码

  1. import torch.nn as nn
  2. class SEModel(nn.Module):
  3. def __init__(self, channel, reduction=16):
  4. super(SEModel, self).__init__()
  5. self.avg_pool = nn.AdaptiveAvgPool2d(1)
  6. self.fc = nn.Sequential(
  7. nn.Linear(channel, channel // reduction, bias=False),
  8. nn.ReLU(),
  9. nn.Linear(channel // reduction, channel, bias=False),
  10. nn.Sigmoid()
  11. )
  12. def forward(self, x):
  13. b, c, _, _ = x.size()
  14. y = self.avg_pool(x).view(b, c)
  15. y = self.fc(y).view(b, c, 1, 1)
  16. return x * y.expand_as(x)

 参考链接:[ 注意力机制 ] 经典网络模型1——SENet 详解与复现_Horizon Max的博客-CSDN博客_senet网络

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/362720
推荐阅读
相关标签
  

闽ICP备14008679号