0.背景

这个模型是《Deep Learning高质量》群里的牛津大神Weidi Xie在介绍他们的VGG face2时候,看到对应的论文《VGGFace2: A dataset for recognising faces across pose and age》中对比实验涉及到的SENet,其结果比ResNet-50还好,所以也学习学习。
github上的SENet

CNN是通过用局部感受野,基于逐通道基础上,去融合空间信息来提取信息化的特征,对于图像这种数据来说很成功。不过,为了增强CNN模型的表征能力,许多现有的工作主要用在增强空间编码上,比如ResNet,DenseNet。
Jie Hu等人(momenta公司,很厉害的一公司)另辟蹊径,主要关注通道上可做点。为了与这些基于增强空间编码的方法对比,通过引入一个新的结构单元,称之为“挤压和激励模块”(Squeeze-and-Excitation),就是通过显示的对卷积层特征之间的通道相关性进行建模来提升模型的表征能力;并以此提出了特征重校准机制:通过使用全局信息去选择性的增强可信息化的特征并同时压缩那些无用的特征。

1.SE构建块


图1.1 SE模块结构图
如图1.1所示,其实SE网络就是通过不断的堆叠这个SE模块而成的网络,就如

  • Googlenet是基于Inception模块;
  • ResNet 网络是基于ResNet模块:
  • DenseNet是基于DenseNet模块一样。

从图1.1中,假设张量\(X\in R^{W'\times H'\times C'}\),卷积操作为\(F_{tr}\),从而得到新的张量\(U\in R^{W\times H\times C}\)。到这里都是传统的卷积过程而已,然后基于\(U\),接下来开始挤压和激励:

  • 挤压:将\(U\)固定通道维度不变,对每个feature map进行处理,从而得到一个基于通道的描述符\(1\times 1\times C\),即用一个标量来描述一个map;
    如图1.2所示,作者提出的所谓挤压就是针对每个通道的feature map,进行一次GAP(全局平均池化):
    \[z_c=F_{sq}(u_c)=\frac{1}{W\times H}\sum^W_{i=1}\sum^H_{j=1}u_c(i,j)\]
    即将这个feature map表示的矩阵所有值相加,求其平均值
  • 激励:(个人觉得有点attention的意思),将挤压得到的通道描述符\(1\times 1\times C\)作为每个通道的权重,基于\(U\)重新生成一个\(\widetilde{X}\).
    如图1.2所示,就是先对挤压后得到的\(1\times 1\times C\)的向量基础上先进行一次FC层转换,然后用ReLU激活函数层,然后在FC层转换,接着采用sigmoid激活函数层,该层就是为了模仿LSTM中门的概念,通过这个来控制信息的流通量
    \[s = F_{ex}(z,W)=\sigma(g(z,W))=\sigma(W_2\delta(W_1z))\]
    其中,\(\delta\)是ReLU函数,\(W_1\in R^{\frac{C}{r}\times C}\),\(W_2\in R^{C\times \frac{C}{r}}\),为了限制模型的复杂程度并且增加泛化性,就通过两层FC层围绕一个非线性映射来形成一个"瓶颈",其中\(r\)作者选了16,最后在得到了所谓的门之后,只要简单的将每个通道的门去乘以原来对应的每个feature map,就能控制每个feature map的信息流通量了
    \[\widetilde X_c=F_{scale}(u_c,s_c)=s_c\cdot u_c\]

从上述描述就可以看出,这其实算是一个构建网络块的方法,可以应用到inception和resnet等网络上,从而具有普适性,如图1.2所示.

图1.2 将SE方法用在Inception模块和ResNet模块上的改进对比图

在后续的实验中,作者也发现了SE机制可以在网络的不同层上自适应对应所扮演的角色,例如:

  • 泛化性:在较低的层上,它可以学习去激励可信息化的特征,从而加强较低层级表征的信息共享质量;
  • 具像性:在较高的层上,SE模块变得越来越具体化,对不同的输入有高度的具体类别响应。
    所以,通过SE模块进行特征重校准的好处是可以基于整个网络不断的累加下去。

2. 实验结果

通过将SE模块这个概念用在Inception、ResNet、ResNeXt(见最下面参考文献)、Inception-ResNet-V2等模块上,就能很简单快速的得到对应的改变模型,如图1.2(只有inception和resnet对应模块)。当然引入了新的部分,在所需要的浮点数操作、计算时间以及参数量上就有负担了,通过对ResNet-50进行对比:

  • 对于浮点数操作来说,基于\(224*224\)大小的输入基础上,一次前向传播,ResNet-50大致需要3.86 GFlops,而SE-ResNet-50大致需要3.87GFlops;
  • 对于所需要时间来说,假设minibatch为256,图片大小还是\(224*224\)则ResNet-50需要164ms,而SE-Resnet
    -50大致需要167ms;
  • 对于额外的参数量,也就是通过两个FC层引入的参数量\(\frac{2}{r}\sum^S_{s=1}N_s\cdot C^2_s\),假设r=16,则ResNet-50需要大致25百万的参数量;而SE-ResNet-50大致需要额外增加2.5百万的参数量。

综上所述,增加的负担还是不大的。
下面po下具体的模型结构和对应的结果

图2.1 ResNet-50,SE-ResNet-50,SE-ResNeXt-50的结构图

图2.2 不同模型下的结果对比

2.1. r的值的影响


图2.1.1 不同r的值的结果

2.2 基于imagenet数据集上的结果


图2.2.1 不同模型在imagenet下的结果,其中SENet是SE-ResNeXt

2.3 不同层下SE的表现


图2.3.1 不同层下SE的作用
如图2.3.1所示,在较低层上,SE的表现是让信息更有共享性,不同类型下,该层的神经元激活值基本相同,即泛化性;而到了高层,越来越趋向于分开不同的类别,不同类型下,该层的神经元激活值明显不同,即具像性

参考文献:
[ResNeXt] - S. Xie, R. Girshick, P. Dollar, Z. Tu, and K. He. Aggregated residual transformations for deep neural networks. In CVPR, 2017.

Feature Extractor[SENet]的更多相关文章

  1. Feature Extractor[content]

    0. AlexNet 1. VGG VGG网络相对来说,结构简单,通俗易懂,作者通过分析2013年imagenet的比赛的最好模型,并发现感受野还是小的好,然后再加上<network in ne ...

  2. Feature Extractor[VGG]

    0. 背景 Karen Simonyan等人在2014年参加Imagenet挑战赛的时候提出的深度卷积神经网络.作者通过对2013年的ILSVRC中最好的深度神经网络模型(他们最初的对应模型都是ale ...

  3. Feature Extractor[inception v2 v3]

    0 - 背景 在经过了inception v1的基础上,google的人员还是觉得有维度约间的空间,在<Rethinking the Inception Architecture for Com ...

  4. Feature Extractor[ResNet]

    0. 背景 众所周知,深度学习,要的就是深度,VGG主要的工作贡献就是基于小卷积核的基础上,去探寻网络深度对结果的影响.而何恺明大神等人发现,不是随着网络深度增加,效果就好的,他们发现了一个违背直觉的 ...

  5. Feature Extractor[DenseNet]

    0.背景 随着CNN变得越来越深,人们发现会有梯度消失的现象.这个问题主要是单路径的信息和梯度的传播,其中的激活函数都是非线性的,从而特别是乘法就可以使得随着层数越深,假设将传统的神经网络的每一层看成 ...

  6. 图像金字塔(pyramid)与 SIFT 图像特征提取(feature extractor)

    David Lowe(SIFT 的提出者) 0. 图像金字塔变换(matlab) matlab 对图像金字塔变换接口的支持(impyramid),十分简单好用. 其支持在reduce和expand两种 ...

  7. Feature Extractor[googlenet v1]

    1 - V1 google团队在模型上,更多考虑的是实用性,也就是如何能让强大的深度学习模型能够用在嵌入式或者移动设备上.传统的想增强模型的方法无非就是深度和宽度,而如果简单的增加深度和宽度,那么带来 ...

  8. Feature Extractor[batch normalization]

    1 - 背景 摘要:因为随着前面层的参数的改变会导致后面层得到的输入数据的分布也会不断地改变,从而训练dnn变得麻烦.那么通过降低学习率和小心地参数初始化又会减慢训练过程,而且会使得具有饱和非线性模型 ...

  9. Feature Extractor[Inception v4]

    0. 背景 随着何凯明等人提出的ResNet v1,google这边坐不住了,他们基于inception v3的基础上,引入了残差结构,提出了inception-resnet-v1和inception ...

随机推荐

  1. 人工智能改进传统云ERP的10种方法

    http://blog.itpub.net/31542119/viewspace-2168809/ 随着数字化转型的进程加快,企业开始重新评估ERP的作用.传统ERP经过多年僵硬化定制过于追求生产的一 ...

  2. vue2 设置网页title的问题

    好东东,没个标题看着多难受 看到1文章  http://blog.csdn.net/qishuixian/article/details/72912368 推荐使用 vue-wechat-title插 ...

  3. Deep Learning - 3 改进神经网络的学习方式

    反向传播算法是大多数神经网络的基础,我们应该多花点时间掌握它. 还有一些技术能够帮助我们改进反向传播算法,从而改进神经网络的学习方式,包括: 选取更好的代价函数 正则化方法 初始化权重的方法 如何选择 ...

  4. Android为TV端助力 运算符&,|,^

    1.&按位“与”的计算是把两个数字分别写成二进制形式,然后按照每一位进行比较,&计算中,只要有一个是0就算成02.|运算转换成2进制进行比较,两个位只要有一个为1,那么结果就是1,否则 ...

  5. Fiddler做代理服务器时添加X-Forwarder-For转发真实客户端ip

    修改CustomRules.js 菜单: Rules->Customize Rules (ctrl+R) 在 static function OnBeforeRequest(oSession: ...

  6. windows10 专业版的远程服务器管理工具下载

    一.安装远程服务器管理工具: 下载地址: https://www.microsoft.com/zh-cn/download/details.aspx?id=45520 二.关闭远程服务器管理工具: 1 ...

  7. MHA快速搭建

    很早之前写过MHA的文章,但是常常在技术群看到有同学问MHA搭建的问题,不是权限问题就是配置问题,我在这里就再次一写下配置过程以及快速的搭建.如果想知道更多的细节与原理,请参考:MySQL高可用架构之 ...

  8. C# json、xml序列化

    json序列化: public static string SerializeJson<T>(T json) { // 1. 需要添加引用 Newtonsoft.Json.dll,默认为 ...

  9. php学习----什么是常量

    PHP-什么是常量 1.什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量(后续小节会详细介绍). 2. ...

  10. Leancloud+Valine打造Hexo个人博客极简评论系统

    以下配置是基于Next主题6.1.0版本 效果见个人博客的最下方评论. Leancloud配置 首先访问Leancloud官网https://leancloud.cn/ 有Github账号的小伙伴可以 ...