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
繁體地址,請注明出處:http://hk.pswp.cn/news/909058.shtml
英文地址,請注明出處:http://en.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…