使用🧨 Diffusers和Dreambooth訓練Stable Diffusion

釋出於 2022 年 11 月 7 日
在 GitHub 上更新

Dreambooth 是一種使用專門的微調形式來教 Stable Diffusion 新概念的技術。有些人用它來將自己的照片置於奇幻場景中,而另一些人則用它來融入新的風格。🧨 Diffusers 提供了一個 Dreambooth 訓練指令碼。它的訓練時間不長,但很難選擇正確的超引數集,而且很容易過擬合。

我們進行了大量實驗,分析了 Dreambooth 中不同設定的影響。本文將介紹我們的發現,以及在使用 Dreambooth 微調 Stable Diffusion 時提高結果的一些技巧。

在開始之前,請注意,此方法絕不應用於惡意目的,以任何方式造成傷害,或未經他人知情而冒充他人。使用此方法訓練的模型仍受管理 Stable Diffusion 模型分發的 CreativeML Open RAIL-M 許可證約束。

注意:本文的早期版本已 作為 W&B 報告釋出.

TL;DR: 推薦設定

  • Dreambooth 很容易過擬合。為了獲得高質量的影像,我們必須在訓練步數和學習率之間找到一個“最佳點”。我們建議使用較低的學習率,並逐步增加步數,直到結果令人滿意。
  • Dreambooth 需要更多訓練步數來處理人臉。在我們的實驗中,當批大小為 2 且學習率為 1e-6 時,800-1200 步效果很好。
  • 在訓練人臉時,先驗保留對於避免過擬合很重要。對於其他主體,它似乎沒有太大區別。
  • 如果您發現生成的影像有噪聲或質量下降,這很可能意味著過擬合。首先,嘗試上述步驟來避免它。如果生成的影像仍然有噪聲,請使用 DDIM 排程器或執行更多推理步數(在我們的實驗中,約 100 步效果很好)。
  • 除了 UNet 之外,訓練文字編碼器對質量有很大影響。我們的最佳結果是透過文字編碼器微調、低學習率和適當的步數組合獲得的。然而,微調文字編碼器需要更多的記憶體,因此至少具有 24 GB RAM 的 GPU 是理想的。使用 8 位 Adam、`fp16` 訓練或梯度累積等技術,可以在 16 GB GPU(例如 Google Colab 或 Kaggle 提供的 GPU)上進行訓練。
  • 使用或不使用 EMA 進行微調產生了相似的結果。
  • 無需使用 `sks` 詞來訓練 Dreambooth。最初的實現之一使用它是因為它是詞彙表中一個罕見的詞元,但它實際上是一種步槍。我們的實驗以及例如 @nitrosocke 的實驗表明,選擇自然用於描述目標物件的術語是可以的。

學習率影響

Dreambooth 過擬合非常快。為了獲得好的結果,請根據您的資料集調整學習率和訓練步數。在我們的實驗中(詳見下文),我們對四個不同的資料集進行了高低學習率的微調。在所有情況下,我們都獲得了較低學習率下的更好結果。

實驗設定

我們所有的實驗均使用 train_dreambooth.py 指令碼和 AdamW 最佳化器在 2 個 40GB A100 GPU 上進行。我們使用相同的隨機種子,並保持所有超引數(除了學習率、訓練步數和是否使用先驗保留)在所有執行中相等。

對於前 3 個示例(各種物件),我們使用批大小 4(每個 GPU 2 個)對模型進行了 400 步的微調。我們使用了高學習率 5e-6 和低學習率 2e-6。沒有使用先驗保留。

最後一個實驗嘗試向模型中新增人類主體。在這種情況下,我們使用了批大小 2(每個 GPU 1 個)的先驗保留,並進行了 800 和 1200 步的訓練。我們使用了高學習率 5e-6 和低學習率 2e-6

請注意,您可以使用 8 位 Adam、fp16 訓練或梯度累積來減少記憶體需求,並在具有 16 GB 記憶體的 GPU 上執行類似實驗。

貓玩具

高學習率(5e-6

Cat Toy, High Learning Rate

低學習率(2e-6貓玩具,低學習率

豬頭

高學習率(5e-6)。請注意,顏色偽影是殘留的噪聲——執行更多推理步驟可能有助於解決這些細節。豬頭,高學習率

低學習率(2e-6豬頭,低學習率

土豆頭先生

高學習率(5e-6)。請注意,顏色偽影是殘留的噪聲——執行更多推理步驟可能有助於解決這些細節。土豆頭,高學習率

低學習率(2e-6土豆頭,低學習率

人臉

我們嘗試將《宋飛正傳》中的克萊默角色融入 Stable Diffusion。如前所述,我們以更小的批次大小訓練了更多步數。即便如此,結果也並不出色。為了簡潔起見,我們省略了這些樣本影像,並將讀者推遲到下一節,在那裡人臉訓練成為我們工作的重點。

初步結果總結

要使用 Dreambooth 訓練 Stable Diffusion 以獲得良好效果,調整學習率和訓練步數以適應您的資料集非常重要。

  • 高學習率和過多的訓練步數會導致過擬合。模型將主要根據您的訓練資料生成影像,無論使用什麼提示。
  • 低學習率和過少的步數會導致欠擬合:模型將無法生成我們試圖融入的概念。

人臉更難訓練。在我們的實驗中,對於物件,學習率為 2e-6 且訓練步數為 400 效果很好,但人臉需要 1e-6(或 2e-6)且約 1200 步。

如果模型過擬合,影像質量會嚴重下降,這種情況發生在:

  • 學習率過高。
  • 我們運行了過多的訓練步數。
  • 在人臉的情況下,當不使用先驗保留時,如下一節所示。

訓練人臉時使用先驗保留

先驗保留是一種技術,它在微調過程中使用與我們正在嘗試訓練的類相同的附加影像。例如,如果我們嘗試將一個新人融入模型中,我們想要保留的*類*可能是*人*。先驗保留試圖透過結合新人的照片與其他人的照片來減少過擬合。好訊息是我們可以使用 Stable Diffusion 模型本身生成這些額外的類影像!如果您願意,訓練指令碼會自動處理,但您也可以提供一個包含您自己的先驗保留影像的資料夾。

先驗保留,1200 步,學習率=2e-6人臉,先驗保留

無先驗保留,1200 步,學習率=2e-6人臉,先驗保留

如您所見,使用先驗保留時結果更好,但仍有嘈雜的斑點。是時候使用一些額外的技巧了!

排程器的影響

在之前的例子中,我們使用 PNDM 排程器在推理過程中取樣影像。我們觀察到,當模型過擬合時,DDIM 通常比 PNDMLMSDiscrete 效果好得多。此外,透過執行更多推理步驟可以提高質量:100 步似乎是一個不錯的選擇。額外的步驟有助於將一些噪聲塊分解為影像細節。

PNDM,克萊默臉 PNDM Cosmo

LMSDiscrete,克萊默臉。結果糟透了! LMSDiscrete Cosmo

DDIM,克萊默臉。好多了 DDIM Cosmo

對於其他主題,也可以觀察到類似的行為,儘管程度較輕。

PNDM,土豆頭 PNDM Potato

LMSDiscrete,土豆頭 LMSDiscrite Potato

DDIM,土豆頭 DDIM Potato

微調文字編碼器

原始的 Dreambooth 論文描述了一種微調模型 UNet 元件的方法,但保持文字編碼器凍結。然而,我們觀察到微調編碼器會產生更好的結果。在看到其他 Dreambooth 實現中使用這種方法後,我們進行了實驗,結果令人震驚!

凍結文字編碼器 凍結文字編碼器

微調文字編碼器 微調文字編碼器

微調文字編碼器能產生最佳結果,特別是對於人臉。它生成更逼真的影像,不易過擬合,並且能更好地解釋提示,處理更復雜的提示。

尾聲:文字反演 + Dreambooth

我們還進行了一項最終實驗,將 文字反演 與 Dreambooth 相結合。這兩種技術的目標相似,但方法不同。

在此實驗中,我們首先執行文字反演 2000 步。然後,我們從該模型中,以 1e-6 的學習率額外執行 Dreambooth 500 步。這些是結果

Textual Inversion + Dreambooth

我們認為結果比單純使用 Dreambooth 好得多,但不如微調整個文字編碼器時好。它似乎更多地複製了訓練影像的風格,因此可能會過擬合。我們沒有進一步探索這種組合,但它可能是改進 Dreambooth 並仍將過程適應 16GB GPU 的一個有趣替代方案。歡迎探索並告訴我們您的結果!

社群

7afeb7d2a4717767b03b08ca21fcca51.jpg
將此修改為《上古卷軸》電視劇風格的吸血鬼塞拉娜

7afeb7d2a4717767b03b08ca21fcca51.jpg
將此修改為《上古卷軸》電視劇風格的吸血鬼塞拉娜

請您也說明一下使用 Dreambooth 微調時使用的基礎模型?

文章作者

@shery909 認為這些實驗是使用 Stable Diffusion v1.4 完成的。也可能是 v1.5,但我相信是前者。

註冊登入 以評論

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