巷で大人気のオープンソースな画像生成AI「Stable Diffusion」を試してみたい。
しかしREAD MEには"the model is relatively lightweight and runs on a GPU with at least 10GB VRAM"とある。ウチのPCが積んでるのはGeForce 1660 Ti 6GB...10GBのVRAMはAI界にとって大したものではないのだろうが、一般人からするとオーバースペックなのだ。
ただ調べてみるとVRAM不足への対処法があり、無事にStable Diffusionで画像生成できた。
そんなわけで備忘録をこちらに残しておく。
PythonとGPU仕様環境を整える
下記記事通りPyTorchとCUDA11.3の環境を作る。 zenn.dev
またこのタイミングでanaconda promptでもpip install ~
を使えるようにしておいた方が良い。
condaとpipが混同するのは良くないそうだが、pip使えないからか環境構築で躓く場面があった。
モデルの準備をする
流れは下記の記事を参照して行う。 zenn.dev
ただしVRAM足りないのでオリジナルは使えない。速度を犠牲に最適化したフォーク版を使う。これならVRAM 6GBでも動いた。 github.com
git clone https://github.com/CompVis/stable-diffusion
とするところを
git clone https://github.com/basujindal/stable-diffusion
とすればいい。
もしくはオリジナル版を入れた後で optimizedSD フォルダだけ入れて、そこに格納されているファイルから実行するでもいい。
学習モデルのデータは下記から取得する。登録必要。
Diffuser経由で使うやり方が紹介されていたけれど、上手くいかなかったので冒頭の記事の手順通り、.ckptファイルをダウンロードして使った。
huggingface.co
トラブル対応
sh conda env create -f environment.yaml
でエラーを吐いていたようだ。
ライブラリがいくつか見つからない。
下記サイトを参考にenviroment.yaml
の中身確認して補完させてもらった。
zenn.dev
導入時の躓いたとき参考になった。 qiita.com
出力例
出力するときはtxt2imgの場合だと
python optimizedSD/optimized_txt2img.py --prompt "プロンプトの内容"
img2imgだと下記の通りだ
python optimizedSD/optimized_img2img.py --prompt "プロンプトの内容" --init-img hoge.jpg
ここでhoge.jpgはstable-diffusion直下に格納しておく。
optimizedSDの場合オプションに--precision full
を入れておくと良い。自分の環境では、このオプション無しだと黒塗りの絵しか出力されなかった。
他にもサイズや試行回数などなど、オプションは多いので興味があるなら公式を見ておくと良い。
--H 512 --W 512 --seed 27 --n_iter 2 --n_samples 5 --ddim_steps 40
またimg2imgの場合は--strength 0.X
で元絵にどれくらい寄せるかをコントロールできる。Xの値が小さいほど元絵に近くなる。
txt2img
img2img
まとめ
低スペックPCでもStable Diffusion出来た。
Google colabでも使えるとあったけどローカルの方が取り回しやすいので、出来て良かった。
して、この先をどうするかが問題だ。
正直なところ、プロンプトを練って良い絵を目指すことにあまり興味が湧かない。プロンプトを練ること自体は知識もスキルも身につかない作業そのものだし、その作業は僕にとって面白いものではなかった。
ブログの扉絵や挿絵を作るのが、パッと思い浮かぶ有効な使い方だとは思う。けどせっかくローカルで使い放題なのでもっと楽しい使い方を考えたいね。
こんな記事も書いています。