ローカル環境にStable Diffusionをインストールして画像を出力する

スポンサーリンク

話題のStable Diffusionをローカルにインストールして画像を出力してみました。
pythonとか前にちょろっといじったことがある程度で「ミニコンダとアナコンダの違いって何?」とか言うてるぐらいの初心者です。
分からんもんは「これは呪文!」と割り切って進めています。

とりあえず前提として、Stable Diffusionをローカル環境で実行する場合、方法が2つあります。
1つは、pythonのdiffusersというライブラリを使う方法で、もう1つは、Stable Diffusionリポジトリをクローンして使う方法です。
この記事は後者の方法で行っています。

ハード環境

OS: Win10
CPU: Intel Core i7-8700
メモリ: 16GB
GPU: GeForce GTX 1660 Super 6GB
※Stable Diffusionを動かすためには、機能的にギリギリらしいです。

Minicondaのインストール

【後で困らないための】Miniconda windows版の環境構築 | 趣味や仕事に役立つ初心者DIYプログラミング入門

Minicondaをインストールします。
Windows installersからpython3.8に対応した版(ダウンロードした時のファイル名はMiniconda3-py38_4.12.0-Windows-x86_64.exe)を選びます。

最初にインストールする時にAdd Miniconda3 to the system PATH enviroment variableに忘れずチェックを入れて、環境変数にパスを通しておきます。
Minicondaをインストールすると対応バージョンのpythonも同時インストールされるみたいです。便利。

VRAM不足でダメだったパターン

How to Run Stable Diffusion Locally to Generate Images

Stable Diffusionリポジトリ(オリジナル)のクローンを作成

git clone https://github.com/CompVis/stable-diffusion.git

学習モデルをクローン(26GB以上あるので重い)

git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original

この時サイトHugging Faceからユーザー名とパスを聞かれるかもしれないので、予め登録しておきます。
規約系も同意しておきます。

学習モデルをセット
ダウンロードしたstable-diffusion-v-1-4-originalフォルダ内のsd-v1-4.ckptをstable-diffusionフォルダ直下に配置します。これでセット完了です。

conda(Miniconda)の仮想環境を作成&アクティベート

cd stable-diffusion
conda env create -f environment.yaml
conda activate ldm

これで環境構築は完了です。

いざ出力!

python scripts/txt2img.py --prompt "japan mountain" --plms --ckpt sd-v1-4.ckpt --skip_grid --n_samples 1

うーん、RuntimeError: CUDA out of memoryが出るため断念。
やっぱりVRAMが足りないみたい。

VRAM節約でうまくいったパターン

話題のStable Diffusionがオープンソース化されたのでローカルで動かしてみる

Stable Diffusionリポジトリ(VRAM節約版)のクローンを作成

git clone https://github.com/basujindal/stable-diffusion.git stable-diffusion_lesserVRAM

学習モデルをセット
stable-diffusion_lesserVRAM/models/ldm配下に、さっきクローンしたstable-diffusion-v-1-4-originalstable-diffusion-v1にリネームして設置。
さらに、stable-diffusion-v1フォルダ内に(さっき移動させたのなら)sd-v1-4.ckptを戻し、model.ckptにリネーム。こうすると学習モデルとして読み込めるようです。

さっきの仮想環境が残ってるので全部削除

conda remove -n ldm --all

もう一度condaの仮想環境を作成&アクティベート

cd stable-diffusion_lesserVRAM
conda env create -f environment.yaml
conda activate ldm

いざ出力!(さっきとコマンドが違います)

python optimizedSD/optimized_txt2img.py --prompt "cute dog" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 10 --ddim_steps 50

おおっ今度は進んだ!
……と喜んだのもつかの間。
完成した画像が全部緑色。

Prompts only generating blank images · Issue #17 · basujindal/stable-diffusion · GitHub
コマンドに--precision fullを追加!

python optimizedSD/optimized_txt2img.py --prompt "cute dog" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 10 --ddim_steps 50 --precision full

できたぁ~~~~!




cute dog、すごい、かわいい……!
んんーー??かわいいか?
若干足の位置関係とか本数が怪しいのがある……。

ちなみに上のコマンドだと512*512画像を20枚出力しますが、だいたい一時間ぐらいかかります。

ともかくとして、これから呪文を調べていきたいと思います。
近い将来、キーワード選定のプロフェッショナル「魔法使い」って専門家が実際に現れる予感がします(しません)