M1 MacBook Proで Stable Diffusion を実行して KAWAII を生成しよう!
実行環境
MacBook Pro(16インチ、2021)を使っている。メモリは 32 GB にカスタマイズしている。
インストール方法
M1 MacBook ProでStable Diffusionを動かす方法は「M1 MacBook ProでStable Diffusionを動かすまでのメモ」が参考になった。
元ネタとの違い
environment-mac.yaml
の値は変更せずにインストールした。 python のバージョンは デフォルトの 3.10.4
のままである。
functional.py
を修正する必要があるが、python 3.10.4 の場合は、 /opt/homebrew/Caskroom/miniconda/base/envs/ldm/lib/python3.10/site-packages/torch/nn/functional.py
を修正すれば良い。
txt2img のチュートリアル
チュートリアルのプロンプトである python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
を実行したところ、無事画像を生成できた。
DALL·E 2 では 4枚生成するのに1分だったが、ローカル環境のStable Diffusion の txt2img では 1枚生成するのに 1分ほどかかる。
デフォルトでは 画像が6枚生成されるので、コマンドを打ってから画像が出力されるまで 約6 分かかる。
DALL·E 2 と Stable Diffusion (ローカル) との違い
さて次に、DALL·E 2 で過去に生成した画像を見比べてみよう。過去に筆者が DALL·E 2 を遊び倒していた頃、このような記事を書いた。
同じプロンプトを使って、DALL·E 2 と Stable Diffusion の差異を見比べていきたい。
プロパンダ広告その1
DALL·E 2 でプロンプト A 1950s American propaganda poster of kawaii cute girl Hatsune Miku, ranking number 1 in pixiv
の生成を指示したところ生成されたのがこれ。
Stable Diffusion でプロンプト A 1950s American propaganda poster of kawaii cute girl Hatsune Miku, ranking number 1 in pixiv
の生成を指示したところ生成されたのがこれ。
プロパンダ広告その2
DALL·E 2 でプロンプト A 1940s Empire of Japan's propaganda poster of kawaii cute girl Hatsune Miku, ranking number 1 in pixiv
の生成を指示したところ生成されたのがこれ。
次に Stable Diffusion でプロンプト A 1940s Empire of Japan's propaganda poster of kawaii cute girl Hatsune Miku, ranking number 1 in pixiv
の生成を指示したところ生成されたのがこれ。
考察
初音ミク成分が失われてしまっているのがわかる。引き続きテストしていくが、DALL·E 2と同じプロンプトで同じ結果を得ることができないようだ。
DALL·E 2は独自に指向性を与えていたのかもしれない。もう少しキーワードを深掘りしていく必要がありそうだ。
img2img が動かない!
さて、次は img2img を試していく。コマンド自体は下記の通り。
python scripts/img2img.py --init-img sample.jpg --prompt "hatsune miku" --strength 0.6
しかしエラーが発生する。
結論:入力サイズ別結果
- 256x256
- 出力が幾何学模様になってしまう
- 400x400
- 動く。ただし出力画像のクオリティは低い
- 512x512
- エラーが発生
- 600x600
- 動く。このあたりが妥当か?
- 650x650
- 動く。出力画像がモザイクになってしまう (うまく学習できてない?)
- 1024x1024
- エラーが発生
img2img が動かないのは入力画像のサイズのせいだった
入力画像を 1024x1024 で作っていると、MacBook Proでは対応できないみたいでうまく動かなかった。このツイートを見て、256x256 に縮小したところ動きはしたが生成される画像が意味をなさないものになってしまった。
KYUさんにこのツイートで、入力画像のサイズが512x512 以下の場合にはクオリティが落ちることを教えてもらった。どこまで上げたら動くのか試していくことにした。
プロンプトは適当なので別途練る必要があるが、入力画像を 400x400 にしたらそれっぽく動いた。先程の幾何学模様とは違うものになった。
入力画像の最大サイズは 600x600 だった
512x512 で失敗したのでこれが上限かと思ったが、どこまで入力画像を大きくしても大丈夫か試してみた。結果として 600x600 まで上げても動くことが判明した。
動くという意味では 650x650 もいけたが、学習に失敗するのか出力結果がモザイクになってしまった。
M1 MacBook Proではグラボがしょぼいのかメモリが足りていないのか1回に生成できるのは2枚までである。しかしAIに絵を描かせてまともに出力されるのはガチャなので、連続してAIに絵を描いてもらいたい。for文またはwhite文で生成させることにした。
しかし、ちゃんとしたグラボ載ったPC欲しいっすなぁ……
指定した回数生成する
for i in {1..3} ; do python scripts/img2img.py --init-img sample.jpg --prompt "Hatsune Miku" --strength 0.7 --n_sample 2 ; done
無限に生成する
while true; do python scripts/img2img.py --init-img sample.jpg --prompt "Hatsune Miku" --strength 0.7 --n_sample 2 ;sleep 2; done
情報が古くなったのでクローズ