Dreambooth-Stable-Diffusion - これは Google の Dreambooth with Stable Diffusion の実装です。

(Implementation of Dreambooth (https://arxiv.org/abs/2208.12242) with Stable Diffusion)

Created at: 2022-09-06 14:57:40
Language: Jupyter Notebook
License: MIT

安定拡散に関する Dreambooth

これは Google のDreambooth with Stable Diffusionの実装です。オリジナルの Dreambooth は、 Imagenのテキストから画像へのモデルに基づいています。ただし、Imagen のモデルも事前トレーニング済みの重みも使用できません。いくつかの例を使用してテキストから画像へのモデルを微調整できるようにするために、安定した拡散に Dreambooth のアイデアを実装しました。

このコード リポジトリは、 Textual Inversionのリポジトリに基づいています。Dreambooth は拡散モデル全体を微調整しますが、Textual Inversion は単語の埋め込みのみを最適化することに注意してください。

この実装では、Textual Inversion の公式コードベースに最小限の変更を加えています。実際、埋め込みマネージャーなどの Textual Inversion の一部のコンポーネントは、怠惰なため削除されませんが、ここでは使用されません。

使用法

準備

安定した拡散モデルを微調整するには、指示に従って事前トレーニング済みの安定した拡散モデルを取得する必要があります。ウェイトはHuggingFaceでダウンロードできます。どのバージョンのチェックポイントを使用するかはユーザーが決めることができますが、私は

sd-v1-4-full-ema.ckpt
.

また、Dreambooth の微調整アルゴリズムで要求されるため、正則化のための一連の画像を作成する必要があります。アルゴリズムの詳細は論文に記載されています。元の論文では、正則化画像はオンザフライで生成されているように見えることに注意してください。ただし、ここでは、トレーニングの前に正則化画像のセットを生成しました。正則化イメージを生成するためのテキスト プロンプトは、 のようになります

photo of a <class>
。ここで、
<class>
はオブジェクトのクラスを説明する単語です
dog
。コマンドは

python scripts/stable_txt2img.py --ddim_eta 0.0 --n_samples 8 --n_iter 1 --scale 10.0 --ddim_steps 50  --ckpt /path/to/original/stable-diffusion/sd-v1-4-full-ema.ckpt --prompt "a photo of a <class>" 

正則化のために 8 つの画像を生成しますが、より多くの正則化画像を使用すると、正則化が強化され、編集しやすくなる可能性があります。その後、生成された画像を (個別に、1

.png
ファイルにつき 1 つの画像) に保存します
/root/to/regularization/images

9/9 の更新 正則化のためにもっと多くの画像を使用する必要があります。100 または 200 を試して、元の用紙との整合性を高めてください。これに対応するために、構成ファイルの reg データセットの「繰り返し」を短くします。

場合によっては、生成された正則化画像が非常に非現実的である場合 (「男性」または「女性」を生成したい場合に発生します)、さまざまな (男性/女性の) 画像のセットをオンラインで見つけて、それらを正則化画像として使用できます。 .

トレーニング

トレーニングは、次のコマンドを実行することで実行できます

python main.py --base configs/stable-diffusion/v1-finetune_unfrozen.yaml 
                -t 
                --actual_resume /path/to/original/stable-diffusion/sd-v1-4-full-ema.ckpt  
                -n <job name> 
                --gpus 0, 
                --data_root /root/to/training/images 
                --reg_data_root /root/to/regularization/images 
                --class_word <xxx>

詳細な設定については、 を参照して

configs/stable-diffusion/v1-finetune_unfrozen.yaml
ください。特に、デフォルトの学習率は、Dreambooth の論文で
1.0e-6
見つけたように、編集性が低下します。
1.0e-5
パラメータ
reg_weight
は、Dreambooth ペーパーの正則化の重みに対応し、デフォルトは に設定されてい
1.0
ます。

Dreambooth では

[V]
、論文にあるように識別子と呼ばれるプレースホルダー ワードが必要です。この識別子は、語彙の中で比較的まれなトークンである必要があります。元の論文では、T5-XXL トークナイザーで珍しい単語を使用してこれに取り組みます。簡単にするために、ここではランダムな単語を使用し、それをハード コードしました。それを変更したい場合は、このファイル
sks
を変更するだけです。

トレーニングは 800 ステップ実行され、2 つのチェックポイントが に保存され

./logs/<job_name>/checkpoints
ます。1 つは 500 ステップで、もう 1 つは最終ステップです。通常、500 ステップで十分に機能します。2 つの A6000 GPU を使用してモデルをトレーニングすると、約 15 分かかります。

世代

トレーニング後、コマンドを実行してパーソナライズされたサンプルを取得できます。

python scripts/stable_txt2img.py --ddim_eta 0.0 
                                 --n_samples 8 
                                 --n_iter 1 
                                 --scale 10.0 
                                 --ddim_steps 100  
                                 --ckpt /path/to/saved/checkpoint/from/training
                                 --prompt "photo of a sks <class>" 

特に、

sks
は識別子であり、識別子を変更した場合に選択したものに置き換える必要があり、トレーニング
<class>
のクラス ワードです。
--class_word

結果

ここで、いくつかの定性的な結果を示します。トレーニング画像は Textual Inversion リポジトリの問題から取得したもので、大きなゴミ箱の 3 つの画像です。正則化イメージは prompt によって生成されます

photo of a container
。正則化イメージを次に示します。

トレーニング後、プロンプトで画像を生成しました

photo of a sks container

プロンプトで生成された画像

photo of a sks container on the beach

プロンプトで生成された画像

photo of a sks container on the moon

完璧ではありませんが、興味深い結果がいくつかあります。

プロンプトで生成された画像

photo of a red sks container

プロンプトで生成された画像

a dog on top of sks container