「Stable Diffusion v2.1でDreamBoothを動かしたい」
「Stable Diffusion v2とv2.1で追加学習の結果は異なるの?」
このような場合には、この記事の内容が参考になります。
この記事では、Stable Diffusion v2.1でDreamBoothによる追加学習を行う方法を解説しています。
本記事の内容
- Stable Diffusion v2.1ベースのDreamBoothによる追加学習
- 追加学習の内容
- Stable Diffusion v2とv2.1における追加学習の比較
それでは、上記に沿って解説していきます。
Stable Diffusion v2.1ベースのDreamBoothによる追加学習
Stable Diffusion v2.1が、2022年12月7日にリリースされました。
v2.1モデルを用いてDreamBoothで追加学習する場合に、v2モデル利用時と違いがあるのでしょうか?
結論から言うと、Stable Diffusion v2と同じ方法でDreamBoothが利用可能です。
ただし、環境は別途構築する必要があります。
Python仮想環境を利用すれば、環境なんて何個でも作れます。
単純にモデルを次のように変更するだけでは、動かない可能性が高いです。
stabilityai/stable-diffusion-2-base ↓ stabilityai/stable-diffusion-2-1-base
実際、私の環境では動きませんでした。
Githubから最新のプログラムを取得する必要があるのでしょう。
難しいことを考えずに、常に最新をダウンロードしておけば問題はないはずです。
学習させる方法は、全く同じです。
以上、Stable Diffusion v2.1ベースのDreamBoothによる追加学習を説明しました。
これだけなら、Stable Diffusion v2のときと比べて新たに得られるモノがありません。
そこで、Stable Diffusion v2とv2.1における追加学習の効果を比較してみましょう。
果たしてDreamBoothによる学習効果も異なるのでしょうか?
まずは、次で今回実施する追加学習の内容を説明します。
追加学習の内容
学習画像は、いらすとやの画像を利用しました。
全部で33枚の画像をダウンロードしています。

ただし、画像は次のように加工しています。
- 512 x 512サイズ
- 背景色(黒色)
画像を一括で加工する方法は、次の記事で説明しています。
学習画像に透過ファイルを利用するのは、NGらしいです。
透過ファイルで学習すると、ピンボケ状態の画像が生成されると言われています。
そして、学習の際に利用したコマンドは以下。
accelerate launch train_dreambooth.py ` --class_data_dir=./regularization_images/person ` --pretrained_model_name_or_path="***モデル***" ` --instance_data_dir=./training_images ` --output_dir=./model ` --instance_prompt "dream_irasutoya person" ` --class_prompt "person" ` --resolution=512 ` --train_batch_size=1 ` --gradient_accumulation_steps=1 ` --learning_rate=1e-6 ` --lr_scheduler constant ` --lr_warmup_steps=0 ` --max_train_steps=8000 ` --with_prior_preservation --prior_loss_weight=1.0 ` --gradient_checkpointing
これらの条件で追加学習を実施します。
***モデル***は、以下を指定することになります。
- stabilityai/stable-diffusion-2-base
- stabilityai/stable-diffusion-2-1-base
以上、追加学習の内容を説明しました。
次は、Stable Diffusion v2とv2.1における追加学習の比較を説明します。
Stable Diffusion v2とv2.1における追加学習の比較
各モデルをベースに追加学習した結果を比較します。
もちろん、画像生成では同じ条件を用います。
画像の上半分がv2、下半分がv2.1となります。

先に言っておくと、選択している画像は恣意的です。
極端ではありませんが、差異が明確なモノを選んでいます。
そのため、v2でも次のような画像を生成できます。

ただし、v2.1と比べるとその確率はかなり下がります。
v2.1は、基本的には崩れた画像を生成することはほとんどありません。
あと、v2ではテキストが混入することが多いです。
ネガティブプロンプトに「(((text)))」などを記載しているのですけどね。
その点でも、v2.1は優秀です。
絶対とは言いませんが、テキストはほぼ入りません。
そのことは、次の画像で一目瞭然です。
左がv2、右がv2.1となります。

v2の方は、怪しいウォーターマーク(透かし)が見えますね。
それが、v2.1では綺麗に消え失せています。
また、プロンプトの情報量が増えれば増えるほど、v2とv2.1の差がより明確になります。

さらには、登場人物が増えるとv2では画像も崩壊しつつあります。

ここまで見れば、もう結果は言うまでもありません。
v2.1ベースで追加学習をした方が、質の高いモデルを生成することが可能です。
そうして生成されたモデルを利用すれば、いらすとやのキャラを使って格闘シーンも簡単に作れます。

以上、Stable Diffusion v2とv2.1における追加学習の比較を説明しました。