向文本到圖像擴(kuò)散模型添加條件控制
筆者個(gè)人理解
我們知道深度學(xué)習(xí)的模型往往都是在某一領(lǐng)域或者特定場(chǎng)景的,大的領(lǐng)域像是NLP,CV,大領(lǐng)域還可以細(xì)分出許多的小領(lǐng)域。由于筆者對(duì)CV比較熟悉,就經(jīng)常想可不可以訓(xùn)練這樣一個(gè)模型,它可以識(shí)別不同應(yīng)用場(chǎng)景,根據(jù)不同的應(yīng)用場(chǎng)景來選擇不同的識(shí)別模型。但是能力有限,一直沒有做出來啊。直到看到了這篇論文。在本文介紹的論文中,是在Text-to-Image Diffusion Models 中添加了控制條件,根據(jù)所輸入的不同,包括邊緣圖,houghline圖,深度圖,分割圖等等,結(jié)合相應(yīng)的text來生成圖片。這其實(shí)給了筆者一個(gè)很好的啟發(fā)。下面可以隨筆者一起詳細(xì)看一下。
摘要
我們提出了一種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu) ControlNet,用于控制預(yù)訓(xùn)練的大型擴(kuò)散模型以支持額外的輸入條件。 ControlNet 以端到端的方式學(xué)習(xí)特定于任務(wù)的條件,即使訓(xùn)練數(shù)據(jù)集很小 (< 50k),學(xué)習(xí)也很穩(wěn)健。此外,訓(xùn)練 ControlNet 與微調(diào)擴(kuò)散模型一樣快,并且可以在個(gè)人設(shè)備上訓(xùn)練模型?;蛘?,如果可以使用強(qiáng)大的計(jì)算集群,該模型可以擴(kuò)展到大量(數(shù)百萬到數(shù)十億)數(shù)據(jù)。我們報(bào)告說,像 Stable Diffusion 這樣的大型擴(kuò)散模型可以通過 ControlNets 進(jìn)行增強(qiáng),以啟用邊緣圖、分割圖、關(guān)鍵點(diǎn)等條件輸入。這可能會(huì)豐富控制大型擴(kuò)散模型的方法,并進(jìn)一步促進(jìn)相關(guān)應(yīng)用。github實(shí)現(xiàn):https://github.com/lllyasviel/ControlNet論文pdf:https://arxiv.org/abs/2302.05543
1 介紹隨著大型文本到圖像模型的出現(xiàn),生成視覺上吸引人的圖像可能只需要用戶輸入簡(jiǎn)短的描述性提示。在輸入了一些文字并得到了圖像之后,我們可能會(huì)很自然地產(chǎn)生幾個(gè)問題:這種基于提示的控件是否滿足我們的需求?例如在圖像處理中,考慮到許多具有明確問題公式的長(zhǎng)期任務(wù),是否可以應(yīng)用這些大型模型來促進(jìn)這些特定任務(wù)?我們應(yīng)該構(gòu)建什么樣的框架來處理范圍廣泛的問題條件和用戶控件?在特定任務(wù)中,大型模型能否保留從數(shù)十億圖像中獲得的優(yōu)勢(shì)和能力?為了回答這些問題,我們調(diào)查了各種圖像處理應(yīng)用程序并得出了三個(gè)發(fā)現(xiàn)。
首先,特定任務(wù)領(lǐng)域中的可用數(shù)據(jù)規(guī)模并不總是與一般圖像文本領(lǐng)域中的數(shù)據(jù)規(guī)模一樣大。許多特定問題(例如,對(duì)象形狀/法線、姿態(tài)理解等)的最大數(shù)據(jù)集大小通常低于 100k,即比 LAION-5B 小 5×104 倍。這將需要強(qiáng)大的神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法來避免過度擬合并在針對(duì)特定問題訓(xùn)練大型模型時(shí)保持泛化能力。
其次,當(dāng)使用數(shù)據(jù)驅(qū)動(dòng)解決方案處理圖像處理任務(wù)時(shí),大型計(jì)算集群并不總是可用。這使得快速訓(xùn)練方法對(duì)于在可接受的時(shí)間和內(nèi)存空間(例如,在個(gè)人設(shè)備上)內(nèi)針對(duì)特定任務(wù)優(yōu)化大型模型非常重要。這將進(jìn)一步需要利用預(yù)訓(xùn)練的權(quán)重,以及微調(diào)策略或遷移學(xué)習(xí)。
第三,各種圖像處理問題具有多種形式的問題定義、用戶控制或圖像注釋。在解決這些問題時(shí),雖然圖像擴(kuò)散算法可以以“程序”方式進(jìn)行調(diào)節(jié),例如,約束去噪過程、編輯多頭注意激活等,但這些手工制定的規(guī)則的行為基本上是由人類指令規(guī)定的.考慮到一些特定的任務(wù),如深度到圖像、姿勢(shì)到人等,這些問題本質(zhì)上需要將原始輸入解釋為對(duì)象級(jí)或場(chǎng)景級(jí)的理解,這使得手工制作的程序方法不太可行。要在許多任務(wù)中實(shí)現(xiàn)學(xué)習(xí)解決方案,端到端學(xué)習(xí)是必不可少的圖 1:使用 Canny 邊緣圖控制穩(wěn)定擴(kuò)散。 canny edge map 是輸入,當(dāng)我們生成右邊的圖像時(shí)沒有使用源圖像。輸出是通過默認(rèn)提示“高質(zhì)量、詳細(xì)和專業(yè)的圖像”實(shí)現(xiàn)的。此提示在本文中用作默認(rèn)提示,不提及任何有關(guān)圖像內(nèi)容和對(duì)象名稱的信息。本文中的大部分圖片都是高分辨率圖像,放大后效果最佳。
本文介紹了 ControlNet,這是一種端到端的神經(jīng)網(wǎng)絡(luò)架構(gòu),可控制大型圖像擴(kuò)散模型(如穩(wěn)定擴(kuò)散)以學(xué)習(xí)特定于任務(wù)的輸入條件。 ControlNet 將大型擴(kuò)散模型的權(quán)重克隆為“可訓(xùn)練副本”和“鎖定副本”:鎖定副本保留了從數(shù)十億圖像中學(xué)習(xí)的網(wǎng)絡(luò)能力,而可訓(xùn)練副本在特定任務(wù)的數(shù)據(jù)集上進(jìn)行訓(xùn)練以學(xué)習(xí)條件控制。
可訓(xùn)練和鎖定的神經(jīng)網(wǎng)絡(luò)塊與一種稱為“零卷積”的獨(dú)特類型的卷積層連接,其中卷積權(quán)重以學(xué)習(xí)的方式從零逐漸增長(zhǎng)到優(yōu)化參數(shù)。由于保留了生產(chǎn)就緒的權(quán)重,因此訓(xùn)練在不同規(guī)模的數(shù)據(jù)集上都很穩(wěn)健。由于零卷積不會(huì)為深層特征添加新的噪聲,與從頭開始訓(xùn)練新層相比,訓(xùn)練與微調(diào)擴(kuò)散模型一樣快我們使用不同條件的各種數(shù)據(jù)集訓(xùn)練了幾個(gè) ControlNet,例如 Canny 邊緣、Hough 線、用戶涂鴉、人體關(guān)鍵點(diǎn)、分割圖、形狀法線、深度等。我們還用兩個(gè)小數(shù)據(jù)集(樣本小于 50k)對(duì) ControlNet 進(jìn)行了實(shí)驗(yàn)甚至 1k) 和大型數(shù)據(jù)集(數(shù)百萬個(gè)樣本)。
我們還表明,在深度到圖像等某些任務(wù)中,在個(gè)人計(jì)算機(jī)(一臺(tái) Nvidia RTX 3090TI)上訓(xùn)練 ControlNets 可以獲得與在具有 TB 級(jí) GPU 內(nèi)存和數(shù)千 GPU 小時(shí)的大型計(jì)算集群上訓(xùn)練的商業(yè)模型相媲美的結(jié)果。
2 相關(guān)工作2.1 HyperNetwork和神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
HyperNetwork 起源于一種神經(jīng)語言處理方法[14],用于訓(xùn)練一個(gè)小的遞歸神經(jīng)網(wǎng)絡(luò)來影響一個(gè)更大的神經(jīng)網(wǎng)絡(luò)的權(quán)重。在使用生成對(duì)抗網(wǎng)絡(luò) [1、10] 和其他機(jī)器學(xué)習(xí)任務(wù) [51] 的圖像生成中也報(bào)道了 HyperNetwork 的成功結(jié)果。受這些想法的啟發(fā),[15] 提供了一種將較小的神經(jīng)網(wǎng)絡(luò)附加到 Stable Diffusion [44] 的方法,以改變其輸出圖像的藝術(shù)風(fēng)格。在 [28] 提供了幾個(gè) HyperNetworks 的預(yù)訓(xùn)練權(quán)重之后,這種方法變得更加流行。
ControlNet 和 HyperNetwork 在影響神經(jīng)網(wǎng)絡(luò)行為的方式上有相似之處ControlNet 使用一種特殊類型的卷積層,稱為“零卷積”。早期的神經(jīng)網(wǎng)絡(luò)研究 [31 , 47 , 32 ] 廣泛討論了網(wǎng)絡(luò)權(quán)重的初始化,包括使用高斯分布初始化權(quán)重的合理性以及使用零初始化權(quán)重可能帶來的風(fēng)險(xiǎn)。最近,[37] 討論了一種在擴(kuò)散模型中縮放多個(gè)卷積層的初始權(quán)重以改進(jìn)訓(xùn)練的方法,這與零卷積的思想有相似之處(他們的代碼包含一個(gè)稱為“zero_module”的函數(shù))。
在 ProGAN [21] 和 StyleGAN [22] 以及 Noise2Noise [33] 和 [65] 中也討論了操縱初始卷積權(quán)重。 Stability 的模型卡 [55] 還提到了在神經(jīng)層中使用零權(quán)重。
2.2 擴(kuò)散概率模型
在[52]中提出了擴(kuò)散概率模型。圖像生成的成功結(jié)果首先在小規(guī)模 [25] 上報(bào)道,然后在相對(duì)較大的范圍內(nèi)報(bào)道 [9]。這種架構(gòu)通過重要的訓(xùn)練和采樣方法得到改進(jìn),例如去噪擴(kuò)散概率模型 (DDPM) [17]、去噪擴(kuò)散隱式模型 (DDIM) [53] 和基于分?jǐn)?shù)的擴(kuò)散 [54]。圖像擴(kuò)散方法可以直接使用像素顏色作為訓(xùn)練數(shù)據(jù),在這種情況下,研究通常會(huì)考慮在處理高分辨率圖像時(shí)節(jié)省計(jì)算能力的策略 [53 , 50 , 26] ,或者直接使用基于金字塔或多階段的方法[ 18 , 43 ]。這些方法本質(zhì)上使用 U-net [45] 作為它們的神經(jīng)網(wǎng)絡(luò)架構(gòu)。為了減少訓(xùn)練擴(kuò)散模型所需的計(jì)算能力,基于潛像[11]的思想,提出了潛在擴(kuò)散模型(LDM)[44]方法,并將其進(jìn)一步擴(kuò)展到穩(wěn)定擴(kuò)散
2.3 文本到圖像的擴(kuò)散
擴(kuò)散模型可以應(yīng)用于文本到圖像生成任務(wù),以實(shí)現(xiàn)最先進(jìn)的圖像生成結(jié)果。這通常是通過使用 CLIP [41] 等預(yù)訓(xùn)練語言模型將文本輸入編碼為潛在向量來實(shí)現(xiàn)的。例如,Glide [38] 是一種支持圖像生成和編輯的文本引導(dǎo)擴(kuò)散模型。 Disco Diffusion 是 [9] 的剪輯引導(dǎo)實(shí)現(xiàn),用于處理文本提示。穩(wěn)定擴(kuò)散是潛在擴(kuò)散[44]的大規(guī)模實(shí)施,以實(shí)現(xiàn)文本到圖像的生成。
Imagen [ 49 ] 是一種文本到圖像結(jié)構(gòu),不使用潛在圖像,而是使用金字塔結(jié)構(gòu)直接擴(kuò)散像素。
2.4 預(yù)訓(xùn)練擴(kuò)散模型的個(gè)性化、定制化和控制
由于最先進(jìn)的圖像擴(kuò)散模型以文本到圖像的方法為主,因此增強(qiáng)對(duì)擴(kuò)散模型控制的最直接方法通常是文本引導(dǎo) [38、24、2、3、23 , 43, 16]。這種類型的控制也可以通過操縱 CLIP 特征 [43] 來實(shí)現(xiàn)。圖像擴(kuò)散過程本身可以提供一些功能來實(shí)現(xiàn)顏色級(jí)細(xì)節(jié)變化 [35](Stable Diffusion 社區(qū)稱之為 img2img)。圖像擴(kuò)散算法自然支持修復(fù)作為控制結(jié)果的重要方式 [43、2]。 Textual Inversion [12] 和 DreamBooth [46] 被提議使用一小組具有相同主題或?qū)ο蟮膱D像來定制(或個(gè)性化)生成結(jié)果中的內(nèi)容
2.5 圖像到圖像的轉(zhuǎn)換
我們想指出的是,雖然 ControlNet 和圖像到圖像的翻譯可能有幾個(gè)重疊的應(yīng)用,但它們的動(dòng)機(jī)是本質(zhì)不同的。圖像到圖像的翻譯旨在學(xué)習(xí)不同領(lǐng)域圖像之間的映射,而ControlNet 旨在控制具有特定任務(wù)條件的擴(kuò)散模型。Pix2Pix [20] 提出了圖像到圖像轉(zhuǎn)換的概念,早期的方法主要由條件生成神經(jīng)網(wǎng)絡(luò) [20、69、60、39、8、63、68] 主導(dǎo)。在 Transformers 和 Vision Transformers (ViTs) 流行之后,使用自回歸方法 [42,11,7] 的成功結(jié)果已經(jīng)被報(bào)道。一些研究還表明,多模型方法可以從各種翻譯任務(wù)中學(xué)習(xí)到強(qiáng)大的生成器 [64、29、19、40]我們討論了當(dāng)前圖像到圖像轉(zhuǎn)換中最強(qiáng)大的方法。
Taming Transformer [11] 是一種視覺轉(zhuǎn)換器,具有生成圖像和執(zhí)行圖像到圖像轉(zhuǎn)換的能力。
Palette [48] 是一個(gè)統(tǒng)一的基于擴(kuò)散的圖像到圖像翻譯框架。 PITI [59] 是一種基于擴(kuò)散的圖像到圖像轉(zhuǎn)換方法,它利用大規(guī)模預(yù)訓(xùn)練來提高生成結(jié)果的質(zhì)量。
在草圖引導(dǎo)擴(kuò)散等特定領(lǐng)域,[58] 是一種基于優(yōu)化的方法,可操縱擴(kuò)散過程。這些方法在實(shí)驗(yàn)中進(jìn)行了測(cè)試。
3 方法ControlNet 是一種神經(jīng)網(wǎng)絡(luò)架構(gòu),可以增強(qiáng)具有任務(wù)特定條件的預(yù)訓(xùn)練圖像擴(kuò)散模型。我們?cè)?3.1 節(jié)中介紹了 ControlNet 的基本結(jié)構(gòu)和每個(gè)部分的動(dòng)機(jī)。我們使用第 3.2 節(jié)中的穩(wěn)定擴(kuò)散示例詳細(xì)介紹了將 ControlNet 應(yīng)用于圖像擴(kuò)散模型的方法。
我們?cè)?3.3 節(jié)詳細(xì)闡述了學(xué)習(xí)目標(biāo)和一般訓(xùn)練方法,然后在 3.4 節(jié)描述了在極端情況下改進(jìn)訓(xùn)練的幾種方法,例如使用一臺(tái)筆記本電腦或使用大型計(jì)算集群進(jìn)行訓(xùn)練。最后,我們?cè)诘?3.5 節(jié)中包含了具有不同輸入條件的幾個(gè) ControlNet 實(shí)現(xiàn)的細(xì)節(jié)。
3.1 ControlNet
ControlNet 操縱神經(jīng)網(wǎng)絡(luò)塊的輸入條件,以進(jìn)一步控制整個(gè)神經(jīng)網(wǎng)絡(luò)的整體行為。這里,“網(wǎng)絡(luò)塊”指的是一組神經(jīng)層,它們被放在一起作為構(gòu)建神經(jīng)網(wǎng)絡(luò)的常用單元,例如“resnet”塊、“conv-bn-relu”塊、multi-head attention block、transformer block等以二維特征為例,給定一個(gè)特征圖 x ∈ Rh×w×c,其中 {h, w, c} 為高度、寬度和通道數(shù),神經(jīng)網(wǎng)絡(luò)塊 F(·; Θ) 具有一組參數(shù)Θ 將 x 轉(zhuǎn)換為另一個(gè)特征圖 y這個(gè)過程在圖 2-(a) 中可視化。我們鎖定 Θ 中的所有參數(shù),然后將其克隆到可訓(xùn)練的副本 Θc 中。復(fù)制的 Θc 使用外部條件向量 c 進(jìn)行訓(xùn)練。在本文中,我們將原始參數(shù)和新參數(shù)稱為“鎖定副本”和“可訓(xùn)練副本”。制作此類副本而不是直接訓(xùn)練原始權(quán)重的動(dòng)機(jī)是在數(shù)據(jù)集較小時(shí)避免過度擬合,并保持從數(shù)十億圖像中學(xué)習(xí)的大型模型的生產(chǎn)就緒質(zhì)量神經(jīng)網(wǎng)絡(luò)塊由一種稱為“零卷積”的獨(dú)特類型的卷積層連接,即 1×1 卷積層,其權(quán)重和偏置都用零初始化。
我們將零卷積運(yùn)算表示為 Z(·;·) 并使用參數(shù)的兩個(gè)實(shí)例 {Θz1, Θz2} 組成 ControlNet 結(jié)構(gòu)其中 yc 成為該神經(jīng)網(wǎng)絡(luò)塊的輸出,如圖 2-(b) 所示。因?yàn)榱憔矸e層的權(quán)重和偏差都被初始化為零,所以在第一個(gè)訓(xùn)練步驟中,我們有這可以轉(zhuǎn)換為圖 2:ControlNet。我們展示了將 ControlNet 應(yīng)用于任意神經(jīng)網(wǎng)絡(luò)塊的方法。 x, y 是神經(jīng)網(wǎng)絡(luò)中的深層特征。 “+”是指添加功能。 “c”是我們要添加到神經(jīng)網(wǎng)絡(luò)的額外條件。 “零卷積”是一個(gè) 1×1 的卷積層,權(quán)重和偏差都初始化為零
和 Eq-(2,3,4) 表明,在第一個(gè)訓(xùn)練步驟中,神經(jīng)網(wǎng)絡(luò)塊的可訓(xùn)練副本和鎖定副本的所有輸入和輸出都與它們的狀態(tài)一致,就好像 ControlNet 不存在一樣。換句話說,當(dāng) ControlNet 應(yīng)用于某些神經(jīng)網(wǎng)絡(luò)塊時(shí),在進(jìn)行任何優(yōu)化之前,它不會(huì)對(duì)深層神經(jīng)特征造成任何影響。任何神經(jīng)網(wǎng)絡(luò)塊的能力、功能和結(jié)果質(zhì)量都得到完美保留,任何進(jìn)一步的優(yōu)化都將變得和微調(diào)一樣快(與從頭開始訓(xùn)練這些層相比)我們簡(jiǎn)要推導(dǎo)了零卷積層的梯度計(jì)算??紤]一個(gè) 1×1 的卷積層,權(quán)重為 W,偏差為 B,在任意空間位置 p 和通道索引 i,給定輸入映射 I ∈ Rh×w×c,前向傳遞可以寫為并且由于零卷積具有 W = 0 和 B = 0(優(yōu)化前),對(duì)于 Ip,i 非零的任何地方,梯度變?yōu)?/span>我們可以看到,雖然零卷積可以使特征項(xiàng) I 上的梯度變?yōu)榱?,但?quán)重和偏差的梯度不受影響。只要特征 I 不為零,權(quán)重 W 就會(huì)在第一次梯度下降迭代中被優(yōu)化為非零矩陣。值得注意的是,在我們的例子中,特征項(xiàng)是輸入數(shù)據(jù)或從數(shù)據(jù)集中采樣的條件向量,這自然確保了非零 I。例如,考慮具有整體損失函數(shù) L 和學(xué)習(xí)率 βlr 6 = 0 的經(jīng)典梯度下降,如果“外部”梯度 ?L/?Z(I; {W , B}) 不為零,我們將有其中 W* 是經(jīng)過一個(gè)梯度下降步驟后的權(quán)重;是Hadamard product。在這一步之后,我們將有其中獲得非零梯度并且神經(jīng)網(wǎng)絡(luò)開始學(xué)習(xí)。通過這種方式,零卷積成為一種獨(dú)特類型的連接層,它以學(xué)習(xí)的方式從零逐漸增長(zhǎng)到優(yōu)化參數(shù)圖 3:穩(wěn)定擴(kuò)散中的 ControlNet?;疑珘K是Stable Diffusion 1.5(或SD V2.1,因?yàn)樗鼈兪褂孟嗤腢-Net架構(gòu))的結(jié)構(gòu),而藍(lán)色塊是ControlNet
3.2 圖像擴(kuò)散模型中的ControlNet
我們以 Stable Diffusion [44] 為例,介紹使用 ControlNet 控制具有任務(wù)特定條件的大型擴(kuò)散模型的方法。Stable Diffusion 是一種在數(shù)十億張圖像上訓(xùn)練的大型文本到圖像擴(kuò)散模型。該模型本質(zhì)上是一個(gè)帶有編碼器、中間塊和跳躍連接****的 U-net。編碼器和****都有 12 個(gè)塊,完整模型有 25 個(gè)塊(包括中間塊)。
在這些塊中,8 個(gè)塊是下采樣或上采樣卷積層,17 個(gè)塊是主塊,每個(gè)塊包含四個(gè) resnet 層和兩個(gè)視覺變換器 (ViT)。每個(gè) Vit 包含幾個(gè)交叉注意和/或自注意機(jī)制。文本由 OpenAI CLIP 編碼,擴(kuò)散時(shí)間步長(zhǎng)由位置編碼編碼Stable Diffusion 使用類似于 VQ-GAN [11] 的預(yù)處理方法,將 512×512 圖像的整個(gè)數(shù)據(jù)集轉(zhuǎn)換為更小的 64×64“潛在圖像”以進(jìn)行穩(wěn)定訓(xùn)練。這需要 ControlNets 將基于圖像的條件轉(zhuǎn)換為 64 × 64 特征空間以匹配卷積大小。
我們使用具有 4 × 4 內(nèi)核和 2 × 2 步幅的四個(gè)卷積層的微型網(wǎng)絡(luò) E(·)(由 ReLU 激活,通道為 16、32、64、128,用高斯權(quán)重初始化,與完整模型聯(lián)合訓(xùn)練)將圖像空間條件 ci 編碼為特征圖其中 cf 是轉(zhuǎn)換后的特征圖。該網(wǎng)絡(luò)將 512 × 512 圖像條件轉(zhuǎn)換為 64 × 64 特征圖如圖 3 所示,我們使用 ControlNet 來控制 U-net 的每一層。請(qǐng)注意,我們連接 ControlNet 的方式在計(jì)算上是高效的:由于原始權(quán)重被鎖定,因此不需要對(duì)原始編碼器進(jìn)行梯度計(jì)算來進(jìn)行訓(xùn)練。這可以加快訓(xùn)練速度并節(jié)省 GPU 內(nèi)存,因?yàn)榭梢员苊鈱?duì)原始模型進(jìn)行一半的梯度計(jì)算。
使用 ControlNet 訓(xùn)練一個(gè)穩(wěn)定的擴(kuò)散模型只需要在每次訓(xùn)練迭代中增加大約 23% 的 GPU 內(nèi)存和 34% 的時(shí)間(在單個(gè) Nvidia A100 PCIE 40G 上測(cè)試)。
具體來說,我們使用 ControlNet 創(chuàng)建 12 個(gè)編碼塊和 1 個(gè)穩(wěn)定擴(kuò)散中間塊的可訓(xùn)練副本。這 12 個(gè)塊有 4 種分辨率(64×64、32×32、16×16、8×8),每種分辨率有 3 個(gè)塊。輸出被添加到 U-net 的 12 個(gè)跳過連接和 1 個(gè)中間塊。由于 SD 是典型的 U-net 結(jié)構(gòu),因此這種 ControlNet 架構(gòu)很可能可用于其他擴(kuò)散模型
3.3 Training
圖像擴(kuò)散模型學(xué)習(xí)逐步對(duì)圖像進(jìn)行去噪以生成樣本。去噪可以發(fā)生在像素空間或從訓(xùn)練數(shù)據(jù)編碼的“潛在”空間中。 Stable Diffusion 使用潛像作為訓(xùn)練域。在這種情況下,術(shù)語“圖像”、“像素”和“去噪”都指的是“感知潛在空間”中的相應(yīng)概念[44]給定圖像 z0,擴(kuò)散算法逐漸向圖像添加噪聲并產(chǎn)生噪聲圖像 zt,其中 t 是添加噪聲的次數(shù)。當(dāng) t 足夠大時(shí),圖像近似于純?cè)肼?。給定一組條件,包括時(shí)間步長(zhǎng) t、文本提示 ct 以及任務(wù)特定條件 cf,圖像擴(kuò)散算法學(xué)習(xí)網(wǎng)絡(luò) θ 以預(yù)測(cè)添加到噪聲圖像 zt 的噪聲其中 L 是整個(gè)擴(kuò)散模型的總體學(xué)習(xí)目標(biāo)。這個(gè)學(xué)習(xí)目標(biāo)可以直接用于微調(diào)擴(kuò)散模型。在訓(xùn)練過程中,我們隨機(jī)將 50% 的文本提示 ct 替換為空字符串。這有助于 ControlNet 從輸入條件圖中識(shí)別語義內(nèi)容的能力,例如 Canny 邊緣圖或人類涂鴉等。這主要是因?yàn)楫?dāng)提示對(duì)于 SD 模型不可見時(shí),編碼器傾向于從輸入控制圖中學(xué)習(xí)更多語義作為提示的替代品
3.4 改進(jìn)訓(xùn)練
我們討論了幾種改進(jìn) ControlNets 訓(xùn)練的策略,特別是在計(jì)算設(shè)備非常有限(例如,在筆記本電腦上)或非常強(qiáng)大(例如,在具有可用的大規(guī)模 GPU 的計(jì)算集群上)的極端情況下。在我們的實(shí)驗(yàn)中,如果使用這些策略中的任何一個(gè),我們將在實(shí)驗(yàn)設(shè)置中提及
Small-Scale Training 當(dāng)計(jì)算設(shè)備有限時(shí),我們發(fā)現(xiàn)部分?jǐn)嚅_ ControlNet 和 Stable Diffusion 之間的連接可以加速收斂。默認(rèn)情況下,我們將 ControlNet 連接到“SD Middle Block”和“SD Decoder Block 1,2,3,4”,如圖 3 所示。我們發(fā)現(xiàn)斷開與**** 1,2,3,4 的鏈接并且僅連接中間塊可以將訓(xùn)練速度提高約 1.6 倍(在 RTX 3070TI 筆記本電腦 GPU 上測(cè)試)。當(dāng)模型在結(jié)果和條件之間顯示出合理的關(guān)聯(lián)時(shí),可以在繼續(xù)訓(xùn)練中將那些斷開的鏈接重新連接起來,以便于精確控制
Large-Scale Training 這里,大規(guī)模訓(xùn)練是指同時(shí)具備強(qiáng)大的計(jì)算集群(至少8個(gè)Nvidia A100 80G或等價(jià)物)和大數(shù)據(jù)集(至少100萬訓(xùn)練圖像對(duì))的情況。這通常適用于數(shù)據(jù)容易獲得的任務(wù),例如 Canny 檢測(cè)到的邊緣圖。在這種情況下,由于過擬合的風(fēng)險(xiǎn)相對(duì)較低,我們可以先訓(xùn)練 ControlNets 進(jìn)行足夠多的迭代次數(shù)(通常超過 50k 步),然后解鎖 Stable Diffusion 的所有權(quán)重并聯(lián)合訓(xùn)練整個(gè)模型作為一個(gè)整體。這將導(dǎo)致一個(gè)更具體的問題模型
3.5 Implementation
我們展示了幾種具有不同基于圖像的條件的 ControlNets 的實(shí)現(xiàn),以各種方式控制大型擴(kuò)散模型圖 4:使用 Canny 邊緣控制穩(wěn)定擴(kuò)散。 “自動(dòng)提示”是由 BLIP 根據(jù)默認(rèn)結(jié)果圖像生成的,無需使用用戶提示。另請(qǐng)參閱附錄以獲取用于 canny 邊緣檢測(cè)的源圖像。
Canny Edge 我們使用 Canny 邊緣檢測(cè)器 [5](具有隨機(jī)閾值)從互聯(lián)網(wǎng)上獲取 3M 邊緣圖像字幕對(duì)。該模型使用 Nvidia A100 80G 進(jìn)行了 600 GPU 小時(shí)的訓(xùn)練?;灸P褪?Stable Diffusion 1.5。 (另請(qǐng)參見圖 4)Canny Edge (Alter) 我們對(duì)上述 Canny 邊緣數(shù)據(jù)集的圖像分辨率進(jìn)行排序,并用 1k、10k、50k、500k 樣本采樣了幾個(gè)子集。我們使用相同的實(shí)驗(yàn)設(shè)置來測(cè)試數(shù)據(jù)集規(guī)模的影響。 (另請(qǐng)參見圖 22。)圖 5:使用霍夫線 (M-LSD) 控制穩(wěn)定擴(kuò)散。 “自動(dòng)提示”是由 BLIP 根據(jù)默認(rèn)結(jié)果圖像生成的,無需使用用戶提示。另請(qǐng)參閱附錄以獲取用于線檢測(cè)的源圖像
Hough Line 我們使用基于學(xué)習(xí)的深度 Hough 變換 [13] 來檢測(cè)來自 Places2 [66] 的直線,然后使用 BLIP [34] 生成字幕。我們獲得了 600k 個(gè)邊緣-圖像-字幕對(duì)。我們使用上述 Canny 模型作為起始檢查點(diǎn),并使用 Nvidia A100 80G 以 150 GPU 小時(shí)訓(xùn)練模型。 (另請(qǐng)參見圖 5。)HED 邊界我們使用 HED 邊界檢測(cè) [62] 從互聯(lián)網(wǎng)上獲得 3M 邊緣圖像字幕對(duì)。該模型使用 Nvidia A100 80G 進(jìn)行了 300 GPU 小時(shí)的訓(xùn)練?;灸P褪?Stable Diffusion 1.5。 (另請(qǐng)參見圖 7。用戶素描 我們結(jié)合使用 HED 邊界檢測(cè) [62] 和一組強(qiáng)大的數(shù)據(jù)增強(qiáng)(隨機(jī)閾值、隨機(jī)屏蔽隨機(jī)比例的涂鴉、隨機(jī)形態(tài)變換和隨機(jī)非最大抑制)從圖像中合成人類涂鴉。
我們從互聯(lián)網(wǎng)上獲得了 500k 個(gè)涂鴉-圖像-字幕對(duì)。我們使用上述 Canny 模型作為起始檢查點(diǎn),并使用 Nvidia A100 80G 以 150 GPU 小時(shí)訓(xùn)練模型。請(qǐng)注意,我們還嘗試了一種更“類似人類”的合成方法 [57],但該方法比簡(jiǎn)單的 HED 慢得多,我們沒有注意到明顯的改進(jìn)。 (另請(qǐng)參見圖 6。)Human Pose (Openpifpaf) 我們使用基于學(xué)習(xí)的姿勢(shì)估計(jì)方法 [27] 使用一個(gè)簡(jiǎn)單的規(guī)則從互聯(lián)網(wǎng)上“找到”人類:一張有人類的圖像必須檢測(cè)到至少 30% 的全身關(guān)鍵點(diǎn)。我們獲得了 80k 個(gè)姿勢(shì)-圖像-說明對(duì)。
請(qǐng)注意,我們直接使用帶有人體骨骼的可視化姿勢(shì)圖像作為訓(xùn)練條件。該模型在 Nvidia RTX 3090TI 上經(jīng)過 400 GPU 小時(shí)的訓(xùn)練?;灸P褪?Stable Diffusion 2.1。 (另請(qǐng)參見圖 8。語義分割 (COCO) 以 BLIP [34] 為標(biāo)題的 COCO-Stuff 數(shù)據(jù)集 [4]。我們獲得了 164K 分割-圖像-字幕對(duì)。該模型在 Nvidia RTX 3090TI 上經(jīng)過 400 GPU 小時(shí)的訓(xùn)練?;灸P褪?Stable Diffusion 1.5。 (另請(qǐng)參見圖 12。)
語義分割 (ADE20K) ADE20K 數(shù)據(jù)集 [67] 以 BLIP [34] 為標(biāo)題。我們獲得了 164K 分割-圖像-字幕對(duì)。該模型在 Nvidia A100 80G 上經(jīng)過 200 GPU 小時(shí)的訓(xùn)練?;灸P褪?Stable Diffusion 1.5。 (另請(qǐng)參見圖 11。)depth(大規(guī)模)我們使用 Midas [30] 從互聯(lián)網(wǎng)上獲取 3M 深度圖像字幕對(duì)。該模型使用 Nvidia A100 80G 進(jìn)行了 500 GPU 小時(shí)的訓(xùn)練?;灸P褪?Stable Diffusion 1.5。 (另請(qǐng)參見圖 23、24、25。)depth(小規(guī)模)我們對(duì)上述深度數(shù)據(jù)集的圖像分辨率進(jìn)行排序,以對(duì) 200k 對(duì)的子集進(jìn)行采樣。該集合用于試驗(yàn)訓(xùn)練模型所需的最小數(shù)據(jù)集大小。 (另請(qǐng)參見圖 14。)法線貼圖 DIODE 數(shù)據(jù)集 [56] 以 BLIP [34] 為標(biāo)題。我們獲得了 25,452 個(gè)正常圖像-標(biāo)題對(duì)。該模型在 Nvidia A100 80G 上經(jīng)過 100 GPU 小時(shí)的訓(xùn)練?;灸P褪?Stable Diffusion 1.5。 (另請(qǐng)參見圖 13。法線貼圖(擴(kuò)展)我們使用 Midas [30] 來計(jì)算深度圖,然后執(zhí)行法線 - 距離以實(shí)現(xiàn)“粗略”法線貼圖。我們使用上述 Normal 模型作為起始檢查點(diǎn),并使用 Nvidia A100 80G 以 200 GPU 小時(shí)訓(xùn)練模型。 (另請(qǐng)參見圖 23、24、25。卡通線圖 我們使用卡通線圖提取方法[61]從互聯(lián)網(wǎng)卡通插圖中提取線圖。通過對(duì)受歡迎程度的卡通圖像進(jìn)行排序,我們獲得了前 1M 的線稿-卡通-字幕對(duì)。該模型使用 Nvidia A100 80G 進(jìn)行了 300 GPU 小時(shí)的訓(xùn)練?;A(chǔ)模型是 Waifu Diffusion(一個(gè)有趣的社區(qū)開發(fā)的穩(wěn)定擴(kuò)散變異模型 [36])。 (另請(qǐng)參見圖 15。)
4 實(shí)驗(yàn)
4.1 實(shí)驗(yàn)設(shè)置
本文中的所有結(jié)果都是在 CFG 比例為 9.0 的情況下實(shí)現(xiàn)的。采樣器是 DDIM。我們默認(rèn)使用 20 步。我們使用三種類型的提示來測(cè)試模型:(1) 無提示:我們使用空字符串“”作為提示。(2) 默認(rèn)提示:由于 Stable diffusion 本質(zhì)上是通過提示進(jìn)行訓(xùn)練的,空字符串可能是模型的意外輸入,如果沒有提供提示,SD 往往會(huì)生成隨機(jī)紋理貼圖。更好的設(shè)置是使用無意義的提示,如“一張圖片”、“一張漂亮的圖片”、“一張專業(yè)的圖片”等。在我們的設(shè)置中,我們使用“一張專業(yè)、詳細(xì)、高質(zhì)量的圖片”作為默認(rèn)提示。(3) 自動(dòng)提示:為了測(cè)試全自動(dòng)管道的最先進(jìn)的最大化質(zhì)量,我們還嘗試使用自動(dòng)圖像字幕方法(例如,BLIP [34])使用獲得的結(jié)果生成提示通過“默認(rèn)提示”模式。我們使用生成的提示再次擴(kuò)散。(4) 用戶提示:用戶給出提示
4.2 定性結(jié)果
我們?cè)趫D 4、5、6、7、8、9、10、11、12、13、14、15 中展示了定性結(jié)果。
4.3 消融研究
圖 20 顯示了與未使用 ControlNet 訓(xùn)練的模型的比較。該模型使用與 Stability 的 Depth-to-Image 模型完全相同的方法進(jìn)行訓(xùn)練(向 SD 添加通道并繼續(xù)訓(xùn)練)圖 21 顯示了訓(xùn)練過程。我們想指出一種“突然收斂現(xiàn)象”,即模型突然能夠跟隨輸入條件。當(dāng)使用 1e-5 作為學(xué)習(xí)率時(shí),這可能發(fā)生在從 5000 步到 10000 步的訓(xùn)練過程中圖 22 顯示了使用不同數(shù)據(jù)集規(guī)模訓(xùn)練的基于 Canny 邊的 ControlNet。
4.4 與以往方法的比較
圖 14 顯示了與 Stability’s Depth-to-Image model的比較。圖 17 顯示了與 PITI [59] 的比較。圖 18 顯示了與sketch-guided diffusion的比較 [58]。圖 19 顯示了與 Taming transformer的比較 [11]
4.5 預(yù)訓(xùn)練模型的比較
我們?cè)趫D 23、24、25 中展示了不同預(yù)訓(xùn)練模型的比較。
4.6 更多應(yīng)用
圖 16 顯示如果擴(kuò)散過程被屏蔽,模型可以用于基于筆的圖像編輯。圖 26 表明,當(dāng)對(duì)象比較簡(jiǎn)單時(shí),模型可以實(shí)現(xiàn)對(duì)細(xì)節(jié)比較準(zhǔn)確的控制。圖 27 顯示當(dāng) ControlNet 僅應(yīng)用于 50% 的擴(kuò)散迭代時(shí),用戶可以獲得不遵循輸入形狀的結(jié)果
5 局限性
圖 28 表明,當(dāng)語義解釋錯(cuò)誤時(shí),模型可能難以生成正確的內(nèi)容
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。