Feature Extractor[SENet]

news/2024/7/7 1:12:38

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构建块

441382-20171120120841086-1968734548.png


图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所示.

441382-20171120132257946-2061022113.png 441382-20171120132309680-1780578721.png

图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下具体的模型结构和对应的结果

441382-20171121111742336-176668745.png

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

441382-20171121112235758-936435384.png

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

2.1. r的值的影响

441382-20171121112929305-1627975530.png


图2.1.1 不同r的值的结果

2.2 基于imagenet数据集上的结果

441382-20171121113209211-995262791.png


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

2.3 不同层下SE的表现

441382-20171121113810743-456860590.png


图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.


http://www.niftyadmin.cn/n/1904160.html

相关文章

ACM:回溯,八皇后问题,素数环

&#xff08;一&#xff09;八皇后问题 &#xff08;1&#xff09;回溯 #include <iostream> #include <string>#define MAXN 100using namespace std;int tot 0, n 8; int C[MAXN];void search(int cur) {if(cur n) tot; //递归边界&#xff0c;仅仅要走…

技术不局限于赚钱,还应当保护我们的家人

有一天&#xff0c;我们也会有孩子&#xff1b;有一天&#xff0c;我们也会成为低 x 人口。昨天在电影院看了《正义联盟》&#xff0c;可以容纳上百人的电影院里&#xff0c;只有不到十个人。唯一的观感是&#xff1a;贫穷限制了我们的想象力。这个世界没有超级英雄&#xff0c…

一台Nginx服务器反向代理多个80端口服务器

主要是实现公网IP越来越不足的情况&#xff0c;80端口又是常用端口&#xff0c;只好用Nginx来代理。Nginx服务器安装采用编译:1.pcre 、openssl 、zlib2.其他依赖包配置Nginx主配置文件nginx.conf ,请先备份nginx.conf。** vim nginx.conf** user cent cent; worker_proces…

使用 adr 轻松创建 “程序员友好” 的轻量级文档

是的&#xff0c;我又写了一个 markdown 工具&#xff0c;它对我来说非常有用。上下文在一周里&#xff0c;我看到了一个名为 “轻量级架构决策记录” 的技术实践。在看到了一个简单的示例之后&#xff0c;并阅读了文章《架构决策记录》之后&#xff0c;我开始对于这种工具有了…

在广州想免费学 AI,快来试试这个 AI 开发者实战营

近日&#xff0c;2017 百度世界大会在北京举行&#xff0c;活动吸引了数千名开发者和合作伙伴到场。据介绍&#xff0c;百度 AI 开放平台已开放 80 多项核心 AI 能力。如果你还在为错过百度世界大会而感到遗憾&#xff0c;那接下来的这次活动一定能弥补你的“小遗憾”。今年 10…

一种提高编程效率的『简单方式』

提高编程的效率目的就是&#xff1a;早点下班回家抱女朋友。最近&#xff0c;我觉得好像老了——事情一多、一杂&#xff0c;再加点别人的干扰&#xff0c;就有点记不住。于是乎&#xff0c;当遇到一系列的问题时&#xff0c;我开始写在便利贴上。然而&#xff0c;我却发现了&a…

php table设置tr,在angularjs中如何实现table增加tr的方法

下面我就为大家分享一篇angularjs实现table增加tr的方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。需求&#xff1a;上面是一个table&#xff0c;运用了循环显示。现在的一个需求是&#xff1a;需要在每行添加一个字段&#xff0c;不过不能在同一行显示&…

Spring MVC遭遇checkbox的问题解决方案

Spring MVC遭遇checkbox的问题是&#xff1a;当checkbox全不选时候&#xff0c;则该checkbox域的变量为null&#xff0c;不能动态绑定到spring的controller方法的入参上&#xff0c;并抛出异常。 解决方案&#xff1a; 1、javascript方式提交&#xff0c;提交前拼提交参数串&am…