摘要
我们提出了卷积块注意模块(CBAM),一个简单而有效的前馈卷积神经网络的注意模块。给定一个中间特征图,我们的模块沿着通道和空间两个独立的维度依次推导出注意力图,然后将注意力图乘以输入特征图进行自适应特征细化。由于CBAM是一个轻量级的通用模块,它可以无缝地集成到任何CNN架构中,其开销可以忽略不计,并且可以与基础CNN一起进行端到端的训练。我们通过在ImageNet-1K、MS COCO检测和VOC 2007检测数据集上的广泛实验验证了我们的CBAM。我们的实验表明,各种模型在分类和检测性能上都有一致的改进,这证明了CBAM的广泛适用性。代码和模型将被公开提供。
keywords
Object recognition, attention mechanism, gated convolution
1.介绍
卷积神经网络(CNN)凭借其丰富的表示能力,极大地推动了视觉任务的表现[1-3]。为了提高CNN的性能,最近的研究主要研究了网络的三个重要因素:深度、宽度和cardinality。
从LeNet架构[4]到Residual-style网络[5-8],到目前为止,网络已经变得更深,以实现丰富的表达。VGGNet[9]表明,将具有相同形状的块堆叠起来可以得到不错的结果。遵循同样的精神,ResNet[5]将相同拓扑结构的残差块与跳跃连接一起堆叠,以建立一个极深的架构。GoogLeNet[10]表明,宽度是提高模型性能的另一个重要因素。Zagoruyko和Komodakis[6]提议在ResNet架构的基础上增加网络的宽度。他们表明增加宽度的28层ResNet性能比1001层的深层ResNet在CIFAR基准上表现更好。Xception[11]和ResNeXt[7]想出了增加网络的cardinality。他们的经验表明,cardinality不仅节省了参数的总数,而且比其他两个因素(深度和宽度)具有更强的表示能力。
除了这些因素之外,我们还研究了架构设计的另一个方面,即注意力。注意力的意义在以前的文献中已经得到了广泛的研究[12-17]。注意力不仅能告诉人们在哪里集中注意力,它还能提高兴趣的代表性。我们的目标是通过使用注意力机制来提高表征能力:关注重要的特征并抑制不必要的特征。在本文中,我们提出了一个新的网络模块,名为 "卷积块注意力模块"。由于卷积操作通过混合跨通道和空间信息来提取信息特征,我们采用我们的模块来强调沿着这两个主要维度的有意义的特征:通道和空间轴。为了实现这一目标,我们依次应用通道和空间注意力模块(如图1所示),这样每个分支都可以学习在通道和空间轴上分别关注 "什么 "和 "哪里"。因此,我们的模块通过学习哪些信息需要强调或压制,有效地帮助网络内的信息流动
在ImageNet-1K数据集中,通过插入我们的微小模块,我们从各种基线网络中获得了准确性的提高,揭示了CBAM的功效。
我们使用grad-CAM[18]对训练好的模型进行可视化,并观察到CBAM增强的网络比其基线网络更正确地关注目标对象。考虑到这一点,我们猜测性能的提升来自于准确的注意力和对不相关杂波的降噪。最后,我们在MS COCO和VOC 2007数据集上验证了物体检测的性能提升,证明了CBAM的广泛适用性。由于我们精心设计了我们的模块是轻量级的,在大多数情况下,参数和计算的开销是可以忽略不计的。
贡献。我们的主要贡献有三个方面。
- 我们提出了一个简单而有效的注意力模块(CBAM),可以广泛用于提高CNN的表示能力。
- 我们通过广泛的消融研究验证了我们的注意力模块的有效性。
- 我们验证了通过插入我们的轻量级模块,各种网络的性能在多个基准(ImageNet-1K、MS COCO和VOC 2007)上得到了极大的改善。
2. 相关工作
网络工程。"网络工程 "一直是最重要的视觉研究之一,因为精心设计的网络可以确保在各种应用中显著提高性能。自从大规模的CNN[19]成功实现以来,已经提出了一系列广泛的架构。一个直观而简单的扩展方式是增加神经网络的深度[9]。Szegedy等人[10]介绍了一个使用多分支架构的深度Inception网络,其中每个分支都是精心定制的。虽然由于梯度传播的困难,一味增加深度会带来饱和,但ResNet[5]提出了一个简单的身份跳转连接来缓解深度网络的优化问题。基于ResNet架构,各种模型如WideResNet[6]、Inception-ResNet[8]和ResNeXt[7]已被开发。WideResNet[6]提出了一个具有更多卷积核和降低深度的残差网络。PyramidNet[20]是WideResNet的严格概括,网络的宽度逐渐增加。ResNeXt[7]建议使用分组卷积,并表明增加cardinality会导致更好的分类精度。最近,Huang等人[21]提出了一个新的架构,DenseNet。它将输入特征与输出特征迭代连接起来,使每个卷积块都能从之前的所有块中获得原始信息。虽然大多数最近的网络工程方法主要针对三个因素深度[19,9,10,5],宽度[10,22,6,8],和cardinality[7,11],我们专注于另一个方面,"注意力",人类视觉系统的一个奇怪的方面。
注意力机制。众所周知,注意力在人类的感知中起着重要的作用[23-25]。人类视觉系统的一个重要特性是,人们并不试图一次处理整个场景。相反,人类利用一连串的部分瞥见,有选择地集中在突出的部分,以便更好地捕捉视觉结构[26]。
最近,已经有一些尝试[27, 28],将注意力处理纳入到大规模分类任务中,以提高CNN的性能。Wang等人[27]提出了残差注意力网络,该网络使用了一个编码器-解码器式的注意力模块。通过细化特征图,该网络不仅表现良好,而且对噪声输入也很鲁棒。我们没有直接计算三维attention map,而是分解了分别学习通道注意和空间注意的过程。总体上三维特征图的单独注意力生成过程的计算量和参数要小得多。因此,可以作为一个即插即用的模块用于预先存在的基础CNN架构。
与我们的工作更接近的是,Hu等人[28]引入了一个紧凑的模块来利用通道间的关系。在他们的Squeeze-and-Excitation模块中,他们使用全局平均集合的特征来计算通道间的注意力。然而,我们表明,为了推断精细的通道注意力,这些是次优的特征,我们建议也使用最大池化的特征。他们没有使用空间注意,而空间注意在决定 "哪里 "关注方面起着重要的作用,正如[29]中所示。在我们的CBAM中,我们利用了基于有效架构的空间和通道的注意力,并通过经验验证,利用这两种注意力要比只使用通道的注意力要好[28]。此外,我们的经验表明,我们的模块在检测任务(MS-COCO和VOC)中是有效的。特别是,在VOC2007测试集中,我们仅仅通过将我们的模块放在现有的一次性检测器[30]之上就实现了最先进的性能。
Convolutional Block Attention Module
给定一个中间特征图
作为输入,CBAM依次推导出一个一维通道注意图
和一个二维空间注意图
,如图1中所示。整个注意过程可以概括为
其中
$$\otimes$$
表示元素相乘。在乘法过程中,注意力值被相应地广播(复制):通道注意力值沿着空间维度广播,反之亦然。F''是最终的精炼输出。图2描述了每个注意图的计算过程。下面描述每个注意模块的细节。
通道关注模块。我们通过利用特征的通道间关系来产生一个通道关注图。由于特征图的每个通道都被认为是一个特征检测器[31],通道注意力集中在输入图像的 "什么 "是有意义的。为了有效地计算通道注意力,我们压缩了输入特征图的空间维度。对于空间信息的聚合,到目前为止,通常采用平均池化。Zhou等人 [32]建议使用它来有效地学习目标对象的范围,Hu等人[28]在他们的注意力模块中采用它来计算空间统计数据。除了以前的工作,我们认为最大池化收集了另一个关于独特的物体特征的重要线索,以推断出更精细的channel-wise的注意力。因此,我们同时使用平均池化和最大池化的特征。我们从经验上证实,利用这两个特征比独立使用这两个特征能极大地提高网络的表示能力(见第4.1节),显示了我们设计选择的有效性。我们在下方描述了细节操作。
我们首先通过使用平均池化和最大池操作来聚合特征图的空间信息,生成两个不同的空间背景描述符:
$$F_c and F_c$$
,分别表示平均池化的特征和最大池化的特征。然后,这两个描述符被转发到一个共享网络,以产生我们的通道注意图
。该共享网络由多层感知器(MLP)组成,有一个隐藏层。为了减少参数开销,隐藏的激活大小被设置为
,其中r是减少率。在共享网络应用于每个描述符后,我们使用元素相加法合并输出特征向量。简而言之,通道注意力的计算方法为:
其中σ表示sigmoid函数,
请注意,MLP的权重W0和W1对两个输入都是共享的,ReLU激活函数的后面是W0。
空间注意模块。我们通过利用特征的空间间关系来生成空间注意图。与通道注意不同,空间注意关注的是 "哪里 "是一个信息部分,它是对通道注意的补充。为了计算空间注意力,我们首先沿通道轴应用平均集合和最大集合操作,并将它们连接起来,以生成一个有效的特征描述符。沿着通道轴应用集合操作被证明在突出信息区域方面是有效的[33]。在串联后的特征描述符上,我们应用一个卷积层来产生一个空间注意图
它编码强调或压缩的位置。我们在下面描述详细的操作。
我们通过使用两个池化操作来汇总特征图的通道信息,生成两个二维图:
每张图都表示跨通道的平均池化的特征和最大池化的特征。然后,这些特征图被一个标准的卷积层串联和卷积,产生我们的二维空间注意力地图。简而言之,空间注意力的计算方法是:
其中σ表示sigmoid函数,
$$f^{7\times 7}$$
表示卷积核大小为7×7的卷积
注意模块的安排。给定一个输入图像,两个注意力模块,通道和空间,计算互补的注意力,分别集中在 "什么 "和 "哪里"。考虑到这一点,两个模块可以以平行或顺序的方式放置。我们发现,顺序排列比平行排列能得到更好的结果。对于顺序过程的安排,我们的实验结果表明,通道优先的顺序比空间优先的顺序略好。我们将在第4.1节讨论网络工程的实验结果。
4.实验
我们在标准基准上评估CBAM:ImageNet-1K用于图像分类;MS COCO和VOC 2007用于物体检测。为了进行更好的比较,我们在PyTorch框架[35]中重现了所有被评估的网络[5- 7, 34, 28],并在整个实验中报告我们重现的结果。
为了彻底评估我们最终模块的有效性,我们首先进行了大量的消融实验。我们验证了CBAM比所有的baseline表现更好,证明了CBAM在不同架构和不同任务中的普遍适用性。人们可以将CBAM无缝地集成到任何CNN架构中,并共同训练联合的CBAM增强的网络。图3显示了CBAM与ResNet[5]中的ResBlock集成的示意图,作为一个例子。
4.1 消融实验
在本小节中,我们以经验的方式展示我们的设计选择的有效性。在这个消融研究中,我们使用ImageNet-1K数据集并采用ResNet-50[5]作为基础架构ImageNet-1K分类数据集[1]包括120万张用于训练的图像和5万张用于验证的1000个物体类别。我们采用与[5, 36]相同的数据增强方案进行训练,并在测试时应用大小为224224的单作物评估。学习率从0.1开始,每30个epochs下降一次。我们对网络进行了90个历时的训练。按照[5, 36, 37],我们报告验证集的分类误差。
我们的模块设计过程分为三个部分。我们首先寻找有效的方法来计算通道注意力,然后是空间注意力。最后,我们考虑如何结合通道和空间注意力模块。我们在下面解释每个实验的细节。
通道注意。我们通过实验验证了使用平均池化和最大池化的特征能够实现更精细的注意力推断。我们比较了通道注意力的3种变体:平均池化、最大池化和联合使用两种池化。请注意,具有平均池的通道注意力模块与SE[28]模块相同。另外,当使用两种池子时,我们使用一个共享的MLP来进行注意力推断,以节省参数,因为两个聚合的通道特征都位于相同的语义嵌入空间。我们在这个实验中只使用通道注意力模块,并且我们将还原率固定为16。
表1显示了各种池化方法的实验结果。我们观察到,最大池化的特征与平均池化的特征一样有意义,和基准相比看准确率提高了多少。然而,在SE[28]的工作中,他们只利用了平均池化的特征,错过了重要的最大池化特征。我们认为,对最突出部分的程度进行编码的最大集合特征可以补偿对全局统计数据进行柔和编码的平均集合特征。因此,我们建议同时使用这两种特征,并对这些特征应用一个共享网络。然后,共享网络的输出通过元素相加的方式进行合并。我们的经验表明,我们的通道关注方法是一种有效的方法,可以在不增加可学习参数的情况下将性能进一步推到SE[28]。作为一个简单的结论,我们在下面的实验中,在我们的通道注意模块中同时使用了平均和最大集合的特征,还原率为16。
空间注意力。考虑到通道精炼的特征,我们探索一种有效的方法来计算空间注意力。该设计理念与信道注意力分支是对称的。为了生成一个二维空间注意图,我们首先计算一个二维描述符,在所有空间位置的每个像素上编码通道信息。然后,我们将一个卷积层应用于二维描述符,得到原始的注意力图。最终的注意力图被sigmoid函数归一化。
我们比较了生成二维描述符的两种方法:在通道上使用平均和最大池化的通道集合,以及将通道维度减少为1的标准1×1卷积。此外,我们还研究了在接下来的卷积层中卷积核大小的影响:核大小为3和7。在实验中,我们把空间注意力模块放到前面设计的通道注意力模块后面,因为最终的目标是将两个模块一起使用。
表2显示了实验结果。我们可以观察到,通道汇集产生了更好的准确性,表明显式建模的汇集导致了更精细的注意力推断,而不是可学习的加权通道汇集(实现为1×1卷积)。在不同卷积核大小的比较中,我们发现采用较大的核大小在两种情况下都能产生更好的准确性。这意味着在决定空间上的重要区域时,需要一个宽阔的视野(即大的感受野)。考虑到这一点,我们采用通道汇集法和大核大小的卷积层来计算空间注意力。在一个简短的结论中,我们使用了通道轴上的平均和最大集合特征,卷积核大小为7作为我们的空间注意模块。
通道和空间注意的排列。在这个实验中,我们比较了通道和空间注意子模块的三种不同的安排方式:顺序的通道-空间,顺序的空间-通道,以及两种注意模块的平行使用。由于每个模块都有不同的功能,顺序可能会影响整体性能。例如,从空间的角度来看,通道注意是全局性的,而空间注意则是局部性的。
另外,我们很自然地想到,我们可以把两个注意力输出结合起来,建立一个三维注意力图。在这种情况下,两种注意力可以并行应用,然后将两个注意力模块的输出相加,并用sigmoid函数进行归一化。
表3总结了不同注意力安排方法的实验结果。从结果中我们可以发现,按顺序生成的注意力图比平行进行的注意力图更精细。此外,通道优先的顺序比空间优先的顺序表现得略好。请注意,所有的排列方法都优于只独立使用通道注意力,这表明利用两种注意力是至关重要的,而最佳排列策略进一步推动了性能。
最后的模块设计。在整个消融研究中,我们设计了通道注意模块、空间注意模块和两个模块的排列。我们的最终模块如图1和图2所示:我们为通道和空间注意模块选择了平均和最大集合;我们在空间注意模块中使用了核大小为7的卷积;我们按顺序排列通道和空间子模块。我们最终的模块(即ResNet50 + CBAM)实现了22.66%的顶级错误,这比SE[28](即 ResNet50 + SE),如表4所示。
4.2 ImageNet-1K上的图像分类
我们进行了ImageNet-1K分类实验来严格评估我们的模块。我们遵循第4.1节中规定的相同协议,并且在各种各样的网络结构中评估了我们的模型,包括ResNet[5],WideResNet[6],以及ResNext[7]。
表4总结了实验结果。带有CBAM的网络表现明显优于所有基线,表明CBAM可以在大规模数据集中的各种模型上有很好的泛化能力。此外,采用CBAM的模型在最强的方法之一--SE[28]的基础上提高了准确性,SE是ILSVRC 2017分类任务的获胜方法。这意味着我们提出的方法是强大的,显示了新的集合方法的功效,产生了更丰富的描述符和空间注意力,有效地补充了通道注意力。
图4描述了ImageNet-1K训练期间各种网络的误差曲线。我们可以清楚地看到,我们的方法在两个误差图中表现出最低的训练和验证误差。这表明,与SE相比,CBAM在提高基线模型的泛化能力方面有更大的能力[28]。
我们还发现,CBAM的整体开销在参数和计算方面都相当小。这促使我们将我们提出的模块CBAM应用于轻量级网络MobileNet[34]。表5总结了我们在MobileNet架构基础上进行的实验结果。我们将CBAM放在两个模型上,基本模型和容量减少模型(即 将宽度乘数()调整为0.7)。我们在表4中观察到了相似的现象。CBAM不仅大大提升了基线的准确性,而且还有利地改善了SE的性能[28]。这表明CBAM在低端设备上应用的巨大潜力。
4.3 使用Grad-CAM的网络可视化[18]
为了进行定性分析,我们使用ImageNet验证集的图像将Grad-CAM[18]应用于不同的网络。Grad-CAM是最近提出的一种可视化方法,它使用梯度来计算卷积层中空间位置的重要性。由于梯度是相对于一个独特的类别计算的,Grad-CAM的结果清楚地显示了出席区域。通过观察网络认为对预测一个类别很重要的区域,我们试图看一下这个网络是如何很好地利用特征的。我们将CBAM集成网络(ResNet50 + CBAM)的可视化结果与基线(ResNet50)和SE集成网络(ResNet50 + SE)进行比较。
图5说明了可视化的结果。图中还显示了一个目标类的softmax分数。在图5中,我们可以清楚地看到,CBAM集成网络的Grad-CAM掩码比其他方法更能覆盖目标对象区域。也就是说,CBAM集成网络能够很好地学习利用目标对象区域的信息,并从这些信息中聚集特征。目标检测分数也相应增长。从观察结果来看,我们猜测CBAM的特征细化过程最终会导致网络很好地利用给定的特征。
4.4 MS COCO物体检测
我们在微软COCO数据集[3]上进行物体检测。该数据集包括8万张训练图像("2014 train")和4万张验证图像("2014 val")。从0.5到0.95的不同IoU阈值的平均mAP被用于评估。根据[38, 39],我们使用所有的训练图像以及验证图像的子集来训练我们的模型,拿出5000个例子进行验证。我们的训练代码是基于[40],我们对网络进行了490K次迭代的训练,以获得快速的性能验证。我们采用Faster-RCNN[41]作为我们的检测方法,采用ImageNet预训练的ResNet50和ResNet101[5]作为我们的基线网络。在这里,我们感兴趣的是通过将CBAM插入基线网络来提高性能。由于我们在所有的模型中使用相同的检测方法,收益只能归因于我们的模块CBAM所带来的增强的表示能力。如表6所示,我们观察到基线的明显改进,证明了CBAM在其他识别任务上的通用性能。
4.5 VOC 2007物体检测
我们进一步对PASCAL VOC 2007测试集进行实验。在这个实验中,我们将CBAM应用于检测器,而之前的实验(表6)将我们的模块应用于基础网络。我们采用StairNet[30]框架,它是基于SSD[39]的最强的多尺度方法之一。
在实验中,我们在我们的PyTorch平台上重现了SSD和StairNet,以便准确估计CBAM的性能改进,并分别达到77.8%和78.9%的mAP@.5,这比原始论文中报告的准确率要高。然后,我们将SE[28]和CBAM放在每个分类器之前,在预测前提炼出由上采样的全局特征和相应的局部特征组成的最终特征,强制模型只适应性地选择有意义的特征。我们在VOC 2007训练集和VOC 2012训练集("07+12")的联合上训练所有模型,并在VOC 2007测试集上进行评估。训练的总次数为250次。我们使用0.0005的权重衰减和0.9的动量。在所有的实验中,为了简单起见,输入图像的大小被固定为300。
实验结果总结在表7中。我们可以清楚地看到,CBAM改善了所有具有两个骨干网络的强基线的准确性。请注意,CBAM的准确率提高是以可忽略不计的参数开销来实现的,这表明提高准确率不是由于天真的容量增加,而是由于我们有效的特征细化。此外,使用轻量级骨干网络[34]的结果再次表明,CBAM可以成为低端设备的一个有趣方法