はじめに
※2022/09/11時点
話題の文字から画像を生成するツール。
原理わかっていなく、pythonとか機械学習周りとかもさっぱりでしたが、こちらの記事を参考にそのまま作業した所、結構あっさりいけました。
https://vivinko.com/inoue/blog/2022/09/01/162730.html
※参考サイトはM1 Maxで、スペックは少し下です。とはいえM2とかでも可能そう
環境
- MacBook Pro(14インチ、2021)
- M1 Pro 10CPU/14GPU
- メモリ 32GB
- asdf
- python (miniforge3-4.10.3-10 :python3.9.7)
- conda
- python 3.9.13
- conda
- cmake (latest :3.24.1)
- rust (latest :1.25.1)
- python (miniforge3-4.10.3-10 :python3.9.7)
- brew
- protobuf
概要
ツール本体と実行に必要なモデルをそれぞれダウンロードして、ツール実行をする
流れ
- ローカルPCに環境構築 (python etc...)
- gitからツール本体のソースをダウンロード
- m1用のブランチがあるので切り替える
- ブランチ切り替えないで、protobuf入れれたらwin環境でもできそう
- m1用のブランチがあるので切り替える
- 実行に必要なモデルのダウンロード(git) & 指定階層に配置
- サイトでアカウント登録と、ダウンロードするページでユーザー情報共有のチェックが必要。(共有されるのは、メールアドレスと名前くらいかと)
- 事前処理用のpythonを実行
- 文字 to 画像のpythonを実行
ローカル環境構築
実行用のフォルダ作成
mkdir workspace; cd workspace
各種インストール
※ asdf、gitは入ってる前提
# python
asdf plugin add python
## condaが最初から入っているバージョン
asdf install miniforge3-4.10.3-10
asdf local miniforge3-4.10.3-10
python -V
# cmake
asdf plugin add cmake
asdf install cmake latest
asdf local cmake latest
cmake -V
# rust
asdf plugin add rust
asdf install rust latest
asdf local rust latest
rustup -V
# protobuf
brew install protobuf
# brew doctor見て, brew update等で、先に環境を綺麗にする必要あった。
conda init
# .bash_profileにコマンドが入るっぽい、ターミナル起動時に勝手にbaseって環境になる。
# この時点ではconda環境に入らないまま
ツール整備
本体ダウンロード
git clone https://github.com/magnusviri/stable-diffusion.git
cd stable-diffusiongit checkout apple-silicon-mps-support
conda環境設定
.zprofileに下記追加 (参考サイトの手順通り、おまじないみたいな感じで入れた)
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1
yamlをベースにconda環境構築
※ターミナル立ち上げ直す。
conda env create -f environment-mac.yaml
conda activate ldm
切り替わると下記みたいなターミナルの表示になるはず
(ldm) ~/workspace/stable-diffusion $
モデル取得
- 下記サイトのSign Upと、リンクのページでのチェックが必要
https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
cd models/ldm
git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
7GBほど、結構待つ。(バージョン上がるほど軽くなってくとか)
公式はAPIが先行リリースとかで、クローズドでは1.5はもうありそう。(詳細は末尾のリンク)
mv stable-diffusion-v-1-4-original stable-diffusion-v1
cd stable-diffusion-v1
ln -s sd-v1-4.ckpt model.ckpt
これで準備がほぼ完了。
実行
事前準備
参考記事にはないけど、最初に1回これが必要だった
python scripts/preload_models.py
画像生成
記事や公式とは違うけど、下記パスで実行できた
※デフォ512、指定わかりやすいように例では入れた
python scripts/orig_scripts/txt2img.py --prompt "coffee" --W 512 --H 512 --plms
他のパラメータは公式参照
https://github.com/CompVis/stable-diffusion
出力先
まぁまぁ、綺麗に描けたワード
※有志のチートシート参考
https://moritz.pm/posts/parameters
# 城 (3D)
A mysterious Western-style castle floating in the sky | unreal engine, depth of field, 4k, fantasy, lumen reflections, studio quality
# 古民家的(実写)
old house in the mountains | cliff top | Around the Meiji era | Fujifilm XT3
- 被写体+属性で綺麗になっていきそう。
- チートシートのワード使って色々試すと面白そうです。
- パイプやカンマの有効性はイマイチ分かってないですが、前に書くほど優先度が高いみたいです。
実行エビデンス
- 512x512の生成で
- 実行時間:6分ほど
- メモリを20GBくらい使ってた
- 描画枚数:4〜6枚 (指定なし時)
- サイズ:512x512(default)
- 64の倍数で指定できるっぽい
- 大きいサイズも指定できたけど、メモリ足りないと実行エラーになる
- 同じワードで同じ画像は生成されなかった
- ファンが回ってくれた
その他
執筆後に類似記事を探したら、ほぼ同じ内容のものがありました。
https://qiita.com/hevo2/items/c9c611a5f918d36732f3
※記事内にはcliで1枚生成の方法のパラメータ指定方法の記述もあり。
また、この中でweb uiを使う方法が書いてあり、これ使うとすごく便利でした。1枚生成を1分くらいでやってくれました!
python scripts/dream.py --web
まとめ
もやもやしたイメージを形にするのとか、こういう感じのが欲しいって場合に今のところ活きそうでした。
(テスト用の画像生成とか)
よりツール化されると、仕事とかでも使いやすいかもです。
※このモデルを元にアイコンまとめて生成、とかサイトデザインを作成とか。そういう時代も来そう。。。
ソースの更新頻度が激しそうで、この手順はそのうち使えなくなりそうですが、現時点の利用例を参考までにって感じです。
最後に、開発会社のインタビュー記事見つけたので、こちらも興味ある方は参考までに。
https://signal.diamond.jp/articles/-/1407