HuggingFace ブログ : Dreambooth による Stable Diffusion の訓練

HuggingFace ブログ : Dreambooth による Stable Diffusion の訓練 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 11/10/2022

* 本ページは、HuggingFace Blog の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

 

HuggingFace ブログ : Dreambooth による Stable Diffusion の訓練

Dreambooth は再調整の特別な形式を使用して Stable Diffusion に新しいコンセプトを教えるためのテクニックです。ある人々は彼らの幾つかの写真で自身を幻想的な状況に置くためにそれを使用してきている一方で、他の人々は新しいスタイルを取り入れるためにそれを使用しています。 🧨 Diffusers は Dreambooth 訓練スクリプトを提供しています。訓練するのに長くはかかりませんが、ハイパーパラメータの正しいセットを選択するのは困難で簡単に過剰適合します。

Dreambooth の様々な設定の効果を分析するために多くの実験を行いました。この記事は Stable Diffusion を Dreambooth で再調整するとき、貴方の結果を改善するための発見とヒントを提示します。

始める前に、この手法は損害を与えたり (知らないうちに) 人になりすますような悪意のある目的のために決して使用されるべきではないことに留意してください。それで訓練されたモデルは依然として CreativeML Open RAIL-M ライセンス により束縛されています、これは Stable Diffusion モデルの配布を規定しています。

 

TL;DR: 推奨設定

  • Dreambooth は素早くオーバフィットする傾向があります。良質な画像を取得するには、訓練ステップ数と学習率の間の「スイートスポット」を見つけなければなりません。低い学習率を使用して、結果に納得いくまでステップ数を徐々に増やすことを勧めます。

  • Dreambooth は顔のためにより多くの訓練ステップを必要とします。私たちの実験では、2 のバッチサイズと 1e-6 の LR を使用するとき 800-1200 ステップが上手く動作しました。

  • 顔で訓練するとき、オーバーフィッティングを避けるには prior preservation (事前保全) が重要です。他の題材については、大きな違いはないようです。

  • 生成画像にノイズが多かったり品質が劣化しているのを見る場合、それはオーバフィッティングを意味しがちです。最初に、それを避けるために上のステップを試してください。生成画像が依然としてノイズが多い場合には、DDIM スケジューラを使用するか、より多くの推論ステップ (実験では ~100 が上手く動作しました) を実行してください。

  • UNet に加えてテキストエンコーダの訓練は品質に大きなインパクトがあります。私たちの最善の結果はテキストエンコーダの微調整、低い LR そして適切なステップ数の組み合わせを使用して、得られています。けれども、テキストエンコーダの微調整はより多くのメモリを必要としますので、少なくとも 24 GB RAM を持つ GPU が理想的です。8-bit Adam, fp16 訓練 or 勾配累積のようなテクニックを使用すれば、Google Colab or Kaggle で提供されるもののような 16 GB GPU 上でも訓練することが可能です。

  • EMA のあり/なしによる微調整も同様の結果を生成しました。

  • Dreambooth を訓練するために sks 単語を使用する必要はありません。最初の実装の一つはそれを使用しました、それが語彙內の珍しいトークンであったためですが、それは実際にはライフルのようなものです。私たちの実験と例えば @nitrosocke による実験は、貴方のターゲットを說明するのに自然に使用する用語を選択してかまわないことを示しています。

 

学習率のインパクト

Dreambooth は非常に素早くオーバーフィットします。良い結果を得るためには、学習率と訓練ステップ数をデータセットに対して適切である方法で調整します。私たちの実験では (詳細は後述)、高い学習率と低い学習率で 4 つの異なるデータセット上で微調整しました。すべてのケースで、低い学習率でよりよい結果を得ました。

 

実験の設定

すべての実験は 2x 40GB A100 上 AdamW optimizer で train_dreambooth.py スクリプトを使用して行なわれました。同じシードを使用して、LR, 訓練ステップ数と事前保全の使用を除いてすべてのハイパーパラメータを実行に渡り等しく保持しました。

最初の 3 例 (様々なオブジェクト) については、4 のバッチサイズ (2 per GPU) で 400 ステップの間モデルを微調整しました。5e-6 の高い学習率と 2e-6 の低い学習率を使用しました。事前保全は使用しませんでした。

最後の実験は人間の題材をモデルに追加することを試しています。この場合、2 のバッチサイズ (1 per GPU)、800 と 1200 ステップで事前保全を使用しました。5e-6 の高い学習率と 2e-6 の低い学習率を使用しました。

メモリ要件を減じるために 8-bit Adam, fp16 訓練 or 勾配累積を使用して、メモリ 16 GB の GPU 上で同様の実験を実行できることに注意してください。

 

Cat Toy

高い学習率 (5e-6)

低い学習率 (2e-6)

 

Pighead

高い学習率 (5e-6)。色のアーチファクトはノイズの残滓であることに注意してください – より多くの推論ステップの実行がそれらの詳細の一部を解決するのに役立つ可能性があります。

低い学習率 (2e-6)

 

Mr. Potato Head

高い学習率 (5e-6)。色のアーチファクトはノイズの残滓であることに注意してください – より多くの推論ステップの実行がそれらの詳細の一部を解決するのに役立つ可能性があります。

低い学習率 (2e-6)

 

人間の顔

「となりのサインフェルド」からクレイマーのキャラクターを Stable Diffusion に取り入れることを試しました。前述のように、より小さいバッチサイズでより多くのステップに対して訓練しました。それであっても、結果は素晴らしいものではありませんでした。簡潔にするため、これらのサンプル画像は省略しました、読者は次のセクションに進んでください、そこでは顔の訓練が取り組みの焦点になります。

 

初期結果のまとめ

Dreambooth による Stable Diffusion を訓練する際に良い結果を得るには、貴方のデータセットに対して学習率と訓練ステップを調整することが重要です。

  • 高い学習率と多すぎる訓練ステップはオーバーフィッティングに繋がります。どのようなプロンプトが使用されても、モデルは訓練データから殆ど画像を生成するでしょう。

  • 低い学習率と少なすぎるステップはアンダーフィッティングに繋がります : モデルは取り入れようとしているコンセプトを生成できません。

顔は訓練することがより困難です。実験では、オブジェクトに対しては 2e-6 の学習率 with 400 訓練ステップが上手く動作しましたが、顔は 1e-6 (or 2e-6) with ~1200 ステップが必要でした。

画質はモデルがオーバフィットした場合に大きく劣化し、これは以下の場合に発生します :

  • 学習率が高すぎる。
  • 多すぎる訓練ステップの実行。
  • 顔の場合、次のセクションで示されるように、事前保全が使用されない場合。

 

顔の訓練時の事前保全の使用

事前保全 (= prior preservation) は、微調整プロセスの一部として、訓練しようとしているのと同じクラスの追加の画像を使用するテクニックです。例えば、新しい人物をモデルに取り入れようとする場合、保全したいクラスは人物になるでしょう。事前保全は新しい人物の写真を他の人々の写真と組み合わせて使用することでオーバーフィッティングを軽減する試みです。素晴らしいことは、それらの追加のクラス画像を Stable Diffusion 自体を使用して生成できることです!訓練スクリプトは望めばそれを自動的に処理しますが、貴方自身の事前保全画像を含むフォルダを提供することもできます。

Prior preservation, 1200 steps, lr=2e-6.

No prior preservation, 1200 steps, lr=2e-6.

ご覧のように、事前保全が使用されたとき結果はより良いですが、依然としてノイズのある染み (= noisy blotches) があります。幾つかの追加のトリックを使用するときです!

 

スケジューラの効果

前の例では、推論過程で画像をサンプリングするのにPNDM スケジューラを使用しました。モデルがオーバーフィットするとき、DDIM は PNDM と LMSDiscrete よりも通常は遥かに上手く動作することを観察しました。加えて、品質はより多くのステップについて推論を実行することにより改良できます : 100 が良い選択のようです。追加のステップはノイズパッチの幾つかを画像の詳細に変換するのに役立ちます。

PNDM, Kramer face

LMSDiscrete, Kramer face. Results are terrible!

DDIM, Kramer face. Much better

 
他の題材に対しても同様の挙動が観察できます、比較的その程度は小さいですが。

PNDM, Potato Head

LMSDiscrete, Potato Head

DDIM, Potato Head

 

テキストエンコーダの微調整

オリジナルの Dreambooth 論文はモデルの UNet コンポーネントを微調整する方法は記述していますが、テキストエンコーダは凍結したままです。しかし、エンコーダの微調整はより良い結果を生成することを観察しました。他の Dreambooth 実装で使用されていたのを見た後でこのアプローチを実験しましたが、その結果は印象的なものです!

Frozen text encoder

Fine-tuned text encoder

テキストエンコーダの微調整は、特に顔の場合にベストな結果を生成します。それはよりリアリスティックな画像を生成し、オーバーフィットする傾向が少なく、そしてプロンプトとのより良い相互解釈性も獲得し、より複雑なプロンプトを処理することができます。

 

エピローグ : Textual Inversion + Dreambooth

最終的な実験も実行しました、そこでは Textual Inversion を Dreambooth と組み合わせました。両者のテクニックは同様の目標を持ちますが、それらのアプローチは異なります。

この実験では最初に textual inversion を 2000 ステップ実行しました。そのモデルから、次に Dreambooth を 1e-6 の学習率を使用して追加の 500 ステップ実行しました。これらがその結果です :

結果は plain な Dreambooth を行なうよりも遥かに良いですが、テキストエンコーダ全体を微調整するときほどには良くないと考えます。訓練画像のスタイルをもう少しコピーしているようですので、それらにオーバーフィットしている可能性もあります。We didn’t explore this combination further, but it could be an interesting alternative to improve Dreambooth and still fit the process in a 16GB GPU. Feel free to explore and tell us about your results!

 

以上