Stable Diffusionを微調整するために必要な条件の調査

AI

1.Stable Diffusionを微調整するために必要な条件の調査まとめ

・Stable Diffusionを独自データで微調整してイラストを改良している人達がいる
・Stable Diffusionを微調整するにはどの程度のデータと予算が必要か調べてみた
・トップレベルは200万円以上かけているが数千円でもそこそこの改良はできそう

2.Stable Diffusionの微調整に関する調査

アイキャッチ画像はstable diffusionの生成で「ポケモンバトルをしているトトロ」と入力した結果です。トトロはモンスターボールを投げられる方かと思っていたら投げる方のようでした、失礼しました。

2022年10月30日追記)途中経過ですがStable Diffusionを微調整した結果を投稿しました。画像データがすくないと過剰適合しがちで調整が難しい感じではあります。

最近、情熱的な人達はStable Diffusionを独自データで微調整(Fine Tuning)してより好みのイラストを生成しやすいようにしています。

DreamBoothtextual inversionも微調整と言えば、微調整で素晴らしい効果が見込めますが、学習用データとして与える事が出来る画像数は3~5枚程度が妥当と論文内で言われていて、より多くのデータでがっつりと学習して貰う事がどうやら難しいようなのです。

ハイハイハイ!!独自データでの微調整、私もやってみたいです!

という事で、まずはStable Diffusionを微調整するには

(1)GPUメモリはどのくらい必要なのか?
(2)どの程度のデータ量でどの程度の成果が得られるのか?
(3)微調整用にはどんな形式のデータ/注釈を用意する必要があるのか?
(4)クラウドをお借りするとしたらトレーニング完了までにお幾らほどになりそうか?

をざっと調べてみました。

(1)GPUメモリは如何ほど必要なのか?

16GBは最低でも必要そうです。

私のRTX-3060(12GB)でもどうにかならないのかと調べてみましたが、DeepSpeedという最適化ライブラリを使うとGPUメモリから溢れた部分をCPU(本体メモリ)やディスクに書き出してトレーニングを継続する事が出来るようなのですが、今のところ、私は混合精度関係のエラーが出てしまい動作させる事が出来ていません。

頑張って動かせたとしてもおそらく速度的に非常に遅いと思われますので、エラー原因を追及したり、お金を貯めてハイエンドなGPU(つまり電気代も高い)を購入するよりはトレーニングはクラウド実行はローカルPCと割り切った方が効率良さそうだなと感じています。

Colab Pro+なら動かす事は可能ですが、課金仕様が変わってプレミアムなGPUだとそこそこお金がかかるようになってしまいました。

(2)どの程度のデータ量でどの程度の成果が得られるのか?

LambdaというGPUのクラウドサービス等を提供している会社がポケモンのデータセットで微調整したStable Diffusionの出力結果をgithubで公開してくれており、中々良い感じの微調整が出来ているように見えます。


Lambda社のgithubより引用

ポケモンのデータセット(pokemon-blip-captions)自体はhuggingface社のDatasetsで公開されており、データセット長は

833サンプル数
99.7 MB

との事です。

1000以下の画像でもこれだけ良い感じに微調整できるのであれば手の届かないレベルではなさそうです。

なお、huggingface社のdiffusersライブラリのサンプル内でも同データを使ったトレーニングが紹介されているのでdiffusersに慣れている方はそちらのトレーニングコードを参考にするのも良いかもしれません。

(3)どんな形式のデータ/注釈が必要なのか?

Lambda社の学習用サンプルですとhuggingface社のDatasets形式にする必要があり、チラ見すると以下です。

画像+テキストで構造自体は特に複雑ではありません。

また、テキスト自体も画像をsalesforce社のBLIPに与えて出力されたものであり、手動で注釈付けしたものではなく、画像さえ用意できればテキストは割と何とでもなりそうです。

(4)クラウドをお借りするとしたらお幾らほどになりそうか?

前述のLambda社のクラウドサービスであれば、ポケモンのデータセットで微調整するために、2 x A6000 GPUを15,000ステップ(6時間)動かして約$10ドル(1,450円)との事です。

これは、GCPやAWSなどのメジャーなクラウド比で確かにお安いと思います。

ちなみにオープンソースとして公開されたオリジナルのstable-diffusion-v1-4は

(1)stable-diffusion-v1-1
237k steps at resolution 256×256 on 「laion2B-en(約23.2億枚)」
194k steps at resolution 512×512 on 「laion-high-resolution(約1.7億枚)」

(2)stable-diffusion-v1-2
v1-1に以下を追加
515k steps at 512×512 on 「laion-improved-aesthetics(おそらく6億よりは少ない)」

(3)stable-diffusion-v1-4
v1-2に以下を追加
225k steps at 512×512 on 「laion-aesthetics v2 5+(約6億)」

なので、延べ36億枚程度の画像を使用して1,171,000ステップ学習していると思われます。

これほど、巨大なモデルであっても1,000以下の画像で15,000ステップでかなりいい感じに微調整出来るのですね。

また、Stable Diffusionを二次元イラストで微調整した事で人気の高いWaifu Diffusion 1.3は、Stable Diffusion 1.4を68万画像で微調整した結果で8 x 48GB A40 GPUsで10日間、約$3,100ドル(約45万円)かかっているそうです。

Waifu Diffusionは試行錯誤も加えるとおそらく200万円以上はかかっていそうで凄い情熱を感じますが、これは世界トップレベルのプロジェクトだと思います。

3.Stable Diffusionを微調整するために必要な条件の調査関連リンク

1)github.com
examples / stable-diffusion-finetuning (Fine Tune Stable Diffusion)
salesforce / BLIP
diffusers/examples/text_to_image (Stable Diffusion text-to-image fine-tuning)
microsoft / DeepSpeed

2)huggingface.co
lambdalabs/pokemon-blip-captions

3)gist.github.com
Waifu Diffusion 1.3 Release Notes

タイトルとURLをコピーしました