news 2026/6/11 7:28:58

掌握混合注意力 CBAM 与 BAM 模型结构——从通道注意力到空间注意力的融合实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
掌握混合注意力 CBAM 与 BAM 模型结构——从通道注意力到空间注意力的融合实践

目录

一、前言

二、什么是混合注意力机制

(一)注意力机制的发展过程

(二)为什么需要混合注意力

三、BAM 模型提出背景

(一)论文介绍

(二)BAM设计目标

四、BAM 整体结构

五、BAM 通道注意力模块

(一)作用

(二)实现过程

六、BAM 空间注意力模块

(一)作用

(二)实现方式

(三)为什么使用空洞卷积

七、BAM 特征融合机制

八、CBAM 模型提出背景

(一)论文介绍

(二)为什么提出CBAM

九、CBAM 整体结构

十、CBAM 通道注意力模块

(一)核心思想

(二)计算过程

(三)为什么同时使用两种池化

十一、CBAM 空间注意力模块

(一)核心思想

(二)计算过程

(三)结构图

十二、CBAM 工作流程分析

十三、BAM 与 CBAM 对比

(一)结构对比

(二)复杂度对比

(三)应用范围

(四)性能表现

十四、PyTorch实现CBAM

(一)通道注意力

(二)空间注意力

十五、CBAM 的应用场景

(一)图像分类

(二)目标检测

(三)语义分割

(四)医学影像

(五)工业视觉

十六、BAM 与 CBAM 的优势

(一)参数增加少

(二)易于集成

(三)提升明显

(四)泛化能力强

十七、总结


随着深度学习的发展,研究人员逐渐发现:

即使网络结构不断加深,卷积神经网络(CNN)依然存在一个问题:

网络不知道哪些特征更重要

例如:

在猫狗分类任务中:

  • 猫的耳朵可能很重要

  • 猫的眼睛可能很重要

  • 背景草地可能毫无意义

然而传统 CNN 会对所有特征一视同仁。

为了让神经网络学会:

关注重要信息 忽略无关信息

研究人员提出了各种注意力机制(Attention Mechanism)。

其中最经典的包括:

  • SENet

  • BAM

  • CBAM

  • ECA-Net

  • Coordinate Attention

如果说 SENet 开启了 CNN 注意力机制时代。

那么:

BAM 和 CBAM 则进一步将:

通道注意力 + 空间注意力

进行了融合。

使模型能够同时回答两个问题:

关注什么? 关注哪里?

本文将系统讲解 BAM 和 CBAM 的模型结构、核心原理、实现方式以及应用场景。


二、什么是混合注意力机制

(一)注意力机制的发展过程

CNN 注意力机制的发展大致经历了三个阶段。

第一阶段:

Channel Attention

代表模型:

SENet

关注:

哪个通道重要

第二阶段:

Spatial Attention

关注:

图像哪个位置重要

第三阶段:

Hybrid Attention

即:

通道注意力 + 空间注意力

同时建模。

代表模型:

BAM CBAM

(二)为什么需要混合注意力

假设网络识别一只猫。

仅使用通道注意力:

知道耳朵特征重要

但不知道:

耳朵在哪

仅使用空间注意力:

知道左上角重要

但不知道:

为什么重要

因此:

最佳方案就是:

知道什么重要 同时知道哪里重要

这就是混合注意力机制的核心思想。


三、BAM 模型提出背景

(一)论文介绍

2018年。

韩国 POSTECH 团队提出:

Bottleneck Attention Module

简称:

BAM

论文名称:

BAM: Bottleneck Attention Module

其核心思想:

在网络 Bottleneck 位置插入注意力模块。

增强关键特征表达能力。


(二)BAM设计目标

希望同时学习:

Channel Attention

和:

Spatial Attention

然后融合。

得到最终注意力权重。


四、BAM 整体结构

BAM结构如下:

Input ├── Channel Attention └── Spatial Attention ↓ Fusion ↓ Attention Map ↓ Output

其特点:

两条分支:

并行计算

最后融合。


五、BAM 通道注意力模块

(一)作用

学习:

哪些通道重要

(二)实现过程

首先:

Global Average Pooling

压缩空间信息。

得到:

C维向量

然后:

FC ↓ ReLU ↓ FC

生成通道权重。

流程:

Feature Map ↓ GAP ↓ FC ↓ ReLU ↓ FC ↓ Channel Weight

六、BAM 空间注意力模块

(一)作用

学习:

图像哪里重要

(二)实现方式

采用:

Dilated Convolution

空洞卷积。

结构:

Conv ↓ Dilated Conv ↓ Dilated Conv ↓ Spatial Map

(三)为什么使用空洞卷积

优势:

扩大感受野

能够获得更多上下文信息。

提高空间建模能力。


七、BAM 特征融合机制

BAM采用:

并行融合

方式。

公式思想:

Attention = Channel × Spatial

最终:

Output = Input × Attention

实现特征增强。


八、CBAM 模型提出背景

(一)论文介绍

同样在2018年。

韩国团队进一步提出:

Convolutional Block Attention Module

简称:

CBAM

论文名称:

CBAM: Convolutional Block Attention Module

(二)为什么提出CBAM

研究人员发现:

BAM虽然有效。

但结构稍显复杂。

因此设计:

更轻量 更容易集成

的注意力模块。

于是:

CBAM诞生。


九、CBAM 整体结构

CBAM结构:

Input ↓ Channel Attention ↓ Spatial Attention ↓ Output

与BAM最大的区别:

串行执行

而非并行。


十、CBAM 通道注意力模块

(一)核心思想

学习:

What

即:

关注什么

(二)计算过程

同时使用:

Global Average Pooling

和:

Global Max Pooling

流程:

Feature ├── Avg Pool └── Max Pool ↓ Shared MLP ↓ Add ↓ Sigmoid ↓ Channel Attention

(三)为什么同时使用两种池化

平均池化:

关注整体信息。

最大池化:

关注最显著特征。

二者结合:

效果更好。


十一、CBAM 空间注意力模块

(一)核心思想

学习:

Where

即:

关注哪里

(二)计算过程

沿通道维度:

分别进行:

Average Pool Max Pool

得到:

H × W

特征图。

然后:

Concat ↓ 7×7 Conv ↓ Sigmoid ↓ Spatial Attention

(三)结构图

Feature ↓ AvgPool MaxPool ↓ Concat ↓ 7×7 Conv ↓ Spatial Map

十二、CBAM 工作流程分析

完整流程:

Input ↓ Channel Attention ↓ Refined Feature ↓ Spatial Attention ↓ Refined Feature ↓ Output

即:

先关注:

什么重要

再关注:

哪里重要

十三、BAM 与 CBAM 对比

(一)结构对比

BAM:

并行结构

CBAM:

串行结构

(二)复杂度对比

BAM:

较复杂

CBAM:

更轻量

(三)应用范围

BAM:

研究领域较多。

CBAM:

工业应用更广泛。


(四)性能表现

ImageNet实验:

CBAM 通常略优于 BAM。

因此:

目前使用率更高。


十四、PyTorch实现CBAM

(一)通道注意力

import torch import torch.nn as nn class ChannelAttention(nn.Module): def __init__(self,in_planes,ratio=16): super().__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc = nn.Sequential( nn.Conv2d( in_planes, in_planes // ratio, 1 ), nn.ReLU(), nn.Conv2d( in_planes // ratio, in_planes, 1 ) ) self.sigmoid = nn.Sigmoid() def forward(self,x): avg = self.fc( self.avg_pool(x) ) maxv = self.fc( self.max_pool(x) ) return self.sigmoid( avg + maxv )

(二)空间注意力

class SpatialAttention(nn.Module): def __init__(self): super().__init__() self.conv = nn.Conv2d( 2, 1, kernel_size=7, padding=3 ) self.sigmoid = nn.Sigmoid() def forward(self,x): avg = torch.mean( x, dim=1, keepdim=True ) maxv,_ = torch.max( x, dim=1, keepdim=True ) x = torch.cat( [avg,maxv], dim=1 ) return self.sigmoid( self.conv(x) )

十五、CBAM 的应用场景

(一)图像分类

例如:

  • ResNet

  • EfficientNet


(二)目标检测

例如:

  • YOLOv5

  • YOLOv7

  • Faster R-CNN


(三)语义分割

例如:

  • DeepLab

  • U-Net


(四)医学影像

增强病灶区域关注能力。


(五)工业视觉

提升缺陷检测准确率。


十六、BAM 与 CBAM 的优势

(一)参数增加少

通常:

不到5%

参数增长。


(二)易于集成

可直接插入:

  • ResNet

  • VGG

  • MobileNet

  • DenseNet

等网络。


(三)提升明显

ImageNet实验中:

能够带来:

1%~3%

左右精度提升。


(四)泛化能力强

适用于:

  • 分类

  • 检测

  • 分割

等任务。


十七、总结

BAM 和 CBAM 是 CNN 注意力机制发展过程中的经典代表模型,它们首次系统地将通道注意力与空间注意力进行融合,使神经网络能够同时学习:

关注什么 关注哪里

本文重点掌握了:

1、混合注意力机制的发展背景;

2、BAM 模型结构;

3、BAM 通道注意力模块;

4、BAM 空间注意力模块;

5、CBAM 模型结构;

6、CBAM 通道注意力原理;

7、CBAM 空间注意力原理;

8、BAM 与 CBAM 的区别;

9、PyTorch 实现方式;

10、实际应用场景。

可以将两者简单理解为:

SENet 解决“什么重要”,CBAM 和 BAM 则进一步解决“什么重要以及哪里重要”。

因此,CBAM 和 BAM 已成为现代计算机视觉中最经典、最实用的注意力模块之一,也是学习深度学习注意力机制必须掌握的重要模型结构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 7:28:54

3分钟解锁B站学习新姿势:用AI总结功能把视频变笔记

3分钟解锁B站学习新姿势:用AI总结功能把视频变笔记 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 还在…

作者头像 李华
网站建设 2026/6/11 7:26:54

如何用untrunc拯救损坏的MP4视频:完整实践指南

如何用untrunc拯救损坏的MP4视频:完整实践指南 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 你是否曾因为相机突然断电而丢失重要会议录像&#xff1f…

作者头像 李华
网站建设 2026/6/11 7:24:58

三维动作智能解析引擎:OpenMMD如何重塑动画制作的技术范式

三维动作智能解析引擎:OpenMMD如何重塑动画制作的技术范式 【免费下载链接】OpenMMD OpenMMD is an OpenPose-based application that can convert real-person videos to the motion files (.vmd) which directly implement the 3D model (e.g. Miku, Anmicius) an…

作者头像 李华
网站建设 2026/6/11 7:22:11

终极指南:如何在Linux和Windows上实现Mac风格快捷键体验

终极指南:如何在Linux和Windows上实现Mac风格快捷键体验 【免费下载链接】kinto Mac-style shortcut keys for Linux & Windows. 项目地址: https://gitcode.com/gh_mirrors/kin/kinto 你是否曾经在Windows或Linux系统上工作时,怀念Mac上那些…

作者头像 李华
网站建设 2026/6/11 7:21:09

Citra模拟器终极指南:5步解决黑屏闪退与性能优化

Citra模拟器终极指南:5步解决黑屏闪退与性能优化 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/GitHub_Trending/ci/citra Citra模拟器作为最受欢迎的Nintendo 3DS模拟器,让无数玩家在PC上重温经典游戏。然而&a…

作者头像 李华