论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录

  • 1.Introduction
  • 2.Convolutional Block Attention Module
  • Experiments
  • Conclusion


  论文题目:CBAM: Convolutional Block Attention Module(CBAM:卷积注意力机制)
  论文链接:点击跳转
  代码链接:Github
  论文目的:卷积注意力模块(CBAM)是一种前馈卷积神经网络注意力模块。给定一个中间特征图,CBMA会沿着两个单独的维度(通道和空间)顺序推断注意力图,然后将注意力图乘以输入特征图进行自适应特征细化。并且,CBAM是一个轻量级的通用模块,它可以无缝集成到任何CNN架构中。

1.Introduction

计算机视觉中的注意力机制
  注意力一种非常常见的能力,比如天空一只鸟飞过去的时候,往往注意力会追随着鸟儿,天空在视觉系统中,自然成为了一个背景信息。一般的神经网络识别物体是通过大量数据训练出来的能力,如一个神经网络如果见过大量的手写数字,那么这个神经网络是能够识别出一个新的手写数字代表的数值的。但这样的网络对图片的全部特征其实是等价处理的(没有前景、背景,重要、不重要之分,而仅仅特征提取整张图片进行识别),模型并不能将关注度的重点放在某一特定的区域。
  事实上,注意力机制是一种让模型在处理信息时能够“集中注意力”的技术,模仿了人类的注意力过程,使模型能够聚焦于输入数据的重要部分,忽略掉不重要的细节,从而更高效且准确地提取关键信息。在模型中一般使用掩码来形成注意力机制,即,训练后的模型能将图片数据中关键的特征(需要关注的区域)通过掩码标注处理,就可认为模型具备了注意力机制。
注意力机制可分为两种:

  • 软注意力机制:确定的注意力机制,完成后直接可以通过网络生成,其更加注意空间或通道。
  • 强注意力机制:不确定的注意力机制,更加关注点,即图像中的每个点都有可能延伸出注意力,同时强注意力是一个随机的预测过程,更强调动态变化。强注意力机制往往通过增强学习获得。

软注意力机制可根据研究的数据分为空间域、通道域、时间域,本研究仅涉及空间域、通道域。

  卷积运算本质是通过将跨通道和空间信息混合在一起来提取信息特征的,本研究提出的卷积注意力模块(CBMA)同样也强调这两个主要维度的意义特征。以下是空间域(Spatial Domain)、时间域(Channel Domain)的含义:

  • 空间域:空间域指关注对象的位置特性,通过空间变换模块将原始图片中的空间信息变换到另一个空间(坐标系)中并保存。
    • (a)列:原始图像。
    • (b)列:通过注意力机制学习到的目标边界框信息,表明在转换时要将哪些关键信息进行保留。
    • ©列:经过空间转换模块后得到的特征图,与原始输入相比,旋转的图片被复原,有噪声的区域也被略去,于是再通过©列进行识别。

在这里插入图片描述

  • 通道域:对经过卷积得到的特征图的每一层,乘以不同的权重,表示该层表示的特征对于关键信息的关联程度和重要程度,相应的,权重越大,表示该层表示的信息对于关键信息越重要。SeNet是典型的注意力机制模型,得到一个C维卷积层后,通过挤压函数,激励函数,尺度函数,得到每一维的权重,对应乘到不同通道的值上,得到新的特征。

在这里插入图片描述
  本研究提出的CBAM模块依次用到注意力机制的通道域和空间域模块,通过这两个模块可得到细化后的重要特征信息,而忽视无关特征,使得网络有了学习特征含义(通道域)、特征位置(空间域)的能力,也让网络在测试新图像数据时,更好地知道哪些信息需要强调,哪些信息需要抑制。CBAM机制如下:
在这里插入图片描述
  文章三大贡献:

  • 1.提出了一种简单而有效的注意力模块(CBAM),可以广泛应用于提高CNN的性能。
  • 2.通过消融研究验证了注意力模块的有效性。
  • 3.在多个基准模型(ImageNet-1K、MS COCO和VOC 2007)上插入了CBAM模块,证明各种网络的性能得到显著提升。

2.Convolutional Block Attention Module

  由上文可知,注意力机制不仅告诉你应该关注哪里,而且还会提升关键区域的特征表达。这也与识别的目标一致,只关注重要的特征而抑制或忽视无关特征,由此提出CBAM网络(Convolutional Block Attention Module)。CBAM的执行流程为,设中间特征图为 F F F,其尺寸为 ( C , H , W ) (C,H,W) (C,H,W),表示如下:
在这里插入图片描述
之后,CBAM通过运算依次得到一维的通道注意力图 M c M_c Mc和二维的空间注意力图 M s M_s Ms,二者可通过以下计算分别得到经过通道注意力图细化后的特征图 F ′ F' F和经过空间注意力图细化后的特征图 F ′ ′ F'' F′′
在这里插入图片描述
其中, ⊗ ⊗ 表示对应元素相乘,并且 F ′ ′ F'' F′′是在 F ′ F' F的基础上得到的。具体查看通道域的注意力模块和空间域的注意力模块实现过程。

【通道域注意力模块】
在这里插入图片描述
  利用特征的通道间关系来生成通道注意力图。事实上,特征图的每个通道都被视为特征检测器,通道注意力集中在给定输入图像的“什么”是有意义的。为了有效地计算通道注意力、聚合空间信息,本研究采用平均池化操作压缩了输入特征图的空间维度。

  • 输入:大小为 ( C , H , W ) (C,H,W) (C,H,W)的特征图。
  • 输出:大小为 ( C , 1 , 1 ) (C,1,1) (C,1,1)的通道注意力图。
  • 操作:
    • 1.对输入的特征图分别执行平均池化和最大值池化聚合空间信息,得到两个C维池化特征图 F a v g F_{avg} Favg F m a x F_{max} Fmax
    • 2.将 F a v g F_{avg} Favg F m a x F_{max} Fmax送入包含一个隐藏层的多层感知机MLP中,得到两个大小为 ( C , 1 , 1 ) (C,1,1) (C,1,1)的通道注意力图。为减少参数量,隐层神经元的个数为 C / r C/r C/r r r r也被称作压缩比。
    • 3.将经过MLP得到的两个通道注意力图进行对应元素相加,激活,得到最终的通道注意力图 M c M_c Mc

在这里插入图片描述
平均池化、最大池化的作用:池化操作可用于聚合空间信息(即消除不必要的空间信息,缩缩小图像尺寸,更加专注通道特征),一般较为流行的是采用平均池化,但作者认为最大池化会收集到不同于平均池化的、关于不同目标特征的表示,这对于后续得到更精细的注意力通道图是有帮助的。后续实验结果也证实这一观点:

在这里插入图片描述
MLP的结构:本文使用只有一个隐藏层的MLP,使用 w 0 w_0 w0 w 1 w_1 w1表示隐层权重和输出层权重,事实上二者的参数是共享的:
在这里插入图片描述
  总之,通道注意力模块更关注的是“What”属性,也就是什么是对于后续处理有意义的。经过通道注意力模块运算后,得到的是一个 1 x 1 x C 1x1xC 1x1xC的通道注意力图,图上每一维的权重,表示该维对应的特征图层中,对于关键信息的重要程度和关联程度。

class ChannelAttention(nn.Module):"""CBAM混合注意力机制的通道注意力"""def __init__(self, in_channels, ratio=16):#ratio表压缩比super(ChannelAttention, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.max_pool = nn.AdaptiveMaxPool2d(1)self.fc = nn.Sequential(全连接层nn.Linear(in_planes, in_planes // ratio, bias=False),nn.ReLU(),nn.Linear(in_planes // ratio, in_planes, bias=False))self.sigmoid = nn.Sigmoid()	#对生成的通道注意力权重应用Sigmoid激活函数,将权重限制在0到1之间。def forward(self, x):avg_out = self.fc(self.avg_pool(x))max_out = self.fc(self.max_pool(x))out = avg_out + max_outout = self.sigmoid(out)		#out表通道注意力图return out * x 				#返回F'

【空间注意力模块】
在这里插入图片描述
  利用特征的空间关系来生成空间注意力图。与通道注意力不同,空间注意力侧重于“何处”这一信息性部分,与渠道注意力相辅相成。为了计算空间注意力,我们首先沿通道轴应用平均池和最大池操作,并将它们连接起来以生成高效的特征描述符(相当于是忽略/缩减图像的通道特征,转而专注于空间特征)。

  • 输入:经过通道注意力图细化后的 F ′ F' F,计算方式为 F ′ = M c ( F ) ⊗ F F'=M_c(F)⊗F F=Mc(F)F
  • 输出:大小为 ( 1 , H , W ) (1,H,W) (1,H,W)的空间注意力图。
  • 操作:
    • 1.将 F ′ F' F沿通道方向进行最大池化和平均池化,得到两个二维的特征图 F a v g F_avg Favg F m a x F_max Fmax,大小均为 1 x H x W 1xHxW 1xHxW,将得到的两个特征图进行维度拼接方向的拼接(叠加),得到拼接后的特征图。
    • 2.对拼接后的特征图进行7x7的卷积运算得到空间注意力图 M s M_s Ms

在这里插入图片描述
沿维度通道平均池化、最大池化的作用:参考ICLR2017的论文《Paying more attention to attention: Improving the performance of convolutional neural networks via attention transfer》,认为沿着通道轴应用池化操作可以有效地突出显示含有关键信息的区域。作者的实验也支持这一观点。

  总之,与通道注意力不同,空间注意力侧重于“何处”这一信息性部分,这是对前面通道注意力的补充。除此之外,两个模块可以并行或顺序放置,但通过实验发现顺序排列比平行排列的结果更好,并且顺序上通道一阶略优于空间一阶。

class SpatialAttention(nn.Module):"""CBAM混合注意力机制的空间注意力"""def __init__(self, kernel_size=7):super(SpatialAttention, self).__init__()assert kernel_size in (3, 7), 'kernel size must be 3 or 7'padding = 3 if kernel_size == 7 else 1self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)self.sigmoid = nn.Sigmoid()def forward(self, x):avg_out = torch.mean(x, dim=1, keepdim=True)	#通道上平均池化max_out, _ = torch.max(x, dim=1, keepdim=True)	#通道上最大池化out = torch.cat([avg_out, max_out], dim=1)		#将池化后的特征沿通道维度进行拼接,得到具有不同尺度上下文信息的特征图out = self.sigmoid(self.conv1(out))				#对生成的空间注意力权重应用Sigmoid激活函数,将权重限制在0到1之间return out*x	#返回F''

Experiments

  CBAM模块易与CNN网络融合,研究中将其融入到了ResNet网络中,并证明了CBAM各方面的优越性。

Conclusion

  CBAM融合了注意力机制中的两种常见表示,通道域的注意力机制和空间域的注意力机制,通过将两种模块顺序组合,两者相互补充,使得网络具有了知晓“What”和“Where”的能力,即知道在哪些位置上的哪些特征,是关键且重要的信息。通过这样的方式,进一步提升了CNNs的特征提取和表示能力,而且CBAM可以无缝的嵌入各种CNNs结构中,对于计算机视觉任务有很好的表现。
  总代码实现:

class CBAM(nn.Module):"""CBAM混合注意力机制"""def __init__(self, in_channels, ratio=16, kernel_size=3):super(CBAM, self).__init__()self.channelattention = ChannelAttention(in_channels, ratio=ratio)self.spatialattention = SpatialAttention(kernel_size=kernel_size)def forward(self, x):x = self.channelattention(x)x = self.spatialattention(x)return x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434874.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车3d动画渲染选择哪个?选择最佳云渲染解决方案

面临汽车3D动画渲染挑战?选择正确的云渲染服务至关重要。探索最佳解决方案,优化渲染效率,快速呈现逼真动画。 汽车3d动画渲染选择哪个? 对于汽车3D动画渲染,选择哪个渲染器取决于你的项目需求、预算和期望的效果。Ble…

Llama 3.1 技术研究报告-2

3.3 基础设施、扩展性和效率 我们描述了⽀持Llama 3 405B⼤规模预训练的硬件和基础设施,并讨论了⼏项优化措施,这些措施提⾼了训练效率。 3.3.1 训练基础设施 Llama 1和2模型在Meta的AI研究超级集群(Lee和Sengupta,2022&#x…

探索存内计算的未来,高能效内存计算实训专场有感~

写在前面,首先感谢活动方:存内计算开发者社区的邀请来参加本次探索存内计算的未来,高能效内存计算实训专场。下面我给大家分享一下本次的活动实操感受😀。 活动议程 本次活动邀请存内技术专家李阳老师分享存内计算是什么&#xf…

Subdominator:一款针对漏洞奖励计划的子域名安全枚举工具

关于Subdominator Subdominator是一款针对漏洞奖励计划的子域名安全枚举工具,可用于在漏洞搜寻和侦察过程中进行被动子域名枚举。它旨在通过高效枚举子域名和各种免费被动资源来帮助研究人员和网络安全专业人员发现潜在的安全漏洞。 Subdominator 与各种免费和付费…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-24

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-24 1. Enriching Datasets with Demographics through Large Language Models: What’s in a Name? K AlNuaimi, G Marti, M Ravaut, A AlKetbi, A Henschel… - arXiv preprint arXiv …, 2024 通过大型语言…

python获取百度地图路径规划

自制语音助手想做一个查询交通路线的功能,于是就想到了百度地图。在百度地图的服务器端应用中,提供了“轻量级路线规划”API接口,正好可以满足需求。要用这个接口,需要注册百度地图账号并创建一个服务器端的应用。有关开通百度地图…

Docekrfile和docker compose编写指南及注意事项

Dockerfile 基础语法 我们通过编写dockerfile,将每一层要做的事情使用语法固定下来,之后运行指令就可以通过docker来制作自己的镜像了。 构建镜像的指令:docker build /path -t imageName:tag 注意,docker build后的path必须是dockerfile…

Selenium与数据库结合:数据爬取与存储的技术实践

目录 一、Selenium与数据库结合的基础概念 1.1 Selenium简介 1.2 数据库简介 1.3 Selenium与数据库结合的优势 二、Selenium爬取数据的基本步骤 2.1 环境准备 2.2 编写爬虫代码 2.3 数据提取 2.4 异常处理 三、数据存储到数据库 3.1 数据库连接 3.2 数据存储 3.3 …

网络编程(10)——json序列化

十、day10 今天学习如何使用jsoncpp将json数据解析为c对象,将c对象序列化为json数据。jsoncp经常在网络通信中使用,也就是服务器和客户端的通信一般使用json(可视化好);而protobuf一般在服务器之间的通信中使用 json…

【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差

本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7396959.html?templateId1718516 问题现象 yashandb执行带oracle dblink表的sql性能差: 同样的语句,同样的数据,oracle通过dblink访问远端oracle执行…

可视化服务编排:jvs-logic API出参加密实战教程

在现代软件开发与系统集成的过程中,API(应用程序接口)非常重要,它能使不同系统之间连接,进行数据交换和功能调用。当然,数据交换的数据安全肯定是不可忽视的,为了确保数据在传输过程中的保密性和…

虫情测报灯的工作原理

TH-CQ3】果园、森林等区域病虫害的实时监测、预警和科学管理。病虫害监测系统通常由以下几个部分组成:包括图像传感器、声音传感器、气象传感器等,用于实时采集作物及其周围环境的数据,如叶片变化、虫鸣声、温度、湿度、光照等。对采集到的数…

基于RealSense D435相机实现手部姿态重定向

基于Intel RealSense D435相机和MediaPipe的手部姿态检测,进一步简单实现手部姿态与机器人末端的重定向,获取手部的6D坐标(包括位置和姿态)。 假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境&…

海口网站建设的最佳实践

海口网站建设的最佳实践 随着互联网的迅猛发展,海口的企业和个人越来越重视网站建设。一个高质量的网站不仅能提升企业形象,还能有效促进品牌传播和业务发展。以下是海口网站建设的一些最佳实践,希望能为相关从业者提供帮助。 1. 明确目标和…

一文说清楚:如何学习好K8s、OpenStack、Docker、Linux?

大家好,我是你们熟悉的-CloudJourney。在这个信息爆炸的时代,我一直致力于通过博客、公众号等平台,与大家分享关于Linux、K8S、Docker、网络、服务器以及OpenStack等前沿技术的见解与心得。然而,随着交流的深入,我逐渐…

[论文精读]TorWard: Discovery, Blocking, and Traceback of Malicious Traffic Over Tor

期刊名称:IEEE Transactions on Information Forensics and Security 发布链接:TorWard: Discovery, Blocking, and Traceback of Malicious Traffic Over Tor | IEEE Journals & Magazine | IEEE Xplore 中文译名:TorWard:…

EDM平台大比拼 用户体验与营销效果双重测评

本文评测了ZohoCampaigns、Mailchimp、Sendinblue、AWeber四款EDM平台,分别适合中小企业、多平台集成、多功能集成、初学者等需求。建议企业根据自身规模、技术水平和功能需求选择最适合的平台。 一、Zoho Campaigns 功能概述 Zoho Campaigns是Zoho旗下的一款专注…

前端框架:选择的艺术

一、简介 在现代 web 开发中,前端框架扮演着至关重要的角色。 首先,它们极大地提升了开发效率。以 React、Vue 和 Angular 为例,这些框架采用组件化的开发模式,允许开发者将页面拆分成独立的、可复用的组件。例如,在一…

学校周赛(2)

A.Minimize! 题目 思路 本题只需要遍历c的取值&#xff0c;实时更新答案即可 代码 #include<iostream> #include<algorithm> using namespace std;void todo(){int a,b;cin>>a>>b;int ansINT_MAX;for(int ca;c<b;c){ansmin(ans,(c-a)(b-c));}co…

面试题:MySQL你用过WITH吗?领免费激活码

感谢Java面试教程的Java多线程文章&#xff0c;点击查看>原文 Java面试教程&#xff0c;发mmm116可获取IDEA-jihuoma 在MySQL中&#xff0c;WITH子句用于定义临时表或视图&#xff0c;也称为公共表表达式&#xff08;CTE&#xff09;。它允许你在一个查询中定义一个临时结果…