Stable Diffusion web UIでSDXLを利用する方法 (WSL+Ubuntu環境)

[Stable Diffusion] Stable Diffusion web UIでSDXLを利用する方法 (WSL+Ubuntu環境)

※ 当サイトは広告を含みます。

Stable Diffusion web UIがSDXLに対応したので環境を整えました。
今回もWSLとUbuntuの環境を使って画像生成で遊びたいと思います。

動作にはStable Diffusion web UIが必要になります。
以下にインストール手順をまとめてるので参考にしてください。

◆ [追記: 2023/09/09]
バージョン1.6でSDXLのrefiner機能が正式にサポートされました。
これまでは手動でモデルを切り替える必要がありましたが、最新版では自動で処理されます。

この機能に関しては後半で解説しますので、同手順でweb UIのアップデートを行ってください。
ちなみに自身のバージョンが不明な場合、トップ画面の一番下を見ると書いてあります。

Stable Diffusion web UI バージョン情報

◆ Stable Diffusion web UIのインストール方法について

◆ 学習モデルのダウンロード方法と追加方法について

Stable Diffusion web UIをアップデート

拡張機能のアップデート

簡単な方から先に作業します。UIから拡張機能をアップデートしましょう。これはExtensionsの画面で操作します。
以下の画像を参考にCheck for updatesを選択した後にApply and restart UIでweb UIを再起動します。

拡張機能のアップデート方法

本体部分のアップデート

SDXLを利用するためにはStable Diffusion web UIのバージョンが1.5以上である必要があります。
このアップデートにはgitを利用する必要があるので、Ubuntu側からコマンドで作業します。

まずは次のコマンドでStable Diffusion web UIのディレクトリに移動します。


cd ~/stable-diffusion-webui

次にgitコマンドを利用してアップデートを行いますが、何れかのファイルに変更を加えてる場合は更新できません。
仮に僕のインストール方法を参考に作業してる場合、webui-user.shが原因で更新できないと思います。
と言うことで、最初に更新が可能かどうかを確認しましょう。

次のコマンドを実行してください。


git status

実行結果にmodified:[ファイル名]って感じの表示が出ると更新は不可能です。
その場合は以下を試してから先に進んでください。仮に表示が無ければ無視して良いです。

この問題を解決するにはファイルの変更を破棄します。当然にファイルに加えた変更が無効となるので注意してください。
オススメは該当するファイルをWindows側から回収しておき、後に差分を確認してから同じような修正を加えます。

回収が終わったら次のコマンドで変更を破棄しましょう。


git checkout HEAD .

次に更新用のコマンドを実行します。成功時は色々と更新ファイルが列挙されます。


git pull

最後に回収したファイルと同名のファイルに改めて修正を加えます。
僕は起動時の引数を変更していたので、以下の修正を加えます。


export COMMANDLINE_ARGS="--xformers --no-half-vae"

学習モデルとVAEの追加

SDXLにはBaseRefinerの2種類のモデルがあります。Baseが通常利用するモデルでRefinerがimg2imgで利用するモデルです。
これはBaseで生成した画像を元にRefinerで再生成を行うことで、画質を向上させることができます。

各モデルとVAEは以下にあります。
https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0
https://huggingface.co/stabilityai/sdxl-vae

では、これらを次のコマンドで追加しましょう。


cd ~/stable-diffusion-webui
wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors -O ./models/Stable-diffusion/sd_xl_base_1.0.safetensors
wget https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors -O ./models/Stable-diffusion/sd_xl_refiner_1.0.safetensors
wget https://huggingface.co/stabilityai/sdxl-vae/resolve/main/sdxl_vae.safetensors -O ./models/VAE/sdxl_vae.safetensors

WSLのメモリ不足対策

ダウンロードした時点でお気づきかもしれませんが、モデルのファイルサイズが非常に大きいです。
そのため、WSL経由で利用するとモデルを変更する時にメモリ不足でプロセスが落ちます。

これの解決は物理メモリの強化ですが、それはお金も掛かるし、そもそも僕の環境32GBなんですよね。

りさ

32GBって一般的に多い方では?

管理人

まさかミジンコPCだったか。もっと精進します。

では、どうするかですが、仕方がないので仮想環境のメリットを活かしてSSDを多少犠牲にします。
Swap(スワップ)と呼ばれる機能があり、これを使うとSSDの一部をメモリとして利用できます。

Windowsのユーザー用フォルダに次のファイルがあるので、好きなテキストエディタで開いてください。


C:\Users\(ユーザー名)\.wslconfig

このファイルの中身に以下を記述します。値は好きに変更しても大丈夫です。


[wsl2]
memory=16GB
swap=64GB

有効化はWSLの再起動が必要です。次のコマンドをWindows側で実行しましょう。


wsl.exe --shutdown

動作確認

これで追加作業は終わりです。さすがweb UIです。WSL以外の部分は簡単でしたね。
では、いつも通りの手順で起動してブラウザからアクセスしましょう。


./webui.sh

Baseモデルの利用

今までと利用方法は変わりません。ただし、SDXLは推奨サイズが1024x1024となり、これ以外を選択すると効果が薄れます。
Base用のモデルとVAEを選択して好きなプロンプトを入力。いつも通りGenerateで生成できます。

Baseモデルの利用
生成画像 (Baseモデル)

ParametersSampler: Euler a, Steps: 20, CFG scale: 7, Seed: 1986473260, Size: 1024x1024, Model: sd_xl_base_1.0

PromptCoexistence of humans and AI

NegativePrompt未使用

管理人

プロンプトの意味は人間とAIの共存。いや、共存どころか融合してるが...

りさ

なるほど。人間がAIに取り込まれることが共存なんですね。

管理人

せめて逆では。

Refinerモデルの利用 (Version 1.5以前)

先に伝えた通り最新版は自動でモデルが切り替わります。そのため、本手順は無視して構いません。

現時点ではRefinerはちょっと使い勝手が悪いです。単にtxt2imgで生成した画像をimg2imgするだけですが、この時にモデルを変更する必要があります。
そのため、軽い気持ちで生成と再生成を繰り返すのは無理があります。ここは未来のアップデートに期待しましょう。

使い方はtxt2imgで画像を生成した後、下の方にあるSend to img2imgを選択します。
そうすると利用したプロンプト等の情報を簡単に引き継げます。モデルは手動で変更してください。
ただし、このまま生成すると全然違う画像になってしまうので、Denoising strengthの値を0.1くらいまで下げます。

Send to img2imgを選択する
Denoising strengthの設定値を変更する
管理人

そして再生成した画像がこちらです。追加の描き込みにより繊細差が増しました(たぶん)。

生成画像 (Refinerモデル)

ParametersSampler: Euler a, Steps: 20, CFG scale: 7, Seed: 1959981540, Size: 1024x1024, Model: sd_xl_refiner_1.0, Denoising strength: 0.1

PromptCoexistence of humans and AI

NegativePrompt未使用

Refinerモデルの利用 (Version 1.6以上)

まずは通常通りRefiner以外の設定を行います。Baseとなるモデルに対して、いつもと同じ様に設定をしましょう。
そして通常の設定が終わったらRefinerに関する設定を行います。まずは次の画像を見てください。

Refinerの使い方

この青枠部分がRefinerに関する設定になります。ここをクリックすると設定可能な項目が展開されます。

Refinerの使い方

設定項目は2つです。1つ目はRefinerで利用するモデルです。SDXL用のRefinerモデルを選択してください。
2つ目は、どのタイミングでモデルを切り替えるかです。これはSwitch atの数値で設定します。

仕組みは簡単でSampling stepsSwitch atを掛けた数値を超えるとモデルが自動的に切り替わります。
例としてSampling steps20Switch at0.8なら、20 x 0.8 = 16となり、16ステップを超えると利用するモデルが変わります。

設定はこれだけです。手動で切り替えるのと比べて凄く楽ですよね。
では、いつも通りにGenerateで画像を生成しましょう。

生成画像 (Refinerモデル)

ParametersSampler: Euler a, Steps: 20, CFG scale: 7, Seed: 2255638359, Size: 1024x1024, Model: sd_xl_base_1.0, VAE: sdxl_vae.safetensors, Refiner: sd_xl_refiner_1.0, Refiner switch at: 0.8

PromptThe coolest future robot

NegativePrompt未使用

管理人

意味は「最高にかっこいい未来のロボット」です。いや、これラピュタでは...

りさ

むしろ古代のロボット感ある。

あとがき

描画される絵が繊細すぎて震えました。また、1.6以上ならRefinerの利用も現実的になり、手動と比べて格段に使い勝手が向上してます。
ただし、SDXLはモデルの大きさやRefinerの存在により生成に要する時間が増加しました。前みたいに適当に連打できないのが辛いですね。

今後は続々とアニメ系のモデルも登場するでしょうし、みなさんも今のうちにSDXLに対応しては如何ですか?

この記事は参考になりましたか?

👆このブログを支援する

関連記事

コメント

この記事へのコメントはありません。