Advertisement

CNN图像分类模型:SENet

阅读量:

文章目录

  • 前言

  • 摘要(Abstract)

  • 2. 相关工作(Related Work)

  • 3. 空间归一、通道奖励模块(Squeeze-and-Excitation Blocks)

    • 3.1 空间归一:嵌入全局信息(Squeeze: Global Information Embedding)
    • 3.2 激励:自适应矫正(Excitation: Adaptive Recalibration)
    • 3.3 实例(Instantiations)
  • 4 模型和计算复杂度(Model And Computational Complexity)

  • 5 实验(Expermients)

  • 6 消融研究(Ablation Study)

    • 6.1 降维比率(Reduction ratio)
    • 6.2 压缩算子(Squeeze Operator)
    • 6.3 激励算子(Excitation Operator)
    • 6.4 不同阶段(Different stages)
    • 6.5 整合策略(Integration strategy)
  • 7 SE模块的角色(Role Of SE Blocks)

    • 7.1 压缩的作用(Effect of Squeeze)
    • 7.2 奖励的角色(Role of Excitation)
  • 总结


前言

又是一个周六,开始一如既往的周六深度学习论文阅读,今天阅读的论文是图像分类模型SENet,这一模型之前有读过,但是忘得差不多了,而且之前在做场景文字检测时有用到:将这一模型的SE Block集成到特征提取网络中,取得不错的效果。

论文标题:Squeeze-and-Excitation Networks


摘要(Abstract)

卷积神经网络的核心是卷积算子,它能够使网络从每一层的局部感受野中通过使用融合空间和通道信息 的方式构建出有用的信息。之前的研究主要集中在通过分层特征来提升空间 编码质量,进而达到增强CNN表达能力的目的。本论文则主要集中在通道 关系上,提出了一种新颖的架构单元 - SE模块(Squeeze- and -Excitation), 它通过对通道间依赖关系建模来重新修正基于通道的特征响应。多个SE模块可以堆叠在一起构成SENet的网络架构,它的泛化性能很好,这在不同数据库中都被验证。论文证实了SE模块能够显著提升已有最优的CNNs的性能,当然也带来了少量额外的计算量成本。模型和源码可以从如下链接获得:
https://github.com/hujie-frank/SENet


1. 介绍(Introduction) 计算机视觉研究的中心主题是不断探索更加强健的表达能力:对于给定的任务,从图像中捕捉到最显著的特征属性,进而提升性能。

该论文主要集中于探索通道间的关系,提出了SE模块,通过对卷积特征通道间依赖关系建模来提升网络的表达能力;提出一种机制:允许网络进行特征矫正,通过使用全局信息来选择强化有用特征,抑制作用不大的特征。
在这里插入图片描述
Fig.1展示了SE模块的构造。对于任一变换F_{tr}能够将输入X映射为特征图U,这里U\in R^{H\times W\times C}, 比如,对于卷积,我们可以构造一个相应的SE模块来进行特征矫正。特征图U首先被squeeze操作(F_{sq}(\cdot ))处理,即对特征图的空间维度-高度(H)和宽度(W)整合输出通道描述符(H\times W\times C \rightarrow 1\times 1\times C这里有些不明白,具体整合方法是什么?所有空间维度数据累加吗? )。这个描述符的作用是产生一个嵌入了基于通道的特征响应的全局分布信息,并允许网络所有层使用这个具有全局感受野的信息。squeeze操作后紧跟着excitiation操作,它将上一步的通道描述符作为输入,产生一个权重集合,通道描述符每一通道都有一个权重值,这个权重值根据一种叫做self gating的机制来计算。将这些权重应用于特征图U来生成SE模块的输出,这一输出可以作为网络后续层的输入。(个人不理解,为什么要有 F_{tr}这一变换过程,直接对输入特征图X 进行SE操作有什么问题吗?

可以通过简单的堆叠SE 模块来构建一个SE网络(SENet)。更甚,可以用SE模块来替换原始网络架构中一定深度范围内已有的模块。虽然构造模块的模板是通用的,但是不同深度有不同作用。在前面几层,SE模块能够以一种无关类别的方式来提取有用信息,增强共享的低级的表达能力(低级特征,比如边缘)。在后面几层,SE模块变得逐渐特化,以一种特定类别方式响应不同输入。因此,通过SE模块来进行特征矫正的益处能够在整个网络被累积。

设计和开发一个新的CNN架构是一项困难的工程任务,尤其需要对很多新的超参数和网络层配置进行选择。与之相比,SE模块的架构是简单的,可以直接替换已有网络模型中的模块,带来性能上的提升。当然,SE模块也增加了少量的模型复杂度和计算负担。

论文开发了几个SENets,在ImageNet数据集进行验证,获得了更好的结果,证实了论文模块的有效性,并且不是限定于特定数据集或任务。使用SENet, 论文获得了ILSVRC2017分类比赛的第一名,论文最好模型在测试集中实现了2.251\% top-5错误率。和前一年最好成绩相比,大约提升了25\%


2. 相关工作(Related Work)

论文对CNN网络的探索方向进行了研究说明,这里就不叙述了,感兴趣大家可以自行阅读。


3. 空间归一、通道奖励模块(Squeeze-and-Excitation Blocks)

这里我把Squeeze操作解释为空间归一,因为它是把H\times W的特征图大小映射为1\times 1大小,而通道数不变;把Excitation操作解释为通道奖励,是因为该操作通过一种叫做self gating的机制对每一通道计算一个权重值,和我们平常理解的奖励机制类似,重要的特征,权重值大,不重要的特征,则权重值小。

论文首先对输入SE模块的特征图进行说明,即上文所说的有一个变换处理过程,将原始特征图X通过F_{tr}(\cdot)转换为特征图U。这里的变换F_{tr}是一个卷积算子,V=[v_{1}, v_{2}, ..., v_{C}]表示要学习的过滤器核的集合,v_{c}表示第c个通道的过滤器,输出特征图表示为U=[u_{1}, u_{2}, ..., u_{C}],计算公式如下:
在这里插入图片描述
上式中*表示卷积操作,v_{c}=[v^{1}_{c}, v^{2}_{c}, ..., v^{C^{'}}_{c}]X=[x^{1}, x^{2}, ..., x^{C^{'}}], u_{c}\in R^{H\times W}, v^{s}_{c}是一个2维空间核,表示单通道v_{c}作用于X对应通道。从上式看出,变换的输出中每一通道值是输入所有通道的加和,所以,通道的依赖关系被隐式嵌入到v_{c}中,但是和过滤器核获得的局部空间相关。论文期望通过SE模块来对通道间依赖关系进行建模, 从而使网络能够增加提取有用特征的敏感度,而这些特征又可以被后续变换使用,最终提升卷积特征的学习能力。SE模块的构造如图Fig.1所示。

3.1 空间归一:嵌入全局信息(Squeeze: Global Information Embedding)

变换输出U的每一单元不能使用超出局部感受野区域外的上下文信息,这是因为它的每一过滤器仅作用于局部感受野,为了解决这个问题(使用全局信息),论文提出将全局信息压缩成一个通道描述符,使用全局平均池化技术来生成基于通道的统计信息,计算公式如下:
在这里插入图片描述
这里不太明白,为什么说进行全局平均池化后得到的通道描述符就包含全局信息呢?论文没有说明,是因为单一通道的特征图空间维度从 H\times W归一化为1\times 1后的统计信息代表全局信息吗?

论文中提到,使用全局平均池化只是一种最简单的聚合技术,也可以使用更复杂的方法。

3.2 激励:自适应矫正(Excitation: Adaptive Recalibration)

为了使用上述squeeze操作的结果,这里紧接着第二个操作来获取通道间的依赖关系。要实现这一目标,该函数需要满足如下两个准则:

  1. 函数必须灵活,能够学习通道间的非线性交互;
  2. 函数必须学习非互斥关系,因为允许多个通道被强化,而不是仅能强化单一通道。
    为了满足这两个要求,论文使用了简单的使用sigmoid激活的门机制,公式如下:
    在这里插入图片描述
    论文中说\delta表示ReLU函数,W_{1}\in R^{\frac{C}{r}\times C}, W_{2}\in R^{C\times \frac{C}{r}}。为了限制模型复杂度核提升模型泛化能力,这里使用了两个FC(fully-connected)紧跟着非线性函数作为瓶颈层,r即为通道降维比率。(这里不太明白,先说使用 sigmoid激活函数,后面又用了ReLU,到底是用的哪个?

得到s后,需要对变换输出U进行权重缩放,计算公式如下:
在这里插入图片描述
这里,F_{scale}()表示按通道相乘。

3.3 实例(Instantiations)

SE模块可以通过在每一卷积后紧跟着的非线性激活函数后插入的方式被整合到标准模型架构中,比如VGGNet。SE模块的灵活性也意味着它可以直接应用于标准卷积外的变换,比如在Inception网络中,将整个Inception模块作为SE模块的F_{tr}变换,如图Fig.2所示;在ResNet网络中,将非恒等模块作为SE模块的F_{tr}变换,如图Fig.3所示。
在这里插入图片描述
Table 1展示了嵌入SE模块的ResNet和ResNeXt模型结构。
在这里插入图片描述


4 模型和计算复杂度(Model And Computational Complexity)

为了体现实用价值,SE模块的设计必须权衡性能提升和模型复杂度的增加。论文以ResNet50模型为例,比较新增SE模块前后,模型复杂度(GFLOPs)和模型性能的改变,结果表明,在增加少量复杂度(增加0.26\%GFLOPs)的情况下,模型性能达到了ResNet-101模型的水平。

论文也对推理时间进行比较,发现对于224\times 224图像CPU推理时间,ResNet-50花费164ms,SE-ResNet-50则花费了167ms。因此,论文认为相比模型性能的提升,推理时间的消耗是不足为虑的。

论文也对SE模块引入额外的参数量进行分析,发现几乎所有额外参数都来源于SE模块中两个FC层,权重参数数量可用如下公式统计:
在这里插入图片描述
这里,r表示SE模块中瓶颈层通道降维比率,S表示stage个数,一个stage包含多个SE模块,C_{s}表示当前stage的通道数,N_{s}表示当前stage包含重复的SE模块的数量。
SE-ResNet-50包含大约2.5 million个额外参数,相比ResNet-50大约25 million参数,大约增加了10\%的参数量。
论文中将r=16

5 实验(Expermients)

这一章节是对论文进行的实验进行说明,探索了SE模块在图像分类、场景分类、目标检测,以及ILSVRC 2017分类竞赛中应用以及带来的性能提升,这里就不展开细说了,大家感兴趣可以自行阅读论文。

6 消融研究(Ablation Study)

这一章节主要是为了让我们更好的理解SE模块各个部分,更有效的使用SE模块。

6.1 降维比率(Reduction ratio)

论文对r取不同值进行实验,综合比较额外模型参数量和模型性能提升,选择r=16作为最优结果。
在这里插入图片描述

6.2 压缩算子(Squeeze Operator)

论文分别对全局最大池化和全局平均池化技术作为压缩算子进行实现,得到的结果是全局平均池化的结果更好些。
在这里插入图片描述

6.3 激励算子(Excitation Operator)

论文考虑其它的两个非线性函数:ReLU和tanh,实验结果表明,Sigmoid效果最好。
在这里插入图片描述

6.4 不同阶段(Different stages)

论文探查SE模块在ResNet-50不同阶段整合的影响,在stage_2, stage_3, stage_4整合SE模块,实验结果表明SE模块在不同阶段都带来了性能的提升,如果所有阶段都整合SE模块,模型性能得到更大的提升,相比于单一阶段融合SE模块而言。
在这里插入图片描述

6.5 整合策略(Integration strategy)

这里对SE模块在已有模型架构中的位置进行研究,以ResNet为例,将SE模块放置在如下Fig.5所示的(c-e)3种不同位置进行实验,发现效果差不多,所以还是采用原始的方式来放置SE模块。
在这里插入图片描述
在这里插入图片描述
这里也尝试将SE模块放在残差模块内部,即每一个3\times 3卷积之后,实验结果表明,额外参数量减少,但是性能稍微有点下降。
在这里插入图片描述

7 SE模块的角色(Role Of SE Blocks)

这一章节主要尝试对SE模块扮演的角色进行解释,以便更好的理解SE模块的功能。

7.1 压缩的作用(Effect of Squeeze)

这一部分主要对压缩操作产生的全局信息在提升模型性能方面扮演怎样的角色进行研究,主要是使用非压缩方法进行对比实验,结果表明,压缩操作产生的全局信息对提升模型性能是由明显帮助的。
在这里插入图片描述

7.2 奖励的角色(Role of Excitation)

这部分主要探究激励在不同类图像间,以及同一类不同图像间的作用,实验细节就不细说了,实验发现:

  1. 不同类别激活值在低阶段分布几乎相同,说明低阶段不同类别共享特征通道的重要性;
  2. 随着网络变深,每一通道的值依据不同类变得不同,这一发现和之前提到的模型浅层特征更加通用,深层特征根据类别不同有所侧重的观点相符。
  3. 网络最后阶段对通道矫正作用不大,和前面提到的去除最后阶段SE模块可以减少模型参数,同时不会对模型性能造成明显下降的说法一致。
    在这里插入图片描述

总结

这篇论文主要引入SE模块,它可以融合到已有的模型中,进一步提升模型的性能,但同时带来模型参数的增加和计算复杂度的少量增加。读完论文后,也只是明白这样做后确实提升性能,至于为什么,还是不太理解,道行太浅啊!

全部评论 (0)

还没有任何评论哟~