位置: IT常识 - 正文

CBAM——即插即用的注意力模块(附代码)(即插即用是什么意思?)

编辑:rootadmin
CBAM——即插即用的注意力模块(附代码)

推荐整理分享CBAM——即插即用的注意力模块(附代码)(即插即用是什么意思?),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:即插即用是什么意思?,即插即用安卓下载,即插即用的含义是指____,即插即用是什么意思?,即插即用的缩写是什么,什么是即插即用?它要达到什么目标,什么是即插即用?它要达到什么目标,即插即用软件是指什么,内容如对您有帮助,希望把文章链接给更多的朋友!

论文:CBAM: Convolutional Block Attention Module

代码: code

目录

前言

1.什么是CBAM?

(1)Channel attention module(CAM)

(2)Spatial attention module(SAM)

(3)CAM和SAM组合形式

2.消融实验

(1)Channel attention

(2)Spatial attention

(3)Channel attention+spatial attention

3.图像分类

4.目标检测

5.CBAM可视化

6.Pytorch 代码实现

总结


前言

CBAM( Convolutional Block Attention Module )是一种轻量级注意力模块的提出于2018年,它可以在空间维度和通道维度上进行Attention操作。论文在Resnet和MobileNet上加入CBAM模块进行对比,并针对两个注意力模块应用的先后进行实验,同时进行CAM可视化,可以看到Attention更关注目标物体。

1.什么是CBAM?

CBAM(Convolutional Block Attention Module)是轻量级的卷积注意力模块,它结合了通道和空间的注意力机制模块。

上图可以看到,CBAM包含CAM(Channel Attention Module)和SAM(Spartial Attention Module)两个子模块,分别进行通道和空间上的Attention。这样不只能够节约参数和计算力,并且保证了其能够做为即插即用的模块集成到现有的网络架构中去。

由上图所示,有输入、通道注意力模块、空间注意力模块和输出组成。输入特征,然后是通道注意力模块一维卷积,将卷积结果乘原图,将CAM输出结果作为输入,进行空间注意力模块的二维卷积,再将输出结果与原图相乘。

(1)Channel attention module(CAM)

通道注意力模块:通道维度不变,压缩空间维度。该模块关注输入图片中有意义的信息(分类任务就关注因为什么分成了不同类别)。

图解:将输入的feature map经过两个并行的MaxPool层和AvgPool层,将特征图从C*H*W变为C*1*1的大小,然后经过Share MLP模块,在该模块中,它先将通道数压缩为原来的1/r(Reduction,减少率)倍,再扩张到原通道数,经过ReLU激活函数得到两个激活后的结果。将这两个输出结果进行逐元素相加,再通过一个sigmoid激活函数得到Channel Attention的输出结果,再将这个输出结果乘原图,变回C*H*W的大小。

通道注意力公式:

CAM与SEnet的不同之处是加了一个并行的最大池化层,提取到的高层特征更全面,更丰富。论文中也对为什么如此改动做出了解释。

AvgPool & MaxPool对比实验

在channel attention中,表1对于pooling的使用进行了实验对比,发现avg & max的并行池化的效果要更好。这里也有可能是池化丢失的信息太多,avg&max的并行连接方式比单一的池化丢失的信息更少,所以效果会更好一点。

(2)Spatial attention module(SAM)

CBAM——即插即用的注意力模块(附代码)(即插即用是什么意思?)

 空间注意力模块:空间维度不变,压缩通道维度。该模块关注的是目标的位置信息。

图解:将Channel Attention的输出结果通过最大池化和平均池化得到两个1*H*W的特征图,然后经过Concat操作对两个特征图进行拼接,通过7*7卷积变为1通道的特征图(实验证明7*7效果比3*3好),再经过一个sigmoid得到Spatial Attention的特征图,最后将输出结果乘原图变回C*H*W大小。

空间注意力公式:

(3)CAM和SAM组合形式

通道注意力和空间注意力这两个模块能够以并行或者串行顺序的方式组合在一块儿,关于通道和空间上的串行顺序和并行作者进行了实验对比,发现先通道再空间的结果会稍微好一点。具体实验结果如下:

由表三可以看出,基于ResNet网络,两个Attention模块按Channel Attention + Spatial Attention的顺序效果会更好一些。

2.消融实验

(1)Channel attention 首先是不同的通道注意力结果比较,平均池化、最大池化和两种联合使用并使用共享MLP来进行推断保存参数,结果如下:

首先,参数量和内存损耗差距不大,而错误率的提高,显然两者联合的方法更优。

(2)Spatial attention

对比7*7卷积核和3*3卷积核的效果,结果7*7卷积核效果更好

(3)Channel attention+spatial attention

对比SEnet、CAM和SAM并行、SAM+CAM和CAM+SAM的效果,最终CAM+SAM效果最好 。

3.图像分类

再数据集ImageNet-1K上使用ResNet网络进行对比实验

4.目标检测

数据集:MS COCO和VOC 2007 如下表所示: MS COCO上,CBAM在识别任务上泛化性能较基线网络有了显著提高。。

如下表: VOC 2007中,采用阶梯检测框架,并将SE和CBAM应用于检测器。CBAM极大的改善了所有强大的基线与微不足道的额外参数。

5.CBAM可视化

本文利用Grad CAM对不一样的网络进行可视化后,能够发现,引入 CBAM 后,特征覆盖到了待识别物体的更多部位,而且最终判别物体的几率也更高,这表示注意力机制的确让网络学会了关注重点信息。

6.Pytorch 代码实现

代码实现:

import torchimport torch.nn as nnclass CBAMLayer(nn.Module): def __init__(self, channel, reduction=16, spatial_kernel=7): super(CBAMLayer, self).__init__() # channel attention 压缩H,W为1 self.max_pool = nn.AdaptiveMaxPool2d(1) self.avg_pool = nn.AdaptiveAvgPool2d(1) # shared MLP self.mlp = nn.Sequential( # Conv2d比Linear方便操作 # nn.Linear(channel, channel // reduction, bias=False) nn.Conv2d(channel, channel // reduction, 1, bias=False), # inplace=True直接替换,节省内存 nn.ReLU(inplace=True), # nn.Linear(channel // reduction, channel,bias=False) nn.Conv2d(channel // reduction, channel, 1, bias=False) ) # spatial attention self.conv = nn.Conv2d(2, 1, kernel_size=spatial_kernel, padding=spatial_kernel // 2, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): max_out = self.mlp(self.max_pool(x)) avg_out = self.mlp(self.avg_pool(x)) channel_out = self.sigmoid(max_out + avg_out) x = channel_out * x max_out, _ = torch.max(x, dim=1, keepdim=True) avg_out = torch.mean(x, dim=1, keepdim=True) spatial_out = self.sigmoid(self.conv(torch.cat([max_out, avg_out], dim=1))) x = spatial_out * x return xx = torch.randn(1,1024,32,32)net = CBAMLayer(1024)y = net.forward(x)print(y.shape)总结CBAM中作者对两个注意力机制使用的先后顺序做了实验,发现通道注意力在空间注意力之前效果最好。作者在实验中应用了grad-CAM来可视化feature map,是个非常有用的可视化手段,在图像分类任务中可以观察feature map的特征,解释了为什么模型将原图分类到某一类的结果。加入CBAM模块不一定会给网络带来性能上的提升,受自身网络还有数据等其他因素影响,甚至会下降。如果网络模型的泛化能力已经很强,而你的数据集不是benchmarks而是自己采集的数据集的话,不建议加入CBAM模块。CBAM性能虽然改进的比SE高了不少,但绝不是无脑加入到网络里就能有提升的。也要根据自己的数据、网络等因素综合考量。
本文链接地址:https://www.jiuchutong.com/zhishi/298578.html 转载请保留说明!

上一篇:深度学习模型部署综述(ONNX/NCNN/OpenVINO/TensorRT)

下一篇:YOLOv8训练自己的数据集(超详细)(yolov8训练自己的数据集 Windows)

  • 荣耀平板V7Pro怎么设置面部解锁(荣耀平板V7Pro怎么设置横屏全屏)

    荣耀平板V7Pro怎么设置面部解锁(荣耀平板V7Pro怎么设置横屏全屏)

  • 抖音如何设置粉丝列表不可见(抖音如何将粉丝设为隐私)

    抖音如何设置粉丝列表不可见(抖音如何将粉丝设为隐私)

  • 微信收款语音为什么开启了没声音(微信收款语音为什么不报金额)

    微信收款语音为什么开启了没声音(微信收款语音为什么不报金额)

  • 算法一般都可以用哪几种控制结构组合而成(算法一般都可以由顺序循环嵌套的控制结构组合而成)

    算法一般都可以用哪几种控制结构组合而成(算法一般都可以由顺序循环嵌套的控制结构组合而成)

  • 一体手机进水晾多久开机(一体手机进水晾干后充电慢)

    一体手机进水晾多久开机(一体手机进水晾干后充电慢)

  • ipad711是什么型号(ipad711尺寸)

    ipad711是什么型号(ipad711尺寸)

  • 拼多多罚款规则有哪些(拼多多罚款规则2022)

    拼多多罚款规则有哪些(拼多多罚款规则2022)

  • 抖音账号评级会解除吗(抖音账号评级会重复吗)

    抖音账号评级会解除吗(抖音账号评级会重复吗)

  • 双固态硬盘影响性能吗(双固态硬盘影响散热吗)

    双固态硬盘影响性能吗(双固态硬盘影响散热吗)

  • 屏幕背光是什么意思(屏幕背光是什么原因导致的)

    屏幕背光是什么意思(屏幕背光是什么原因导致的)

  • 交换机网管和非网管区别(交换机非网管区别)

    交换机网管和非网管区别(交换机非网管区别)

  • 微信号注销多久生效(微信号注销多久可以绑定新的微信号)

    微信号注销多久生效(微信号注销多久可以绑定新的微信号)

  • 7p屏幕分辨率(iphone7plus 分辨率)

    7p屏幕分辨率(iphone7plus 分辨率)

  • 小米手环步数可以同步到微信吗(小米手环步数可以修改吗)

    小米手环步数可以同步到微信吗(小米手环步数可以修改吗)

  • 苹果xr解锁怎么取消上滑(iphone xr 解锁)

    苹果xr解锁怎么取消上滑(iphone xr 解锁)

  • 华为mate20和nova5的区别(华为mate20和nova5ipro外观一样吗?)

    华为mate20和nova5的区别(华为mate20和nova5ipro外观一样吗?)

  • 支付宝怎样解绑淘宝(支付宝怎样解绑抖音账号)

    支付宝怎样解绑淘宝(支付宝怎样解绑抖音账号)

  • 苹果8a几处理器(苹果8a十几处理器)

    苹果8a几处理器(苹果8a十几处理器)

  • 小米手环睡眠质量原理(小米手环睡眠质量)

    小米手环睡眠质量原理(小米手环睡眠质量)

  • keylock密码锁重置(keylock密码锁重置后总是提示重新操作)

    keylock密码锁重置(keylock密码锁重置后总是提示重新操作)

  • 华为手机风控管理中心设置(华为手机风控管理中心在哪里)

    华为手机风控管理中心设置(华为手机风控管理中心在哪里)

  • 美颜相机怎么把字去掉(美颜相机怎么把脸遮住)

    美颜相机怎么把字去掉(美颜相机怎么把脸遮住)

  • 怎么把Mac系统的隐藏壁纸找出来并且能够正常使用(mac电脑怎么转移到另一个电脑)

    怎么把Mac系统的隐藏壁纸找出来并且能够正常使用(mac电脑怎么转移到另一个电脑)

  • zabbix_sender命令  zabbix发送器工具(zabbix agent启动命令)

    zabbix_sender命令 zabbix发送器工具(zabbix agent启动命令)

  • TypeScript和JavaScript的区别,全面解读超详细(typescript和javascript那个更高级)

    TypeScript和JavaScript的区别,全面解读超详细(typescript和javascript那个更高级)

  • PHPCMS完全免费吗?(php是免费的吗)

    PHPCMS完全免费吗?(php是免费的吗)

  • 什么情况下进项税额需要转出
  • 服装类发票可以做账吗
  • 如何查看增值税申报表
  • 租借车辆发生事故后的保险理赔问题
  • 支付结算有哪些工具
  • 货物赔偿是否需要发票
  • 应交增值税进项税额转出借贷方向表示什么
  • 亏损企业所得税弥补
  • 变电站是否缴纳房产税
  • 小规模纳税人预缴增值税
  • 加油充值卡有优惠吗
  • 营改增后转让土地使用权
  • 增值税普票丢失发票联能重开吗
  • 国税的申报表季报本月数如何填写?
  • 继承房产出售时交个人所得税税率是多少
  • 待认证进项税额借贷方向
  • 收购全资子公司的账务处理
  • 简易征收企业所得税几个点
  • 联营企业发生亏损怎么处理
  • 当月支付费用当月收到发票
  • 安全生产费怎么算
  • 生产型企业进出口初申报流程
  • 资产负债表中的货币资金怎么算
  • linux获取网络设备的交换机网络
  • 有什么好方法可以让小孩子少吃糖
  • 付员工经济补偿金计入工资总额吗
  • kb4499164安装失败怎么办
  • PHP:pg_meta_data()的用法_PostgreSQL函数
  • 银行存款的利息收入计入什么科目
  • 企业支付给员工的一次性伤残就业补助金计入什么科目
  • 雷斯岬国家海岸公园有信号吗
  • uniapp和vue混合开发
  • 盘亏前累计折旧怎么算
  • element-ui 表格
  • css过渡动画属性
  • 未来社区政策支持
  • 有关的拼音
  • effective c++ github
  • 员工加班餐费该怎么算
  • 手工明细账簿怎么登账
  • 二手固定资产怎么折旧
  • 织梦专题页模板
  • php7安装mysqli扩展
  • 电子税务局如何增加税种认定
  • 公司注册流程百度百科
  • 季报现金流量表可以不填吗
  • 企业收到投资款应贷记什么账户
  • 小规模纳税人免税政策2023年
  • 房地产会计分录怎么做
  • 生产企业购进的生产原材料用来装修公司会计处理
  • 一般纳税人开红字专用发票流程
  • 无固定合同有哪些好处
  • 工会经费为0是不用申报的?
  • 支付厂房租金计入什么会计科目
  • 企业收到加盟费怎么开发票
  • 100%直接控制的母子公司之间,母公司向子公司
  • 公司购买的打印机附赠给客户进项税可以抵扣吗
  • 企业如何建账做账
  • sqlserver数据库合并方法
  • mysql实时监控工具
  • windows vista在哪里
  • 微软官方操作系统叫什么
  • bios没有usb启动项解决方法联想
  • mac如何强制退出微信
  • mac如何恢复到出厂系统版本
  • mac adobe flash player一直提示更新
  • win10增加右键菜单
  • linux怎么管理进程
  • linux lsof命令详解
  • realmon.exe - realmon是什么进程 有什么用
  • FreeGLUT Tips: Resolve compile issue: error LNK1104: cannot open file 'freeglutd.lib'
  • opengl阴影平移
  • perl中\s+
  • Node.js中的事件循环是什么
  • nodejs使用场景
  • 安卓Android下载
  • android布局教程
  • 日照公交305发车时间表
  • 城镇土地使用税的计算公式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设