卷积注意力模块 CBAM | CBAM: Convolutional Block Attention Module

在这里插入图片描述

论文名称:《CBAM: Convolutional Block Attention Module》

论文地址:https://arxiv.org/pdf/1807.06521.pdf


我们提出了卷积块注意力模块(CBAM),这是一种简单但有效的前馈卷积神经网络注意力模块。给定一个中间特征图,我们的模块会按顺序沿两个独立的维度进行注意力推理,分别是通道和空间,然后将注意力图与输入特征图相乘,以实现自适应特征优化。由于 CBAM 是一个轻量级且通用的模块,它可以无缝地集成到任何 CNN 架构中,增加的负担微不足道,并且可以与基础 CNN 一起进行端到端的训练。

我们通过在 ImageNet-1KMS COCO 检测和 VOC 2007 检测数据集上的广泛实验验证了 CBAM。我们的实验显示,各种模型在分类和检测性能上都取得了稳定的改进,证明了 CBAM 的广泛适用性。代码和模型将公开提供。


问题背景

在计算机视觉领域,尤其是图像识别任务中,卷积神经网络(CNN)已经取得了显著的成功。然而,随着研究的深入,学者们开始关注如何通过增强网络的深度、宽度和模型复杂度来进一步提升性能。这篇文章介绍了一个全新的视角——注意力机制(Attention Mechanism),它能够更智能地从输入的特征图中提取有用信息,通过突出重要的特征并抑制不必要的信息来增强模型的表现力。


核心概念

文章的核心概念是引入了一个名为“卷积块注意力模块”(Convolutional Block Attention Module, CBAM),这是一种轻量级但非常有效的注意力机制,设计用来顺序推断通道和空间维度的注意力图,这些注意力图随后被用来乘以输入特征图,以进行自适应特征提炼。CBAM 的设计易于集成到任何 CNN 架构中,几乎不增加额外计算负担。


模块的操作步骤


在这里插入图片描述

CBAM 的概述。该模块包含两个顺序执行的子模块:通道和空间。在深度网络的每个卷积块中,中间特征图都会通过我们的模块(CBAM)进行自适应优化。


CBAM 模块包括两个主要的子模块:通道注意力模块和空间注意力模块。首先,通道注意力模块通过压缩特征图的空间维度来强调“重要的”通道;其次,空间注意力模块则聚焦于“哪里”是图像的重要部分,这是对通道注意力的补充。这两个模块的顺序应用确保了网络能够综合考虑哪些特征是重要的,从而更精确地调整特征图。


在这里插入图片描述

每个注意力子模块的示意图。如图所示,通道子模块同时利用最大池化输出和平均池化输出,并通过一个共享的网络进行处理;而空间子模块则利用在通道轴上进行池化的两个相似输出,并将它们传递给一个卷积层。


文章贡献

这篇文章的主要贡献包括:

  1. 提出了一个简单而有效的注意力模块 CBAM,能够广泛应用于各种 CNN 模型以增强其表征能力。
  2. 通过在 ImageNet-1KMS COCOVOC 2007 数据集上的广泛实验验证了 CBAM 的有效性。
  3. 展示了 CBAM 在多种模型上一致地提升分类和检测性能,证明了其广泛的适用性。

实验结果与应用

实验结果表明,CBAM 能在不同的网络架构中提供一致的性能提升。无论是在图像分类还是在对象检测的任务中,CBAM 增强的网络都比基线模型表现更好。例如,在使用 ResNet-50 基线的 ImageNet 分类任务中,CBAM 能显著降低误差,从而提高准确率。此外,CBAM 对计算和参数的额外要求极低,使其非常适合集成到现有的复杂网络中,甚至是轻量级网络中,如 MobileNet


对未来工作的启示

CBAM 的成功展示了注意力机制在深度学习中的潜力,特别是在自动强调重要特征并抑制次要特征方面。这种机制不仅可以提高模型的表现,还可以提高模型对输入数据中的噪声和不相关信息的鲁棒性。未来的工作可以探索将 CBAM 集成到更多类型的神经网络中,或者开发更先进的注意力机制,以解决更广泛的问题,如视频处理和自然语言处理。CBAM 的设计思想也可能激发研究人员思考如何通过注意力机制来优化模型的计算效率和性能。


代码

# https://openaccess.thecvf.com/content_ECCV_2018/papers/Sanghyun_Woo_Convolutional_Block_Attention_ECCV_2018_paper.pdf
import numpy as np
import torch
from torch import nn
from torch.nn import initclass ChannelAttention(nn.Module):def __init__(self, channel, reduction=16):super().__init__()self.maxpool = nn.AdaptiveMaxPool2d(1)self.avgpool = nn.AdaptiveAvgPool2d(1)self.se = nn.Sequential(nn.Conv2d(channel, channel // reduction, 1, bias=False),nn.ReLU(),nn.Conv2d(channel // reduction, channel, 1, bias=False),)self.sigmoid = nn.Sigmoid()def forward(self, x):max_result = self.maxpool(x)avg_result = self.avgpool(x)max_out = self.se(max_result)avg_out = self.se(avg_result)output = self.sigmoid(max_out + avg_out)return outputclass SpatialAttention(nn.Module):def __init__(self, kernel_size=7):super().__init__()self.conv = nn.Conv2d(2, 1, kernel_size=kernel_size, padding=kernel_size // 2)self.sigmoid = nn.Sigmoid()def forward(self, x):max_result, _ = torch.max(x, dim=1, keepdim=True)avg_result = torch.mean(x, dim=1, keepdim=True)result = torch.cat([max_result, avg_result], 1)output = self.conv(result)output = self.sigmoid(output)return outputclass CBAM(nn.Module):def __init__(self, channel=512, reduction=16, kernel_size=7):super().__init__()self.ca = ChannelAttention(channel=channel, reduction=reduction)self.sa = SpatialAttention(kernel_size=kernel_size)def forward(self, x):b, c, _, _ = x.size()residual = xout = x * self.ca(x)out = out * self.sa(out)return out + residualif __name__ == "__main__":input = torch.randn(64, 256, 8, 8)model = CBAM(channel=256, reduction=16, kernel_size=7)output = model(input)print(output.shape)

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

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

相关文章

transformer上手(10)—— 文本摘要任务

文本摘要是一个 Seq2Seq 任务,尽可能保留文本语义的情况下将长文本压缩为短文本。 文本摘要可以看作是将长文本“翻译”为捕获关键信息的短文本,因此大部分文本摘要模型同样采用 Encoder-Decoder 框架。当然,也有一些非 Encoder-Decoder 框架…

prompt提示词:AI英语词典,让AI教你学英语,通过AI实现一个网易有道英语词典

目录 英语词典提问技巧效果图:提示词: 英语词典提问技巧 随着AI工具的出现,学英语也可以变得很简单,大家可以直接通过AI 来帮助自己,提高记忆单词的效率,都可以不需要网易有道词典了,今天我教大…

分布式ID之雪花算法

1. Seata对雪花算法生成ID的改良 滑动验证页面 (含代码&讲解) Seata基于改良版雪花算法的分布式UUID生成器分析:时间戳和节点ID位置进行了调换。官网:Seata基于改良版雪花算法的分布式UUID生成器分析 | Apache Seata关于新版…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

第二证券|股息分红和送股哪个好?

在股票投资中,股息分红和分红送股是两种常见的股票分红方法。关于股息分红和送股哪个好,第二证券下面就为我们具体介绍一下。 股息分红和送股哪个好并没有一个绝对的答案,它们只是上市公司向股东分配利润的不同方法。股息分红的好处是投资者…

武汉星起航:挂牌上海股权中心,开启资本新篇章助力跨境电商飞跃

2023年10月30日,武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示,标志着这家在跨境电商领域拥有卓越声誉的企业正式迈入了资本市场的大门。对于武汉星起航来说,这不仅是其发展历程中的一个重要里程碑,更是对其业务…

STM32-TIM定时器与PWM输出

学习目标: 1. 熟练掌握 TIM 的参数配置。 2. 掌握通道的参数配置。 3. 深刻理解 PWM 与功率的关系。 4. 理解 PWM 的原理示意。 一 什么是 PWM 输出 PWM ( pulse width modulation )一种脉冲宽度调节技术。 PWM 的效果是什么样子&#xf…

AOMEI Partition Assistant傲梅分区助手技术员版:专业级的硬盘分区利器

在数字化时代,数据存储和管理变得愈发重要。对于电脑技术员而言,一款功能强大、操作简便的分区工具无疑是提高工作效率的得力助手。而傲梅分区助手技术员版(AOMEI Partition Assistant)正是这样一款备受赞誉的专业级硬盘分区软件。…

Day23.一刷数据结构算法(C语言版) 39组合总和;40组合总和II;131分割回文串

一、39组合总和 本题是集合里元素可以用无数次,那么和组合问题的差别,其实仅在于对startIndex上的控制 题目链接:组合总和 文章讲解:代码随想录 视频讲解:带你学透回溯算法-组合总和 (39.组合总和&#xff…

从零开始构建大语言模型(MEAP)

原文:annas-archive.org/md5/c19a4ef8ab1664a3c5a59d52651430e2 译者:飞龙 协议:CC BY-NC-SA 4.0 一、理解大型语言模型 本章包括 大型语言模型(LLM)背后的基本概念的高层次解释 探索 ChatGPT 类 LLM 源自的 Transfo…

workminer之dht通信部分

workminer是通过SSH爆破传播的挖矿木马,感染后会释放xmrig挖矿程序利用主机的CPU挖取北方门罗币。该样本能够执行特定的指令,指令保存在一个配置文件config中,config文件类似于xml文件,里面有要执行的指令和参数,样本中…

spring cloud eureka 初始化报错(A bean with that name has already been defined)

报错内容 The bean ‘eurekaRegistration’, defined in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration E u r e k a C l i e n t C o n f i g u r a t i o n . c l a s s ] , c o u l d n o t b e r e g i s t e r e d . A …

回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络…

《QT实用小工具·四十五》可以在界面上游泳的小鱼

1、概述 源码放在文章末尾 该项目实现了灵动的小鱼&#xff0c;可以在界面上跟随鼠标点击自由的游泳&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "magicfish.h" #include <QtMath> #include <QPainter>…

C++:map和set的封装

关于红黑树的模拟实现&#xff0c;大家不清楚的先去看看博主的博客再来看这篇文章&#xff0c;因为set和map的封装底层都是利用用的红黑树。所以这里不会过多介绍红黑树的相关内容&#xff0c;而更多的是去为了契合STL中的红黑树去进行改造&#xff0c;让封装的set和map能够去复…

CMake使用

一、CMake 是什么 CMake 是一个跨平台的自动化构建系统&#xff0c;它使用配置文件 CMakeLists.txt 来管理软件构建过程。CMake 基于 Makefile 做了二次开发。 二、单个文件目录 # CMake 最低版本号要求 cmake_minimum_required(VERSION 3.16.3)# 工程名 project(CMakeSingle)…

uniapp自定义返回事件(封装)

uniapp自定义返回事件 在我们使用uniapp时&#xff0c;我们导航栏一般都是自定义的&#xff0c;比如用uview框架的导航栏&#xff0c;那么返回事件通常会遇到以下几个问题 返回事件前需要做一些额外的处理 h5项目刷新页面后返回失效 返回按钮点击后到指定页面 如果只是监听返…

PhotosCollage for Mac:优雅且实用的照片拼贴软件

PhotosCollage for Mac是一款优雅且实用的照片拼贴软件&#xff0c;为Mac用户提供了一个便捷、高效的平台&#xff0c;以创建精美、个性化的照片拼贴作品。 PhotosCollage for Mac v1.4.1激活版下载 该软件界面简洁直观&#xff0c;操作便捷。用户只需将想要拼贴的照片拖入“照…

CSS基础:position定位的5个类型详解!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

Andorid复习

组件 TextView 阴影 android:shadowColor"color/red" 阴影颜色android:shadowRadius"3.0" 阴影模糊度&#xff08;大小&#xff09;android:shadowDx"10.0" 横向偏移android:shadowDy"10.0" 跑马灯 这里用自定义控件 public cla…