摘要

本文提出了卷积块注意模块(CBAM),这是一种简单而有效的前馈卷积神经网络注意模块。在给定中间特征图的情况下,我们的模块沿着通道和空间两个不同的维度顺序地推断关注图,然后将关注图与输入特征图相乘以进行自适应特征细化。由于CBAM是一个轻量级的通用模块,它可以无缝地集成到任何CNN架构中,而开销可以忽略不计,并且可以与基本CNN一起进行端到端的训练。我们通过在ImageNet-1K、MS Coco检测和VOC 2007检测数据集上的大量实验来验证我们的CBAM。我们的实验表明,各种模型在分类和检测性能上都有一致的改善,证明了CBAM的广泛适用性。代码和模型将公开提供。

一、引言

除了这些因素,我们还研究了架构设计的另一个方面–注意力。注意的意义在以前的文献中已被广泛研究。注意力不仅告诉我们应该把重点放在哪里,它还能改善兴趣的表现。我们的目标是通过使用注意机制来增加表征能力:专注于重要特征,抑制不必要的特征。本文提出了一种新的网络模块,称为卷积块注意模块。由于卷积运算通过将跨通道和空间信息混合在一起来提取信息特征,因此我们采用我们的模块来强调沿通道和空间轴这两个主要维度的有意义的特征。为了实现这一点,我们顺序地应用了通道和空间注意模块(如图1所示),以便每个分支可以分别学习在通道和空间轴上参加什么和在哪里参加。因此,我们的模块通过学习强调或抑制哪些信息来有效地帮助网络中的信息流动。

在ImageNet-1K数据集中,通过插入我们的小模块,我们从不同的基线网络获得了精度的提高,显示了CBAM的有效性。我们使用GRAD-CAM可视化训练的模型,并观察到CBAM增强网络比其基线网络更恰当地聚焦于目标对象。考虑到这一点,我们推测性能的提升来自于对无关杂波的准确关注和降噪。最后,我们在MS Coco和VOC 2007数据集上验证了目标检测的性能改进,展示了CBAM的广泛适用性。由于我们精心设计了轻量级的模块,因此在大多数情况下,参数和计算的开销可以忽略不计。

我们的主要贡献有三个方面:

  • 我们提出了一种简单而有效的注意模块(CBAM),可以广泛应用于提高CNN的表征能力。
  • 我们通过广泛的消融研究来验证我们的注意力模块的有效性。
  • 我们通过插入我们的轻量级模块,验证了在多个基准测试(ImageNet-1K、MS Coco和VOC 2007)上,各种网络的性能都得到了极大的提高。

二、相关工作

2.1 Network engineering

网络工程一直是视觉研究中最重要的课题之一,因为良好的网络设计保证了各种应用的显著性能提升。自从大规模CNN的成功实施以来,已经提出了广泛的架构。一种直观而简单的扩展方法是增加神经网络的深度。Szegdy等人引入使用多分支机构体系结构的深度启动网络,其中每个分支机构都经过仔细定制。虽然由于梯度传播的困难而导致深度的天真增加达到饱和,但是ResNet提出了一种简单的恒等式跳跃连接来简化深层网络的优化问题。基于ResNet体系结构,已经开发了各种模型,如WideResNet、初始ResNet和ResNeXt。WideResNet提出了一种具有更多卷积滤波器和更小深度的残差网络。金字塔网是WideResNet的严格推广,其中网络的宽度逐渐增加。ResNeXt建议使用分组卷积,并表明基数越大,分类精度越高。黄等人提出一种新的架构–DenseNet。它迭代地连接输入特征和输出特征,使每个卷积块能够接收来自所有先前块的原始信息。虽然目前的大多数网络工程方法主要针对深度、宽度和基数三个因素,但我们关注的是另一个方面,即注意力,这是人类视觉系统的奇特方面之一。

2.2 注意力机制

众所周知,注意力在人类感知中起着重要作用。人类视觉系统的一个重要特性是,一个人不会试图一次处理整个场景。取而代之的是,为了更好地捕捉视觉结构,人类利用一系列局部瞥见,并选择性地聚焦于显著的部分。

最近,已经有几种尝试来结合注意处理来提高CNN在大规模分类任务中的性能。Wang等人提出了一种使用编解码式注意力模块的剩余注意力网络。通过改进特征映射,网络不仅性能良好,而且对噪声输入具有很强的鲁棒性。我们没有直接计算3D注意图,而是将学习通道注意和空间注意的过程分别分解,3D特征地图的单独注意力生成过程具有更少的计算量和参数,因此可以用作现有基本CNN架构的即插即用模块。

更接近我们的工作,胡等人引入紧凑模块来利用渠道间关系。在他们的挤压和激发模块中,他们使用全局平均汇集特征来计算通道方面的注意力。然而,为了推断细微的通道注意,我们发现这些都是次优特征,并且我们建议也使用最大集合特征,空间注意力在决定将注意力集中在哪里方面发挥着重要作用。在我们的CBAM中,我们基于一个有效的体系结构同时利用空间和通道方面的注意,并经验验证了利用两者都优于只使用通道方面的注意。实验结果表明,该模型在MS-COCO和VOC检测任务中是有效的。特别是,我们只需将我们的模块放在VOC2007测试集中现有的单次发射探测器上,就可以获得最先进的性能。

三、CBAM

3.1 通道注意力

我们通过利用特征之间的通道间关系来生成通道注意图。由于特征图的每个通道被认为是特征检测器,因此通道注意力集中在给定输入图像的有意义的东西上。为了有效地计算通道注意力,我们对输入特征映射的空间维度进行了压缩。对于空间信息的聚集,到目前为止,普遍采用的是平均汇集。周等人建议使用它来有效地了解目标对象的范围和胡等人的意见,在他们的注意力模块中使用它来计算空间统计。除了前人的工作,我们认为,最大汇集收集了关于不同对象特征的另一条重要线索,以推断更精细的通道智能注意。因此,我们同时使用平均池化和最大池化功能。我们的经验证实,利用这两个功能大大提高了网络的表示能力,而不是单独使用每个功能,显示了我们设计选择的有效性。我们将在下面描述详细的操作。

我们首先使用平均池化和最大池化操作来聚合要素地图的空间信息,生成两种不同的空间上下文描述符:FC avg和FC max,它们分别表示平均池化要素和最大池化要素。然后将这两个描述符转发到一个共享网络,以产生我们的信道注意图Mc∈Rc×1×1。该共享网络由具有一个隐层的多层感知器组成。为了减少参数开销,将隐藏激活大小设置为rc/r×1×1,其中r是缩减比。在将共享网络应用于每个描述符之后,我们使用逐元素求和来合并输出的特征向量。简而言之,渠道关注度计算如下:



3.2 空间注意力

我们利用特征之间的空间关系来生成空间注意图。与通道注意不同的是,空间注意集中在哪里是一个信息性的部分,是对通道注意的补充。为了计算空间注意力,我们首先沿着信道轴应用平均池化和最大池化操作,并将它们连接在一起来生成有效的特征描述符。沿通道轴应用汇集操作在突出显示信息区域方面是有效的[33]。我们使用一个卷积层生成空间注意图MS(F)∈RxH×W,它编码了强调或抑制的位置。

我们通过使用两个池化操作来聚合特征映射的信道信息,生成两个2D映射:FS Avg∈R1×H×Wand Fmax∈R1×H×W。每个映射表示平均池化特征和跨信道的最大池化特征。然后,这些被一个标准的卷积层连接和卷积,产生我们的2D空间注意图。简而言之,空间注意力的计算公式为:

给出一张输入图像,两个注意力模块,通道和空间,计算互补的注意力,分别关注“什么”和“在哪里”。考虑到这一点,可以以并行或顺序的方式放置两个模块。我们发现,顺序排列比平行排列给出了更好的结果。对于顺序过程的安排,我们的实验结果表明,通道优先顺序略好于空间优先顺序。我们将讨论SEC在网络工程方面的实验结果4.1.

四、实验

我们根据标准基准对CBAM进行评估:ImageNet-1K用于图像分类;MS Coco和VOC 2007用于目标检测。为了更好地进行苹果与苹果的比较,我们在PyTorch框架[35]中复制了所有评估的网络[5-7,34,28],并在整个实验中报告了我们的复制结果。

为了彻底评估我们最后一个模块的有效性,我们首先进行广泛的消融实验。然后,我们验证了CBAM的性能优于所有基线,没有花哨之处,展示了CBAM在不同体系结构和不同任务中的普遍适用性。人们可以无缝地将CBAM集成到任何CNN架构中,并联合训练组合后的CBAM增强网络。图3显示了与ResNet[5]中的ResBlock集成的CBAM示意图。

4.1 消融实验

在这一小节中,我们将实证地展示我们的设计选择的有效性。对于本消融研究,我们使用ImageNet-1K数据集,并采用ResNet-50[5]作为基础架构。ImageNet-1K分类数据集[1]由120万张用于训练的图像和5万张用于验证的图像与1,000个对象类组成。我们采用与[5,36]相同的数据增强方案进行训练,并在测试时采用大小为224×224的单作物评估。学习率从0.1开始,每30个纪元下降一次。我们为90个时代训练网络。在[5,36,37]之后,我们报告验证集上的分类错误。

我们的模块设计流程分为三个部分。我们首先寻找计算通道注意的有效方法,然后再寻找计算空间注意的方法。最后,我们考虑了如何将通道和空间注意模块结合起来。下面我们对每个实验的细节进行解释。

Channel attention.

我们通过实验验证了使用平均池和最大池特征能够更好地进行注意力推断。我们比较了渠道注意力的三种变种:平均池、最大池和两种池的联合使用。请注意,平均合用的通道注意模块与SE[28]模块相同。此外,当使用两个池时,我们使用共享的MLP来进行注意力推理以节省参数,因为两个聚集的通道特征位于相同的语义嵌入空间中。在本实验中,我们只使用通道注意模块,并将缩减比率固定为16。


Spatial attention.

在给定通道细化特征的情况下,我们探索了一种计算空间注意的有效方法。设计理念与渠道注意力分支是对称的。为了生成2D空间注意力图,我们首先计算2D描述符,该描述符编码所有空间位置上每个像素的通道信息。然后,我们将一个卷积层应用到2D描述符,获得原始的关注图。用Sigmoid函数对最终的注意力图进行归一化。

Arrangement of the channel and spatial attention.

在本实验中,我们比较了三种不同的通道和空间注意模块的排列方式:顺序通道-空间、顺序空间-通道以及两个注意模块的并行使用。由于每个模块具有不同的功能,因此顺序可能会影响整体性能。例如,从空间的角度来看,通道注意是全局应用的,而空间注意是局部工作的。此外,人们很自然地认为,我们可以将两个注意力输出组合在一起来构建3D注意力地图。在这种情况下,两个注意力模块可以并行应用,然后将两个注意力模块的输出相加并用Sigmoid函数进行归一化。

表3总结了不同注意安排方法的实验结果。从结果中我们可以发现,顺序地生成注意图比并行地生成更精细的注意图。此外,通道优先顺序的性能略好于空间优先顺序。值得注意的是,所有的安排方法都优于单独使用通道注意的情况,这表明利用这两种注意是至关重要的,而最佳的安排策略会进一步推动绩效。

最终模块设计

在消融研究中,我们设计了通道注意模块、空间注意模块以及这两个模块的排列方式。我们的最后一个模块如图1和图2所示:我们为通道和空间注意模块选择平均和最大汇集;在空间注意模块中使用核大小为7的卷积;我们按顺序排列通道和空间子模块。最后一个模块(即ResNet50+CBAM)的TOP-1误差为22.66%,远低于SE28,如表4所示

4.2 基于ImageNet-1K的图像分类

4.3 MS Coco对象检测

我们在Microsoft Coco数据集[3]上进行了目标检测。该数据集包括80K个训练图像(“2014个列车”)和40K个验证图像(“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.4 VOC 2007目标检测

我们进一步在Pascal VOC 2007测试集上进行了实验。在这个实验中,我们将CBAM应用于检测器,而以前的实验(表6)将我们的模块应用于基本网络。我们采用了基于SSD[39]的最强多尺度方法之一的STEIRNet[30]框架。在实验中,我们在我们的PyTorch平台上重现了SSD和StairNet,以准确地估计CBAM的性能改进,分别达到了77.8%和78.9%的MAP@.5,比原始论文中报告的准确率有所提高。然后,我们将SE[28]和CBAM放在每个分类器之前,在预测之前提炼由上采样的全局特征和相应的局部特征组成的最终特征,强制模型自适应地只选择有意义的特征。我们在VOC 2007 Trainval和VOC 2012 Trainval(“07+12”)的联合集上训练了所有模型,并在VOC 2007测试集上进行了评估。培训周期总数为250个。我们使用0.0005的权重衰减和0.9%的动量。在所有的实验中,为了简单起见,输入图像的大小固定为300。

实验结果总结如表7。我们可以清楚地看到,CBAM提高了所有具有两个骨干网络的强基线的精度。值得注意的是,CBAM的准确率提高伴随着可以忽略的参数开销,这表明这种改进不是由于朴素的容量增加,而是因为我们有效的特征细化。此外,使用轻量级主干网络[34]的结果再次表明,CBAM可以成为低端设备感兴趣的方法。

五、结论

提出了一种提高CNN网络表示能力的新方法–卷积瓶颈注意模块。我们采用了两个不同的模块–通道和空间–基于注意力的特征求精,在保持较小开销的情况下取得了相当大的性能提升。对于通道注意力,我们建议使用最大集合特征和平均集合特征,从而产生比SE更好的注意[28]。我们通过利用空间注意进一步推动性能的提高。我们的最后一个模块(CBAM)学习什么以及在哪里强调或抑制,并有效地提炼中间特征。为了验证其有效性,我们使用各种最先进的模型进行了广泛的实验,并确认CBAM在三个不同的基准数据集上的表现优于所有基线:ImageNet-1K、MS Coco和VOC 2007。此外,我们还直观地展示了该模块如何准确地推断给定的输入图像。有趣的是,我们观察到我们的模块引导网络正确地聚焦于目标对象。我们希望CBAM成为各种网络体系结构的重要组成部分。

【CBAM 解读】混合注意力机制:Convolutional Block Attention Module相关推荐

  1. 论文研读2018:卷积中的注意力和keras实现。CBAM: Convolutional Block Attention Module

    文章目录 Abstract 1 Introduction 2 Related Work 3 Convolutional Block Attention Module Channel attention ...

  2. 白话详细解读(七)----- CBAM:Convolutional Block Attention Module

    一.CBAM简介 论文链接:https://x.sci-hub.org.cn/scholar?hl=zh-TW&as_sdt=0%2C5&q=CBAM%3A+Convolutional ...

  3. CBAM(Convolutional Block Attention Module)

    目录 总体介绍 CBAM(Convolutional Block Attention Module )模块 CAM(Channel attention module) SAM(Spatial atte ...

  4. CBAM CBAM: Convolutional Block Attention Module

    #https://blog.csdn.net/u011699990/article/details/81276851?utm_medium=distribute.pc_relevant.none-ta ...

  5. CBAM: Convolutional Block Attention Module

    CBAM: Convolutional Block Attention Module 1. 摘要 作者提出了一个简单但有效的注意力模块 CBAM,给定一个中间特征图,我们沿着空间和通道两个维度依次推断 ...

  6. CVPR 2021 |针对强时序依赖,即插即用、混合注意力机制的 ACTION 模块

    本文是对我们 CVPR 2021 接收的工作 "ACTION-Net: Multipath Excitation for Action Recognition" 的介绍.主要针对强 ...

  7. CVPR 2021 | 用于动作识别,即插即用、混合注意力机制的 ACTION 模块

    分享一篇来自 CVPR 2021 的文章,ACTION-Net: Multipath Excitation for Action Recognition.作者单位:都柏林圣三一大学,字节跳动 AI L ...

  8. 计算机视觉中的注意力机制(Visual Attention)

    ,欢迎关注公众号:论文收割机(paper_reader) 原文链接:计算机视觉中的注意力机制(Visual Attention) 本文将会介绍计算机视觉中的注意力(visual attention)机 ...

  9. 一文读懂——全局注意力机制(global attention)详解与代码实现

    废话不多说,直接先上全局注意力机制的模型结构图. 如何通过Global Attention获得每个单词的上下文向量,从而获得子句向量呢?如下几步: 代码如下所示: x = Embedding(inpu ...

最新文章

  1. k8s 自定义dns_K8S 生态周报| Docker v19.03.10 正式发布
  2. 跨域cookie传递
  3. SQL查询入门(上篇)
  4. java多个数求和_Java:多个数求和
  5. 【重复制造精讲】REM Pull List 拉料单简介
  6. redhat 添加ssh端口_RHEL 7修改ssh默认端口号
  7. AUTOSAR从入门到精通100讲(三)-基于UDS服务的BootLoader架构和刷写流程
  8. python如何获取url中的内容_python怎么提取url中的参数
  9. c语言wpf99乘法表,使用JSP输出九九乘法表
  10. c# 计算空格宽度像素_分享计算机视觉之图像处理Python之opencv
  11. postman 配置统一的ip地址
  12. 获取三角形外接圆的圆心坐标、半径
  13. wow Warlock shushia
  14. js 一串数字1403149534转换为日期格式
  15. Centos安装google浏览器01
  16. 计算机等级考试考几级才能成为数据库工程师?
  17. Xshell实现windows上传文件到Linux系统
  18. mysql中锁原理及for update悲观锁的详解
  19. Manjaro Linux 17.0.2 KDE环境安装、配置记录
  20. 黑马在线教育数仓实战1

热门文章

  1. Go语言自学系列 | golang函数的返回值
  2. C++异常中的堆栈跟踪
  3. 2020T电梯修理考试题及T电梯修理考试软件
  4. 《小岛经济学》:从小岛的故事讲解经济学
  5. 这一年,那一年,三年总结
  6. toString方法
  7. CSDN Themes Design BY Emerald 绿色学院 - Green Institute
  8. halcon-通过视觉提取血管造影中血管并测量直径
  9. python元组和列表字典_Python【列表 字典 元组】
  10. Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据