【Stable Diffusion 1.5 】在 Unet 中每個 Cross Attention 塊中的張量變化過程

系列文章目錄


文章目錄

  • 系列文章目錄
  • 前言
      • 特征圖和注意力圖的尺寸差異原因
      • 在Break-a-Scene中的具體實現
      • 總結


前言

特征圖 (Latent) 尺寸和注意力圖(attention map)尺寸在擴散模型中有差異,是由于模型架構和注意力機制的特性決定的。
在這里插入圖片描述

特征圖和注意力圖的尺寸差異原因

  1. 不同的功能目的

    • 特征圖(Feature Maps):承載圖像的語義和視覺特征,維持空間結構
    • 注意力圖(Attention Maps):表示不同位置之間的關聯強度,是一種關系矩陣
  2. UNet架構中的特征圖尺寸
    在U-Net中,特征圖的尺寸在不同層級有變化:

    • 輸入圖像通常是 512×512 或 256×256
    • 下采樣路徑(Encoder):尺寸逐漸縮小 (512→256→128→64→32→16…)
    • 上采樣路徑(Decoder):尺寸逐漸增大 (16→32→64→128→256→512…)

    在Break-a-Scene代碼中,我們看到特征圖尺寸被下采樣到64×64:

    downsampled_mask = F.interpolate(input=max_masks, size=(64, 64))
    
  3. 注意力機制中的尺寸計算
    注意力機制處理的是"token"之間的關系,其中:

    • 自注意力(Self-Attention):特征圖中的每個位置視為一個token
    • 交叉注意力(Cross-Attention):文本序列中的token與特征圖中的位置建立關聯

    如果特征圖尺寸是h×w,則自注意力矩陣的尺寸是(hw)×(hw),這是一個平方關系

    在代碼中,注意力圖通常被下采樣到16×16:

    GT_masks = F.interpolate(input=batch["instance_masks"][batch_idx], size=(16, 16))
    
  4. 計算效率考慮

    • 注意力計算的復雜度是O(n2),其中n是token數量
    • 對于64×64的特征圖,如果直接計算自注意力,需要處理4096×4096的矩陣
    • 為了降低計算量,通常在較低分辨率(如16×16)的特征圖上計算注意力,這樣只需處理256×256的矩陣

在Break-a-Scene中的具體實現

在Break-a-Scene中,這些尺寸差異體現在:

  1. 兩種不同的損失計算

    a. 掩碼損失(Masked Loss):應用在64×64的 Latent 上

    max_masks = torch.max(batch["instance_masks"], axis=1).values
    downsampled_mask = F.interpolate(input=max_masks, size=(64, 64))
    model_pred = model_pred * downsampled_mask
    target = target * downsampled_mask
    

    b. 注意力損失(Attention Loss):應用在16×16的注意力圖上

    GT_masks = F.interpolate(input=batch["instance_masks"][batch_idx], size=(16, 16))
    agg_attn = self.aggregate_attention(res=16, from_where=("up", "down"), is_cross=True, select=batch_idx)
    
  2. 注意力存儲的篩選

    在存儲注意力圖時,只保留小尺寸的注意力圖:

    def forward(self, attn, is_cross: bool, place_in_unet: str):key = f"{place_in_unet}_{'cross' if is_cross else 'self'}"if attn.shape[1] <= 32**2:  # 只保存小于或等于32×32的注意力圖self.step_store[key].append(attn)return attn
    
  3. 注意力聚合

    在聚合不同層的注意力時,確保只使用匹配目標分辨率的注意力圖:

    def aggregate_attention(self, res: int, from_where: List[str], is_cross: bool, select: int):# ...num_pixels = res**2for location in from_where:for item in attention_maps[f"{location}_{'cross' if is_cross else 'self'}"]:if item.shape[1] == num_pixels:  # 只選擇匹配分辨率的注意力圖cross_maps = item.reshape(self.args.train_batch_size, -1, res, res, item.shape[-1])[select]out.append(cross_maps)# ...
    

總結

特征圖和注意力圖尺寸的差異主要是因為:

  1. 它們在模型中的功能不同
  2. 注意力計算的計算復雜度要求在較低分辨率上進行
  3. UNet架構中的不同層級有不同的特征圖尺寸
  4. 為了平衡精度和計算效率,Break-a-Scene使用不同分辨率的特征圖和注意力圖來計算不同類型的損失

這種設計使得Break-a-Scene能夠有效地學習token與圖像區域之間的對應關系,同時保持計算效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82852.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【監控】Prometheus+Grafana 構建可視化監控

在云原生和微服務架構盛行的今天&#xff0c;監控系統已成為保障業務穩定性的核心基礎設施。作為監控領域的標桿工具&#xff0c;Prometheus和Grafana憑借其高效的數據采集、靈活的可視化能力&#xff0c;成為運維和開發團隊的“標配”。 一、Prometheus Prometheus誕生于2012…

替代 WPS 的新思路?快速將 Word 轉為圖片 PDF

在這個數字化辦公日益普及的時代&#xff0c;越來越多的人開始關注文檔處理工具的功能與體驗。當我們習慣了某些便捷操作時&#xff0c;卻發現一些常用功能正逐漸變為付費項目——比如 WPS 中的一項實用功能也開始收費了。 這款工具最特別的地方在于&#xff0c;可以直接把 W…

CodeTop之數組中的第K個最大的元素

題目鏈接 215. 數組中的第K個最大元素 - 力扣&#xff08;LeetCode&#xff09; 題目解析 算法原理 解法一: 直接理由java內部的排序函數,Arrays.sort()進行排序, 然后我們直接返回第k個最大的元素 nums[nums.length-k] 解法二: 使用堆 我們先把所有元素丟到大根堆里面…

AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析(包括基于規則的方法、CRF模型和BERT微調模型)

大家好,我是微學AI,今天給大家介紹一下AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析。本文將深入探討三種不同的命名實體識別(NER)方法,包括基于規則的方法、CRF模型和BERT微調模型,用于識別文本中的地名(LOC)、機構名稱(ORG)和人名(PER)實體。通過系統…

IP動態偽裝開關

IP動態偽裝開關 在OpenWrt系統中&#xff0c;IP動態偽裝&#xff08;IP Masquerading&#xff09;是一種網絡地址轉換&#xff08;NAT&#xff09;技術&#xff0c;用于在私有網絡和公共網絡之間轉換IP地址。它通常用于允許多個設備共享單個公共IP地址訪問互聯網。以下是關于O…

【MySQL】第10節|MySQL全局優化與Mysql 8.0新增特性詳解

全局優化 mysql server參數 1. max_connections&#xff08;最大連接數&#xff09; 含義&#xff1a;MySQL 服務允許的最大并發連接數&#xff08;包括正在使用和空閑的連接&#xff09;。超過此限制時&#xff0c;新連接會被拒絕&#xff08;報錯 Too many connections&am…

VS Code 插件 Git History Diff

插件名 進命令行&#xff0c;進Git自己那個分支 查看分支 提交到Git的后想再把另一個也提交到那個分支&#xff0c;用這個命令

Shell腳本中的常用命令

一.設置主機名稱 文件設置 文件開機時已讀取所以要重新進入 命令更改&#xff08;即使生效&#xff09; 二.網絡管理命令 1.查看網卡命令 設置網卡 1&#xff09;DHCP工作模式 2)靜態IP 3&#xff09;修改網卡信息 三.簡單處理字符 1.打印連續數字 連續打印3個數字 指定打…

C++ 中 std::wstring::c_str() 的潛在風險與安全使用指南

一、問題背景 在開發過程中&#xff0c;我們經常會遇到不同接口之間的數據傳遞問題。例如&#xff0c;當調用某個接口時&#xff0c;需要傳入一個字符串指針作為數據接收的緩沖區&#xff0c;但外圍接口使用的是 std::wstring 類型。此時&#xff0c;如果直接將 std::wstring:…

‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry

解決方法&#xff1a; 1. npm cache clean --force 2.臨時切換到官方源 npm config set registry https://registry.npmjs.org/ npm install js0.1.0 npm config set registry https://registry.npmmirror.com/ # 切換回鏡像源

ubuntu24 安裝MongoDB-6.0.24 數據庫操作步驟和配置參數說明

目錄 1 下載MongoDB軟件 2 操作系統信息 3 MongoDB 軟件安裝步驟 4 編寫mongodb的配置文件 5 生成keyfile 6 使用mongo用戶啟動mongodb服務 7 設置開機啟動(mongo用戶) 8 安裝MongoDB shell&#xff0c;因為MongoDB-6.0.24 已經移除mongo命令 1 下載MongoDB軟件 https:…

單片機——keil5

文章目錄 安裝教程使用介紹案例展示 接下來進行keil5軟件的相關學習使用 安裝教程 參考視頻鏈接bilibili 51單片機 大約在8分鐘位置處 使用介紹 首先新建project選擇對應的芯片型號&#xff08;例如&#xff1a;STC89C52 —— 由于STC系列是國產&#xff0c;keil5軟件不支持…

計算機網絡相關發展以及常見性能指標

目錄 一、因特網概述 1.1 基本概念 1.2 因特網發展的三個階段 1.3 英特網服務提供者ISP 1.4 英特網的標準化工作 1.5 因特網的組成 1.6 簡單總結 二、3種交換方式 2.1 電路交換&#xff08;Circuit Switching&#xff09; 2.2 分組交換&#xff08;Packet Switching&…

Java 面試實錄:從Spring到微服務的技術探討

在一個明亮的會議室里&#xff0c;嚴肅的面試官與搞笑的程序員謝飛機正進行一場關于Java技術棧的面試。場景設定在一家知名互聯網大廠&#xff0c;他們的對話充滿了技術性與娛樂性。 第一輪&#xff1a;Spring框架與數據庫 面試官&#xff1a;“謝飛機&#xff0c;能解釋一下…

OpenCV CUDA模塊圖像過濾------創建一個 Scharr 濾波器函數createScharrFilter()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于創建一個 Scharr 濾波器&#xff08;基于 CUDA 加速&#xff09;&#xff0c;用于圖像的一階導數計算。它常用于邊緣檢測任務中&#…

yolov8分割任務的推理和后處理解析

文章目錄 一、前言二、分割模型的前向推理1. 檢測結果&#xff1a;來自Detect類的輸出2. 分割結果&#xff08;最終&#xff09;3. 與Detect的主要區別4. 工作流程 三、后處理1. 非極大值抑制&#xff08;NMS&#xff09;過濾檢測框2. 分割原型&#xff08;Mask Prototypes&…

4.1.1 Spark SQL概述

Spark SQL是Apache Spark的一個模塊&#xff0c;專門用于處理結構化數據。它引入了DataFrame這一編程抽象&#xff0c;DataFrame是帶有Schema信息的分布式數據集合&#xff0c;類似于關系型數據庫中的表。用戶可以通過SQL、DataFrames API和Datasets API三種方式操作結構化數據…

華為OD機試真題——書籍疊放(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

尚硅谷redis7 63-69 redis哨兵監控之理論簡介

63 redis哨兵監控之理論簡介 什么是哨兵 master掛了如何辦?從機原地待命。此時數據只能讀取不能更新。因此需要&#xff1a; 吹哨人巡查監控后臺master主機是否故障,如果故障了根據投票數自動將某一個從庫轉換為新主庫, 哨兵的作用 1、監控redis運行狀態,包括master和slave…

word文檔格式規范(論文格式規范、word格式、論文格式、文章格式、格式prompt)

文章目錄 prompt prompt [格式要求] - 字體&#xff1a;中文宋體小四&#xff1b;英文Times New Roman 12pt&#xff1b;標題黑體 - 行距&#xff1a;1.5倍&#xff08;段前段后0行&#xff09; - 邊距&#xff1a;A4默認&#xff08;上下2.54cm&#xff0c;左右3.17cm&…