CBAM: Convolutional Block Attention Module

论文地址:https://arxiv.org/abs/1807.06521
PyTorch代码:https://github.com/luuuyi/CBAM.PyTorch

文章目录

  • CBAM: Convolutional Block Attention Module
    • 通道注意力
    • 空间注意力
    • 整体结构
    • 参数解析
      • 1. 通道注意力
      • 2. 空间注意力
      • 3. 通道注意力与空间注意力前后顺序
      • 4. 整体设对比


CBAM(Convolutional Block Attention Module)结合了 通道注意力空间注意力两个维度的注意力机制。CBAM通过学习的方式自动获取每个特征通道的重要程度,和SEnet类似。此外还通过类似的学习方式 自动获取每个特征空间的重要程度。并且 利用得到的重要程度来提升特征并抑制对当前任务不重要的特征

通道注意力


CBAM提取特征通道注意力的方式基本和SEnet类似,如下ChannelAttention中的代码所示,在SENet的基础上增加了max_pool的特征提取方式,最终的输出结果是将平均池化的结果与最大池化的结果相加输出。将通道注意力提取厚的特征作为空间注意力模块的输入。

class ChannelAttention(nn.Module):def __init__(self, in_planes, ratio=16):super(ChannelAttention, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.max_pool = nn.AdaptiveMaxPool2d(1)self.fc1   = nn.Conv2d(in_planes, in_planes / 16, 1, bias=False)self.relu1 = nn.ReLU()self.fc2   = nn.Conv2d(in_planes / 16, in_planes, 1, bias=False)self.sigmoid = nn.Sigmoid()def forward(self, x):avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x))))max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x))))out = avg_out + max_outreturn self.sigmoid(out)

空间注意力

CBAM提取特征空间注意力的方式:经过通道注意力后,最终将经过通道重要性选择后的特征图送入特征空间注意力模块,和通道注意力模块类似,空间注意力是以通道为单位进行最大和平均迟化,并将两者的结果进行concat,之后再一个卷积降成 1 ∗ w ∗ h 1*w*h 1∗w∗h的特征图空间权重,再将该权重和输入特征进行点积,从而实现空间注意力机制。

CBAM的实现代码如下:

class SpatialAttention(nn.Module):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)x = torch.cat([avg_out, max_out], dim=1)x = self.conv1(x)return self.sigmoid(x)

整体结构


整体过程也很简单,主要就是如下步骤:

  1. 进入类似SENet类似操作的通道注意力模块,提取各层特征重要程度;
  2. 将获取通道注意力与输入特征进行相乘操作,计算新的特征;
  3. 进入空间注意力模块,提取各个空间特征重要程度;
  4. 将空间注意力与特征进行相应卷积操作;
  5. 将原特征信息与现有特征信息进行融合。

整体框架代码如下:

class BasicBlock(nn.Module):expansion = 1def __init__(self, inplanes, planes, stride=1, downsample=None):super(BasicBlock, self).__init__()self.conv1 = conv3x3(inplanes, planes, stride)self.bn1 = nn.BatchNorm2d(planes)self.relu = nn.ReLU(inplace=True)self.conv2 = conv3x3(planes, planes)self.bn2 = nn.BatchNorm2d(planes)self.ca = ChannelAttention(planes)self.sa = SpatialAttention()self.downsample = downsampleself.stride = stridedef forward(self, x):residual = xout = self.conv1(x)out = self.bn1(out)out = self.relu(out)out = self.conv2(out)out = self.bn2(out)out = self.ca(out) * out  # 广播机制out = self.sa(out) * out  # 广播机制if self.downsample is not None:residual = self.downsample(x)out += residualout = self.relu(out)return out

参数解析

1. 通道注意力


论文比较了3种不同的渠道关注:平均池化,最大池化,以及两个池化的联合使用。注意,带有平均池的通道注意模块与SENet模块相同。此外,在使用这两个池时,使用一个共享的MLP进行注意推断来保存参数,因为这两个聚合的通道特征都位于同一语义嵌入空间。在本实验中,我们只使用信道注意模块,并将衰减比定为16,没有进行修改。各种池化方法的实验结果如表1所示。我们观察到最大汇集的特征和平均汇集的特征一样有意义,比较了从基线提高的准确性。共享网络的输出通过按元素进行求和进行合并。我们的经验表明,我们的通道注意方法是一个有效的方法,以推动性能进一步远离SE[28]没有额外的可学习参数。

2. 空间注意力


论文设计探索了一种计算空间注意的有效方法。设计理念与渠道注意分支对称。为了生成一个二维空间注意力地图。

  1. 首先计算一个二维描述特征图,该特征图编码所有空间位置上每个像素的信道信息。
  2. 然后对二维描述特征图应用一个卷积层,得到原始的注意图。
  3. 最后的注意力图用Sigmoid函数归一化

对通道数进行降维存在两种方法:

  1. 在通道维度上使用平均池化与最大值池化,将多通道特征压缩为两个通道。
  2. 通过 1 ∗ 1 1*1 1∗1卷积核将多个通道的特征转换为一个通道空间特征图。

降维以后,将两个通道变为一个通道时,论文采用了不用的卷积核对特征进行卷积,最终发现使用卷积核大小为7的效果优于卷积核大小为3的效果。因为卷积核大小为7时,卷积核会具有更大的感受野,更加便于观察空间中需要注意的部分。

3. 通道注意力与空间注意力前后顺序

文中比较了三种不同的通道和空间注意子模块的排列方式:通道注意力-空间注意力空间注意力-通道注意力,以及两种注意力子模块的平行使用。由于每个模块的功能不同,其顺序可能会影响整体性能。例如,从空间的角度来看,通道注意力是全局应用的,而空间注意力是局部工作的。此外,可以结合两种注意力输出来构建一个3D注意力特征图。在这种情况下,两个注意模块可以并行应用,然后将两个注意模块的输出相加,用Sigmoid函数进行归一化。
表3总结了不同注意安排方法的实验结果。从结果中,我们可以发现,按顺序生成一个注意力图比并行生成一个更好的注意力图。此外,通道一阶的性能略优于空间一阶。请注意,所有的安排方法都优于单独使用通道注意力,这表明利用两个注意力是至关重要的,而最佳的安排策略进一步推动性能。

4. 整体设对比


文中设计了通道注意模块,空间注意模块,以及两个模块的排列。最后的模块如图1和图2所示:通道注意模块和空间注意模块都选择了平均和最大pooling;在空间注意模块中,我们采用核大小为7的卷积;我们按顺序排列通道和空间子模块。(也就是我们最后的模块。ResNet50 + CBAM)的top-1 error为22.66%,远低于SE[28](即如表4所示。

计算机视觉注意力网络(三)——CBAM [ECCV 2018]相关推荐

  1. 计算机网络大赛英文简称是什么,关于“中国高校计算机大赛网络技术挑战赛”(2018年)的通知...

    根据<"中国高校计算机大赛-网络技术挑战赛"竞赛规程(2018年)>.现将具体事项通知如下: 一.大赛目的 中国高校计算机大赛(China Collegiate Com ...

  2. 取消桌面上计算机控制板网络三个系统图标,大神处置win10系统桌面图标“计算机 控制面板 网络”怎么不见了的解决方的步骤...

    我们在操作win10系统电脑的时候,常常会遇到win10系统桌面图标"计算机 控制面板 网络"怎么不见了的情况,想必大家都遇到过win10系统桌面图标"计算机 控制面板 ...

  3. 计算机视觉注意力网络(一)——简介

    文章目录 注意力机制简介与分类 计算机视觉中的注意力机制 卷积神经网络中常用的Attention 参考 注意力机制简介与分类 注意力机制(Attention Mechanism)是机器学习中的一种数据 ...

  4. 湘潭大学网络编程_湘潭大学计算机学院网络空间安全学院“湘韵”研究生论坛成功举行...

    聚计网湘韵,享学术盛宴 聚计网湘韵,享学术盛宴.2020年11月26日下午,由湘潭大学计算机学院·网络空间安全学院举办的研究生湘韵论坛在工科楼阶梯教室举行,全体研究生新生参加,肖芬副院长致开幕辞. & ...

  5. 北京理工大学珠海学院专业计算机类,北京理工大学珠海学院计算机学院网络工程专业...

    北京理工大学珠海学院计算机学院网络工程专业 发表时间:2019-10-10 作者:211大学网 日前,在计算机学院网络工程专业林开荣.张海燕老师的带领下,6名来自北京理工大学珠海学院2016级网络工程 ...

  6. 时隔两年,盘点ECCV 2018影响力最大的20篇论文

    上周CV君盘点了去年CVPR中引用量最高的 20 篇论文: 时隔一年,盘点CVPR 2019影响力最大的20篇论文 不少朋友催更ECCV 2018的. 同样是计算机视觉领域顶级会议,ECCV 每两年举 ...

  7. 康复治疗学可以考计算机吗,【大揭秘】2018“人机对话”康复医学治疗技术专业技术资格考试...

    原标题:[大揭秘]2018"人机对话"康复医学治疗技术专业技术资格考试 昨天,关于"2018年康复医学治疗技术专业技术资格考试采用人机对话考试方式"的通知一经发 ...

  8. ECCV 2018|商汤37篇论文入选,为你解读精选论文(附链接+开源资源)

    整理 | Jane 出品| AI科技大本营 [导读]9 月 8 日-14 日,每两年举办一次的 2018 欧洲计算机视觉大会(ECCV 2018)在德国慕尼黑召开,本次会议总共收到了 2439 篇有效 ...

  9. 商汤及联合实验室入选论文重点解读 | ECCV 2018

    本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处 本文约3400字,建议阅读10分钟. 本文为大家解读了几篇商汤及联合实验室的入选论文. 9月8日-14日,备受瞩目的201 ...

最新文章

  1. R3Query 大数据分析系统2017将发布免费个人版
  2. 剑指offer十:矩形覆盖
  3. C语言实现简单的电子通讯录2
  4. Facebook 约十亿美元收购脑机技术公司,助攻AR研发;苹果宣布新款 Mac Pro 在美国生产;谷歌称已实现量子霸权…...
  5. 10976 - Fractions Again?!
  6. 利用 50 行 Python 代码构建一个在线文本生成器!
  7. 第二章 生成、打包、部署和管理应用程序及类型
  8. 软件生成问候图片_设计师注意啦!欧美风双色图片一键生成的软件来啦!
  9. Synopsys工具安装之二【SCL License】
  10. LayoutInflater中的inflate方法详解(转载整理)
  11. 5.5 设置UITableView单元格背景色 [原创iOS开发-Xcode教程]
  12. 世界上最简单的会计书(资产负债表)
  13. 前端js正则验证大全(一套完整的正则验证解决方案)@莫成尘
  14. 如何开发手游联运平台?
  15. js将数组中相同项放在一个数组
  16. ES6常用语法糖(附Babel配置使用方法)
  17. 两相四线步进电机的驱动方法/驱动芯片用法
  18. Simple INF 解析
  19. 身份证号码、手机号码格式校验
  20. 王佩丰Excel24讲_第4讲:排序与筛选

热门文章

  1. 初中高中生用计算机,中学生如何科学的使用计算器?
  2. snidel 2014春夏新品 画册款切换材质连衣裙
  3. shell中test命令方法详解
  4. PHP开发网易云FM音乐试听程序源码+支持下载功能
  5. 扫描仪没有linux 驱动怎么安装,怎么安装没有驱动盘的扫描仪
  6. 模仿风宇博客登录蒙层弹窗(vuex+computed实现)
  7. HTTP协议——请求格式及方法
  8. unity 鼠标按键点击判断函数
  9. 电影类网站如何选择服务器
  10. Cluster analysis :Basic Concepts and Algorithms -- Part 1 Overview