论文原址:https://arxiv.org/abs/1709.01507

github:https://github.com/hujie-frank/SENet

摘要

卷积网络的关键构件是卷积操作,在每层感受野的范围内通过融合局部及channel-wise信息可以使网络构建特征。一些研究关注空间组件,通过增强空间特征等级的编码能力在增强表示力。本文重点在于通道之间的联系,提出了SENet block,通过对通道之间的独立性建模来自适应的调整通道之间的响应。可以将这些block进行堆叠得到SENet的结构。

介绍

在卷积网络的每一层,一些卷积核沿着输入通道方向表示相邻特征模式,在局部感受野的范围内融合空间及channel-wise特征信息。通过交错的组合卷积,下采样,非线性层等构建网络。CNN可以得到粗略的表示能力从而可以获得分级的模式,同时具有一定的感受野。一些实验发现可以通过将可以捕捉特征之间信息的一些学习机制融合到网路中进而可以提高网络的表示能力。Inception系列的网络通过结合多个尺寸的卷积核来提高性能。

本文不同于以前的网络,重点放在特征通道之间的联系上,本文引入了一个新的结构单元SE block,通过对卷积特征之间的联系进行建模来增强表示能力,最后,本文提出了一种特征校准机制,通过学习全局信息进而可以选择一些有用的特征,而压制作用较小的特征。

SE building block的结构如下图所示,对于任意的特征变换,本文都可以构建SE block进行特征校准。特征U首先会进行一个squeeze操作,产生一个通道描述器,其在对应空间维度上(HxW)融合feature maps。描述器函数的作用是channel-wise响应的全局分布的编码,可以使来自全局感受野的信息可以被所有层利用。Squeeze操纵后面跟着一个excetion操作。采用一个简单的门机制,将编码的信息作为输入,同时产生每个通道调制的权重。这些权重又反过来作用于feature map U用于产生SE的输出进而送入到后续处理中。

可以通过简单的堆叠SE block进行构建SENet。SE block可以作为网络的一部分插入到网络的某一层中。虽然block整体相似,但是在网络中的不同深度,其性能也是不同的。在较前层,以类别不可知的情形激发信息特征。在网络的后层,SE block增长的较为明确,以类别可分的模式对不同的输入产生响应。

总之,SE 特征校准得到的性能可以在网络中进行累计。新的CNN网络的搭建十分复杂,涉及到新参数及层的配置等。而SE模块简单,可以直接替换网络中的模型。

相关工作

更深的网络:VGG及Inception表明,增加网络的深度可以提高模型的表示能力及学习能力。对输入分布进行正则化处理。在每层添加固定的BN层,同时,产生更平滑的外形边界。ResNet通过identity-based的跳跃结构可以实现更深的网络。Highways 网络对短连接中的信息流进行正则化处理。

一些工作着眼于改进网络中包含的函数的计算形式。分组卷积已经成功应用于增加学习变换基数的方法。交叉通道相关性映射到一个新的特征组合,与空间结构无关,或者通过1x1的卷积进行联合处理。大部分研究工作聚焦于减少模型及计算复杂度上。这里折射出一个假设就是通道关系可以看作是在局部感受野下与实例无关的函数组合。本文提出一种机制可以通过全局信息直接对通道之间的动态以及非线性依赖性进行建模。

算法结构搜索:该部分工作主要位于神经进化领域,基于进化算法对网络的拓扑结构进行搜索。然而,需要消耗大量的计算力。该方法在连续模型中找到记忆单元及分类模型中学习固定结构取得较大的成功。为了减少计算力,基于Lamarckian inheritance及不同的结构的高效的可替代算法被提出。通过将结构搜索看作是参数优化问题,随机搜索及其他传统的优化技术可以用于处理该问题。SE 可以基于搜索算法自动的进行build block。

      注意力及门机制:注意力机制可以看作是将计算资源分配信息量最重要的部分。其后接一个或者多个操作来表示更抽象的特征信息。本文SE block为轻量级门机制,通过对通道进行建模来提高模型的表示能力。

Squeeze and excitation block

SE为计算单元,可以由任意输入变换构建为方便起见,本文将Ftr看作是卷积操作。代表可学习的卷积核集合。其中,vc代表第c个卷积核的参数。Ftr的输出表示如下,*代表卷积,

   其中,X = 为一个2D核,表示vc的一个通道与对应的x的通道进行卷积。由于结果是所有通道相加和。vc中存在潜在的依赖关系,但其与由卷积核得到的局部空间相关性纠缠在一起。因此,由卷积形成的通道关系是局部的。由于本文的目的是为了提高模型对信息特征的敏感性,以便后续的变换能够更有效的利用这写信息特征。本文增加了其获得全局信息的能力。本文通过两步来对通道的独立性进行建模进而重新校准filter 响应,即Squeeze及Excetitation。SE block的结构如上图所示。

Squeeze: Global Information Embeding

为了解决利用channel 依赖性的如何利用的问题,本文首先考虑输出特征的每个通道。每个可学习的卷积核都是在局部感受野内进行操作,因此,区域外的上下文信息无法被后续的变换单元U利用。

为此,本文提出将全局空间信息进行压缩得到一个单通道描述器。通过一个全局的平均池化操作来实现通道级别的统计。一般,一个统计量,通过在空间维度HxW上压缩U实现。z中的第c个单元计算如下

变换U的输出可以解释为,一些局部描述器的统计信息可以表示整个图像。

Excetitation: Adaptive Recalibration

为了利用由Squeeze聚合得到的信息。后面接了一些操作用于捕捉通道的独立信息。其操作函数必须满足两个标准,I.具有灵活性。其必须能够学习通道之间的非线性。II.能够学习非互斥关系。这是由于需要对多个通道的特征信息进行强调,而不是类似one-hot表示那样。本文选择了一个简单的sigmoid激活函数作为gating 机制。

为了限制模型的计算量,及有利于泛化,本文在非线性部分,比如,降维层W及减少比率r,ReLU+升维层添加两层全连接层来构建bootleneck进而对gating机制进行参数化。block的最终输出如下

Excetitation通过将输入明确的描述器映射为一系列通道确定的权重。SEblock提高了特征的辨别性。

实例

SE block可以整合到常规的卷积网络中,一般在插入非线性区域后增加几个卷积层。本文以Inception网络为例如下。

实验

Reference

[1] A. Krizhevsky, I. Sutskever, and G. E. Hinton, “ImageNet classification with deep convolutional neural networks,” in NIPS, 2012.

      [2] A. Toshev and C. Szegedy, “DeepPose: Human pose estimation via deep neural networks,” in CVPR, 2014.
      [3] J. Long, E. Shelhamer, and T. Darrell, “Fully convolutional networks for semantic segmentation,” in CVPR, 2015.
      [4] S. Ren, K. He, R. Girshick, and J. Sun, “Faster R-CNN: Towards real-time object detection with region proposal networks,” in
NIPS, 2015.
      [5] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov,D. Erhan, V. Vanhoucke, and A. Rabinovich, “Going deeper with
convolutions,” in CVPR, 2015.
      [6] S. Ioffe and C. Szegedy, “Batch normalization: Accelerating deep network training by reducing internal covariate shift,” in ICML,
2015.

论文阅读笔记六十:Squeeze-and-Excitation Networks(SENet CVPR2017)的更多相关文章

  1. 论文阅读笔记六十四: Architectures for deep neural network based acoustic models defined over windowed speech waveforms(INTERSPEECH 2015)

    论文原址:https://pdfs.semanticscholar.org/eeb7/c037e6685923c76cafc0a14c5e4b00bcf475.pdf 摘要 本文研究了利用深度神经网络 ...

  2. 论文阅读笔记六十六:Wide Activation for Efficient and Accurate Image Super-Resolution(CVPR2018)

    论文原址:https://arxiv.org/abs/1808.08718 代码:https://github.com/JiahuiYu/wdsr_ntire2018 摘要 本文证明在SISR中在Re ...

  3. 论文阅读笔记六十五:Enhanced Deep Residual Networks for Single Image Super-Resolution(CVPR2017)

    论文原址:https://arxiv.org/abs/1707.02921 代码: https://github.com/LimBee/NTIRE2017 摘要 以DNN进行超分辨的研究比较流行,其中 ...

  4. 论文阅读笔记六十二:RePr: Improved Training of Convolutional Filters(CVPR2019)

    论文原址:https://arxiv.org/abs/1811.07275 摘要 一个训练好的网络模型由于其模型捕捉的特征中存在大量的重叠,可以在不过多的降低其性能的条件下进行压缩剪枝.一些skip/ ...

  5. [论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks

    [论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问 ...

  6. 论文阅读笔记(十八)【ITIP2019】:Dynamic Graph Co-Matching for Unsupervised Video-Based Person Re-Identification

    论文阅读笔记(十七)ICCV2017的扩刊(会议论文[传送门]) 改进部分: (1)惩罚函数:原本由两部分组成的惩罚函数,改为只包含 Sequence Cost 函数: (2)对重新权重改进: ① P ...

  7. [论文阅读笔记] node2vec Scalable Feature Learning for Networks

    [论文阅读笔记] node2vec:Scalable Feature Learning for Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 由于DeepWal ...

  8. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  9. 论文阅读笔记(十二)【CVPR2018】:Exploit the Unknown Gradually: One-Shot Video-Based Person Re-Identification by Stepwise Learning

    Introduction (1)Motivation: 大量标记数据成本过高,采用半监督的方式只标注一部分的行人,且采用单样本学习,每个行人只标注一个数据. (2)Method: 对没有标记的数据生成 ...

随机推荐

  1. nginx 一键安装

    #!/bin/bash1. 关闭防火墙 和 selinux service iptables stopsetenforce 0 2. 判断是否有nginx服务netstat -ntlp |grep n ...

  2. 9.Go-反射、日志和线程休眠

    9.1反射 在Go语言标准库中reflect包提供了运行时反射,程序运行过程中动态操作结构体 当变量存储结构体属性名称,想要对结构体这个属性赋值或查看时,就可以使用反射 反射还可以用作判断变量类型 整 ...

  3. hdu6514 一维化 + 二维前缀和

    http://acm.hdu.edu.cn/showproblem.php?pid=6514 题意 给出一个大矩形(\(nm\leq10^7\)),有p个矩形覆盖,然后有q次询问,询问指定矩形内是否覆 ...

  4. Python调用C的DLL(动态链接库)

    开发环境:mingw64位,python3.6 64位 参考博客: mingw编译dll: https://blog.csdn.net/liyuanbhu/article/details/426123 ...

  5. 在ASP.Net Core 中使用枚举类而不是枚举

    前言:我相信大家在编写代码时经常会遇到各种状态值,而且为了避免硬编码和代码中出现魔法数,通常我们都会定义一个枚举,来表示各种状态值,直到我看到Java中这样使用枚举,我再想C# 中可不可以这样写,今天 ...

  6. 物联网架构成长之路(43)-k8s从入门到放弃

    0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...

  7. pymysql的基本使用

    序pymysql的语法sql注入问题数据的增删查改 TOC 序 当我们在写程序中需要使用到数据库的时候,尽量在代码层次实现一些限制,例如两张表,我们不再使用外键去关联表与表之间的关系,我们可以在程序层 ...

  8. Socket超时时间设置

    你知道在 Java 中怎么对 Socket 设置超时时间吗?他们的区别是什么?想一想和女朋友打电话的场景就知道了,如果实在想不到,那我们就一起来来看一下是咋回事吧 设置方式 主要有以下两种方式,我们来 ...

  9. Redis 设计与实现,看 SDS(Simple Dynamic String) 感悟

    Redis 设计与实现,看 SDS(Simple Dynamic String) 感悟 今天在看 Redis 设计与实现这本书的时候,发现了里面系统定义的数据结构 SDS,中文名为 简单动态字符串.对 ...

  10. rpc和webservice的关系简述

    RPC(Remote Procedure Call,远程过程调用)是一个很大的概念.它是一种通过网络从远程计算机程序上跨语言跨平台的请求服务.RPC能省略部分接口代码的开发,可以跨机器之间访问对象(J ...