【深度學習】SDXL中的Offset Noise,Diffusion with Offset Noise,帶偏移噪聲的擴散

https://www.crosslabs.org//blog/diffusion-with-offset-noise

帶有偏移噪聲的擴散
針對修改后的噪聲進行微調,使得穩定擴散能夠輕松生成非常暗或非常亮的圖像。
作者:尼古拉斯·古藤伯格
|
2023年1月30日

馬里奧兄弟使用穩定擴散挖掘隧道。左圖顯示了未使用偏移噪聲的原始結果,右圖使用偏移噪聲顯示了更豐富的黑色調。
在這里插入圖片描述

穩定擴散在使用偏移噪聲前(左)和使用偏移噪聲后(右)

去噪擴散概率模型(Denoising Diffusion Probabilistic Models)是一種相對較新的生成神經網絡模型,可以從從數據中學習到的高維概率分布中生成樣本。其他解決同類問題的方法包括生成對抗網絡(Generative Adversarial Networks)、歸一化流(Normalizing Flows)以及各種形式的自回歸模型,這些模型一次或分批對維度進行采樣。此類模型的主要應用之一是在圖像合成中,擴散模型在圖像質量方面最近競爭力很強,特別是在生成全局連貫的圖像構圖方面。穩定擴散(Stable Diffusion)是一個預訓練的、公開可用的模型,能夠使用這種技術生成一些驚人的結果。然而,它有一個有趣的限制,似乎大多沒有被注意到。如果你試圖讓它生成特別暗或特別亮的圖像,它幾乎總是生成平均值相對接近0.5的圖像(全黑圖像為0,全白圖像為1)。例如:

在這里插入圖片描述

左上:暴雨中的黑暗小巷(0.301);右上:白色背景上的單色線條藝術標志(0.709);左下:陽光明媚的雪坡(0.641);右下:僅有火把照亮的廣場(0.452)

大多數情況下,這些圖像仍然是合理的。但是,這種平均值趨近于0.5的軟約束可能導致圖像顯得淡化、亮霧區域平衡其他暗區域、高頻紋理(在標志中)而不是空白區域、灰色背景而不是白色或黑色等。雖然有些可以通過手動后期處理來修正或調整,但這里也存在一個更大的潛在限制,即場景的整體色調可能與表現和構圖的其他方面相關,這樣擴散模型就無法像其他方法那樣自由探索這些方面。但為什么會這樣呢?我是想象中的效果還是這些結果是“正確的”?這是訓練數據的問題、架構的問題還是擴散模型本身的問題?(事實證明是最后一個)。

不過,首先,為了確保我沒有想象出這些效果,我嘗試針對一張全黑圖像對穩定擴散進行微調。通常,對穩定擴散(SD)進行微調效果很好——有一種稱為Dreambooth的技術可以教SD新的特定概念,比如特定的人的臉或特定的貓,幾十張圖像和幾千次梯度更新就足夠讓模型學會特定對象的樣子。將其擴展到一萬步,它甚至可以開始記住特定的圖像。

但當我針對這張全黑圖像進行了3000步微調后,對于“全黑圖像”的生成結果仍然如下:

在這里插入圖片描述

使用提示:“全黑圖像”

所以看來不僅SD開箱即用時無法生成過于暗或亮的圖像,而且它甚至無法學會這樣做。除非對其進行一些修改。

要理解發生了什么,幫助很大的是研究一下擴散模型正在學習反轉的內容。通常,擴散模型被公式化為特定前向隨機過程的逆過程——重復添加少量“獨立同分布”(iid)的高斯噪聲。也就是說,每個像素在潛在空間中在每一步都接收自己的隨機樣本。擴散模型學習在進行了一些步后,從圖像中找到返回原始圖像的方向。給定這個可以“向真實圖像倒退”的模型,你從純噪聲開始,反轉噪聲過程以得到新的圖像。

問題在于,你在前向過程中永遠不會完全擦除原始圖像,因此,從純噪聲開始的逆過程模型并不能完全回到圖像的真實分布。相反,那些噪聲最后破壞的特征在逆過程中變化最小——這些特征繼承自用于開始過程的潛在噪聲樣本。乍一看可能不明顯,但如果你研究前向過程如何破壞圖像,長波長特征需要更長時間才能被噪聲破壞:

這就是為什么使用相同的潛在噪聲種子但不同提示往往會生成在整體構圖上相關但在個體紋理或小尺度圖案上不同的圖像。擴散過程不知道如何改變這些長波長特征。而最長的波長特征是整個圖像的平均值,也是獨立樣本之間變化最小的特征。這個問題在目標對象的維度越高時越嚴重,因為獨立噪聲樣本集合的標準差與1/N成比例。因此,如果你生成一個4維向量,這可能不是大問題——你只需要兩倍的樣本來獲得最低頻率分量與最高頻率分量。但在512x512分辨率的穩定擴散中,你生成的是一個3 x 64^2 = 12288維的對象。所以最長波長變化比最短波長慢大約100倍,意味著你需要考慮成百上千步才能捕捉到,而默認值大約是50(對于一些復雜的采樣器,甚至低至20)。

似乎增加采樣步數確實可以幫助SD生成更極端的圖像,但我們可以做得更好,并提供一個即插即用的解決方案。訣竅在于我們教擴散模型逆轉的噪聲結構。因為我們使用的是iid樣本,我們有這個1/N效應。但如果我們使用的噪聲看起來像每個像素的iid樣本加上整個圖像相同的單個iid樣本呢?用代碼術語來說,目前的訓練循環使用的噪聲如下:noise = torch.randn_like(latents)但我可以使用這樣的噪聲:noise = torch.randn_like(latents) + 0.1 * torch.randn(latents.shape[0], latents.shape[1], 1, 1)這將使模型學習自由改變零頻分量,因為該分量現在比基礎分布快隨機化約10倍(選擇0.1在我的有限數據和訓練時間內效果很好——如果我設得太大,它會傾向于主導模型的現有行為,但如果設得太小,我不會看到改善)。

用這樣的噪聲進行約一千步的微調,僅需40張手工標注的圖像,就足以顯著改變穩定擴散的行為,而不會讓它在以前能夠生成的東西上變得更糟。以下是文章上方四個提示的對比結果:
在這里插入圖片描述

右上:暴雨中的黑暗小巷(0.032);左上:白色背景上的單色線條藝術標志(0.974);左下:陽光明媚的雪坡(0.858);右下:僅有火把照亮的廣場(0.031)

在這里插入圖片描述

星空在使用偏移噪聲前后

在這里插入圖片描述

超級英雄在黑暗小巷中與植物怪物戰斗前后

結論
有許多論文討論了改變去噪擴散模型的噪聲調度,以及使用不同于高斯分布的噪聲,甚至完全去除噪聲而使用其他破壞操作如模糊或遮罩。然而,大多數關注點似乎是加速推理過程——能夠使用更少的步數。似乎沒有太多關注關于噪聲(或圖像破壞操作)的設計決策如何限制可以輕松合成的圖像類型。然而,這對于這些模型的美學和藝術用途來說非常相關。對于深入定制這些模型并進行自己的微調的個別藝術家來說,針對某個項目調整使用這種偏移噪聲并不難。你可以使用我們的檢查點文件(在訪問此文件前請閱讀最后的注意事項)。但是,用少量圖像進行微調,結果永遠不會像大項目可以實現的那樣普遍或好。

因此,我想以一個請求結束,向那些參與訓練這些大型模型的人:請在下次進行大規模訓練時,在訓練過程中加入一點這樣的偏移噪聲。它應該顯著增加模型的表現范圍,允許在生成標志、剪切圖、自然明亮和黑暗的場景、強色彩照明的場景等方面得到更好的結果。這是一個非常簡單的技巧!

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

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

相關文章

Springboot+Vue項目-基于Java+MySQL的高校專業實習管理系統(附源碼+演示視頻+LW)

大家好!我是程序猿老A,感謝您閱讀本文,歡迎一鍵三連哦。 💞當前專欄:Java畢業設計 精彩專欄推薦👇🏻👇🏻👇🏻 🎀 Python畢業設計 &…

Linux文件:重定向底層實現原理(輸入重定向、輸出重定向、追加重定向)

Linux文件:重定向底層實現原理(輸入重定向、輸出重定向、追加重定向) 前言一、文件描述符fd的分配規則二、輸出重定向(>)三、輸出重定向底層實現原理四、追加重定向(>>)五、輸入重定向…

關于 vs2019 c++20 規范里的 STL 庫里模板 decay_t<T>

(1) 這個模板,在庫代碼里非常常見。 decay 英文是“衰弱,消減” 的意思,大概能感覺到就是要簡化模板參數 T 的類型,去掉其上的修飾符。因為常用且復雜,故單獨列出其源碼和注釋。先舉例其應用場景…

LINQ(五) ——使用LINQ進行匿名對象初始化

總目錄 C# 語法總目錄 上一篇:LINQ(四) ——使用LINQ進行對象類型初始化 LINQ 五 ——使用LINQ進行匿名對象初始化 6.2 匿名類型 6.2 匿名類型 可以不用聲明定義一個對象,直接使用new,然后直接賦值即可 string[] names { "Tom",…

動態順序表實現

目錄 1. 順序表的概念 2. 實現的功能 3. 順序表的定義 4.順序表的實現 4.1 seqlist.c 4.2 seqlist.h 4.3 test.c 5. 順序表的優缺點 5.1優點 5.2缺點 1. 順序表的概念 用一段物理地址連續的內存依次存儲數據元素的線性結構 本質就是數組,在數組基礎上要求…

從零手寫實現 tomcat-11-filter 過濾器

創作緣由 平時使用 tomcat 等 web 服務器不可謂不多,但是一直一知半解。 于是想著自己實現一個簡單版本,學習一下 tomcat 的精髓。 系列教程 從零手寫實現 apache Tomcat-01-入門介紹 從零手寫實現 apache Tomcat-02-web.xml 入門詳細介紹 從零手寫…

基于Springboot的學生心理壓力咨詢評判(有報告)。Javaee項目,springboot項目。

演示視頻: 基于Springboot的學生心理壓力咨詢評判(有報告)。Javaee項目,springboot項目。 項目介紹: 采用M(model)V(view)C(controller)三層體系…

Yalmip使用教程(8)-常見報錯及調試方法

博客中所有內容均來源于自己學習過程中積累的經驗以及對yalmip官方文檔的翻譯:https://yalmip.github.io/tutorials/ 這篇博客將詳細介紹使用yalmip工具箱編程過程中的常見錯誤和相應的解決辦法。 1.optimize的輸出參數 眾所周知,optimize是yalmip用來求…

5.7日學習記錄及相關問題解答

1. 閱讀文章 復習 JAVA基礎——接口(全網最詳細教程) Java之對象的多態性(使用生活中通俗的例子講解) 新學 JavaWeb——Servlet(全網最詳細教程包括Servlet源碼分析) 有用 創建Dynamic Web Project工程&…

PS濾鏡插件Camera Raw 15.4升級,開啟智能修圖

前段時間Adobe 更新了photoshop 的智能AI填充功能,深受很多設計師朋友的喜愛。Camera Raw作為PS的一個濾鏡插件對RAW圖片的處理上面有一定的優勢,Camera Raw 15.4升級了,開啟智能修圖木事,一起來看看吧! Camera Raw濾鏡…

【2024華為HCIP831 | 高級網絡工程師之路】刷題日記(18)

個人名片:🪪 🐼作者簡介:一名大三在校生,喜歡AI編程🎋 🐻???個人主頁🥇:落798. 🐼個人WeChat:hmmwx53 🕊?系列專欄:&a…

ClassificationPrimitive 內部原理

ClassificationPrimitive 內部原理 發明 ClassificationPrimitive的真是個天才。其原理是利用 webgl 的模板緩沖區實現。 渲染兩次, 首先是繪制模板, 然后繪制真正的內容。 示意圖: function createClass() {const { program, uniforms } WebGLProgram.buildPrograms(gl, …

代碼隨想錄算法訓練營第36期DAY22

DAY22 654最大二叉樹 自己做的時候忽略了:nums.length>1的題給條件。所以每次遞歸都要判斷是否size()>1,不要空的。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *rig…

牛客網刷題 | BC84 牛牛學數列2

目前主要分為三個專欄,后續還會添加: 專欄如下: C語言刷題解析 C語言系列文章 我的成長經歷 感謝閱讀! 初來乍到,如有錯誤請指出,感謝! 描述 這次牛牛又換了個數…

sql中的exists和in的區別

在SQL中,EXISTS 和 IN 都用于子查詢,但它們的用法和目的有所不同。 ### EXISTS EXISTS 是一個邏輯運算符,用于檢查子查詢是否返回任何行。如果子查詢返回至少一行,那么 EXISTS 子句的結果為 TRUE;否則,結果…

一個用Kotlin編寫簡易的串行任務調度器

引言 由于項目中有處理大量后臺任務并且串行執行的需求,特意寫了一個簡易的任務調度器,方便監控每個任務執行和異常情況,任務之間互不影響。正如上所述,Kotlin中的TaskScheduler類提供了一個強大的解決方案,用于使用S…

「AIGC」Python實現tokens算法

本文主要介紹通過python實現tokens統計,避免重復調用openai等官方api,開源節流。 一、設計思路 初始化tokenizer使用tokenizer將文本轉換為tokens計算token的數量二、業務場景 2.1 首次加載依賴 2.2 執行業務邏輯 三、核心代碼 from transformers import AutoTokenizer imp…

React: memo

React.memo 允許你的組件在 props 沒有改變的情況下跳過重新渲染。 const MemoizedComponent memo(SomeComponent, arePropsEqual?)React 通常在其父組件重新渲染時重新渲染一個組件。你可以使用 memo 創建一個組件,當它的父組件重新渲染時,只要它的新…

centos7服務器采用局域網內筆記本代理上網

一、背景 某臺服務器操作系統是centos 7,不能上網。我想在上面裝個ftp軟件:vsftpd。 二、思路 要安裝這個軟件,有2種方案 1)設置該臺centos7可以上網 2)離線安裝vsftpd 鑒于各種依賴,萬一因為依賴不全或…

《海峽科技與產業》是什么級別的期刊?是正規期刊嗎?能評職稱嗎?

問題解答 問:《海峽科技與產業》期刊是什么級別? 答:國家級 主管單位:中華人民共和國科學技術部 主辦單位:科技部海峽兩岸科學技術交流中心 問:《海峽科技與產業》影響因子? 答:…