论文:《Squeeze-and-Excitation Networks》
论文链接:https://arxiv.org/abs/1709.01507
代码地址:https://github.com/hujie-frank/SENet
PyTorch代码地址:https://github.com/miraclewkf/SENet-PyTorch

1. 概述

在深度学习领域,CNN分类网络的发展对其他计算机视觉任务如目标检测和语义分割都起到至关重要的作用,因为检测和分割模型通常是构建在CNN分类网络(称为backbone)之上。提到CNN分类网络,我们所熟知的是VGGNet、ResNet、Inception、DenseNet等模型,它们的效果已经被充分验证,而且被广泛应用在各类计算机视觉任务上。这里我们介绍一篇CVPR2017的文章SENet,它赢得了最后一届ImageNet2017竞赛分类任务的冠军。重要一点是SENet思路很简单,很容易扩展在已有网络结构中。
       作者在文中将SENet block插入到现有的多种分类网络中,都取得了不错的效果。作者的动机是希望显式地建模特征通道之间的相互依赖关系。另外,作者并未引入新的空间维度来进行特征通道间的融合,而是采用了一种全新的「特征重标定」策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。通俗的来说SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。SE block嵌在原有的一些分类网络中不可避免地增加了一些参数和计算量,但是在效果面前还是可以接受的 。Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中。

2. Squeeze-Excitation Block

SE Block结构如下图所示:输入X经过任意变换之后变为输出U,假设输出的U不是最优的,每个通道的重要程度不同,有的通道更有用,有的通道不太有用。因此对于每一个输出通道,先进行global average pooling,每个通道得到一个标量,C个通道得到C个数,然后经过FC-ReLU-FC-Sigmoid得到C个0到1之间的标量,作为通道的权重。最后对原来输出通道的每个通道用对应的权重加权(对应通道的每个元素与权重分别相乘),得到新的加权后的特征图,作者称之为feature recalibration。

注:F_sq代表Squeeze操作,F_ex代表Excitation操作,Fscale代表Scale操作。

1) Squeeze

由于卷积只是在一个局部空间内进行操作,U很难获得足够的信息来提取channel之间的关系,对于网络中前面的层这更严重,因为感受野比较小。Squeeze操作将一个channel上整个空间特征编码为一个全局特征,采用global average pooling来实现(原则上也可以采用更复杂的聚合策略),公式如下:

2) Excitation

Squeeze操作得到了全局描述特征,接下来需要另一种运算来抓取channel之间的关系,这个操作需要满足两个原则:首先要灵活,它要可以学习到各个channel之间的非线性关系;第二点是学习的关系不是互斥的,因为这里允许多channel的特征,而不是one-hot形式。基于此,这里采用sigmoid形式的gating机制:

       其中,W_1∈R(C/r×C),W_2∈R(C×C/r),为了降低模型的复杂度以及泛化能力,这里采用包含两个全连接层的bottleneck结构,其中第一个FC层起到降维的作用,降维系数为r是一个超参数(实验证明当r为16的时候效果最好)。然后采用ReLU激活,最后的FC层恢复原始的维度。

3) Scale

Scale操作是将学习到的各个channel的激活值(sigmoid激活,值为0到1)乘以U上的原始特征:

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

3. SE Block在Inception Module和ResNet Module上的应用

【注意力机制】SENet(Squeeze-and-Excitation Networks)详解相关推荐

  1. SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解

    SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解 SpringBoot默认包扫描机制 标注了@Component和@Component的衍生注解如@Controller ...

  2. SENet:Squeeze-and-Excitation Networks详解及Pytorch实现

    文章目录 前言 一.什么是SENet Squeeze Excitation 二.完整SE block的Pytorch实现 总结 前言 计算机视觉研究领域的一个核心理论就是如何提高网络的表现力使其关注到 ...

  3. 计算机视觉通道域(channel)注意力机制——SENet

    属于注意力机制在cv领域的channel注意力机制,SENet一个很大的优点就是可以很方便地集成到现有网络中,提升网络性能,并且代价很小. 首先是结构: 原来的任意变换将输入X变为输出U,现在假设输出 ...

  4. 深入理解Java虚拟机之Java类加载机制,Java类实例化过程详解。

    目录 Java类加载机制 类加载过程 加载(Loading) 连接(Linking) 初始化(Initialzation) 使用(Useing) 卸载(Unloading) 引言 什么情况下开始类加载 ...

  5. 【dubbo源码解析】 --- dubbo spi 机制(@SPI、@Adaptive)详解

    本文对应源码地址:https://github.com/nieandsun/dubbo-study 注意:dubbo 要求SPI扩展点的实现类必须要有一个无参构造,除了Wrapper实现类之外 文章目 ...

  6. 注意力机制 SE-Net 原理与 TensorFlow2.0 实现

    文章目录

  7. 物理信息神经网络PINNs : Physics Informed Neural Networks 详解

    本博客主要分为两部分: 1.PINN模型论文解读 2.PINN模型相关总结 第一部分:PINN模型论文解读 一.摘要 基于物理信息的神经网络(Physics-informed Neural Netwo ...

  8. java异常(机制和捕捉(常见异常类))详解 +练习题

    Java 中的异常处理机制 1.什么是异常 异常:程序在运行过程中产生的不正常情况. 程序在运行的时候,发生了一些不被预期的事件,从而没有按照我们编写的代码执行,这就是异常. 异常是Java中的错误, ...

  9. flink 三种时间机制_Flink的时间与watermarks详解

    当我们在使用Flink的时候,避免不了要和时间(time).水位线(watermarks)打交道,理解这些概念是开发分布式流处理应用的基础.那么Flink支持哪些时间语义?Flink是如何处理乱序事件 ...

  10. python中的utils模块_使用Python的package机制如何简化utils包设计详解

    package 机制 package是模块的集合,每一个Package的根目录下面都应当有一个__init__.py 文件.当解释器发现目录下有这个文件时,他就会认为这是一个Package,而不是一个 ...

最新文章

  1. 利用BP神经网络教计算机识别语音特征信号(代码部分SSR)
  2. checkbox选中和不选中_我的lt;input /gt;不可能这么可爱
  3. undocumented windows nt pdf_我用Python写了一个PDF转换器!
  4. python学习笔记 - StringIO以及BytesIO
  5. 有了内阻值,怎么判断电池是否健康?
  6. pgsql动态创建table
  7. Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他
  8. 异常处理——namenode启动成功但是没有namenode进程
  9. 江苏省专转本计算机题知识点,江苏专转本计算机真题17
  10. mysql5.6 pid_MySQL5.6启动报错The server quit without updating PID file
  11. ajax js图片上传到php,Ajax上传并预览图片(附代码)
  12. java的标量和聚合量_JVM 角度看代码优化
  13. kafka : CommitFailedException Commit cannot be completed since the group has already rebalanced
  14. hive创建java函数_spark通过java的api创建hive的UDF用户自定义函数
  15. C++之关键字:override
  16. VirtualBox创建Linux虚拟机图文教程
  17. 计算机it互联网有什么区别,什么叫“IT”技术
  18. java和mysql实现点餐功能_java+mysql餐馆点餐系统的设计与开发
  19. nandflash地址的物理地址,逻辑地址,spare地址等理解
  20. 怎么用wps将pdf转换成html,如何将PDF格式的文件转换成HTML格式

热门文章

  1. ESP8266:(1)向手机传输温度
  2. LWIP的UDP相关API
  3. C# CRC16 在textbox中显示实时时间
  4. jqgrid 编辑列拿不到值_如何在DAX Stadio和Excel中返回表和度量值?
  5. 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
  6. 3.3.4.6. NULL值操作
  7. 集群的可扩展性及其分布式体系结构(2)-下
  8. mysql的服务器编号_mysql主从服务器配置.doc
  9. 重新分区_电脑磁盘分区指南!一分钟就学会
  10. c语言课后答案谢延红,C语言程序设计基础第4,5章 课后习题答案