擴散模型課程文件

單元 2:微調、引導和條件化

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

單元 2:微調、引導和條件化

歡迎來到 Hugging Face 擴散模型課程的第二單元!在本單元中,你將學習如何以新的方式使用和調整預訓練的擴散模型。你還將瞭解我們如何建立能夠接受額外輸入作為 條件 來控制生成過程的擴散模型。

開始本單元 :rocket:

以下是本單元的步驟:

  • 請確保你已註冊本課程,以便在新材料釋出時收到通知。
  • 通讀以下材料,瞭解本單元的關鍵思想。
  • 檢視 微調與引導 筆記本來學習如何使用 🤗 Diffusers 庫在新資料集上微調現有的擴散模型,以及如何使用引導來修改取樣過程。
  • 按照筆記本中的示例,為你的自定義模型分享一個 Gradio 演示。
  • (可選) 檢視 類別條件化擴散模型示例 筆記本來了解我們如何為生成過程新增額外的控制。
  • (可選) 檢視 此影片,以非正式的方式瞭解本單元的材料。

:loudspeaker: 別忘了加入 Discord,你可以在 #diffusion-models-class 頻道中討論材料並分享你的作品。

微調

正如你在第一單元中所見,從零開始訓練擴散模型可能非常耗時!特別是當我們將解析度提高時,從零開始訓練模型所需的時間和資料可能會變得不切實際。幸運的是,有一個解決方案:從一個已經訓練好的模型開始!這樣,我們從一個已經學會對某種影像進行去噪的模型出發,希望這能提供一個比從隨機初始化的模型開始更好的起點。

Example images generated with a model trained on LSUN Bedrooms and fine-tuned for 500 steps on WikiArt

如果新資料與基礎模型的原始訓練資料有些相似,微調通常效果最好(例如,如果你想生成卡通人臉,從一個在人臉上訓練過的模型開始可能是個好主意),但令人驚訝的是,即使領域變化很大,這種好處仍然存在。上圖是由一個在 LSUN 臥室資料集上訓練的模型,在 WikiArt 資料集上微調了 500 步生成的。 訓練指令碼 與本單元的筆記本一起提供以供參考。

引導

無條件模型對生成的內容沒有太多控制。我們可以訓練一個條件模型(下一節會詳細介紹),它接受額外的輸入來幫助引導生成過程,但如果我們已經有一個訓練好的無條件模型想要使用怎麼辦?這時就需要引導,這是一個在生成過程的每一步,根據某個引導函式評估模型預測並進行修改的過程,從而使最終生成的影像更符合我們的喜好。

guidance example image

這個引導函式幾乎可以是任何東西,這使它成為一個強大的技術!在筆記本中,我們從一個簡單的例子(控制顏色,如上圖示例輸出所示)開始,逐步構建到一個利用名為 CLIP 的強大預訓練模型的例子,它讓我們能夠根據文字描述來引導生成。

條件化

引導是從無條件擴散模型中獲得額外功能的好方法,但如果在訓練期間我們有額外的資訊(如類別標籤或影像標題),我們也可以將這些資訊提供給模型,供其在進行預測時使用。透過這樣做,我們建立了一個 條件化 模型,在推理時,我們可以透過控制輸入作為條件的內容來控制模型。筆記本展示了一個類別條件化模型的例子,該模型學習根據類別標籤生成影像。

conditioning example

有多種方法可以傳入這些條件化資訊,例如:

  • 將其作為額外通道輸入到 UNet 中。當條件化資訊與影像形狀相同時,通常使用這種方法,例如分割掩碼、深度圖或影像的模糊版本(在修復/超解析度模型的情況下)。它也適用於其他型別的條件化。例如,在筆記本中,類別標籤被對映到一個嵌入,然後擴充套件到與輸入影像相同的寬度和高度,以便可以作為額外通道輸入。
  • 建立一個嵌入,然後將其投影到一個大小,該大小與 UNet 一個或多個內部層輸出的通道數相匹配,然後將其新增到這些輸出中。例如,時間步條件化就是這樣處理的。每個 Resnet 塊的輸出都會新增一個投影的時間步嵌入。當你的條件化資訊是一個向量,例如 CLIP 影像嵌入時,這種方法很有用。一個著名的例子是 Stable Diffusion 的“影像變體”版本,它正是這樣做的。
  • 新增交叉注意力層,這些層可以“關注”作為條件傳入的序列。當條件化是以文字形式存在時,這種方法最有用——文字透過 Transformer 模型對映到嵌入序列,然後 UNet 中的交叉注意力層用於將這些資訊整合到去噪路徑中。我們將在第三單元中看到這一點,屆時我們將研究 Stable Diffusion 如何處理文字條件化。

動手實踐筆記本

章節 Colab Kaggle Gradient Studio Lab
微調與引導 Open In Colab Kaggle Gradient Open In SageMaker Studio Lab
類別條件化擴散模型示例 Open In Colab Kaggle Gradient Open In SageMaker Studio Lab

至此,你已經具備了開始使用附帶筆記本的足夠知識!使用上面的連結在你選擇的平臺上開啟它們。微調的計算量相當大,所以如果你使用 Kaggle 或 Google Colab,請確保將執行時型別設定為“GPU”以獲得最佳效果。

大部分材料都在 微調與引導 中,我們透過例項探討這兩個主題。該筆記本展示瞭如何在新資料上微調現有模型、新增引導,並將結果分享為 Gradio 演示。有一個附帶的指令碼(finetune_model.py),可以方便地嘗試不同的微調設定,還有一個示例 Space,你可以用作在 🤗 Spaces 上分享自己演示的模板。

類別條件化擴散模型示例 中,我們展示了一個簡短的例項,說明如何使用 MNIST 資料集建立一個以類別標籤為條件的擴散模型。重點是儘可能簡單地演示核心思想:透過向模型提供關於它應該去噪的內容的額外資訊,我們可以在推理時控制生成何種型別的影像。

專案時間

按照 微調與引導 筆記本中的示例,微調你自己的模型或選擇一個現有模型,並建立一個 Gradio 演示來展示你的新引導技能。別忘了在 Discord、Twitter 等社交媒體上分享你的演示,以便我們欣賞你的作品!

一些額外資源

去噪擴散隱式模型 (Denoising Diffusion Implicit Models) - 介紹了 DDIM 取樣方法(DDIMScheduler 使用的方法)

GLIDE: 用文字引導的擴散模型實現逼真的影像生成與編輯 (GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models) - 介紹了在文字上對擴散模型進行條件化的方法

eDiffi:具有專家去噪器整合的文字到影像擴散模型 (eDiffi: Text-to-Image Diffusion Models with an Ensemble of Expert Denoisers) - 展示瞭如何將多種不同型別的條件化結合使用,以對生成的樣本種類進行更精細的控制

發現了更多優質資源?告訴我們,我們會將它們新增到此列表中。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.