Diffusersを使用したDreamboothによる安定した拡散のトレーニング
Stable diffusion training with Dreambooth using Diffusers.
ドリームブースは、特殊なファインチューニングの形式を使用して、安定拡散に新しい概念を教えるための技術です。一部の人々は、素晴らしい状況に自分自身を配置するために、いくつかの写真を使用してそれを利用しています。一方、他の人々は新しいスタイルを取り入れるためにそれを使用しています。🧨 Diffusersは、Dreamboothトレーニングスクリプトを提供しています。トレーニングには時間はかかりませんが、適切なハイパーパラメータのセットを選択するのは難しく、過学習しやすいです。
私たちは、Dreamboothのさまざまな設定の効果を分析するために多くの実験を行いました。この投稿では、Stable DiffusionをDreamboothでファインチューニングする際に結果を改善するための見つけたポイントといくつかのヒントを紹介します。
始める前に、この方法は決して悪意のある目的、何らかの害を引き起こすため、または人々を知らずになりすますために使用してはなりません。それでトレーニングされたモデルは、Stable Diffusionモデルの配布を規制するCreativeML Open RAIL-Mライセンスによって依然として拘束されます。
注意:この投稿の以前のバージョンはW&Bレポートとして公開されました。
要約:推奨設定
- ドリームブースはすぐに過学習します。良質な画像を得るためには、トレーニングステップ数と学習率の間の「適切なスイートスポット」を見つける必要があります。低い学習率を使用し、結果が満足できるまでステップ数を徐々に増やすことを推奨します。
- ドリームブースでは、顔に対してはより多くのトレーニングステップが必要です。私たちの実験では、バッチサイズ2とLR 1e-6を使用した場合に、800〜1200ステップがうまく機能しました。
- 事前保存は、顔のトレーニング時に過学習を避けるために重要です。他の対象に対しては、それほど大きな違いはないようです。
- 生成された画像がノイズが多いか品質が低下している場合、それはおそらく過学習を意味します。まず、上記の手順を試して避けてみてください。生成された画像がまだノイズが多い場合は、DDIMスケジューラを使用するか、より多くの推論ステップ(私たちの実験では約100ステップがうまく機能しました)を実行してみてください。
- UNetに加えてテキストエンコーダをファインチューニングすることは、品質に大きな影響を与えます。私たちの最良の結果は、テキストエンコーダのファインチューニング、低いLR、適切なステップ数の組み合わせを使用して得られました。ただし、テキストエンコーダのファインチューニングにはより多くのメモリが必要ですので、少なくとも24 GBのRAMを持つGPUが理想です。Google ColabやKaggleが提供する16 GBのGPUのようなものでは、8ビットAdam、
fp16
トレーニング、勾配蓄積などの技術を使用してトレーニングすることが可能です。 - EMAを使用してファインチューニングするかどうかに関係なく、類似の結果が得られました。
- ドリームブースをトレーニングするために
sks
という単語を使用する必要はありません。最初の実装の一部は、それが語彙の中で稀なトークンであったためにそれを使用しましたが、実際にはライフルの一種です。私たちの実験および@nitrosockeなどの実験は、ターゲットを説明するために自然に使用する用語を選択しても問題ないことを示しています。
学習率の影響
ドリームブースは非常に速く過学習します。良い結果を得るためには、データセットに合理的な学習率とトレーニングステップ数を調整します。私たちの実験(以下で詳細に説明)では、高い学習率と低い学習率で4つの異なるデータセットでファインチューニングを行いました。すべての場合で、低い学習率でより良い結果が得られました。
実験設定
すべての実験は、2x 40GB A100を使用してtrain_dreambooth.py
スクリプトとAdamW
オプティマイザを使用して行われました。同じシードを使用し、LR、トレーニングステップ数、および事前保存の使用を除いて、すべてのハイパーパラメータを等しく保ちました。
最初の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
)
低い学習率( 2e-6
)
ブタの頭
高い学習率( 5e-6
)。ただし、色のアーティファクトはノイズの残骸です。より多くの推論ステップを実行すると、これらの詳細のいくつかを解決するのに役立つ場合があります。
低い学習率( 2e-6
)
Mr. Potato Head
高い学習率( 5e-6
)。ただし、色のアーティファクトはノイズの残骸です。より多くの推論ステップを実行すると、これらの詳細のいくつかを解決するのに役立つ場合があります。
低い学習率( 2e-6
)
人の顔
SeinfeldのKramerキャラクターをStable Diffusionに取り入れようとしました。先に述べたように、より小さなバッチサイズでより多くのステップでトレーニングしました。それにもかかわらず、結果は素晴らしくありませんでした。簡潔さのために、これらのサンプル画像は省略し、次のセクションに進んで顔のトレーニングが私たちの取り組みの焦点となりました。
初期結果の概要
DreamboothでStable Diffusionをトレーニングするためには、学習率とトレーニングステップをデータセットに合わせて調整することが重要です。
- 高い学習率と多すぎるトレーニングステップは過学習につながります。モデルは主にトレーニングデータから画像を生成し、プロンプトに関係なくなります。
- 低い学習率と少なすぎるステップは適合不足につながります。モデルは取り入れようとしていたコンセプトを生成することができません。
顔のトレーニングは難しいです。私たちの実験では、オブジェクトには学習率 2e-6
とトレーニングステップ 400
がうまく機能しましたが、顔には学習率 1e-6
(または 2e-6
)と約1200ステップが必要でした。
モデルが過学習すると画像の品質が大幅に低下し、以下の場合にこれが発生します:
- 学習率が高すぎる場合。
- トレーニングステップを多く実行した場合。
- 顔の場合、次のセクションで示すように、事前の保存が使用されない場合。
顔のトレーニング時の事前保存の使用
事前保存は、ファインチューニングプロセスの一部として、トレーニングしようとしている同じクラスの追加の画像を使用する技術です。たとえば、新しい人物をモデルに取り入れようとする場合、保存したいクラスは人物です。事前保存は、新しい人物の写真を他の人物の写真と組み合わせることで、過学習を減らすことを試みます。うれしいことに、Stable Diffusionモデル自体を使用して、これらの追加のクラス画像を生成することができます!トレーニングスクリプトはそれを自動的に処理しますが、独自の事前保存画像が含まれたフォルダを提供することもできます。
事前保存、1200ステップ、学習率= 2e-6
.
事前保存なし、1200ステップ、学習率= 2e-6
.
見て分かるように、事前の保存を使用すると結果がより良くなりますが、まだノイズのある斑点があります。さらなるトリックの時間です!
スケジューラの効果
前の例では、推論プロセス中に画像をサンプリングするためにPNDM
スケジューラを使用しました。モデルが過学習すると、DDIM
は通常、PNDM
とLMSDiscrete
よりもはるかに優れた結果が得られることが観察されました。さらに、推論をより多くのステップで実行することで品質を向上させることができます。100が良い選択肢のようです。追加のステップは、ノイズパッチを画像の詳細に変換するのに役立ちます。
PNDM
、クレイマーフェイス
LMSDiscrete
、クレイマーフェイス。結果はひどいです!
DDIM
、クレイマーフェイス。ずっと良いです
他の対象についても同様の動作が観察されますが、それほど顕著ではありません。
PNDM
、ポテトヘッド
LMSDiscrete
、ポテトヘッド
DDIM
、ポテトヘッド
テキストエンコーダの微調整
元のDreambooth論文では、モデルのUNetコンポーネントを微調整する方法が説明されていますが、テキストエンコーダは凍結されたままです。しかし、私たちはエンコーダを微調整すると、より良い結果が得られることを観察しました。他のDreamboothの実装でこのアプローチを見た後、このアプローチを試してみました。その結果は驚くべきものです!
凍結されたテキストエンコーダ
微調整されたテキストエンコーダ
テキストエンコーダの微調整は、特に顔の場合に最も優れた結果を生み出します。よりリアルな画像を生成し、過学習のリスクが低くなり、またより複雑なプロンプトを処理できるようになります。
エピローグ:テキスト反転+ドリームブース
また、テキスト反転とドリームブースを組み合わせた最後の実験も行いました。両者は似た目標を持っていますが、アプローチは異なります。
この実験では、まずテキスト反転を2000ステップ実行しました。そのモデルから、学習率1e-6
を使用してさらに500ステップのドリームブースを実行しました。以下はその結果です:
これらの結果は、単なるドリームブースよりもはるかに優れていると考えていますが、テキストエンコーダ全体を微調整する場合ほどではありません。訓練画像のスタイルをもう少しコピーしているように見えるため、それらに過学習している可能性があります。この組み合わせをさらに探求していませんが、ドリームブースを改善し、プロセスを16GBのGPUに収めるための興味深い代替手段になるかもしれません。ぜひ探求して、結果を教えてください!
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles