Open7

Stable diffusion とdiffusion modelに関する情報収集したものを全部入れる

しんさんしんさん

CompVis(Computer Vision and Learning LMU Munich)が作ったStable diffusion v.1のレポジトリのreadmeを読んでWindowsマシンでGPUを使用して動かしてみる

あとでStable diffusion version 2も動かす予定

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

動作環境Windows11, corei9, GPU RTX3090
まずはレポジトリをgit cloneした
  1. readmeにある手順どおりまずはcondaで環境構築
conda env create -f environment.yaml
conda activate ldm

いろんなモジュールをダウンロードするのでかなり時間がかかります。

  1. 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
が無いとエラーがでるので注意。

  1. 事前学習済みのモデルのダウンロード
    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ステップの学習を行った。
    バージョン番号が上がるほど学習ステップが増えより解像度の高い画像で学習している。

  2. 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.ckptを使用
[sd-v1-1-full-ema.ckptを使用]
sd-v1-1-full-ema.ckptを使用
同じバージョンですが使用するckptによって出力が異なっていますね。

sd-v1-1.ckptとsd-v1-1-full-emaの違いはemaの方は追加学習が可能ということらしいです。

  1. img2img
    入力の画像から別の画像への変換です。
    変換はpromptの指示に基づき変換されます。
    ここでcuda memoryが足りないというエラーが出ました。
    入力の画像サイズを小さくして見たらエラーが消えて動きました。
しんさんしんさん
Hugging FaceでStable Diffusionの公開デモンストレーションを試すことができます。

ただ試すだけならこれが一番お手軽
手順は以下のgigazineの記事にあります
https://gigazine.net/news/20220823-stable-diffusion-public-release/

実際に以下のサイトにアクセスし、
https://huggingface.co/spaces/stabilityai/stable-diffusion
promptに生成したい画像の説明を打ち込むと、しばらくして画像が生成されます。
negative promptには出て欲しくない要素を入力します。
大体1分程度で画像が4枚生成されます。
生成中は右上にどのくらい時間がかかったのかと、最終的に何秒くらいかかるのかが表示されます。
例えば以下のような感じで、生成されます。

日本語も受け付けるようですが、日本語だと思い通りに絵が生成されませんので英語を使った方がよさそうです。

しんさんしんさん
Stable diffusionで使用するdiffuserの2つのバージョン

https://huggingface.co/CompVis
を見ると、
Stable Diffusion with Huggingface版Diffusers library. あるいはuse the original CompVis code.という風に2種類のdiffuserがあると書いてある。

Huggingface版Diffusers libraryについて

https://github.com/huggingface/diffusers
このレポジトリは一般的なdiffuserの勉強にも使えます。クイックスタートのところに学習用colabへのリンクがあります。

しんさんしんさん

Stable Diffusion関連の参考になるブログ

gigazineの記事

https://gigazine.net/news/20220907-automatic1111-stable-diffusion-webui/

画像生成AI「Stable Diffusion」を簡単に利用するための実行環境の1つである「Stable Diffusion web UI」のコントリビューター(開発貢献者)の1人であるAUTOMATIC1111氏が、フォークではないものの同名で「機能全部盛り」なStable Diffusion web UI(AUTOMATIC1111版)の開発を進めています。

3DCGの終焉とAI生成レンダリングという未来

生成モデルの問題点なども提起している
ブログの中に出てくるかっこいい絵を生成するためのプロンプトも参考になる
https://note.com/kogu_dev/n/ne0f9fbb47b0c