SE注意力机制

SE注意力机制

Fig. 1. A Squeeze-and-Excitation block

目录


论文地址:https://arxiv.org/pdf/1709.01507.pdf

 摘要:卷积神经网络(CNN)的核心构建块是卷积算子,它使网络能够通过融合每个层的局部感受野内的空间和通道信息来构建信息特征。大量的先前研究已经调查了这种关系的空间成分,试图通过增强整个特征层次的空间编码质量来增强CNN的代表能力。在这项工作中,我们转而关注信道关系,并提出了一种新的架构单元,我们称之为“挤压和激励”(SE)块,它通过显式建模信道之间的相互依赖性来自适应地重新校准信道特性响应。我们表明,这些块可以堆叠在一起,形成SENet架构,可以非常有效地跨不同的数据集进行推广。我们进一步证明,SE块以轻微的额外计算成本为现有最先进的CNN带来了显著的性能改进。SE网络构成了2017年ILSVRC分类提交的基础,该分类获得了第一名,并将前五名的误差降至2.251%,超过了2016年的获奖条目∼25%. 模型和代码可在https://github.com/hujie-frank/SENet.

1. INTRODUCTION

       卷积神经网络(CNN)已被证明是处理广泛视觉任务的有用模型在网络中的每个卷积层,一组滤波器表示沿输入通道的邻域空间连通性模式,将空间通道方向的信息在局部感受野内融合在一起。通过用非线性激活函数和下采样算子交错一系列卷积层,CNN能够产生捕获分层模式并获得全局理论感受野的图像表示。计算机视觉研究的一个中心主题是寻找更强大的表示,这些表示只捕获图像中对于给定任务最显著的属性,从而提高性能。作为视觉任务的一个广泛使用的模型家族,新的神经网络架构设计的开发现在代表了这一研究的一个关键前沿。最近的研究表明,通过将学习机制集成到网络中,有助于捕获特征之间的空间相关性,CNN产生的表示可以得到加强。Inception系列体系结构推广了一种这样的方法,它将多尺度过程结合到网络模块中,以提高性能。进一步的工作试图更好地建模空间相关性,并将空间注意力纳入网络结构。

        在本文中,我们研究了网络设计的另一个方面——通道之间的关系。我们引入了一种新的体系结构单元,我们称之为挤压和激励(SE)块,其目的是通过显式建模其卷积特征的信道之间的相互依赖性来提高网络产生的表示的质量。为此,我们提出了一种允许网络执行特征重新校准的机制,通过该机制,网络可以学习使用全局信息来选择性地强调信息特征并抑制不太有用的特征。

        SE构建块的结构如图1所示。对于任何给定的变换,将输入X映射到特征映射U,其中U∈ RH×W×C,例如卷积,我们可以构造相应的SE块来执行特征重新校准。特征U首先通过挤压操作,挤压操作通过在其空间维度(H×W)上聚合特征图来生成通道描述符。该描述符的功能是生成信道方向特征响应的全局分布的嵌入,允许网络的所有层使用来自网络的全局接收场的信息。聚合之后是激励操作,该操作采用简单的自选通道机制的形式,该机制将嵌入作为输入,并产生每个信道调制权重的集合。这些权重被应用于特征图U以生成SE块的输出,该输出可以直接馈送到网络的后续层中。

        可以通过简单地堆叠SE块的集合来构建SE网络(SENet)。此外,这些SE块还可以用作网络架构中不同深度的原始块的替换块。虽然构建块的模板是通用的,但它在整个网络中不同深度所扮演的角色不同。在早期的层中,它以类不可知的方式激发信息特征,强化了共享的底层表示。在后面的层中,SE块变得越来越专业化,并以高度特定于类的方式响应不同的输入。因此,SE块执行的特征重新校准的好处可以通过网络累积。

        新CNN架构的设计和开发是一项艰巨的工程任务,通常需要选择许多新的超参数和层配置。相比之下,SE块的结构简单,可以通过将组件替换为SE对应的组件,直接用于现有最先进的体系结构中,从而可以有效地提高性能。SE块在计算上也是轻量级的,只会略微增加模型复杂度和计算负担。

        为了给这些主张提供证据,本文开发了几个SENet,并对ImageNet数据集进行了广泛的评估。我们还展示了ImageNet之外的结果,这些结果表明我们的方法的好处并不局限于特定的数据集或任务。通过使用SENets,我们在ILSVRC 2017分类比赛中排名第一。我们的最佳模型集合在测试集1上实现了2.251%的前5名错误。与前一年的获奖者条目(2.991%的前五名错误)相比,这代表了大约25%的相对改进。

2. RELATED WORK

Deeper architectures:VGGNets和Inception模型表明,增加网络的深度可以显著提高其能够学习的表示的质量。通过调节输入到每个层的分布,批次归一化(BN)为深度网络中的学习过程增加了稳定性,并产生了更平滑的优化曲面。在这些工作的基础上,ResNets证明,通过使用基于身份的跳过连接,可以学习更深入和更强的网络。高速网络引入了一种门控机制,以调节沿捷径连接的信息流。在这些工作之后,对网络层和之间的连接进行了进一步的重组,其显示了对深度网络的学习和表征特性的有希望的改进。

        另一个替代但密切相关的研究领域集中于改进网络中包含的计算元素的功能形式的方法。分组卷积已被证明是增加学习变换基数的一种流行方法。使用多分支卷积可以实现更灵活的算子组合,这可以看作是分组算子的自然扩展。在先前的工作中,交叉信道相关性通常被映射为新的特征组合,或者独立于空间结构,或者通过使用具有1×1卷积的标准卷积滤波器联合映射。这项研究的大部分集中在降低模型和计算复杂性的目标上,反映了一种假设,即通道关系可以被表述为具有局部感受野的实例不可知函数的组合。相反,我们声称,为该单元提供一种机制,以使用全局信息显式地建模信道之间的动态、非线性依赖关系,可以简化学习过程,并显著增强网络的代表性。

Algorithmic Architecture Search:除了上述工作之外,还有丰富的研究历史,旨在放弃手工架构设计,转而寻求自动学习网络结构。该领域的许多早期工作是在神经进化社区中进行的,该社区建立了使用进化方法进行跨网络拓扑搜索的方法。虽然通常需要计算,但进化搜索已经取得了显著的成功,包括为序列模型找到良好的存储单元,以及学习大规模图像分类的复杂架构。为了减少这些方法的计算负担,基于拉马克遗传和可微结构搜索,提出了该方法的有效替代方案。

        通过将架构搜索公式化为超参数优化,随机搜索和其他更复杂的基于模型的优化技术也可用于解决该问题。拓扑选择作为通过可能设计结构的路径和直接架构预测已被提出作为额外可行的架构搜索工具。强化学习的技术取得了特别强的结果。SE块可以用作这些搜索算法的原子构建块,并被证明在并发工作中具有很高的效率。

Attention and gating mechanisms:注意力可以被解释为将可用计算资源的分配偏向于信号的信息量最大的分量的一种手段。注意机制已证明其在许多任务中的效用,包括序列学习图像中的定位和理解、图像字幕和唇读。在这些应用中,它可以作为一个操作符,跟随一个或多个表示更高层次抽象的层,用于模态之间的自适应。一些工作对空间和通道注意力的组合使用进行了有趣的研究。Wang等人基于沙漏模块引入了一种强大的主干和掩码注意机制,该机制插入深度残差网络的中间阶段之间。相比之下,我们提出的SE块包括一个轻量级门控机制,该机制侧重于通过以计算有效的方式建模信道关系来增强网络的表示能力。

3. SQUEEZE-AND-EXCITATION BLOCKS

挤压和激励块是一个计算单元,它可以建立在映射输入SE注意力机制的变换F_{tr}上至要素图SE注意力机制。在下面的符号中,我们将F_{tr}取为卷积算子,并使用V = [v_{1},v_{2},...,v_{C}]

3.1 Squeeze: Global Information Embedding

        为了解决利用信道依赖性的问题,我们首先考虑输出特性中每个信道的信号。每个学习的滤波器都与局部感受野一起工作,因此变换输出U的每个单元都不能利用该区域之外的上下文信息。

        为了缓解这个问题,我们建议将全局空间信息压缩到信道描述符中。这是通过使用全局平均池来生成通道统计来实现的。形式上,统计量SE注意力机制是通过将U缩小到其空间尺寸H×W而生成的,因此z的第c个元素的计算公式为:

SE注意力机制

         讨论变换U的输出可以被解释为局部描述符的集合,其统计数据对于整个图像是可表达的。利用此类信息在先前的特征工程工作中很普遍。我们选择了最简单的聚合技术,即全球平均池,注意到这里也可以采用更复杂的策略。

3.2 Excitation: Adaptive Recalibration

         为了利用挤压操作中聚集的信息,我们接着进行第二个操作,该操作旨在完全捕获通道依赖性。为了实现这一目标,该功能必须满足两个标准:第一,它必须灵活(特别是,它必须能够学习通道之间的非线性交互);第二,它必须学习非互斥关系,因为我们希望确保允许强调多个通道(而不是强制执行一个热激活)。为了满足这些标准,我们选择使用简单的门控机制和S型激活:

s = F_{ex}(z,W)= \sigma (g(z,W)) = \sigma (W_{2}\delta (W_{1}z))

         其中δ表示ReLU函数,SE注意力机制SE注意力机制。为了限制模型复杂性并帮助推广,我们通过在非线性周围形成两个完全连接(FC)层的瓶颈来参数化选通机制,即具有缩减比r的降维层(该参数选择在第6.1节中讨论),ReLU,然后是维度增加层,返回到变换输出U的通道维度。通过使用激活s重新缩放U来获得块的最终输出:

\widetilde{X_{c}} = F_{scale}(u_{c},s_{c}) = s_{c}u_{c}

其中\widetilde{X}=[\widetilde{x_{1}},\widetilde{x_{2}},...,\widetilde{x_{C}}]F_{scale}(u_{c},s_{c})是指标量s_{c}和特征映射SE注意力机制之间的信道乘法。

         Discussion:激励算子将输入特定描述符z映射到一组信道权重。在这方面,SE块本质上引入了以输入为条件的动力学,这可以被视为信道上的自关注函数,其关系不限于卷积滤波器所响应的局部感受野。

3.3 Instantiations

        SE块可以通过在每个卷积之后的非线性之后插入而集成到标准架构中,如VGGNet。此外,SE块的灵活性意味着它可以直接应用于标准卷积以外的变换。为了说明这一点,我们通过将SE块合并到更复杂的体系结构的几个示例中来开发SENet,如下所述。

         我们首先考虑初始网络的SE块的构建。这里,我们简单地将转换F_{tr}视为一个完整的Inception模块(见图2),通过对架构中的每个模块进行这种更改,我们获得了SE Inceptation网络。SE块也可以直接用于剩余网络(图3描述了SE ResNet模块的模式)。这里,SE块变换F_{tr}被认为是残差模的非恒等分支。挤压和激励都在恒等式分支求和之前起作用。将SE块与ResNeXt、Inception ResNet、MobileNet和ShuffleNet集成的其他变体可以通过以下类似方案构建。对于SENet架构的具体示例,表1给出了SE-ResNet-50和SE-ResNeXt-50的详细描述。

SE注意力机制

SE注意力机制

SE注意力机制

        SE块的灵活性带来的一个后果是,有几种可行的方法可以将其集成到这些架构中。因此,为了评估用于将SE块纳入网络架构的集成策略的敏感性,我们还在第6.5节中提供了消融实验,探索块纳入的不同设计。 

4. MODEL AND COMPUTATIONAL COMPLEXITY

       为了使提议的SE块设计具有实际用途,它必须在改进的性能和增加的模型复杂度之间提供良好的权衡。为了说明与模块相关的计算负担,我们以ResNet-50和SE-ResNet-50之间的比较为例。ResNet-50需要∼3.86对于224×224。每个SE块在挤压阶段和激发阶段中的两个小FC层,然后进行廉价的通道缩放操作。总的来说,当将减速比r(第3.2节介绍)设置为16时,SE-ResNet-50要求∼3.87 GFLOP,与原始ResNet-50相比相对增加了0.26%。作为这一轻微的额外计算负担的交换,SE-ResNet-50的精度超过了ResNet-50的精度,事实上,接近了需要更深入的ResNet-101网络的精度∼7.58 GFLOP(表2)。

SE注意力机制

         实际上,通过ResNet-50的一次向前和向后传递需要190毫秒,相比之下,具有256个图像的训练小批量的SE-ResNet-50需要209毫秒(这两个计时都在具有8个NVIDIA Titan X GPU的服务器上执行)。我们建议,这代表了合理的运行时开销,随着通用GPU库中的全局池和小型内积操作得到进一步优化,这可能会进一步减少。由于其对嵌入式设备应用的重要性,我们进一步对每个模型的CPU推断时间进行了基准测试:对于224×224像素的输入图像,ResNet-50需要164毫秒,而SE-ResNet-50则需要167毫秒。

        接下来,我们将考虑提议的SE块引入的附加参数。这些附加参数仅由选通机制的两个FC层产生,因此构成总网络容量的一小部分。具体而言,这些FC层的重量参数引入的总数量由下式给出:

SE注意力机制

        其中r表示缩减比,S表示级的数目(级是指在公共空间维度的特征图上操作的块的集合),Cs表示输出通道的维度,Ns表示级S的重复块的数目(当在FC层中使用偏置项时,引入的参数和计算成本通常可以忽略不计)。SE-ResNet-50介绍∼250万个额外参数∼ResNet-50需要2500万个参数,对应于增加10%。在实践中,这些参数的大部分来自网络的最后阶段,在该阶段,在最大数量的信道上执行激励操作。然而,我们发现,这种相对昂贵的SE块的最后阶段可以以很小的性能成本(在ImageNet上<0.1%的top 5错误)移除,从而将相对参数增加减少到∼4%,在参数使用是关键考虑因素的情况下,这可能是有用的(详见第6.4节和第7.2节)。

5. EXPERIMENTS

        在本节中,我们进行实验,以研究SE块在一系列任务、数据集和模型架构中的有效性。

5.1 Image Classification

       为了评估SE块的影响,我们首先对ImageNet 2012数据集进行了实验,该数据集包括128万张训练图像和来自1000个不同类别的50K张验证图像。我们在训练集上训练网络,并在验证集上报告top 1和top 5错误。

        每个基线网络架构及其相应的SE对应物都使用相同的优化方案进行训练。我们遵循标准实践,使用比例和纵横比进行随机裁剪,以达到224×224像素的大小(或Inception-ResNet-v2和SE-Inteption-ResNet-v2的299×299),并进行随机水平翻转。每个输入图像通过平均RGB通道减法归一化。所有模型都在我们的分布式学习系统ROCS上进行训练,该系统旨在处理大型网络的高效并行训练。使用动量为0.9的同步SGD进行优化,最小批量大小为1024。初始学习速率设置为0.6,每30个周期减少10倍。使用文献66中描述的权重初始化策略,从头开始训练模型100个周期。减速比r(第3.2节)默认设置为16(除非另有规定)。

         在评估模型时,我们应用中心裁剪,以便从每个图像中裁剪224×224像素其较短边缘首先被调整为256(对于Inception-ResNet-v2和SE-Inteption-ResNet-v3,每个图像的较短边缘被调整为352)。

Network depth:我们首先将SE ResNet与具有不同深度的ResNet架构进行比较,并将结果报告在表2中。我们观察到,SE块在不同深度上不断提高性能,但计算复杂度增加极小。值得注意的是,SE-ResNet-50实现了6.62%的单次裁剪top 5验证错误,超过ResNet-50(7.48%)0.86%,接近更深层的ResNet-101网络所实现的性能(6.52%的top 5错误),仅占总计算负担的一半(3.87 GFLOP vs。7.58 GFLOP)。这种模式在更大的深度重复,其中SE-ResNet-101(6.07%的top 5错误)不仅匹配,而且比更深的ResNet-152网络(6.34%的top 2错误)的性能要好0.27%。尽管应该注意,SE块本身增加了深度,但它们以极其高效的计算方式进行,并且即使在扩展基础架构的深度实现收益递减的点上也会产生良好的收益。此外,我们看到,在一系列不同的网络深度上,增益是一致的,这表明SE块引起的改进可能与通过简单地增加基础架构的深度而获得的改进是互补的。

Integration with modern architectures:接下来,我们将研究将SE块与另外两种最先进的架构Inception-ResNet-v2和ResNeXt(使用32×4d的设置)集成的效果,这两种架构都将额外的计算构建块引入到基础网络中。我们构建了这些网络的SENet等价物,SE-Inteption-ResNet-v2和SE-ResNeXt(SE-ResNeXt-50的配置如表1所示),并在表2中报告了结果。与之前的实验一样,我们观察到在两种架构中引入SE块导致的性能显著提高。特别是,SE-ResNeXt-50具有5.49%的top 5错误,这优于其直接对应的ResNeXt-100(5.90%top 5误差)以及更深的ResNeXt-101(5.57%top 5差错),该模型具有几乎两倍的参数总数和计算开销。我们注意到Inception-ResNet-v2的重新实现与中报告的结果之间的性能略有不同。然而,我们观察到SE块效应的类似趋势,发现SE对应物(4.79%的top 5错误)比我们重新实现的Inception-ResNet-v2基线(5.21%的top 2错误)好0.42%,以及中报告的结果。

         我们还通过使用VGG-16和BN Inception架构进行实验,评估了在非剩余网络上运行时SE块的影响。为了便于从头开始训练VGG-16,我们在每次卷积之后添加了批处理归一化层。我们对VGG-16和SE-VGG-16使用相同的训练方案。比较结果如表2所示。与残差基线架构报告的结果类似,我们观察到SE块在非残差设置上带来了性能改进。

       为了深入了解SE块对这些模型优化的影响,图4中描述了基线架构运行的示例训练曲线及其各自的SE对应物。我们观察到SE块在整个优化过程中产生了稳定的改进。此外,这一趋势在被视为基线的一系列网络架构中相当一致。

SE注意力机制

Mobile setting:最后,我们考虑了来自移动优化网络类别的两种代表性架构,MobileNet和ShuffleNet。对于这些实验,我们使用了256个小批量大小,并且与中一样,数据增强和规则化程度略低。我们使用具有动量(设置为0.9)和0.1的初始学习率的SGD在8个GPU上训练模型,每次验证损失稳定时,初始学习率降低10倍。所需的总培训流程∼ 400个时期(使我们能够重现[65]的基线性能)。表3中报告的结果表明,SE区块持续改善以最小的计算成本增加的大幅度提高精度。

SE注意力机制

Additional datasets:接下来,我们将研究SE块的好处是否适用于ImageNet以外的数据集。我们在CIFAR-10和CIFAR-100数据集上使用几种流行的基线架构和技术(ResNet-110、ResNet-164、WideResNet-16-8、Shake Shake和Cutout)进行实验。这些包括50k训练和10k测试32×32像素RGB图像的集合,分别用10个和100个类标记。将SE块集成到这些网络中遵循第3.3节所述的相同方法。每个基线及其SENet对应物都使用标准数据增强策略进行训练。在训练过程中,图像被随机水平翻转,并在每一侧用四个像素填充零,然后进行32×32的随机裁剪。还应用了平均值和标准差归一化。训练超参数的设置(例如,小批量大小、初始学习速率、权重衰减)与原始论文建议的相匹配。我们在表4中报告了每个基线及其SENet对应物在CIFAR-10上的性能,在表5中报告了CIFAR-100上的性能。我们观察到,在每次比较中,SENet都优于基线架构,这表明SE块的好处不仅限于ImageNet数据集。

SE注意力机制

5.2 Scene Classification

       我们还对Places365挑战数据集进行了场景分类实验。该数据集包括365个类别的800万张训练图像和36500张验证图像。相对于分类,场景理解的任务提供了对模型良好概括和处理抽象的能力的另一种评估。这是因为它通常要求模型处理更复杂的数据关联,并对更高级别的外观变化具有鲁棒性。

        我们选择使用ResNet-152作为强有力的基线来评估SE块的有效性,并遵循文献[72]、[74]中描述的训练和评估协议。在这些实验中,模型是从头开始训练的。我们在表6中报告了结果,并与先前的工作进行了比较。我们观察到SE-ResNet-152(11.01%的top 5错误)实现了比ResNet-152更低的验证错误(11.61%的top5错误),提供了SE块也可以产生场景分类改进的证据。该SENet超越了先前最先进的Places-365-CNN[72]模型,该模型在该任务中的前五名错误率为11.48%。

SE注意力机制

5.3 Object Detection on COCO

         我们使用COCO数据集进一步评估了SE块在目标检测任务中的泛化。与之前的工作[19]一样,我们使用minival协议,即在80k训练集和35k val子集的联合上训练模型,并对剩余的5k val子集进行评估。权重由在ImageNet数据集上训练的模型参数初始化。我们使用更快的R-CNN检测框架作为评估模型的基础,并遵循文献[76]中描述的超参数设置(即,使用“2x”学习计划进行端到端训练)。我们的目标是评估用SE ResNet替换对象检测器中的主干架构(ResNet)的效果,以便性能的任何变化都可以归因于更好的表示。表7报告了使用ResNet-50、ResNet-101及其SE对应物作为主干架构的对象检测器的验证集性能。SE-ResNet-50在COCO的标准AP指标上优于ResNet-50 2.4%(相对提高6.3%),在AP@IoUSE块还受益于更深层次的ResNet-101架构,在AP度量上实现了2.0%的改进(5.0%的相对改进)。总之,这组实验证明了SE块的通用性。诱导的改进可以在广泛的架构、任务和数据集中实现。

SE注意力机制

5.4 ILSVRC 2017 Classification Competition

         SENets构成了我们提交ILSVRC竞赛的基础,我们获得了第一名。我们的获奖作品包括一小部分SENets,它们采用了标准的多尺度和多作物融合策略,在测试集上获得了2.251%的前5个错误。作为本次提交的一部分,我们通过将SE块与修改后的ResNeXt集成,构建了一个额外的模型SENet-154。我们使用标准裁剪将该模型与表8中ImageNet验证集的先前工作进行了比较尺寸(224×224和320×320)。我们观察到,使用224×224中心作物评估,SENet-154实现了18.68%的前1个错误和4.47%的前5个错误,这代表了最强的报告结果。

SE注意力机制

         在挑战之后,ImageNet基准测试取得了很大的进一步进展。为了进行比较,我们在表9中列出了我们目前已知的最强结果。最近,[79]报告了仅使用ImageNet数据的最佳性能。该方法使用强化学习来开发训练期间数据增强的新策略,以提高搜索的体系结构的性能。[80]使用ResNeXt-101 32×48d架构报告了最佳的总体性能。这是通过在大约10亿张弱标记图像上预训练他们的模型并在ImageNet上进行微调来实现的。更复杂的数据增强[79]和广泛的预训练[80]带来的改进可能是对我们提出的网络架构更改的补充。

SE注意力机制

6. ABLATION STUDY

        在本节中,我们进行了消融实验,以更好地理解使用不同配置对SE块组件的影响。所有消融实验均在一台机器(具有8个GPU)上的ImageNet数据集上进行。ResNet-50用作主干架构。我们根据经验发现,在ResNet架构上,在激励操作中消除FC层的偏差有助于信道依赖性的建模,并在下面使用该配置实验。数据增强策略遵循第5.1节中所述的方法。为了使我们能够研究每个变体的性能上限,将学习率初始化为0.1,并继续训练,直到验证损失平稳2(∼总共300个时代)。然后将学习率降低10倍,然后重复此过程(总共三次)。训练期间使用标签平滑正则化。

6.1 Reduction ratio

        等式中引入的减速比r。5是一个超参数,它允许我们改变网络中SE块的容量和计算成本。为了研究由该超参数介导的性能和计算成本之间的权衡,我们使用SE-ResNet-50对一系列不同的r值进行了实验。表10中的比较表明,性能对一系列减速比是稳健的。增加的复杂性不会单调地提高性能,而较小的比率会显著增加模型的参数大小。设置r=16可以在准确性和复杂性之间取得良好的平衡。在实践中,在整个网络中使用相同的比率可能不是最佳的(由于不同层执行的不同角色),因此可以通过调整比率来满足给定基础架构的需要来实现进一步的改进。

SE注意力机制

6.2 Squeeze Operator

        我们研究了使用全局平均池而不是全局最大池作为我们选择挤压算子的重要性(因为这很有效,所以我们没有考虑更复杂的替代方案)。结果如表11所示。虽然最大池和平均池都是有效的,但平均池的性能稍好,这证明了其选择是挤压操作的基础。然而,我们注意到,SE块的性能对于特定聚合运算符的选择是相当稳健的。

SE注意力机制

6.3 Excitation Operator

        我们接下来评估激励机制的非线性选择。我们考虑了另外两个选项:ReLU和tanh,并尝试用这些sigmoid替代非线性。结果如表12所示。我们发现,将乙状结肠换成tanh会略微降低性能,而使用ReLU会显著降低性能,事实上会导致SE-ResNet-50的性能下降到ResNet-50基线以下。这表明,为了使SE块有效,仔细构造激励算子非常重要。

SE注意力机制

6.4 Different stages

         我们通过将SE块集成到ResNet-50中,一次一个阶段,探索SE块在不同阶段的影响。具体来说,我们将SE块添加到中间阶段:阶段2、阶段3和阶段4,并将结果报告在表13中。我们观察到,在架构的每个阶段引入SE块都会带来性能优势。此外,SE块在不同阶段产生的增益是互补的,因为它们可以有效地组合以进一步提高网络性能。

SE注意力机制

6.5 Integration strategy

         最后,我们进行了消融研究,以评估将SE块整合到现有结构中时SE块位置的影响。除了所提出的SE设计,我们考虑了三种变型:(1)SE-PRE块,其中SE块在剩余单元之前移动;(2) SE-POST块,其中SE单元在与恒等分支(ReLU之后)求和之后移动,以及(3)SE恒等块,其中,SE单元与剩余单元并行放置在恒等连接上。这些变体如图5所示,每个变体的性能如表14所示SE-POST块的性能下降。该实验表明,SE单元产生的性能改进对其位置相当稳健,前提是它们在分支聚合之前应用。

SE注意力机制

SE注意力机制

         在上述实验中,每个SE块被放置在残余单元的结构之外。我们还构建了一个设计变体,将SE块移动到残差单元内,将其直接放置在3×3卷积层之后。由于3×3卷积层拥有更少的信道,相应SE块引入的参数数量也减少了。表15中的比较表明,SE 3×3变体以比标准SE块更少的参数实现了相当的分类精度。尽管这超出了本工作的范围,但我们预计,通过为特定体系结构定制SE块的使用,可以进一步提高效率。

SE注意力机制

7. ROLE OF SE BLOCKS

        尽管所提出的SE块已被证明在多个视觉任务中改善了网络性能,但我们还希望了解挤压操作的相对重要性以及激励机制在实践中如何运行。对深度神经网络学习的表示进行严格的理论分析仍然具有挑战性,因此,我们采用实证方法来检验SE块所起的作用,目的是至少对其实际功能有一个初步的了解。

7.1 Effect of Squeeze

        为了评估挤压操作产生的全局嵌入是否在性能中起重要作用,我们使用SE块的一个变体进行实验,该变体添加了相等数量的参数,但不执行全局平均池。具体而言,我们移除了池化操作,并将两个FC层替换为相应的1×1卷积,该卷积在激励算子中具有相同的信道维度,即NoSqueze,其中激励输出保持空间维度作为输入。与SE块相反,这些逐点卷积只能根据本地算子的输出重新映射信道。在实践中,深度网络的后几层通常具有(理论上)全局在NoSqueeze变体中,在整个网络中无法直接访问全局嵌入。两种模型的精度和计算复杂度与表16中的标准ResNet-50模型进行了比较。我们观察到,全局信息的使用对模型性能有显著影响,强调了挤压操作的重要性。此外,与NoSqueze设计相比,SE块允许以计算上节省的方式使用该全局信息。

SE注意力机制

7.2 Role of Excitation

        为了更清楚地描述SE块中激励算子的功能,在本节中,我们研究了SE-ResNet-50模型中的示例激活,并检查了它们在网络中不同深度的不同类别和不同输入图像中的分布。特别是,我们想了解不同类别的图像以及一个类别内的图像之间的兴奋是如何变化的。

        我们首先考虑不同类别的激励分布。具体来说,我们从ImageNet数据集中抽取了四个表现出语义和外观多样性的类,即金鱼、哈巴狗、飞机和悬崖(这些类的示例图像如附录所示)。然后,我们从验证集中为每个类别抽取50个样本,计算每个阶段最后一个SE块中50个均匀采样通道的平均激活(下采样前),并在图6中绘制其分布。作为参考,我们还绘制了1000个类的平均激活分布。

SE注意力机制

        我们对励磁操作的作用进行了以下三点观察。首先,在网络的早期层(例如SE 2 3),不同类别之间的分布非常相似。这表明,在早期阶段,不同类别可能共享特征频道的重要性。第二个观察结果是深度,每个通道的值变得更加特定于类别,因为不同的类别对特征的鉴别值表现出不同的偏好,例如SE 4 6和SE 5 1。这些观察结果与先前工作中的发现一致[81]、[82]、,也就是说,早期层特征通常更一般(例如,在分类任务的上下文中,类别不可知),而后期层特征表现出更高的特异性。

         接下来,我们在网络的最后阶段观察到一些不同的现象。SE 52表现出一种有趣的趋向于饱和状态的趋势,其中大多数激活接近于一。在所有激活都取值1的点上,SE块简化为恒等运算符。在SE 5 3网络的末尾(紧接着是分类器之前的全局池),在不同的类别上出现了类似的模式,规模变化不大(可以由分类器调整)。这表明,在向网络提供重新校准方面,SE 5 2和SE 5 3不如先前的块重要。这一发现与第4节中的经验调查结果一致,该调查结果表明,通过移除最后一级的SE块,可以显著减少额外的参数计数,而性能损失很小。

        最后,我们在图7中显示了两个样本类(金鱼和平面)的同一类内图像实例激活的平均值和标准差。我们观察到与类间可视化一致的趋势,表明SE块的动态行为在类和类内的实例上都不同。特别是在网络的后一层,其中单个类中的表示形式有相当的多样性,网络学习利用特征重新校准来提高其辨别性能[84]。总之,SE块产生实例特定的响应,然而,它的功能是在体系结构的不同层支持模型日益增长的类特定需求。

SE注意力机制

8. CONCLUSION 

        在本文中,我们提出了SE块,这是一种体系结构单元,旨在通过使网络能够执行动态信道特征重新校准来提高网络的表示能力。广泛的实验表明了SENets的有效性,它在多个数据集和任务中实现了最先进的性能。此外,SE块在一定程度上说明了以前的体系结构无法对信道特性依赖性进行充分建模。我们希望这种洞察力可以证明对其他需要强辨别特征的任务有用。最后,SE块产生的特征重要性值可以用于其他任务,例如用于模型压缩的网络修剪。

9. SE模块的实现代码如下:

import torch.nn as nn

class SEModel(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SEModel, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年3月19日 下午12:19
下一篇 2023年3月19日 下午1:26

相关推荐