Stable diffusion とdiffusion modelに関する情報収集したものを全部入れる
CompVis(Computer Vision and Learning LMU Munich)が作ったStable diffusion v.1のレポジトリのreadmeを読んでWindowsマシンでGPUを使用して動かしてみる
あとでStable diffusion version 2も動かす予定
動作環境Windows11, corei9, GPU RTX3090
まずはレポジトリをgit cloneした
- readmeにある手順どおりまずはcondaで環境構築
conda env create -f environment.yaml
conda activate ldm
いろんなモジュールをダウンロードするのでかなり時間がかかります。
- ckptを置く場所を作る
models/ldm/stable-diffusion-v1/
というdirectoryをmkdirした。
この状態で、
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
を実行。
scriptsのdirectoryでpython txt2img.pyを実行するとscripts/configs/stable-diffusion/v1-inference.yaml
が無いとエラーがでるので注意。
-
事前学習済みのモデルのダウンロード
https://huggingface.co/CompVis
のサイトのstable-diffusion-v-1-1-originalのリンク、
https://huggingface.co/CompVis/stable-diffusion-v-1-1-original
から学習済みweightをダウンロードする。
Download the weightsのところから
sd-v1-1.ckpt
sd-v1-1-full-ema.ckpt
をダウンロードした。それぞれ7.2GB, 4GBなので環境によってはダウンロードに時間がかかります。
v-1やv-2,などのバージョンの違いは学習の仕方の違い。
例えばv-1は、
lion2B-enのデータセットを使用して256x256解像度で237kステップの学習を行いその後、
laion-high-resolutionデータで512x512解像度で194kステップの学習を行った。
バージョン番号が上がるほど学習ステップが増えより解像度の高い画像で学習している。 -
promptから画像の生成
sd-v1-1.ckptをmodel.ckptにリネームして、
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
を実行すると1回目は時間がかかるが2回目からはそれほど時間がかからず結果が出ます。
結果は以下のように512x512の6枚の画像が生成されます。RTX3090で1分程度の時間が生成にはかかりました。
[sd-v1-1.ckptを使用]
[sd-v1-1-full-ema.ckptを使用]
同じバージョンですが使用するckptによって出力が異なっていますね。
sd-v1-1.ckptとsd-v1-1-full-emaの違いはemaの方は追加学習が可能ということらしいです。
- img2img
入力の画像から別の画像への変換です。
変換はpromptの指示に基づき変換されます。
ここでcuda memoryが足りないというエラーが出ました。
入力の画像サイズを小さくして見たらエラーが消えて動きました。
Stable diffusion の技術の勉強
Stable diffusionの元論文
"High-Resolution Image Synthesis with Latent Diffusion Models" , CVPR 2022 (ORAL)
CompVis版のコードを解説する動画。デバッガで処理を追いかけて解説している。
ローカルにconda環境構築するよりは、Google Colabで最低限Stable Diffusionを動かせるようにしたいという場合は以下のgigazineの記事を参考にする。
Hugging FaceでStable Diffusionの公開デモンストレーションを試すことができます。
ただ試すだけならこれが一番お手軽
手順は以下のgigazineの記事にあります
実際に以下のサイトにアクセスし、
negative promptには出て欲しくない要素を入力します。
大体1分程度で画像が4枚生成されます。
生成中は右上にどのくらい時間がかかったのかと、最終的に何秒くらいかかるのかが表示されます。
例えば以下のような感じで、生成されます。
日本語も受け付けるようですが、日本語だと思い通りに絵が生成されませんので英語を使った方がよさそうです。
Stable diffusionで使用するdiffuserの2つのバージョン
Stable Diffusion with Huggingface版Diffusers library. あるいはuse the original CompVis code.という風に2種類のdiffuserがあると書いてある。
Huggingface版Diffusers libraryについて
このレポジトリは一般的なdiffuserの勉強にも使えます。クイックスタートのところに学習用colabへのリンクがあります。
Stable Diffusion version2を動かしてみる
Stable Diffusion v1の公開経緯と、v1とv2の違いについては以下のブログに詳しい
Stable Diffusion関連の参考になるブログ
gigazineの記事
画像生成AI「Stable Diffusion」を簡単に利用するための実行環境の1つである「Stable Diffusion web UI」のコントリビューター(開発貢献者)の1人であるAUTOMATIC1111氏が、フォークではないものの同名で「機能全部盛り」なStable Diffusion web UI(AUTOMATIC1111版)の開発を進めています。
3DCGの終焉とAI生成レンダリングという未来
生成モデルの問題点なども提起している
ブログの中に出てくるかっこいい絵を生成するためのプロンプトも参考になる