Automatic1111 Stable Diffusion Web UIでSDXLを使う。Refiner, embeddings,SDXLなども解説。

今回はStable Diffusionの新バージョンであるSDXLをStable Diffusion Web UI(Automatic1111)で利用する方法について解説します。インストール手順から基本的な使い方、パフォーマンス改善のコツ、便利な拡張機能まで解説していきます。

SDXLとは?

SDXL(Stable Diffusion XL)とは過去のStable Diffusionから大幅にパラメータが増えた新モデルです。モデルも追加でRefinerが登場して画像生成が2段階になることでデティールを調整する機能も追加されています。この技術についてはStability AIが論文を公開しております。

SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis
We present SDXL, a latent diffusion model for text-to-image synthesis. Compared to previous versions of Stable Diffusion...

SDXLの推奨スペックは?

SDXLをStable Diffusion Web UI(automatic1111)で動かすには最低でVRAMは12GB必要となり十分に性能を発揮するにはVRAMは16GB必要です。詳しくは以下の記事を参考にしてください。

VRAM 6GBで試してみた

GeForce RTX 3060 Laptop GPU(6GB)で試してみましたがStable Diffusion Web UI(AUTO1111)上では動きません。ベースモデルの時点で6.1GBあるので普通に動かすのであればメモリは最低でも12GBは必要です。

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 14.00 MiB (GPU 0; 5.80 GiB total capacity; 5.43 GiB already allocated; 1.44 MiB free; 5.68 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

検証環境

本記事で使う検証環境のPCスペックです。

CPU: 12th Gen Intel(R) Core(TM) i9-12900H 2.50 GHz

RAM: 32GB

GPU: NVIDIA GeForce RTX 3080 Ti Laptop GPU(16GB)

OS: Windows 11 Home

Automatic1111でSDXLを使うための準備

SDXL用環境を新規に作成:環境を切り分けるのがおすすめ

すでにあるStable Diffusion WEB UI(AUTO1111)をアップデートすることでSDXLを使うこともできますが、モデルファイルの整理※1や起動スクリプトの引数の管理※2を考えると新しく環境を作るのをおすすめします。

環境を作るといっても新規にフォルダを作ってクローンするだけなので簡単です。具体的には以下の手順で新しく環境を作れます。

mkdir sdxl
cd sdxl
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

※1: SDXLモデルだけならまだしもEmbeddings、ControlNetModel、LoRAを入れると何が何だか分からなくなってきます。

※2: SDXL特有の引数の設定方法があります。

SDXLモデルとRefinerモデルをダウンロード

SD XL - v1.0 VAE fix | Stable Diffusion Checkpoint | Civitai
Originally Posted to Hugging Face and shared here with permission from Stability AI. SDXL consists of a two-step pipelin...

CivitaiからSDXLモデルとRefinerモデルをダウンロードします。今回はVAEが不要なモデルを利用します。

stable-diffusion-webui\models配下にダウンロードした次の2つのファイルを配置してください。

  • sdXL_v10.safetensors
  • sdXL_v10Refiner.safetensors

SDXLにXFormersを導入する。

NVIDIAのGPUでしたら実行時間を短縮できるXFormersはSDXLでも利用可能です。なぜだか現状は消費メモリ削減の効果はなさそうです。過去のバージョンとは違いSDXLでは引数に—xformersを追加するだけではなく—no-half-vaeを追加しましょう。—no-half-vaeはSDXLでxformers導入するか否かに限らず推奨されている設定です。

SD XL support by AUTOMATIC1111 · Pull Request #11757 · AUTOMATIC1111/stable-diffusion-webui
Description uses Stability-AI's repo from retains old repo for SD1.x models the biggest change is that for SD XL, condit...
--no-half-vae --xformers

webui-user.batの8行目にset COMMANDLINE_ARGS=–no-half-vae –xformersを追加します。

set COMMANDLINE_ARGS=--no-half-vae --xformers

Before、Afterは次の通りです。

Before

@echo off

if not defined PYTHON (set PYTHON=python)
if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")

set SD_WEBUI_RESTART=tmp/restart
set ERROR_REPORTING=FALSE

mkdir tmp 2>NUL

After

@echo off

if not defined PYTHON (set PYTHON=python)
if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")

set SD_WEBUI_RESTART=tmp/restart
set ERROR_REPORTING=FALSE
set COMMANDLINE_ARGS=--no-half-vae --xformers

mkdir tmp 2>NUL

SDXLで画像生成

起動方法はいつも通り”stable-diffusion-webui\webui-user.bat”を起動するだけです。環境を新しく作った場合は新しい方のフォルダのスクリプトを実行する点に注意してください。いつも通り起動すると思います。するとトップページが以下のように表示されます。

  1. SDXLモデル(sdXL_v10.safetensors [31e35c80fc])をセットします。
  2. プロンプトを入力します。Prompt: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), 20 years old Japanese woman in Shibuya.short hair, upper bodyNegative Prompt: paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), low res, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, extra fingers, fewer fingers, strange fingers, bad hand, mole, ((extra legs)), ((extra hands))
  3. Refinerのメニューを開きます。
  4. Refinerモデル(sdXL_v10Refiner.safetensors [7440042bbd])をセットします。
  5. 解像度を設定します。1024×1024、832×1152、1152×832がおすすめです。解像度は512×512などの過去の推奨バージョンと同様に設定すると上手く画像が生成されません。

生成した画像は次の通りです。以前のバージョンではアジア美女に特化したモデルBRAやChilloutmixでないと生成できなかったアジア系美女の生成成功しています。この点だけでも驚きました。あとは肌の質感や髪のデティールが描写されています。

Refinerなしだとどうなるか?

Swith atを1にするとRefeinerなしにできます。細部の描写がわずかに甘くなりますがその代わり生成時間を短縮できます。ぱっと見ほとんど変わらないです。Refinerなしで調整をして気に入った画像をRefinerありで使うのも良いかもしれません。

左Refinerなし、右Refinerあり。

SDXLでembeddingsを導入: SDXL対応のEasyNegative?

今回はSDXLに対応したEasyNegativeを探してみたところ、fastnegativeが人気なようなので導入してみます。

FastNegative - v1.0 | Stable Diffusion Embedding | Civitai
使用方式: 把模型放在embeddings文件夹,并在负向词里填写该模型的名称 How to use: Put the model in the embeddings folder and fill in the name of the m...

以下のプロンプトで画像を生成します。

Prompt: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), 20 years old Japanese woman in Shibuya.short hair, upper body

Negative Prompt: FastNegative, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), low res, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, extra fingers, fewer fingers, strange fingers, bad hand, mole, ((extra legs)), ((extra hands))

fastnegativeありの生成結果。

fastnegativeなしの生成結果。

SDXLでControlNetを導入

次にControlNetをSDXLに導入してみます。

拡張機能をインストール

以前のStable Diffusionと同じ方法でインストールするだけです。

拡張機能”sd-webui-controlnet”を追加していきます。githubリポジトリは次の通りです。

GitHub - Mikubill/sd-webui-controlnet: WebUI extension for ControlNet
WebUI extension for ControlNet. Contribute to Mikubill/sd-webui-controlnet development by creating an account on GitHub.

インストールの手順:

  1. Extensionsタブへ切り替え
  2. Install from URLタブへ切り替え
  3. URL for extensions’s git repositoryの欄にhttps://github.com/Mikubill/sd-webui-controlnetを入力
  4. Installのボタンをクリック
  5. Stable Diffusion Web UIを停止して、再度起動する。

SDXLのControlNetモデルをダウンロード

以下のページからSDXLのControlNetをダウンロードできます。

今回はOpenPoseモデルであるthibaud_xl_openpose.safetensorsを利用します。以前はyamlファイルも必要でしたが新バージョンでは不要です。

lllyasviel/sd_control_collection at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

ControlNetのOpenPoseを使ってみる

基本的な画像生成の設定をしてControlNetメニューを開きます。

プロンプト: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), 20 years old Japanese woman in Shibuya.short hair, upper body

ネガティブプロンプト: FastNegative,paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), low res, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, extra fingers, fewer fingers, strange fingers, bad hand, mole, ((extra legs)), ((extra hands))

解像度: 1152×832

ControlNetメニューの設定をします。

  1. 参照画像をControlNetのメニュー画面にセットします。
  2. ControlNetを有効にするため”Enable”にチェックを入れます。
  3. Control Typeで”OpenPose”を選択します。これでPreprocessor(前処理)とControlNet Modelが設定されます。
  4. Preprocessorは以前のStable Diffusionと共通なのでお気に入りのものがあればそれを選びます。Modelはthibaud_xl_openposeなどSDXLに対応したものを選択します。
  5. 特徴抽出ボタン「💥」をクリックして特徴抽出します。前処理が適用されて特徴抽出の結果が表示されます。

この状態で画像を生成すると、ControlNetが適用された状態で画像が生成されます。

設定値の違いによるベンチマーク

GPUはNVIDIA GeForce RTX 3080 Ti Laptop GPU(16GB)となっております。

XFormersRefinerバッチ数解像度消費メモリ実行時間
なしあり1832×115215.2GB35.5s
なしあり11024×102414.1GB36.1s
なしあり41024×102416GB76.8s
なしなし1832×115215.2GB14.1s
なしなし11024×102414.1GB16.1s
なしなし41024×102416GB60.2s
ありあり1832×115216GB16.0s
ありあり11024×102416GB13.6s
ありあり41024×102416GB57.6s
ありなし1832×115216GB13.0s
ありなし11024×102416GB12.9s
ありなし41024×102416GB56.9s

生成時間短縮、SDXL高速化のコツ

本記事で紹介した生成時間短縮のコツをまとめると次の通りです。

  1. Refinerをなしにする:Refinerをなしにすると細部の描画が甘くなりますが、構図はかわらないのです。Refinerなしで試行錯誤をして気に入ったものをRefinerで調整するような使い方がおすすめです。Refinerの設定でSwith atを1にするとRefinerなしで生成することができます。
  2. XFormersを有効化する:XFormersはNVIDIAのGPU搭載のPCでは入れておいて損はないでしょう。若干、VRAMメモリの消費が増えるのは気になりますが、おそらくバグだと思われるので改善される気がします。

解像度は何が良い?

SDXLでは512×512など以前のStable Diffusionの解像度で画像を生成すると良い画像が生成できません。理由は学習データに低解像の画像が含まれてないからです。そのため適切な解像度を設定する必要があります。

[2307.01952] SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis (arxiv.org)に学習データに使った解像度についての記載があったので引用します。

横長の解像度。

HeightWidthAspect Ratio
51220480.25
51219840.26
51219200.27
51218560.28
57617920.32
57617280.33
57616640.35
64016000.4
64015360.42
70414720.48
70414080.5
70413440.52
76813440.57
76812800.6
83212160.68
83211520.72
89611520.78
89610880.82
96010880.88
96010240.94

縦長の解像度

HeightWidthAspect Ratio
102410241.0
10249601.07
10889601.13
10888961.21
11528961.29
11528321.38
12168321.46
12807681.67
13447681.75
14087042.0
14727042.09
15366402.4
16006402.5
16645762.89
17285763.0
17925763.11
18565123.62
19205123.75
19845123.88
20485124.0

コメント