【论文精读——CBAM: 卷积块注意力模型】

2023-05-16

2018-CBAM: Convolutional Block Attention Module(CBAM)

基本信息

作者: Sanghyun Woo1, Jongchan Parky2, Joon-Young Lee3, and In So Kweon1
期刊: CVPR
引用: *
摘要: 我们提出了卷积块注意力模块(CBAM),一个简单而有效的前馈卷积神经网络的注意力模块。给定一个中间特征图,我们的模块沿着通道和空间这两个独立的维度依次推导出注意力图,然后将注意力图乘以输入特征图进行自适应的特征细化。由于CBAM是一个轻量级的通用模块,它可以无缝地集成到任何CNN架构中,其开销可以忽略不计,并且可以与基础CNN一起进行端到端的训练。我们通过在ImageNet-1K、MS COCO检测和VOC 2007检测数据集上的广泛实验验证了我们的CBAM。我们的实验表明,各种模型在分类和检测性能上都有一致的改进,证明了CBAM的广泛适用性。代码和模型将被公开提供。

1.简介

  • 提升CNN的重要因素:深度、宽度、cardinality,其中cardinality不仅节省了参数的总数,而且比其他两个因素(深度和宽度)具有更强的表示能力。
  • 另一个重要因素是注意力。通过使用注意力机制来提高表示能力,关注重要的特征并抑制不必要的特征。CBAM可以学习在通道和空间轴上分别关注 “什么”(通道)和 “哪里”(空间)。因此,我们的模块通过学习哪些信息需要强调或压制,有效地帮助网络内的信息流动。

本文的贡献:

  1. 提出了一个简单而有效的注意力模块(CBAM),可以广泛应用于提高CNN的表示能力
  2. 通过广泛的消融研究来验证我们的注意力模块的有效性
  3. 验证了各种网络的性能通过插入我们的轻量级模块在多个基准(ImageNet-1K,MS COCO,和VOC 2007)上得到了极大的改善
    在这里插入图片描述

2.相关工作

  • **Network engineering:**增加网络深度——残差网络——密集连接——注意力(本文)
  • **Attention mechanism:**残差注意力网络、SENet等

3.CBAM模型

在这里插入图片描述
在这里插入图片描述
CA:Avg(Max)——MLP(Flaten——Line——Relu——Line)——Sigmoid
SA:Avg(Max)——Conv——BN——Sigmoid

CA与SA的顺序安排:两个模块可以以平行或顺序的方式放置。我们发现,顺序排列比平行排列能得到更好的结果。对于顺序过程的安排,我们的实验结果表明,通道优先的顺序比空间优先的顺序略好。我们将在第4.1节讨论网络工程的实验结果。

4.实验

4.1.消融实验

  • 寻找有效的方法来计算通道注意力:Ave+Max
  • 寻找有效的方法来计算空间注意力:Ave+Max+Conv7
  • 考虑如何结合通道和空间注意模块:顺序、通道+空间

4.2.ImageNet-1K上的图像分类

  • 带有CBAM的网络明显优于所有基线,表明CBAM可以在大规模数据集中对各种模型进行很好的概括。提出的方法是强大的,显示了新的集合方法的功效,产生了更丰富的描述符和空间注意力,有效地补充了通道注意力。
  • 我们的方法在两张误差图中都表现出最低的训练和验证误差。这表明,与SE相比,CBAM在提高基线模型的泛化能力方面具有更大的能力。
  • CBAM的整体开销在参数和计算方面都相当小。

4.3.用Grad-CAM进行网络可视化

CBAM集成网络的Grad-CAM掩码比其他方法更能覆盖目标物体区域。CBAM集成网络能够很好地学习利用目标物体区域的信息,并从这些信息中聚集特征。

4.4.MS COCO物体检测

观察到基线的明显改善,证明了CBAM在其他识别任务上的通用性能。

4.5.VOC 2007 物体检测

CBAM在两个骨干网络的情况下提高了所有强基线的准确性。

5.结论

我们提出了卷积瓶颈注意力模块(CBAM),这是一种提高CNN网络表示能力的新方法。我们将基于注意力的特征细化与通道和空间这两个独特的模块结合起来,在保持小的开销的同时实现了相当大的性能改进。对于通道注意,我们建议使用最大集合特征和平均集合特征,从而产生比SE更精细的注意。我们通过利用空间注意力来进一步提高性能。我们的最后一个模块(CBAM)学习什么和在哪里强调或抑制,并有效地改进中间特征。为了验证其功效,我们用各种最先进的模型进行了广泛的实验,并证实CBAM在三个不同的基准数据集上的表现优于所有的基线: ImageNet-1K、MS COCO和VOC 2007。此外,我们直观地看到了该模块是如何准确推断出一个输入图像的。有趣的是,我们观察到,我们的模块诱导网络正确地聚焦于目标对象。我们希望CBAM成为各种网络结构的重要组成部分。

代码实现

https://github.com/xmu-xiaoma666/External-Attention-pytorch
https://github.com/Jongchan/attention-module

个人总结

这是一个比SE-Net更强到,且轻量化的注意力网络,融合了CA和SA,可广泛用于多种CNN网络中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文精读——CBAM: 卷积块注意力模型】 的相关文章

  • SpringBoot整合ElasticSearch

    原文链接 ElasticSearch是个开源分布式搜索引擎 xff0c 提供搜集 分析 存储数据三大功能 它的特点有 xff1a 分布式 xff0c 零配置 xff0c 自动发现 xff0c 索引自动分片 xff0c 索引副本机制 xff0
  • Python将二维数组输出为图片

    原文链接 使用Python读取二维数组 xff0c 将二维数组输出为图片 xff0c 并保存在本地 代码如下 xff1a span class token comment coding 61 utf8 span span class tok
  • 如何使用Tin快速搭建Gitlab-ce?(史上最简单方法)

    GitLab是Git代码版本管理平台 xff0c 相比于GitHub xff0c GitLab还免费支持私人仓库 GitLab ce是gitlab的开源版本 目前网上Gitlab ce的安装方法有很多 xff0c 但大同小异都需要安装各种依
  • 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

    原文链接 自动编码器 xff08 Auto Encoder xff0c AE xff09 自动编码器 xff08 Auto Encoder xff0c AE xff09 自编码器 xff08 autoencoder xff09 是神经网络的
  • PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法

    原文链接 1 通道数问题 xff1a 描述一个像素点 xff0c 如果是灰度 xff0c 那么只需要一个数值来描述它 xff0c 就是单通道 如果有RGB三种颜色来描述它 xff0c 就是三通道 最初输入的图片样本的 channels xf
  • Python中LSTM回归神经网络的时间序列预测

    原文链接 这个问题是国际航空乘客预测问题 xff0c 数据是1949年1月到1960年12月国际航空公司每个月的乘客数量 xff08 单位 xff1a 千人 xff09 xff0c 共有12年144个月的数据 网盘链接 提取码 xff1a
  • pip安装时 fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory

    原文链接 使用pip安装模块 xff0c 出现错误 xff1a c users anaconda3 include pyconfig h 68 fatal error C1083 无法打开包括文件 io h No such file or
  • linux 程序被Killed,查看原因

    原文链接 1 查看信息 xff1a 输入以下程序 xff1a dmesg egrep i B100 39 killed process 39 可以输出最近killed的信息 2 设定kill优先度 xff1a xff08 1 xff09 完
  • Kafka的幂等性与事务性理解

    最近在深入理解Flink的Exactly Once xff0c 发现Flink Checkpoint只能保障Flink程序内部的一致性 xff0c 无法保证Sink到外部系统的Exactly Once语义 但是Sink到外部如果实现了Two
  • 为什么不直接操作State,而是要额外定义一个变量

    最近浏览Flink文章的时候发现一个现象 xff0c 就是在操作State的时候 xff0c 很多文章里面并不会直接操作State xff0c 而是会定义一个相似的变量去操作 xff0c 在 snapshot 和 recover 的时候讲变
  • 了解下SparkSQL中的笛卡尔积

    虽然应该尽量避免使用笛卡尔积 xff0c 因为要全量匹配 xff0c 所以运算的效率十分低下 xff0c 但是有些业务有必须得用 xff0c 所以在此了解下SparkSQL中的笛卡尔积 SparkSQL中计算笛卡尔积时有两种Join方式 x
  • 在Redis集群模式下使用pipeline进行批量操作

    最近开始又接触到了Redis xff0c 之前在工作中使用Redis的时候 xff0c 由于QPS不高 xff0c 都是直接get set搞定了 这次遇到的业务数据量比较大 xff0c 更新也很频繁 xff0c Redis使用是集群模式 x
  • RDD计算时是把数据全部加载至内存么

    RDD的本质 RDD的本质是一个函数 而RDD的变换不过是函数的嵌套 RDD有两类 输入的RDD 典型如KafkaRDD JdbcRDD转换的RDD 如MapPartitionsRDD RDD的处理流程 以如下代码为例 sc textFil
  • mysql中limit用法详解

    Mysql中limit的用法详解 在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql 已经为我们提供了这样一个功能 xff0c 尽管语法逻辑很
  • 练习代码遇到的零碎知识

    一 xff0c c 43 43 中使用malloc 时 xff0c 出现error malloc was not declared in this scope 1 书写错误 2 没有引用相应的库 解决方法 xff1a 引入stdlib h库
  • ThreadLocal是干嘛用的?

    ThreadLocal是通过将变量设置成Thread的局部变量 xff0c 即使用该变量的线程提供一个独立的副本 xff0c 可以独立修改 xff0c 不会影响其他线程的副本 xff0c 这样来解决多线程的并发问题 ThreadLocal主
  • linux下命令清空回收站

    命令行强制清空回收站 回收站其实就是一个文件夹 xff0c 存放被删掉的文件 ubuntu 回收站的具体位置是 xff1a HOME local share Trash 进到这个目录下直接rm掉所有文件 xff1a sudo rm fr H
  • python语言print()用法应用详解 及格式化输出

    目录 一 print 函数概述 1 1print基本语法 xff1a 1 2 print参数的具体例子 1 2 1 objects基本语法 1 2 2 sep基本语法 1 2 3 end基本语法 1 2 4 file的基本语法 二 格式化输
  • 数据容器(序列)的切片

    目录 1 序列 2 序列的常用操作 切片 2 1 基本语法 2 2 例子 3 序列的切片实践 1 序列 序列是指 xff1a 内容连续 有序 xff0c 可使用下标索引的一类数据容器 列表 xff0c 元组 xff0c 字符串 xff0c
  • 一、Win10+非英伟达显卡+Anaconda+Pytorch安装

    目录 一 Python 二 显卡 2 1查看显卡类型 2 2显卡类型简介 2 2 1显示 2 2 2 呈现 三 安装Anaconda 3 1 安装Anaconda 3 2 创建pytorch环境 四 安装Pytorch 4 2镜像安装 xf

随机推荐