当前位置: 首页 > article >正文

模块学习篇#2:解析常用于YOLO等深度学习模型的注意力机制CBAM

CBAM(Convolutional Block Attention Module)是一种用于增强卷积神经网络(CNN)性能的注意力机制模块。它由Sanghyun Woo等人在2018年的论文中提出。CBAM的主要目标是通过在CNN中引入通道注意力和空间注意力来提高模型的感知能力,从而在不增加网络复杂性的情况下改善性能。

一、注意力概念引入

注意力机制,即Attention Mechanism/Attention Module,深度学习中的注意力机制和人类视觉的注意力机制类似,就是在更多信息中把注意力集中放在重要的点上,选出关键信息,而忽略其他不重要的信息。

注意力机制的核心思想

类比寻址:想象在大脑中搜索记忆时,你会根据当前需求(Query)筛选相关记忆片段(Key),并提取有价值的信息(Value)。注意力机制模拟这一过程,通过三个核心步骤实现:

  1. 确定关注点(Query):当前需要处理的目标元素(如翻译中的目标词)。

  2. 匹配相关性(Query-Key交互):计算Query与所有Key的相似度,确定各信息的重要性。

  3. 整合关键信息(加权Value):根据权重对Value加权求和,生成上下文相关的输出。

Attention从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大,越聚焦在对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

因此,通俗地讲,Attention Mechanism就是指能够使模型更关注重要信息的方法或者模块。

 二、CBAM

 

这张图表示的就是CBAM的过程,可以看到包含了两个重要的组分:Channel注意力(CAM)和Spatial注意力(SAM)。具体地,它们的作用如下:

  1. 通道注意力模块(Channel Attention Module):用于建模通道之间的依赖关系,生成通道注意力图。

  2. 空间注意力模块(Spatial Attention Module):用于建模空间位置之间的依赖关系,生成空间注意力图。

 1、通道注意力CAM

通道注意力模块的主要目标是显式地建模通道之间的依赖关系,生成通道注意力图。具体来说,通道注意力模块通过以下步骤实现:

a.全局信息聚合:通过全局平均池化(Global Average Pooling, GAP)和全局最大池化(Global Max Pooling, GMP)操作,将输入特征的空间维度压缩为1,生成两个通道描述符。
b.特征变换:将两个通道描述符通过共享的多层感知机(MLP)进行特征变换,生成通道注意力图。
c.激活:通过Sigmoid函数将通道注意力图的值归一化到[0, 1]范围内

其中MLP表示多层感知机,通常由两个全连接层组成,中间通过ReLU激活函数。这似乎是对于初学者最难懂的地方。大家可以参考这篇文章:

【深度学习】多层感知机(MLP)_mlp多层感知机-CSDN博客

总的来说,MLP表示多层感知机包括输入层、隐藏层和输出层,通过训练来优化神经元的权重和偏置,使神经网络能够学习到输入和输出之间的映射关系。而Shared MLP是点云处理网络中的一种说法,强调对点云中的每一个点都采取相同的操作。其本质上与普通MLP没什么不同,其在网络中的作用即为MLP的作用:特征转换、特征提取

2、空间注意力SAM 

首先将通道本身进行降维,分别获取最大池化和平均池化的结果,然后拼接,再使用一个卷积层进行学习。 

空间注意力模块的主要目标是显式地建模空间位置之间的依赖关系,生成空间注意力图。具体来说,空间注意力模块通过以下步骤实现:

a.池化:对输入特征进行最大池化和平均池化,生成两个空间描述符。
b.特征融合:将两个空间描述符在通道维度上拼接,然后通过一个卷积层生成空间注意力图。
c.激活:通过Sigmoid函数将空间注意力图的值归一化到[0, 1]范围内。

 3、小结

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

三、作用

1、提升特征表达能力

CBAM模块通过显式地建模通道和空间两个维度的注意力,能够显著提升模型的特征表达能力。通道注意力模块能够关注重要的通道特征,而空间注意力模块能够关注重要的空间位置特征。

2、轻量级设计

CBAM模块的设计非常轻量级,不会显著增加模型的计算量和参数量。这使得CBAM模块可以轻松地插入到各种深度卷积神经网络中,而不会对模型的性能产生负面影响。

3、即插即用

CBAM模块具有即插即用的特点,可以轻松地插入到任何深度卷积神经网络中。这使得CBAM模块在实际应用中非常方便,无需对模型进行复杂的修改。

四、总结

CBAM(Convolutional Block Attention Module)是一种旨在提升卷积神经网络(CNN)性能的注意力机制模块。通过引入通道注意力(CAM)和空间注意力(SAM)机制,CBAM能够有效地提升模型的特征表达能力,专注于重要的通道特征和空间位置特征。其设计不仅轻量级且计算效率高,能在不增加模型复杂度的情况下显著改善性能。CBAM的即插即用特性使得它能够方便地集成到现有网络架构中,适用于多种深度学习应用。此外,通道和空间注意力模块的结合,提升了模型的感知能力并优化了计算资源的使用,因此,CBAM在实际应用中具备较高的实用价值和广泛的适用性。

五、参考文章

 深度学习】多层感知机(MLP)_mlp多层感知机-CSDN博客

Shared MLP的作用是什么?-CSDN博客

通俗易懂理解注意力机制(Attention Mechanism)-CSDN博客

CBAM注意力机制详解与实现-CSDN博客

【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)-CSDN博客


http://www.kler.cn/a/611588.html

相关文章:

  • Oracle常用分析诊断工具(9)——ADDM
  • Java单例设计模式详解
  • 深度学习篇---卷积网络结构
  • 【CodeReview】Jupiter(Eclipse插件)代码审查工具简介
  • Oracle补丁自动化安装步骤
  • 阶段一:Java基础语法
  • 运行前端项目报错解决方法
  • 游戏引擎学习第184天
  • MTK Android15 去掉设置中的顶部空白
  • 苹果与安卓,鸿蒙下跨设备,应用分享
  • 12届蓝桥杯—货物摆放
  • 【软件工程】简答题
  • 开源软件许可证冲突的原因和解决方法
  • ZW3D二次开发_非模板表单_控件_添加回调
  • Leetcode12-整数转罗马数字
  • 数据库基础知识点(系列七)
  • 【开题报告+论文+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现
  • 【后端】【Django DRF】从零实现RBAC 权限管理系统
  • Ubuntu22.04搭建freeradius操作说明
  • Java基础 3.22