AI降維打擊人類畫家,文生圖引入ControlNet,深度、邊緣信息全能復用
通過「添加額外條件」來控制擴散模型,斯坦福大學最新的一項研究讓圖生圖效果更上了一層樓。
隨著大型文本 - 圖像模型的出現,生成一幅吸引人的圖像已經變得非常簡單,用戶需要做的就是動動手指輸入簡單的 prompt 就可以。通過一系列操作得到圖像后,我們不免又會產生這樣幾個問題:基于 prompt 生成的圖像能夠滿足我們的要求嗎?我們應該構建怎樣的架構來處理用戶提出的各種要求?在特定任務中,大型模型是否還能保持從數十億張圖像中獲得的優(yōu)勢和能力?
為了回答這些問題,來自斯坦福的研究者對各種圖像處理應用進行了大量調查,并得出以下三個發(fā)現:
首先,在特定領域中可用數據實際比訓練通用模型的數據要少,這主要表現在,例如在特定問題上(例如姿態(tài)理解等)最大的數據集通常低于 100k,比大規(guī)模、多模態(tài)文本圖像數據集 LAION 5B 少了 5 × 10^4 數量級。這就要求神經網絡魯棒性要好,以避免模型過度擬合,并在針對特定問題時具有良好的泛化性。
其次,當使用數據驅動處理圖像任務時,大型計算集群并不總是可用的。這時快速訓練方法就變得很重要,這種方法在可接受的時間和內存空間內能夠針對特定任務對大模型進行優(yōu)化。更進一步,在后續(xù)的處理過程中可能還需要微調、遷移學習等操作。
最后,在圖像處理過程中遇到的各種問題會有不同形式的定義方式。在解決這些問題時,雖然圖像擴散算法可以以「程序化(procedural)」方式進行調節(jié),例如,約束去噪過程、編輯多頭注意力激活等,但這些手工制定的規(guī)則基本上是由人類指令規(guī)定的,考慮到一些特定的任務,如深度 - 圖像、姿態(tài) - 人等,這些問題本質上需要將原始輸入解釋為對象級或場景級的理解,這使得手工制作的程序方法不太可行。因此,想要在多個任務中給出解決方案,端到端學習是必不可少的。
基于上述發(fā)現,本文提出了一種端到端的神經網絡架構 ControlNet,該架構可以通過添加額外條件來控制擴散模型(如 Stable Diffusion),從而改善圖生圖效果,并能實現線稿生成全彩圖、生成具有同樣深度結構的圖、通過手部關鍵點還能優(yōu)化手部的生成等。
論文地址:https://arxiv.org/pdf/2302.05543.pdf項目地址:https://github.com/lllyasviel/ControlNet
效果展示
那么 ControlNet 效果到底如何呢?
Canny 邊緣檢測:通過從原始圖像中提取線稿,能夠生成同樣構圖的圖像。
深度檢測:通過提取原始圖像中的深度信息,可以生成具有同樣深度結構的圖。
帶有語義分割的 ControlNet:
使用基于學習的深度霍夫變換從 Places2 中檢測直線,然后使用 BLIP 生成字幕。
HED 邊緣檢測圖示。
人體姿態(tài)識別圖示。
方法介紹
ControlNet 是一種神經網絡架構,它可以增強具有任務特定(task-specific)條件的預訓練圖像擴散模型。我們先來看 ControlNet 的基本結構。
ControlNet 操縱神經網絡塊的輸入條件,從而進一步控制整個神經網絡的整體行為。這里「網絡塊」指的是一組神經層,它們被放在一起作為一個構建神經網絡的常用單元,例如 resnet 塊、多頭注意力塊、Transformer 塊。
以 2D 特征為例,給定一個特征圖 x ? R^h×w×c,其中 {h, w, c} 分別為高度、寬度和通道數。具有一組參數 Θ 的神經網絡塊 F (?; Θ) 將 x 轉換為另一個特征圖 y,如下公式 (1) 所示。
這一過程如下圖 2-(a) 所示。
神經網絡塊由一種被稱為「零卷積」的獨特卷積層連接,即權重和偏置都零初始化的 1×1 卷積層。研究者將零卷積運算表示為 Z (?;?) ,并使用兩個參數實例 {Θ_z1, Θ_z2} 組成 ControlNet 結構,如下公式 (2) 所示。
其中 y_c 成為該神經網絡塊的輸出,如下圖 2-(b) 所示。
圖像擴散模型中的 ControlNet
研究者以 Stable Diffusion 為例,介紹了如何使用 ControlNet 控制具有任務特定條件的大型擴散模型。Stable Diffusion 是一種在數十億張圖像上訓練的大型文本到圖像擴散模型,本質上是一個由編碼器、中間塊和殘差連接****組成的 U-net。
如下圖 3 所示,研究者使用 ControlNet 來控制 U-net 的每一層。需要注意,這里連接 ControlNet 的方式在計算上是高效的:由于原始權重被鎖定,原始編碼器上的梯度計算不需要進行訓練。并且又由于原始模型上少了一半梯度計算,可以加快訓練速度并節(jié)省 GPU 內存。使用 ControlNet 訓練一個 Stable Diffusion 模型只需要在每次訓練迭代中增加大約 23% 的 GPU 內存和 34% 的時間(在單個 Nvidia A100 PCIE 40G 上測試)。
具體地,研究者使用 ControlNet 創(chuàng)建了 12 個編碼塊和 1 個 Stable Diffusion 中間塊的可訓練副本。這 12 個編碼塊有 4 種分辨率,分別為 64×64、32×32、16×16 和 8×8,每種分辨率有 3 個塊。輸出被添加到 U-net 的 12 個殘差連接和 1 個中間塊。由于 Stable Diffusion 是典型的 U-net 結構,因此這種 ControlNet 架構很可能可以用于其他擴散模型。
訓練及提升訓練
給定圖像 z_0,擴散算法漸進地向圖像添加噪聲并產生噪聲圖像 z_t,t 是添加噪聲的次數。當 t 足夠大時,圖像近似于純噪聲。給定一組包括時間步長 t、文本 prompts c_t 的條件以及任務特定條件 c_f,圖像擴散算法學習網絡 ?_θ 以預測添加到噪聲圖像 z_t 的噪聲,如下公式 (10) 所示。
在訓練過程中,研究者隨機將 50% 的文本 prompts c_t 替換為空字符串,這有利于 ControlNet 從輸入條件 map 中識別語義內容的能力。
此外,研究者還討論了幾種改進 ControlNets 訓練的策略,特別是在計算設備非常有限(如筆記本電腦)或非常強大(如具有可用大規(guī)模 GPU 的計算集群)的極端情況下。
更多技術細節(jié)請參閱原論文。
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。