python打卡第49天

知识点回顾:

  1. 通道注意力模块复习
  2. 空间注意力模块
  3. CBAM的定义

 

CBAM 注意力模块介绍

从 SE 到 CBAM:注意力机制的演进
之前我们介绍了 SE(Squeeze-and-Excitation)通道注意力模块,其本质是对特征进行增强处理。现在,我们进一步探讨一种更强大的注意力机制:CBAM(Convolutional Block Attention Module)。

CBAM 的核心目标与价值
CBAM 是一种轻量级、可即插即用的注意力模块,能够无缝集成到各种卷积神经网络(CNN)架构中。它的核心原理是让模型自动学习特征图在通道和空间两个维度上的重要性权重,并据此对特征图进行自适应的调整——强化关键特征,弱化非关键特征。这一过程显著提升了模型的特征表征能力和最终性能。形象地说,CBAM 如同为模型配备了“智能眼镜”,使其能更精准地聚焦于输入图像中最具信息量的部分。

CBAM 的组成结构:通道与空间注意力的结合
CBAM 由两个顺序连接的子模块构成:

通道注意力模块(Channel Attention Module):分析并确定哪些特征通道包含更关键的信息(例如,识别与特定物体颜色或纹理相关的通道)。

空间注意力模块(Spatial Attention Module):定位并确定关键信息在特征图空间维度上的具体位置(例如,识别物体在图像中的区域)。
处理流程为:输入特征图 → 通道注意力模块 → 空间注意力模块 → 输出增强后的特征图。

相较于 SE 模块的突破

SE 的局限:SE 仅聚焦于学习“哪些通道重要”,而忽略了“重要信息在空间中的具体位置”。

CBAM 的突破:

通过通道注意力明确“关注哪些特征通道”。

通过空间注意力定位“在空间中的哪个位置关注”。

二者协同工作,使模型能够同时学习“关注什么内容”和“在何处关注”,从而实现了更全面、更强大的特征表达能力提升。

CBAM 的优势特点

轻量高效:仅通过全局池化操作和少量简单卷积层实现,计算开销小。

即插即用:无需改动原有网络的主体结构,可方便地插入卷积层之间。

双重优化:同时提升特征在通道维度和空间维度的质量,在处理复杂任务(如小目标检测、语义分割)时效果尤为显著。

通用性强:与 SE 等注意力模块类似,CBAM 也属于“即插即用”型模块,适用于广泛的 CNN 架构(如 ResNet, YOLO 等)。

import torch
import torch.nn as nnclass ChannelAttention(nn.Module):def __init__(self, in_channels, reduction_ratio=16):"""通道注意力机制初始化参数:in_channels: 输入特征通道数reduction_ratio: 通道压缩比例,默认16"""super().__init__()# 特征压缩操作:使用自适应池化获取通道统计信息self.channel_avg = nn.AdaptiveAvgPool2d(1)  # 提取通道均值特征self.channel_max = nn.AdaptiveMaxPool2d(1)  # 提取通道峰值特征# 通道关系学习模块:共享权重的多层感知机self.channel_mlp = nn.Sequential(nn.Linear(in_channels, in_channels // reduction_ratio, bias=False),nn.ReLU(inplace=True),  # 原位激活减少内存占用nn.Linear(in_channels // reduction_ratio, in_channels, bias=False))# 权重归一化层self.weight_activ = nn.Sigmoid()def forward(self, feature_map):"""特征图通道增强处理参数:feature_map: 输入特征张量 [B, C, H, W]返回:通道增强后的特征张量"""batch_size, num_channels, _, _ = feature_map.size()# 通道统计信息计算avg_stats = self.channel_avg(feature_map).view(batch_size, num_channels)max_stats = self.channel_max(feature_map).view(batch_size, num_channels)# 双路特征融合channel_weights = self.channel_mlp(avg_stats) + self.channel_mlp(max_stats)# 生成通道注意力掩码attention_mask = self.weight_activ(channel_weights).view(batch_size, num_channels, 1, 1)# 应用注意力权重return feature_map * attention_mask  # 广播机制自动扩展维度
import torch
import torch.nn as nnclass SpatialAttention(nn.Module):def __init__(self, kernel_size=7):"""空间注意力机制初始化参数:kernel_size: 卷积核尺寸,控制感受野大小(必须为奇数)"""super().__init__()# 特征融合卷积层:将双通道特征图融合为单通道空间权重# 使用奇数卷积核确保对称填充 (padding=kernel_size//2)self.spatial_conv = nn.Conv2d(in_channels=2, out_channels=1, kernel_size=kernel_size,padding=kernel_size // 2,  # 保持特征图尺寸不变bias=False  # 无偏置项)# 空间权重归一化self.weight_activ = nn.Sigmoid()def forward(self, feature_map):"""特征图空间增强处理参数:feature_map: 输入特征张量 [B, C, H, W]返回:空间增强后的特征张量"""# 通道维度压缩:生成空间显著性特征# 平均池化:捕获全局上下文信息 [B, 1, H, W]channel_avg = torch.mean(feature_map, dim=1, keepdim=True)# 最大池化:捕获显著局部特征 [B, 1, H, W]channel_max, _ = torch.max(feature_map, dim=1, keepdim=True)# 双通道特征拼接:融合不同视角的空间信息 [B, 2, H, W]spatial_stats = torch.cat([channel_avg, channel_max], dim=1)# 空间特征学习:通过卷积生成注意力热图attention_heatmap = self.spatial_conv(spatial_stats)# 生成空间注意力掩码 [B, 1, H, W]spatial_mask = self.weight_activ(attention_heatmap)# 应用空间注意力权重return feature_map * spatial_mask  # 广播机制自动扩展通道维度

 

@浙大疏锦行

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

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

相关文章

iOS和桌面双端抓包实战经验总结:Sniffmaster与常见工具组合解析

近几年,移动端和桌面端的网络调试工作变得越来越“棘手”。过去一个代理证书搞定的场景,现在常常被HTTPS加密、双向验证、App安全策略给难住。特别是涉及到iOS平台时,很多传统抓包方案都不再适用。作为一名在多个平台开发和测试的程序员&…

cloudstudio腾讯云:matplotlib 设置中文字体

检查可用字体: import matplotlib.font_manager as fm fonts [f.name for f in fm.fontManager.ttflist] print(fonts) # 查看系统中可用的字体列表# 列出所有中文字体文件 !fc-list :langzh没有中文字体,需要下载 !sudo apt-get install fonts-wqy-m…

Django中的ORM的使用步骤----以MySQL为例

1 以纯Python的形式创建项目虚拟环境 2 命令安装Django 3 在当前虚拟环境目录下命令创建Django项目 4 命令创建app 注: 若想将创建的子应用存放到指定目录,如app, 那么需要先手动创建app目录,再手动创建子应用目录,如o…

Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性

Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性 Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性Send trait:允许在线程之间转移所有权Sync trait:允许多线程访问手动实现 Send 和 Sync 是不安全的练习题 Rust…

【C++】第十一节—一文详解vector(使用+杨辉三角+深度剖析+模拟实现+细节详细补充)

Hi,我是云边有个稻草人,偶尔中二的C领域博主^(* ̄(oo) ̄)^,与你分享专业知识—— C_本篇博客所属专栏—持续更新中—欢迎订阅喔 目录 一、vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 (1&…

华为智选携手IAM:突破技术边界,重塑智慧健康家居新时代

华为智选与IAM的联动创研,是科技与健康两大领域深度结合的推动者,更是健康智能家电创新的引领者。他们不再只是产品的制造商,而是生活方式的革新者——用创新科技重构健康生活,用智慧生态重塑家居体验。在这场深度的跨界融合中&am…

基于cornerstone3D的dicom影像浏览器 第三十一章 从PACS服务加载图像

文章目录 前言一、两个服务接口1. 查询检查接口2. 查询图像接口 二、查询界面组件三、修改归档总结 前言 "基于cornerstone3D的dicom影像浏览器"系列文章中都是加载本地文件夹的的dicom图像。 作为一个合格的dicom影像浏览器需要对接PACS服务端,从PACS服…

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…

基于React Native开发HarmonyOS 5.0医疗类应用

随着HarmonyOS 5.0的发布和React Native技术的成熟,开发者现在可以利用React Native框架为HarmonyOS平台构建高性能的跨平台医疗应用。 一、技术选型与优势 1.React Native HarmonyOS的组合优势 (1)跨平台能力​​:React Nati…

姜伟生《统计至简》

姜伟生《统计至简》 系列丛书之一 这套书图真漂亮,字间距也大,特别合适直接作为课件。但是理论上弱,有的地方算法也get不点上。适合初学者,因为能看图说话;又不适合初学者,因为没有解析、没有分析。 这学…

滚动—横向滚动时,如何直接滚动到对应的内容板块

使用scrollIntoView方法方法解读 scrollIntoView 是 HTML 元素(HTMLElement)的一个方法。当调用该方法时,它会尝试将调用它的元素滚动到浏览器的可视区域内。这个方法特别适用于处理页面上的滚动行为,比如让用户能够快速定位到页面…

HTML5 定位网页元素

1. 定位(position) position:static(标准) position:relative(相对定位) 偏移量的方向 相对定位的规律 浮动元素设置相对定位 position:absolute(绝对…

分类数据集 - 植物分类数据集下载

数据集介绍:植物分类数据集,真实场景高质量图片数据;适用实际项目应用:自然场景植物分类项目,以及作为通用分类数据集场景数据的补充;数据集类别:标注说明:采用文件夹来区分不同的目…

​React Hooks 的闭包陷阱问题

这是主包在面试中遇到的一道题目,面试官的问题是:"这个页面初次展示出来时Count和step的值是什么,我点击按钮count和step的值有什么变化?“ 这个题目主包回答的不好,所以想做一个总结。 题目 import React, { …

新基建浪潮下:中国新能源汽车充电桩智慧化建设与管理实践

在新基建战略的强力推动下,中国新能源汽车充电桩建设正迎来智慧化升级的重要机遇期。作为连接能源革命与交通革命的关键节点,充电基础设施的智能化转型不仅关乎新能源汽车产业的可持续发展,更是构建新型电力系统的重要支撑。当前,…

如何在多任务环境中设定清晰的项目优先级?

在多任务环境中设定清晰的项目优先级需要明确项目战略价值、紧急性、资源利用效率、风险管理。其中,明确项目战略价值尤为重要,它决定了项目对组织整体战略目标实现的贡献程度。例如,战略价值高的项目,即使不紧急,也应…

【Django】性能优化-普通版

性能优化: 思路 通常无论是什么编程语言或者是什么框架,瓶颈通常都是数据库相关的操作; 大部分的查询慢的问题接口都是频繁查库、全盘扫描、多层for循环嵌套、高频查redis、序列化时多级外键; 多用O(1)查找复杂度的数据 合理使…

数据治理域——离线数据开发

摘要 文本主要介绍了离线数据开发相关内容,包括业务与流程、阿里MaxCompute系统设计以及阿里调度系统设计。离线数据开发是大数据开发核心组成部分,用于处理批量数据,支持企业多种需求,其流程涵盖需求调研、数据源接入等环节。阿里MaxCompute系统架构与特点被阐述,调度系…

python-docx 库教程

Python-docx 库介绍 官网文档 python-docx 是一个用于创建和修改 Microsoft Word (.docx) 文件的 Python 库。它允许你通过编程方式生成格式化的文档,添加文本、段落、表格、图片等元素,而无需依赖 Microsoft Word 应用程序。 主要功能 创建新的 Word…

Ansible小试牛刀

注意事项 除了安装的zabbix相关组件 使用此脚本安装的所有软件版本均为系统默认版本 安装软件 zabbix相关组件,包括server,agent等 MySQL Redis NGINX openjdk maven nodejs keepalived iptables ipvsadm 使用剧本 --- - hosts: allname…