Stable Diffusion とは、Stability AI 社が提供するオープンソースの画像生成AI。これを使える Web サービスはいくつかあるが、ダウンロードして自分の PC 上で動かすようにすることもできる。以下は、その Web UI である「Stable Diffusion Web UI」を Windows PC に導入する手順。
前提条件
PC は高性能であればあるほど良いが、最低限の環境として VRAM 8GB 以上のグラフィックボードを積んでいれば、とりあえず動く。できれば VRAM 12GB 以上の NVIDIA 製 GeForce RTX シリーズ以降推奨。当然、メモリが多ければ多いほど、画像生成速度は高速。
VRAM メモリを確認するには、Windows + R キーを押して表示されるウィンドウに「dxdiag」と打ち込んで「OK」を押す。すると「DirectX診断ツール」というウィンドウが開くので、その「ディスプレイ1」タブの「表示メモリ(VRAM)」の値チェック。ここが 8GB 以上なら、とりあえず OK。
Python をインストール
Stable Diffusion Web UI を提供している AUTOMATIC1111 のリポジトリを確認。
「Automatic Installation on Windows」の項を確認。「Install Python 3.10.6 …」というリンクがあるので、これをクリック。
Python のダウンロードページに移動するので、「Files」の一覧から「Windows installer (64-bit)」を選択してダウンロード(いまどき 32bit OS は使われてない前提)
ダウンロードしたら、実行形式のインストーラなのでそのまま実行。設定は大体デフォルトのままインストールで OK だけど、「Install Now」のところで一番下に表示されている「Add Python 3.10 to PATH」のチェックボックスは ON にして進める。
Git をインストール
既に Git がインストールされている場合は、ここはスキップで OK。
まだの場合は、以下のページを開く。
「Download」をクリック。
「Windows」をクリック。
「64-bit Git for Windows Setup」をクリックしてダウンロード。
ダウンロードしたら、実行形式のインストーラなのでそのまま実行。全てデフォルトのままインストールで OK なはず。
Stable Diffusion Web UI をインストール
Windows スタートメニューから「Git Bash」を起動。
Stable Diffusion Web UI をインストールしたいディレクトリに移動して、以下のコマンドを実行。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
これでリポジトリの内容が clone(ダウンロード)される。「stable-diffusion-webui」というディレクトリが作成されるので、その中にある webui-user.bat をダブルクリックして起動。
コマンドプロンプトが起動して、Stable Diffusion のインストールが始まるので、しばらく待つ。
インストールが完了したら Stable Diffusion Web UI のサーバが起動する。「Running on local URL: http://0.0.0.0:7860」というような文字列が表示されたら起動まで完了している(はず)。
ここまでできたら、いったん Ctrl + C で終了させておく。
SD モデル をダウンロード
現在 Stable Diffusion のモデルはうんとこ山ほどつくられて公開されているが、まずは手始めに Statirity AI 社公式のモデルで動作確認する。
以下のページを開く。
このファイルの中から「v2-1_768-ema-pruned.safetensors」を選択してダウンロード。
ダウンロードしたら、そのファイルを Stable Diffusion Web UI ディレクトリ下の stable-diffusion-webui/models/stable-diffusion の中に移動する。
VAE モデル をダウンロード
VAE(Variational Auto Encorder)モデルは画像生成時のエンコードで利用される。これを設定することで、生成される画像が鮮明になったり、ノイズが除去されたりする。なくても動作はするが、あると生成される画像の質が上がるので、VAE モデルもここでダウンロードしておく。
以下のページを開く。
このファイルの中から「vae-ft-mse-840000-ema-pruned.safetensors」を選択してダウンロード。
ダウンロードしたら、そのファイルを Stable Diffusion Web UI ディレクトリ下の stable-diffusion-webui/models/VAE の中に移動する。
EasyNegative (embedding) をダウンロード
これは必須ではないが、あるとネガティブプロンプトの指定が楽になるので、ここでダウンロードしておく。
以下のページを開く。
このファイルの中から「EasyNegative.safetensors」を選択してダウンロード。
ダウンロードしたら、そのファイルを Stable Diffusion Web UI ディレクトリ下の stable-diffusion-webui/embedding の中に移動する。
起動バッチの調整
Stable Diffusion の起動バッチである webui-user.bat の内容を一部書き換える。
webui-user.bat を適当なテキストエディタで開いて「set COMMANDLINE_ARGS=…」で設定されるコマンドライン引数に、以下のオプションを記述する。
set COMMANDLINE_ARGS=--xformers --listen --disable-safe-unpickle --allow-code --autolaunch --no-half --enable-insecure-extension-access
それぞれ、次のような効果がある。
- –xformers : 画像生成の高速化, メモリ使用効率向上
- –listen : ローカルサーバでリクエストを待ち受ける
- –disable-safe-unpickle : ファイルチェックの無効化
- –allow-code : プロンプトにコードを入力できるようにする
- –autolaunch : サーバが起動したら、自動的にブラウザを開く
- –no-half : 半精度浮動小数点演算を無効化 (グラボのバグ回避らしい)
- –enable-insecure-extension-access : 拡張機能アクセスのセキュリティを使用しない (これを設定しないと、Web UI 上で拡張機能がインストールできない)
これらを設定したら、ファイルを保存して閉じる。
Web UI 起動
webui-user.bat をダブルクリックして Web UI を起動。「–autolaunch」オプションを指定しているので、今度はサーバ起動と同時にブラウザが開いて、以下のようなページが開く。
試しに画像生成してみる。
- 画面左上の「Stable Diffusion checkpoint」に、上記でダウンロードした SD モデル「v2-1_768-ema-pruned.safetensors」を選択。
- 「txt2img」タブを開く(デフォルトで開いてるはず)
- 上のプロンプト(生成して欲しい画像の指示)に、以下のように入力。
masterpiece, best quality, ultra-detailed, illustration, classroom, indoors, school desk, school chair, chalkboard, window, school, 1girl, sitting, school uniform, black hair, skirt , short hair, white shirt - 下のプロンプト(ネガティブ指定。生成して欲しくない画像の指示)には「EasyNegative」と入力。(上記で EasyNegative の embedding を入れている想定)
ここまで入力したら「Generate」ボタンを押す。これで「教室で白い制服を着た黒髪の少女が席に座っている」みたいな画像(上記プロンプトの指示内容)が生成される(はず)。
VAE を選択できるようにする
デフォルトだと VAE が自動選択になっているので、これを任意に選択できるようにする。
画面上部から「Setting」タブを開く。
画面左メニューから「User Interface」を開く。
「Quicksettings list」に「sd_vae」を追加。
画面上部の「Apply settings」ボタンを押す。
続けて「Reload UI」ボタンを押す。
これで画面上部に「SD VAE」の選択項目が表示される。
SD モデルを追加する
上記では公式のモデルを使ったが、先述の通り、現在 Stable Diffusion 向けのモデルはピンキリで数えきれないほど公開されている。ここでは詳しく紹介しないが、以下のようなサイトで公開されているので、好みのモデルを探してみると良い。
- huggingface : Git リポジトリになっているので、Git での取得も可能
https://huggingface.co/ - CIVITAI : 画像生成したプロンプトも公開されている
https://civitai.com/
例えば、以下は huggingface と CIVITAI で公開されている人気モデルの一部。
- Anything-v3.0 : 自然なアニメ調
https://huggingface.co/Linaqruf/anything-v3.0 - Counterfeit-V3.0 : 鮮やかなアニメ調
https://huggingface.co/gsdf/Counterfeit-V3.0 - ambientmix : ハイコントラストなアニメ調
https://huggingface.co/OedoSoldier/ambientmix - ACertainThing : スケッチのような絵が特徴
https://huggingface.co/JosephusCheung/ACertainThing - セブンスアニメ : くっきり線画が特徴
https://huggingface.co/syaimu/7th_Layer - ChilloutMix : リアル調な東洋人女性が得意
https://civitai.com/models/6424/chilloutmix - Beautiful Realistic Asians : これもリアル調な東洋人女性が得意
https://civitai.com/models/25494/brabeautiful-realistic-asians-v2
新たなモデルをダウンロードしたら、先述の公式モデルと同様に Stable Diffusion Web UI ディレクトリ下の stable-diffusion-webui/models/stable-diffusion の中に移動する。
例えば「Anything-v3.0」をダウンロードしたら、「Stable Diffusion checkpoint」(SD モデル)を「anything-v3-fp32-pruned」、「SD VAE」(VAE モデル)を「vae-ft-mse-840000-ema-pruned」に変えて、上記と同じプロンプトで「Generate」ボタンを押すと…
モデルを「Basil mix」に変えて、ネガティブプロンプトに以下のワードを追記してみる。
EasyNegative, worst quality, low quality, normal quality,worst face,missing fingers, interlocked fingers,missing leg, missing arms, extra arms , extra legs , extra limbs, cropped, low res, mutilated, mutated hands, bad anatomy, error, deformed, malformed limbs, ,watermark, disfigured, pubic hair, skin spots,robot
こんな感じで、同じプロンプトでも、モデルを変えるとまた全然違う感じの画像が生成される。
プロンプトの書き方
上記の通り、txt2img は、テキストでどんな絵を生成するか指示して画像生成する機能。その指示の入力欄をプロンプトと呼ぶが、最近はもうそこに入力するテキスト自体をプロンプトといってたりする。
その詳細な書き方のルールについては他サイトに譲ることにして、ここではとりあえず把握しておくと良いレベルの簡単なルールをざっくりと。
- 記述できるのは英単語、または簡単な英文
- 要素はカンマ区切りで並べる
- 順番は前の方に書くものほど優先度が高い
- 単語を括弧 “()” で囲うと優先度が上がる
- “((smile))”, “(((beautiful)))” という具合に括弧を重ねるほど優先度が上がる
- 優先度は “(smile:1.1)” “(beautiful:1.2)” のように数値で指定もできる
よく見る書き方だと、画像の品質, 画像の主体, 画像のシチュエーション の順番で書かれている感じ。
例えば、「夏祭りで花火を楽しむ浴衣を着た女の子」みたいな感じで指定したい場合、こんな感じ。
exceptional, best aesthetic, best quality, masterpiece, extremely detailed, 1girl, (summer yukata:1.2), (fireworks display:1.1), (face close-up:0.8), vibrant colors, sparkling night sky, festive atmosphere, joyful expression, dancing lights, laughter and chatter, peaceful tranquility, whispering breeze
ネガティブ側には、生成AIにありがちな奇形防止のためのワードを並べておく。
lowres, ((bad anatomy)), ((bad hands)), text, missing finger, extra digits, fewer digits, blurry, ((mutated hands and fingers)), (poorly drawn face), ((mutation)), ((deformed face)), (ugly), ((bad proportions)), ((extra limbs)), extra face, (double head), (extra head), ((extra feet)), monster, logo, cropped, worst quality, jpeg, humpbacked, long body, long neck, ((jpeg artifacts)), deleted, ((censored)), ((bad aesthetic)), (mosaic censoring, bar censor, blur censor)
これで、モデルを「Anything-v3.0」にして生成すると、こんな感じになる。
指先や指の本数が変だったり、不自然な箇所もあるけど、こうしてプロンプトで細かく指示したり、モデルにあった(モデルごとに得意、不得意がある)ワードを指定していくことで、それっぽい絵に近づけていける。(これにハマっていくと、画像生成沼にようこそ!ということに)
Chat GPT でプロンプトを生成する
画像生成のために英単語や英文を調べて、それをカンマ区切りでならべて、というような作業はなかなか苦痛なので、それをチャットボットである Chat GPT などにやってもらうという手もある。
例えば、次のような指示をすれば、ベースとなるテキストをつくってくれる。「danbooru タグ」というのは、インターネットで公開されている画像にタグ付けするサイトである danbooru のことで、画像生成AIもこれを学習素材として利用していて、そこで使用されているタグも学習されているので、実はそのタグを解釈できるということ。
「夏祭りの夜、色鮮やかな花火を楽しむ、花柄の浴衣を着た、黒髪でツインテールの女の子」を表現する英単語、または danbooru タグを、”,” 区切りで並べてください。
これをそのままプロンプトに貼り付けても良し、前に品質を指定する定番ワードをつけたり、”()” で強調したい単語を強調するなどアレンジしても良し。ちなみに、そのまま使ってもモデル次第でしっかりした画像を出してくれる。
これは「Anything-v3.0」でそのまま出した例。
Stable Diffusion は txt2img の他にも画像生成の方法があり、さらに拡張機能を追加することで、人物にポーズを取らせたり、アニメーションさせたり、画像生成のためのモデルを自作できたりといったこともできる。
ただ、どれもなかなかにマシンパワー(主にGPUパワー)を使うので、今の私の貧弱な GTX マシン(数世代前の GeForce)では限界があるのが如何ともしがたく。最近はローカル PC で苦労しなくても、Web サービスで超絶に高品質な画像生成ができるようになってきてるみたいなので、そちらを開拓していくのもアリかなと。