TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

いらすとやでDreamboothを試す

先日、いらすとやの画像でTextual Inversionを試したが、今回は同じく数枚の画像でスタイルを学習するDreamboothを試してみる。

Dreamboothは、元は、GoogleのImagenに対して適用された手法だが、Stable Diffusionに適用できるようにした実装が公開されたので、それを使って試してみた。
GitHub - XavierXiao/Dreambooth-Stable-Diffusion: Implementation of Dreambooth (https://arxiv.org/abs/2208.12242) with Stable Diffusion

Textual Inversionは、新しい単語の埋め込みベクトルを学習するのに対して、Dreamboothは、出現頻度の少ない既存の単語を使用し、それを条件として拡散モデルのパラメータを更新する。
上記のStable Dffusionの実装では、単語として「sks」が使用される。
「sks」は、任意のクラス(「犬」など)を修飾する語として使用される。

学習データ

いらすとやの「猫」の画像を使用する。
以下の12枚の画像を用いた。

正則化のために同じクラスの画像が200枚必要になるため、Stable Diffusionで「a photo of a cat」というプロンプトで生成した。
リポジトリにはプロンプトから画像を生成するスクリプトも用意されている。

学習手順

GitHubのREADMEの通りに実行すれば、問題なく実行できた。

python main.py --base configs/stable-diffusion/v1-finetune_unfrozen.yaml \
        -t --actual_resume /work/stable-diffusion-v-1-4-original/sd-v1-4-full-ema.ckpt \
        -n cat \
        --gpus 0, \
        --data_root training/images \
        --reg_data_root regularization/images \
        --class_word cat

デフォルトで800ステップの学習が行われる。
学習時間はA100で、10分くらいで完了した。

画像生成

学習したモデルは、Stable Diffusionと互換性があるため、Stable Diffusion web UIで読み込むことができる。

起動時に「--ckpt」オプションで、logs/images2022-09-28T08-16-31_cat/checkpoints/last.ckptを指定すればよい。
※images2022-09-28T08-16-31_catの部分は書き換える。

生成例

ファインチューニングしたモデルで、猫の画像を生成した例は以下の通り。
プロンプト:sks cat

いらすとや風の画風で、猫のイラストのバリエーションが生成できている。


sksを付けないと、以下のような画像が生成される。
プロンプト:cat

sksが有効に働いていることが確認できた。

ただし、ファインチューニングにより、既存の単語も色味が変わっており少し影響を受けているように見える。
参考として、既存のStable Dffusionのモデルで猫を生成すると、以下のような画像が生成される。



学習させたクラス(猫)以外の単語でも試した。
プロンプト:dog

ファインチューニングモデル

Stable Dffusionのモデル

ファインチューニングモデルの左下の画像は若干色味が影響を受けていそうである。

猫以外を含んだプロンプト

プロンプトに猫以外の説明を含めて生成した場合、以下のようになる。
プロンプト:木のある庭でボールで遊んでいる猫のイラスト(Illustration of a sks cat playing with a ball in a garden with trees)

猫以外も、猫と調和がとれたイラストが生成されている。

猫以外を修飾した場合

sksで猫以外を修飾した場合、以下のようになる。
プロンプト:sks dog

いらすとやの犬ではないが、イラスト調の画像になっている。

まとめ

いらすとやの画像でDreamboothを試してみた。
数枚の画像で、学習したクラス(今回は猫)の画像を、スタイルを反映していろいろなバリエーションで生成できることが確認できた。
また、学習したクラス以外の説明を含めた場合でも、違和感のない画像が生成できた。