Diffusers 文件
受控生成
並獲得增強的文件體驗
開始使用
受控生成
控制擴散模型生成的輸出一直是社群長期追求的目標,現在是一個活躍的研究課題。在許多流行的擴散模型中,輸入(影像和文字提示)的細微變化都可能顯著改變輸出。在理想的世界中,我們希望能夠控制語義的保留和變化方式。
大多數保留語義的例子都歸結為能夠準確地將輸入的變化對映到輸出的變化。即,在提示中給主題新增一個形容詞,會保留整個影像,只修改被改變的主題。或者,特定主題的影像變體可以保留主題的姿勢。
此外,我們希望影響生成影像的質量,而不僅僅是語義保留。即,通常我們希望輸出具有良好的質量,符合特定的風格,或看起來真實。
我們將記錄 `diffusers` 支援的一些控制擴散模型生成的技術。許多都是前沿研究,可能非常細微。如果有什麼需要澄清或您有建議,請隨時在論壇或 GitHub Issue上發起討論。
我們將提供關於如何控制生成的高階解釋以及技術片段。對於更深入的技術解釋,與管道連結的原始論文始終是最佳資源。
根據用例,應選擇相應的技術。在許多情況下,這些技術可以結合使用。例如,可以將 Textual Inversion 與 SEGA 結合使用,為使用 Textual Inversion 生成的輸出提供更多語義指導。
除非另有說明,這些技術適用於現有模型,不需要自己的權重。
- InstructPix2Pix
- Pix2Pix Zero
- Attend and Excite
- 語義引導
- 自注意力引導
- Depth2Image
- MultiDiffusion Panorama
- DreamBooth
- 文字反轉 (Textual Inversion)
- ControlNet
- 提示詞加權
- 自定義擴散
- 模型編輯
- DiffEdit
- T2I-Adapter
- FABRIC
為了方便起見,我們提供一個表格來表示哪些方法僅用於推理,哪些需要微調/訓練。
方法 | 僅推理 | 需要訓練 / 微調 | 評論 |
---|---|---|---|
InstructPix2Pix | ✅ | ❌ | 可額外 微調以獲得 在特定編輯 指令上更好的效能。 |
Pix2Pix Zero | ✅ | ❌ | |
Attend and Excite | ✅ | ❌ | |
語義引導 | ✅ | ❌ | |
自注意力引導 | ✅ | ❌ | |
Depth2Image | ✅ | ❌ | |
MultiDiffusion Panorama | ✅ | ❌ | |
DreamBooth | ❌ | ✅ | |
文字反轉 (Textual Inversion) | ❌ | ✅ | |
ControlNet | ✅ | ❌ | ControlNet 可在 自定義條件下 訓練/微調。 |
提示詞加權 | ✅ | ❌ | |
自定義擴散 | ❌ | ✅ | |
模型編輯 | ✅ | ❌ | |
DiffEdit | ✅ | ❌ | |
T2I-Adapter | ✅ | ❌ | |
Fabric | ✅ | ❌ |
InstructPix2Pix
InstructPix2Pix 是從 Stable Diffusion 微調而來,以支援編輯輸入影像。它以影像和描述編輯的提示作為輸入,並輸出編輯後的影像。InstructPix2Pix 經過專門訓練,能很好地處理類似 InstructGPT 的提示。
Pix2Pix Zero
Pix2Pix Zero 允許在修改影像時將一個概念或主題轉換為另一個概念或主題,同時保留影像的整體語義。
去噪過程從一個概念嵌入引導到另一個概念嵌入。在去噪過程中,中間潛在變數經過最佳化,以將注意力圖推向參考注意力圖。參考注意力圖來自輸入影像的去噪過程,用於鼓勵語義保留。
Pix2Pix Zero 既可用於編輯合成影像,也可用於編輯真實影像。
- 要編輯合成影像,首先根據影像標題生成影像。接下來,為要編輯的概念和新目標概念生成影像標題。我們可以使用像 Flan-T5 這樣的模型來完成此目的。然後,透過文字編碼器建立源概念和目標概念的“平均”提示嵌入。最後,使用 pix2pix-zero 演算法編輯合成影像。
- 要編輯真實影像,首先使用像 BLIP 這樣的模型生成影像標題。然後,對提示和影像應用 DDIM 反演以生成“反向”潛在變數。與之前類似,建立源概念和目標概念的“平均”提示嵌入,最後將 pix2pix-zero 演算法與“反向”潛在變數結合使用來編輯影像。
Pix2Pix Zero 是第一個允許“零樣本”影像編輯的模型。這意味著該模型可以在消費級 GPU 上不到一分鐘內編輯影像,如此處所示。
如上所述,Pix2Pix Zero 包括最佳化潛在變數(而不是任何 UNet、VAE 或文字編碼器),以引導生成朝向特定概念。這意味著整個管道可能需要比標準 StableDiffusionPipeline 更多的記憶體。
InstructPix2Pix 和 Pix2Pix Zero 等方法之間的一個重要區別是,前者涉及微調預訓練權重,而後者不涉及。這意味著您可以將 Pix2Pix Zero 應用於任何可用的 Stable Diffusion 模型。
Attend and Excite
Attend and Excite 允許將提示中的主體忠實地呈現在最終影像中。
輸入一組標記索引,對應於影像中需要出現的主體。在去噪過程中,每個標記索引都保證對影像的至少一個補丁具有最小的注意力閾值。在去噪過程中,中間潛在變數迭代最佳化,以加強對最受忽略的主體標記的注意力,直到所有主體標記都透過注意力閾值。
與 Pix2Pix Zero 類似,Attend and Excite 在其管道中也包含一個迷你最佳化迴圈(不觸及預訓練權重),並且可能比通常的 StableDiffusionPipeline 需要更多記憶體。
語義引導 (SEGA)
SEGA 允許從影像中新增或刪除一個或多個概念。概念的強度也可以控制。例如,微笑概念可以用於逐漸增加或減少肖像的微笑。
類似於分類器無關引導透過空提示輸入提供引導,SEGA 提供概念提示引導。多個概念提示可以同時應用。每個概念提示都可以根據引導是正向還是負向來新增或刪除其概念。
與 Pix2Pix Zero 或 Attend and Excite 不同,SEGA 直接與擴散過程互動,而不是執行任何明確的基於梯度的最佳化。
自注意力引導 (SAG)
自注意力引導 提高了影像的整體質量。
SAG 從未在高頻細節上進行條件化的預測中提供引導,以生成完全條件化的影像。高頻細節從 UNet 自注意力圖中提取。
Depth2Image
Depth2Image 是從 Stable Diffusion 微調而來,旨在更好地保留文字引導影像變體的語義。
它以原始影像的單目深度估計作為條件。
MultiDiffusion 全景圖
MultiDiffusion 全景圖 定義了一個基於預訓練擴散模型的新生成過程。該過程將多種擴散生成方法結合在一起,可以輕鬆應用於生成高質量和多樣化的影像。結果符合使用者提供的控制,例如所需的寬高比(例如全景圖)和空間引導訊號,範圍從緊密的分割掩碼到邊界框。MultiDiffusion 全景圖允許以任意寬高比(例如全景圖)生成高質量影像。
微調您自己的模型
除了預訓練模型之外,Diffusers 還提供用於在使用者提供的資料上微調模型的訓練指令碼。
DreamBooth
DreamBooth 微調模型以教授其新主題。例如,可以使用幾張人物照片來生成該人物不同風格的影像。
Textual Inversion
Textual Inversion 微調模型以教授其新概念。例如,可以使用幾張藝術風格的圖片來生成該風格的影像。
ControlNet
ControlNet 是一個輔助網路,它添加了一個額外的條件。有 8 個規範的預訓練 ControlNet,它們在不同的條件下進行訓練,例如邊緣檢測、塗鴉、深度圖和語義分割。
提示詞加權
提示詞加權 是一種簡單的技術,它將更多的注意力權重放在文字輸入的某些部分。
自定義擴散
Custom Diffusion 僅對預訓練的文字到影像擴散模型的交叉注意力圖進行微調。它還允許額外執行 Textual Inversion。它支援多概念訓練。與 DreamBooth 和 Textual Inversion 類似,Custom Diffusion 也用於教授預訓練的文字到影像擴散模型新概念,以生成包含感興趣概念的輸出。
模型編輯
文字到影像模型編輯管道 幫助您緩解預訓練文字到影像擴散模型可能對輸入提示中存在的主題做出的某些不正確的隱式假設。例如,如果您提示 Stable Diffusion 生成“一束玫瑰”的影像,生成的影像中的玫瑰更有可能是紅色的。此管道幫助您改變該假設。
DiffEdit
DiffEdit 允許對輸入影像和輸入提示進行語義編輯,同時儘可能保留原始輸入影像。
T2I-Adapter
T2I-Adapter 是一個輔助網路,它添加了一個額外的條件。有 8 個規範的預訓練介面卡,它們在不同的條件下進行訓練,例如邊緣檢測、草圖、深度圖和語義分割。
Fabric
Fabric 是一種無需訓練的方法,適用於各種流行的擴散模型,它利用最廣泛使用的架構中存在的自注意力層來根據一組反饋影像調節擴散過程。
< > 在 GitHub 上更新