はじめに
画像生成AIに関する知識がゼロである筆者が、Stable Diffusionを動かすための環境を構築し、好きなモデルやVAEを導入するところまで成功したため、手順を記載しておきます。ただし、promptの書き方については触れません
対象者
- 画像生成AIについて知識がない人(私も無いです)
- M1 / M2 Macを使用している人
環境
MacBook Air
Apple M2
メモリ 16G
macOS Ventura 13.2.1
環境構築
Homebrewのインストール
以下のQiitaの記事を参考に、Homebrewをインストールします
必要なパッケージのインストール
Homebrewを使ってパッケージをインストールします
brew install git wget
公式の手順では、cmake
、protobuf
、rust
、python@3.10
、git
、およびwget
をインストールするように指示されていますが、筆者の環境ではgit
とwget
だけで十分でした(Pythonはこのあとインストールします)。もし何かしらのエラーが発生した場合は、cmake
、protobuf
、およびrust
もインストールしてみてください
Python環境の構築
バージョン管理ツールのインストール
Pythonのバージョンによって、動くものと動かないものの差が激しいため、バージョンを自由に切り替えられるように、バージョン管理ツールをインストールします。ここでは、asdfというツールを使用しますが、他のツールでも構いません
asdf
のインストール
brew install asdf
.zshrc
に次の一行を加える
. /opt/homebrew/opt/asdf/libexec/asdf.sh
.zshrc
を直接編集せずとも
echo -e "n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrc
と実行することで追加できます
Pythonプラグインのインストール
asdf
でPythonを扱えるようにします
asdf plugin-add python
この時点でまだPythonはインストールされていません
Pythonのインストール
asdf
を用いてPythonをインストールします。 ここで重要なのは、インストールするバージョン です。
asdf install python latest
と実行することで最新版のPythonがインストールできますが、最新版のPythonではStable Diffusionは動かせないので、 v3.10 をインストールします。
asdf install python 3.10.10
これは2023年4月1日時点での情報です。今後Stable Diffusionのアップデートにより要求されるPythonのバージョンが変更されるおそれがあります
使用するPythonのバージョンの設定
asdf global python 3.10.10
python -v # Python 3.10.10と表示されればOK
stable-diffusion-webui
の環境構築
Stable Diffusionの実行環境を構築する方法には、複数の手段がありますが、今回は最も簡単なstable-diffusion-webuiを使用する方法を紹介します(実は、最初はスクリプトを書いて実行する方法を試みましたが、好きなモデルを指定するところで挫折したため、webuiに切り替えました)
任意のディレクトリに移動したら、以下のコマンドを実行します
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
次に、モデルを用意します。とりあえず最初はオリジナルのモデルを追加してみます
以上のサイトからsd-v1-4.ckpt
というファイルをダウンロードしましょう。基本的に、AIのモデルなどを落としてくるのはこのHugging Faceというサイトになります。Hugging Faceはアカウント登録が必要なので事前に登録をしてください
AIのモデルは、ckpt
やsafetensors
といった拡張子になっています。また、モデルを落とす際にgit lfs
でリポジトリごと落とせと言ってくることもありますが、膨大な時間がかかるのでおすすめしません。目的のファイルだけ直接ダウンロードすれば大丈夫です
Hugging Faceの使い方は、ほとんどGitHubと同じです。File and versions
という欄から目的のモデルファイルをクリックし、This file is stored with Git LFS . It is too big to display, but you can still download it.
という文のdownload
をクリックすれば落とせます
落としてきたモデルはstable-diffusion-webui/models/Stable-diffusion
配下に置いてください
Pythonの仮想環境を構築
stable-diffusion-webui
を実行する際にさまざまなパッケージ等がインストールされるのですが、なるべくまっさらできれいな状態で行いたいので、仮想環境を構築します。
仮想環境といっても構築はとても簡単です。venv
というもので行うのですが、Pythonに標準でついてくるので特にインストールなどは必要ありません
cd stable-diffusion-webui
python -m venv .venv
これで.venv
という名前の仮想環境が構築できます。名前はvenv
や.venv
にするのが慣習だそうです
source .venv/bin/activate
これで仮想環境に入れます。もし、仮想環境から出たくなったら
deactivate
で抜けられます
stable-diffusion-webui
の実行
sh webui.sh
初回起動は結構時間がかかります
...
Running on local URL: http://127.0.0.1:7860
...
という表示が出ていれば起動が完了しています。ブラウザでhttp://127.0.0.1:7860
にアクセスしてください。
stable-diffusion-webui
の使い方
ここでは、 txt2img の基本的な使い方について説明します。 txt2img とは、 テキストから画像を生成するための技術 です。
Stable Diffusion checkpoint
使用するAIモデルを選択します
Prompt
画像に表れて欲しい要素をテキストで書きます
Negative prompt
画像に現れて欲しくない要素をテキストで書きます
Sampling method
サンプリングに使用するメソッドを選択する必要がありますが、よくわからない場合は、AI モデルの説明欄にどのメソッドを選択すればよいかが書かれていることがあります。迷った場合は、とりあえずDPM++ 2M Karras
またはDPM++ SDE Karras
を選択することをおすすめします
Sampling steps
サンプリングの回数を指定します。画像生成AIでは、まず、seedからノイズを生成し、そこからpromptに沿って画像を変化させていきます。その回数をここで指定します。基本は20くらいで、多くて70くらいな気がします。5とかにするとバケモノが生まれます
Restore faces
顔を綺麗にするためのオプションです
Tiling
画像をタイル状に並べて表示するためのオプションです
Hires. fix
解像度を上げることができるそうですが、使ったことがないので解説できません。すみません!
Width & Height
生成する画像のサイズを指定します。デフォルトは512512で、AIモデルは512512に最適化されていることが多いのであまり動かさないほうがいいです。解像度を上げたい場合は、後述する方法を使います
Batch count & Batch size
どちらも生成する画像の枚数を指定するものですが、Batch count
が生成する回数を指定するもので、Batch size
が一度に生成する枚数を指定するものとなっています。Batch size
を上げすぎるとパソコンが死にます
CFG Scale
どれだけpromptに忠実にさせるかを指定します。基本は7くらいだそうです
Seed
シード値を指定します。-1にするとランダムになります
AIモデルの追加
せっかくなので別のAIモデルも追加してみましょう
AnythingV4
なんだかたくさん種類がありますね。どうやらpruned
とはファイルサイズを抑えたバージョンらしいです。せっかくなのでpruned
のものをダウンロードしてみましょう
anything-v4.0-pruned.safetensors
をダウンロードします。落としたファイルはstable-diffusion-webui/models/Stable-diffusion
配下に置いてください
とりあえず何か生成してみましょうか。Stable Diffusion checkpoint
の欄からanythingv4.0
を選択してください
生成結果
settings | values |
---|---|
Prompt | ((masterpiece, best quality)), high-resolution, super high res, 1 girl, character focus, upper body, front view, pink hair, long hair, ((thick eyebrows)), open mouth, (loli, younger), ahoge, smile, laugh, illustration, (cute and kawaii), standing |
Negative prompt | なし |
Sampling method | DPM++ 2M Karras |
Restore faces | on |
Width | 512 |
Height | 512 |
CFG scale | 7 |
Seed | 3104403533 |
割とそれっぽいですが、細部を見ると結構崩れていますね
VAEの導入
VAEを導入すると、画像が鮮明になったり細部の崩れを抑えたりすることができます
VAEには以下の種類があります
- 汎用的なVAE
- AIモデルが用意しているそのモデル専用のVAE
AnythingV4には専用のVAEがあるので導入してみましょう
anything-v4.0.vae.pt
というファイルをダウンロードしてください。VAEは.vae.pt
という拡張子になっていることが多いみたいです
落としてきたVAEはstable-diffusion-webui/models/VAE
配下に置いてください
VAEはSettings
の欄のStable Diffusion
という欄から設定できます。SD VAE
という項目から選択してください
同条件で、VAEだけ変えた結果が以下となります
比較してみると以下のようになります
vaeなし | vaeあり |
---|---|
全体的に鮮やかになって、腕の消失などの崩れがなくなっていますね! 背景のバケモノも笑顔になっています
このように、きれいな画像を生成させるにはVAEを設定するのはほぼ必須級となっているので、ぜひ設定しましょう
EasyNegativeの導入
ここまではNegative promptになにも設定していなかったのですが、(worst quality), (missing finger), (extra fingers)
などと書くと崩れを抑えることができます。しかし、いちいちこれらを書くのは面倒なので、EasyNegative
という簡単にNegative promptを設定できるものを導入します
上記から、EasyNegative.safetensors
をダウンロードしてください。
落としてきたファイルはstable-diffusion-webui/embeddings
配下に置いてください
EasyNegativeを使うには、Negative promptにEasyNegative
と書くだけです。これだけで適用することができます
それでは、EasyNegativeを設定し、他は同条件で生成した結果をご覧ください
太眉じゃなくなっているのですがそれは……
唇もどこか不気味ですが、まあそれは置いといて、全体的なクオリティはとても上がっていますよね
ちょっと何枚か生成してみましょうか
😊
別のAIモデルも試す
AnythingV4以外にも試してみましょう。ambientmix
というモデルでやってみます
vaeは推奨のorangemix
を使います
結果は以下の通りになりました
アニメっぽい作風ですね。こっちのほうが好みかも
高解像度化
今のままでは512*512と解像度が良くないので、高解像度化したいですよね。そこで、Real-ESRGANというものを使用したいと思います
You can download Windows / Linux / MacOS executable files for Intel/AMD/Nvidia GPU.
という文章のMacOS
からzipファイルをダウンロードします
解凍したら任意のディレクトリに置き、以下のコマンドを実行します
cd realesrgan-ncnn-vulkan-20220424-macos/
chmod u+x realesrgan-ncnn-vulkan
mkdir inputs
mkdir outputs
次に、inputs
ディレクトリの中に高解像度化したい画像ファイルを置きます。その後に以下のコマンドから実行します
./realesrgan-ncnn-vulkan -i inputs -o outputs -n realesr-animevideov3 -s 2 -f png
実行が完了すると、outputs
ディレクトリに高解像度化された画像ファイルが生成されています
比較
before | after |
---|---|
おわりに
呪文は奥が深いですね。あと、モデルデータは容量がとても大きいのでストレージがすぐ膨れそうでこわいです
この記事はAI知識ゼロの人が書いているので、間違いがあったらコメントで教えて下さい🙇🏻