見出し画像

Stable Diffusionのサンプラー

こんにちは、なかゆーです!
こちらは、2023年5月8日にFANBOXに投稿した記事のnote版です。

要約

Stable Diffusionのサンプラーはノイズ除去プロセスの計算方法で、さまざまな種類があります。サンプラーの選択は速度と品質のトレードオフであり、私のおすすめはDPM++ 2M Karras(綺麗で安定だが遅い)やDDIM(速いが精度はやや劣る)です。サンプラーの選択よりもプロンプトが結果に影響します。自分のニーズに合ったサンプラーを選ぶんでくださいね。


こんなにStable Diffusionを使っているのに、いまだによくわからないことがあります。それも基本的なことを知らないまま使っています。
今回は、基本中の基本のパラメータのサンプラーとステップについて、調べてみました。

最初にこの記事を書くにあたって参考にしたページを紹介します。
Stable Diffusion Samplers: A Comprehensive Guide
英文ですがおすすめです。サンプラーの説明とサンプラーを比較したデータがあります。

Stable Diffusionの仕組み

Stable Diffusionの仕組みをおさらいしましょう。
Stable Diffusionは最初にランダムなノイズ画像を生成し、ノイズ除去プロセス(Denosing process)を繰り返し行うことで画像を生成します。ノイズ除去プロセスの各ステップで画像を生成する処理をサンプリングと呼びます。サンプリングに使用される方法をサンプラーまたはサンプリング方法と呼びます。

サンプラーはステップ数に従って、ノイズ除去を段階的に行います。Step=10では10回でノイズ除去を行い、Step=20では20回でノイズ除去を行います。つまり、20回のほうが1回のノイズ除去量は半分になります。1回のノイズ除去量が多いほうが早く計算が終わりますが、誤差も大きくなり、結果としては画像の品質が落ちることになります。それでは、ステップ数を多くすれば品質があがるかというと、そんなことはなく、ある一定の品質までとなるので、多すぎても計算時間がかかるだけ、となります。
各ステップのどの程度ノイズを除去するかは一定ではなく、ノイズスケジュールに従って除去量を決めています。

サンプラーの種類

さて、サンプラーはたくさんありますが、分類すると以下の7種類のサンプラーがあります。

  1. Euler。最もシンプルな常微分方程式(ODE)の解法を使って解く。
    (いきなり常微分方程式という単語が出ましたが、Stable Diffusionでは、方程式を解くことでノイズ除去をしています)

  2. Heun。オイラーの改良版。

  3. LMS (Linear Multi-Step Method)。線型多段法。過去の1ステップのみを使うシングルステップに対して、過去の複数のステップを使って解く。ここまでのEuler,Heun,LMSの3つは古典的な微分方程式の解法です。

  4. PLMS (Pseudo Linear Multi-Step)。Diffusionモデルのために作られた初期のサンプラー。

  5. DDIM (Denoising Diffusion Implicit Model)。Diffusionモデルのために作られた初期のサンプラー。

  6. DPM (Diffusion probabilistic model solver)。2022年に作られたDiffusionモデルのサンプラー。

  7. UniPC (Unified Predictor-Corrector)。2023年に作られたDiffusionモデルのサンプラー。

この7種類のほかに "a"とか "++"とかがつくものがありますが、これらは元のサンプラーの派生形で、名前には以下の意味があります。

  • a:Ancestral samplers。ステップごとにノイズを加えるため、画像が収束しにくいが品質は上がる。ステップ数によって絵が変わる。

  • ++ : DPM++はDPMの改良版。

  • S : シングルステップ

  • M : マルチステップ

  • Karras : Tero Karras氏によるノイズ除去スケジューリングの改善を取り入れたもの。

  • SDE : ODE(Ordinary differential equation=常微分方程式)に対して、SDE (Stochastic differential equation=確率微分方程式)を使うもの。サンプリングの際にノイズが加わるため、Ancestral samplersと同様に収束しにくい。

例えば、「DPM++2M Karras」はDPMを改良した、2次計算、マルチステップ、Karras法を使ったサンプラーとなります。

サンプラーの実行速度、ステップ数

そもそも、なんでこんなに種類があるのかというと、

  • 速度

  • 精度

の2つの向上を狙って様々な手法が考案されています。

精度は好みの絵柄によりるのでどれがいいかは難しいです。
一方、速度はどのサンプラーを何ステップ回すかで決まります。
サンプラーの速度は3つのグループに分類されます。

  • グループ1: Eular, LMS, DDIM, PLMS, DPM++2M, DPM fast, UniPC

  • グループ2: Heun, DPM2, DPM++2S, DPM++SDE

  • グループ3: DPM adaptive

サンプラーにa, Karrasのバリエーションがある場合は、それも同じグループになります。
グループ1に対して、グループ2は2次計算のため、2倍の計算時間がかかります。ただし1ステップあたりの精度は良いため、グループ1よりも少ないステップ数で良い結果が得られる傾向にあります。
そしてグループ3はステップ数が不定で、計算時間は決まっていません。収束するまで計算し続けるようです。

ざっくりとしたステップ数の目安は、グループ1は20~30ステップ、グループ2は10~15ステップです。
ただ、Ancestral samplersはステップ数により絵が変わるし、DDIMは15ステップぐらいで良い結果が出るので、本当にざっくりの目安と思ってください。
また、グループ3はステップ数は自動で決まるので、ステップ数の指定は意味はありません。

どれがいいの?

種類が多いと迷うのですが、サンプラーはノイズ除去の手法で、結局どんな絵を出すかはプロンプト次第です。少し触れましたが、サンプラーは微分方程式を解く処理なので同じ問題を違う数式で解くという感じです。数式によって誤差が違うので少し絵の感じが変わりますが、プロンプトのほうが圧倒的に影響が大きいです。

とはいっても、いくつか私のおすすめを紹介します。
私が良く使う512x768、Hires.Fix 1.5のケースでは以下の2つです。かっこ内は私の環境での画像1枚の生成時間です。

  1. DPM++ 2M Karras ステップ28 (48秒)
    綺麗で安定。ちょっと遅い。

  2. DDIM ステップ15 (23秒)
    とにかく速い!ちょっと雑だけど、DPM++ 2M Karrasとあまりかわならいのに2倍速で回せるから◎。ただし、DDIMは「AND構文が使えない」という弱点があるので、そこは注意です。

そのほかに、DPM++ SDE Karras ステップ15もそこそこ速く良いと思います。ただ不安定なので失敗が多い気がします。また、DPM adaptiveはめちゃくちゃ遅いので普段は使わないのですが、正しそうな画像がでるので一度試しても良いと思います。

ということで、今回はStable Diffusionの基本パラメータのサンプラーとステップ数について調べてみました。
みなさんのStable Diffusionライフの参考になればと思います。
それでは。

参考ページ

冒頭に上げた英文のページを主に参考にしましたが、以下のページもおすすめです。
サンプラーの違い・全サンプラーの比較【Stable Diffusion web UI(AUTOMATIC1111版) / Sampler】
 こちらのページでは、触れなかった絵柄について比較しています。どのサンプラーがどんな絵柄を出すか気になる方はこちらがおすすめです。

サンプラーの論文。私にはさっぱりなので誰か教えて笑
DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps
UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models

2023/5/8追記
StableDiffusionのサンプリングの計算方法が書かれています。このページも参考にしました。
StableDiffusionのサンプリング法


この記事が気に入ったらサポートをしてみませんか?