• 论文题目①:BAM: Bottleneck Attention Module
  • 论文题目②:CBAM:CBAM: Convolutional Block Attention Module

Bottlenet attention Module(BAM)

依据

人看东西时不可能把注意力放在所有的图像上,会把焦点目光聚集在图像的重要物体上。因此,作者提出了BAM注意力机制,仿照人的眼睛聚焦在图像几个重要的点上。

BAM介绍

在这项工作中,我们把重心放在了Attention对于一般深度神经网络的影响上,我们提出了一个简单但是有效的Attention模型—BAM,它可以结合到任何前向传播卷积神经网络中,我们的模型通过两个分离的路径 channel和spatial, 得到一个Attention Map。

BAM具体结构

对于给定的feature map,F∈RC∗H∗WF\in R^{C*H*W}F∈RC∗H∗W,BAM可以得到一个3D的Attention map M(F)∈RC∗H∗WM(F)\in R^{C*H*W}M(F)∈RC∗H∗W,计算refine feature map F'
F′=F+F⊗M(F)F′=F+F⊗M(F)F′=F+F⊗M(F),其中是逐元素相乘。

M(F)=σ(Mc(F)+Ms(F))M(F) =σ(Mc(F)+Ms(F))M(F)=σ(Mc(F)+Ms(F))

其中,Mc(F)∈RCMc(F)\in R^{C}Mc(F)∈RC是通道注意力;Ms(F)∈RH∗WMs(F)\in R^{H*W}Ms(F)∈RH∗W是空间注意力。

channel attention branch

Mc(F)=BN(MLP(AvgPool(F)))=BN(W1(W0AvgPool(F)+b0)+b1)Mc(F) = BN(MLP(AvgPool(F))) = BN(W1(W0AvgPool(F)+b0)+b1)Mc(F)=BN(MLP(AvgPool(F)))=BN(W1(W0AvgPool(F)+b0)+b1)

其中W0∈RC/r∗C,b0∈Rr/C,W1∈RC/r∗C,b1∈RCW_{0}\in R^{C/r*C},b_{0}\in R^{r/C},W_{1}\in R^{C/r*C},b_{1}\in R^{C}W0​∈RC/r∗C,b0​∈Rr/C,W1​∈RC/r∗C,b1​∈RC

spatial attention branch

Ms(F)=BN(f31∗1(f23∗3(f13∗3(f01∗1(F)))))M_{s}(F)=BN(f_{3}^{1*1}(f_{2}^{3*3}(f_{1}^{3*3}(f_{0}^{1*1}(F)))))Ms​(F)=BN(f31∗1​(f23∗3​(f13∗3​(f01∗1​(F)))))
其中,f是卷积操作,1* 1表示filter size为1,其它类似。BN是batch normalization;3* 3是dilated convolution,即空洞卷积。

两种attention的结合方式

由一系列的实验可得,element-wise summation即逐元素相加perform是最好的。最后再通过sigmoid函数。具体可以参照下图:

Convolutional Block Attention Module(CBAM)

简介

作者提出了一个简单但有效的注意力模块 CBAM,给定一个中间特征图,我们沿着空间和通道两个维度依次推断出注意力权重,然后与原特征图相乘来对特征进行自适应调整。 由于 CBAM 是一个轻量级的通用模块,它可以无缝地集成到任何 CNN 架构中,额外开销忽略不计,并且可以与基本 CNN 一起进行端到端的训练。 在不同的分类和检测数据集上,将 CBAM 集成到不同的模型中后,模型的表现都有了一致的提升,展示了其广泛的可应用性。

CBAM总体视图

CBAM结构介绍

作者将注意力过程分为两个独立的部分,通道注意力模块和空间注意力模块。这样不仅可以节约参数和计算力,而且保证了其可以作为即插即用的模块集成到现有的网络架构中去。

通道注意力模块

特征的每一个通道都代表着一个专门的检测器,因此,通道注意力是关注什么样的特征是有意义的。为了汇总空间特征,作者采用了全局平均池化和最大池化两种方式来分别利用不同的信息。
Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))=σ(W1(W0(FavgC))+(W1(W0(FmaxC)))Mc(F) = σ(MLP(AvgPool(F)) + MLP(MaxPool(F))) =\sigma (W_{1}(W_{0}(F_{avg}^{C}))+(W_{1}(W_{0}(F_{max}^{C}))) Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))=σ(W1​(W0​(FavgC​))+(W1​(W0​(FmaxC​)))
输入是一个 H×W×C 的特征 F,我们先分别进行一个空间的全局平均池化和最大池化得到两个 1×1×C 的通道描述。接着,再将它们分别送入一个两层的神经网络,第一层神经元个数为 C/r,激活函数为 Relu,第二层神经元个数为 C。这个两层的神经网络是共享的。然后,再将得到的两个特征相加后经过一个 Sigmoid 激活函数得到权重系数 Mc。最后,拿权重系数和原来的特征 F 相乘即可得到缩放后的新特征。

空间注意力模块

在通道注意力模块之后,我们再引入空间注意力模块来关注哪里的特征是有意义的。
Ms(F)=σ(f7∗7([AvgPool(F),MaxPool(F)]))=σ(f7∗7([FavgS;FmaxS]))M_{s}(F)=\sigma (f^{7*7}([AvgPool(F),MaxPool(F)]))=\sigma (f^{7*7}([F_{avg}^{S};F_{max}^{S}])) Ms​(F)=σ(f7∗7([AvgPool(F),MaxPool(F)]))=σ(f7∗7([FavgS​;FmaxS​]))

与通道注意力相似,给定一个 H×W×C 的特征 F‘,我们先分别进行一个通道维度的平均池化和最大池化得到两个 H×W×1 的通道描述,并将这两个描述按照通道拼接在一起。然后,经过一个 7×7 的卷积层,激活函数为 Sigmoid,得到权重系数 Ms。最后,拿权重系数和特征 F’ 相乘即可得到缩放后的新特征。

两个注意力通道组合形式

通道注意力和空间注意力这两个模块可以以并行或者顺序的方式组合在一起,但是作者发现顺序组合并且将通道注意力放在前面可以取得更好的效果。

实验结果

CBAM与ResNet网络结构组合


CBAM可视化

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

BAM在目标检测

结论(CBAM和BAM)

由上述及论文更多实验结果表明,不管是引入BAM还是引入CBAM都能提高目标检测和物体分类的精度,因此可以在神经网络中引入这一机制,而且花费的计算开销和参数大小都比较少。

代码解析及开源地址

https://github.com/Jongchan/attention-module

可对照着代码看注意力机制的详细过程,会有一个更好的理解。

注意力机制BAM和CBAM详细解析(附代码)相关推荐

  1. php 运营商授权,PHP判断手机号运营商(详细介绍附代码)

    道理很简单,知道手机号规则 进行正则判断就可以 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 联通:130.131.132.15 ...

  2. uniapp获取手机号(详细教程附代码)

    uniapp获取手机号(详细教程附代码) 一.获取code 二.通过code获取获取openId 和 session_key 三.让用户授权(同意后需要对数据解密) 个人小程序不能使用这个功能,必须是 ...

  3. Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)

    Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...

  4. 即插即用 | 超越CBAM,全新注意力机制,GAM表现卓著(附Pytorch实现)

    为了提高计算机视觉任务的性能,人们研究了各种注意力机制.然而,以往的方法忽略了保留通道和空间方面的信息以增强跨维度交互的重要性.因此,本文提出了一种通过减少信息弥散和放大全局交互表示来提高深度神经网络 ...

  5. 注意力机制(SE, ECA, CBAM, SKNet, scSE, Non-Local, GCNet, ASFF) Pytorch代码

    注意力机制 1 SENet 2 ECANet 3 CBAM 3.1 通道注意力 3.2 空间注意力 3.3 CBAM 4 展示网络层具体信息 5 SKNet 6 scSE 7 Non-Local Ne ...

  6. HDMI EDID详细解析——C代码实现

    继上一篇<HDMI EDID详细解析> https://blog.csdn.net/cfl927096306/article/details/108017501 现在用C代码来实现解析HD ...

  7. NLP | 注意力机制Attention Mechannism图文详解及代码

    包含了RNN,LSTM的示例. 1.注意力机制 注意力机制是深度学习的最新进展之一,特别是对于机器翻译.图像字幕.对话生成等自然语言处理任务.它是一种旨在提高编码器解码器(seq2seq)RNN 模型 ...

  8. Java【冒泡排序】算法, 大白话式图文解析(附代码)

    文章目录 前言 一.排序相关概念 1, 什么是排序 2, 什么是排序的稳定性 3, 七大排序分类 二.冒泡排序 1, 图文解析 2, 代码实现 3, 冒泡排序的优化 三.性能分析 四.七大排序算法总体 ...

  9. python爬虫案例-python爬虫详细解析附案例

    什么是爬虫框架 说这个之前,得先说说什么是框架: 是实现业界标准的组件规范:比如众所周知的MVC开发规范 提供规范所要求之基础功能的软件产品:比如Django框架就是MVC的开发框架,但它还提供了其他 ...

最新文章

  1. python有必要学吗-Python这么火,要不要学?听听华为工程师怎么说...
  2. 如何挽回一个快要“变心”的买家?
  3. 动态鼠标指针_推荐8款电脑鼠标指针,让你电脑不再千篇一律
  4. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本强势发布
  5. 历时7周,当然了真正的安装时间没这么多,终于把集群安装好了
  6. 前端学习(1170):findIndex
  7. mysql构建数据立方体_OLAP数据建模工具Workbench的初步使用(数据立方体的建立)
  8. 企业建立私有云的N个理由
  9. 《软件工程》课程改进意见
  10. 面向对象编程(OOP)和函数式编程(FP)的思考
  11. 深度学习Bible学习笔记:第七章 深度学习中的正则化
  12. codechef FEB19 Manhattan Rectangle
  13. 【Learning】 动态树分治
  14. ROS学习笔记(三)—— 话题 topic详解
  15. 游戏企业该如何做好网络安全防护?
  16. MIUI12 安卓12刷面具root 理论适合所有小米机型和系统版本 小米10实测 小米11实测
  17. 金融市场数据平台的架构设计之道
  18. Error: Couldn‘t find preset “stage-2“ relative to directory
  19. 字符串大小比较的规则?
  20. Java后端技术框架

热门文章

  1. SDP(12): MongoDB-Engine - Streaming
  2. [Leetcode] Populating next right pointer in each node ii 填充每个节点的右指针
  3. 【转】HBase原理和设计
  4. 【Python】Python中的引用和赋值
  5. 一种快速的未登陆词识别方法(原理和实现)
  6. mysql manage keys_相传mysql 5.5 对于非聚集索引增删有很大的改善… 你信吗?
  7. 动态规划——乘积最大子数组(Leetcode 152)
  8. C++可变长数组vector的使用
  9. 追本溯源:Oracle 只读表空间的探索实践
  10. Java有了synchronized,为什么还要提供Lock