StableDiffusionを試す
巷では神絵AIと言われる「
Midjourny」が一躍有名になりましたが、OpenSourceで利用可能な新たなAI(学習済みモデルも含めて)が出ましたので、遊んでみました。
名前は、stable-diffusionです。
2022-08-23 に公開されたばかりなので、まだよくわからない箇所も多いですが…
すでに動作がうまく行った人たちの記述を参考に、追試です。
標準のGPUメモリでは不足していてダメそうなので、省メモリ版forkを利用しないとまずそう。
でも、まあ本家から試すことにする。
前提条件
- CUDAが入っていること
- anaconda3が入っていること
mkdir ~/temp
cd ~/temp
git clone https://github.com/CompVis/stable-diffusion
cd stable-diffusion
conda env create -f environment.yaml
conda activate ldm
これで、anacondaの仮想環境が用意される。
必要なLibraryなども一式入れてくれるので、これで完了
学習モデルデータは、ユーザー登録が必要なので、以下から先に登録しておく。
メールでの確認が届くので、リンクを踏んで完了。
でもって、
にアクセスして、
「You need to share your contact information to access this model.」項目の最後の「Access repository」を選択。
これでダウンロード可能になる。
参考のURLにしたがって、
cd ~/temp
git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
cloneされた「stable-diffusion-v-1-4-original」を「stable-diffusion-v1」にリネームし、
stable-diffusion/models/ldm以下に移動。
続いて、先のサイトから「sd-v1-4.ckpt」をダウンロード。
(ちなみに4GB強あるのでやや時間がかかる)
これを「model.ckpt」にリネーム。
でもって、「stable-diffusion/model/ldm/stable-diffusion-v1/」内に移動。
最終的には、以下のようになった。
├── Stable_Diffusion_v1_Model_Card.md
├── latent_diffusion.egg-info
│ ├── layout2img-openimages256
│ ├── semantic_synthesis256
│ ├── semantic_synthesis512
│ ├── stable-diffusion-v1
実行してみる
READMEと同じコマンドを試す
conda activate ldm
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
正しくクローンしていれば、動作し始めるが、予想通りGPUのメモリ不足でエラーを吐いてくる。
まさか、こんな使い方をするとは思っていなかったので、試し程度で購入した「GeForce GTX 1650」は4GBしかメモリを載んでいない。
あちこちの情報を漁ると10GB未満の場合は、うまく行かないことが多いらしい。
はぁ…。ちと環境が厳しいか!
省メモリで動作させる
forkにメモリが少なくても動作できるようにしたものが出ている。
僕は、cloneした後、optimaizedSDフォルダを先にcloneした本家に移動させました。
├── Stable_Diffusion_v1_Model_Card.md
├── latent_diffusion.egg-info
│ ├── layout2img-openimages256
│ ├── semantic_synthesis256
│ ├── semantic_synthesis512
│ ├── stable-diffusion-v1
これで準備完了
いざ再度実行!
こんどは、optimizedSD/optimized_txt2img.pyを使用する。
python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style Tokyo landscape" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 10 --ddim_steps 50
この条件だと、やはりCUDA out of memoryが出力される。
パラメータを変更する。
どうもバッチサイズを小さくするか、画像サイズを小さくしろと書かれている。
python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style Tokyo landscape" --H 256 --W 256 --seed 27 --n_iter 1 --n_samples 1 --ddim_steps 50
無事に通った!
ところが、outputフォルダを確認すると、緑色の正方形が出力されるのみ…
どうも、「--precision full」付けると良いよ〜ということなので、付加してみる。
すると、またメモリ不足と言ってきた。
どうやら精度を上げると更にメモリを喰うらしいので、さらに画像サイズを小さくする。
python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style Tokyo landscape" --H 128 --W 128 --seed 27 --n_iter 1 --n_samples 1 --ddim_steps 50 --precision full
今度は、無事に画像が生成された。
どうみても「Cyberpunk style Tokyo landscape」とは思えない…。
なんじゃこりゃ…。
もう少し、キーワードとサイズを変更したりして試してみる。
こいつは「sleeping golden retriever」で描かせた中で最もまともだった奴。
これは、それなりに見えるが…。ひどい奴は絵にもなっていない。単なるノイズっぽいものや、出鱈目なパターンのようなものも存在する。
今度は「cute chihuahua」で…。
悪夢のような…。
犬と言われれば、ギリギリそうかもというレベル。
チワワとは思えない。
もう、落書きレベルだけどもう少しやってみる。
「very cute and soothing cat」で。
犬よりも猫の方がキュートな出力な気はする。
あまりにメモリ不足が出まくって、パラメータの幅が狭いので画質向上が難しいでし。
これは、大容量のメモリを積んだGPUがないと遊ぶに遊べないですな _| ̄|○
と、自前のマシンで試せるのが面白いし、気楽に何度でも描かせるけど、ハードウェアの要求が厳しいです。
多分、これくらいを入手しないとだめかなぁ。
これで12GBメモリとGeForce RTX 3060
もう少し上だと、RTX 3080で10GB…。¥140,000弱って、普通に使うPCなら買えちゃうわけで…。
コメント
コメントを投稿
励みになりますので、簡単で良いので一言くださいませ。