Stable Diffusionのsampling methodとは なんですか?
sampling methodは、画像生成AIで使われる技術の1つで、ノイズから画像をどのように生成するかの方法のことですよ
sampling methodは、さまざまなものがありそれぞれ特徴があります
Stable Diffusionを使って描く絵が、希望した構図や細部の描写で上手くいかないことはありませんか?
これには、Sampling methodが作りたいイメージに合っていない可能性があります。
本記事では、Sampling methodがどのような機能を持つのか、そしてどの種類を選ぶと良いかについて解説します
Sampling methodの理解が進めば、あなたの作りたい画像に近づけますよ
sampling methodの基本的な仕組み
StableDiffusionを使いやすくした WebUIであるAUTOMATIC1111では、sampling methodと表記されたり、サンプラー(Sampler)と呼ばれることもありますが、正しくはSampling Algorithm(サンプリングアルゴリズム)と言う様です
AIが画像を生成する際に、どのようにノイズを除去していくかを決定するアルゴリズムがsampling method。
人間が白紙に絵を描くのとは異なり、AIはノイズが多い状態からスタートし、徐々にノイズを取り除いていきます。
そのノイズを徐々に構造化し、意味のある画像に変換していきます。
この変換プロセスは、ユーザーが入力したプロンプトに基づいて行われます。
サンプリングメソッドの種類によって、AIがランダムなノイズから意味のある画像へと変換するプロセスの方法が変わります。
多くの計算ステップが含まれ、各ステップ(Sampling Steps)で画像は徐々に明確になっていきます。
最終的に、AIはプロンプトに合った画像を生成します。
各sampling methodの特徴
Sampling methodには、いろいろなタイプがありますが、それらは基本的な論理に基づいて分類されています。
系統別に解説しますね
a系サンプラーの特徴 Ancestral Sampling
Sampling method” の “a系” とは、”Ancestral Sampling” という技法を意味します。
画像生成の初期段階で一度だけノイズを加え、その後のサンプリングプロセス全体でそのノイズをそのまま使用し続けます。
この一貫したノイズの使用は、画像に予測不可能な変化をもたらす原因となります。
例えば、「Euler a」などの「a」が付くサンプリング方法では、最初に加えたノイズが各デノイズステップで持続します。
このサンプリングプロセスでは、画像を段階的に洗練させるのではなく、各ステップで画像に新たな変化を加えます。
この新たな変化は、単に画像の細部を微調整するのではなく、画像の全体的な構造や内容に影響を与えることがあります。
結果として、各ステップで生成される画像は、前後のステップで生成される画像とは大きく異なることがあり、これがステップ数が多くなるほど顕著になります。
つまり、ステップ数が多いほど絵が変わる傾向があります。
祖先サンプリングが最初に加えたノイズをそのまま使用し続けるため、ステップごとに画像に細かな変更が累積され、より多様な結果が生じる可能性があるからです。
ステップ数を変えるだけで結果が大きく変わるサンプリング方法といえます
そのため、生成された画像を微調整したくても効きにくい特徴があります
しかし、どのサンプリング方法がベストかは、使用する画像生成モデルやプロンプトなどによって異なるため、色々試して自分に合った方法を見つけるのがおすすめです
同じa系でも生成スピードが変わります
サンプリングが早いmethod
Euler a, DPM fast
サンプリングが遅いmethod
DPM adaptive, DPM2 a Karras, DPM2 a, DPM++ 2S a, DPM++ 2S a Karras
SDE系サンプラーの特徴(Stochastic Differential Equations)
2023年にリリースされた新しいサンプラーで、少ないステップ数で高品質な画像を生成します。
また、1回あたりのサンプリング時間の増加を増える傾向にありますが、より高いサンプル品質を実現します
SDE系のサンプリングアルゴリズムは、確率微分方程式を用いてサンプリングを行う手法です。
ステップ数や画像生成モデル、プロンプトなどの条件によって生成される構図や内容が変化しやすい。
ちなみに、SDEとの記載がなくても、SDE系のSampling methodがあります
以下は、SDE系のSampling methodです
- Euler a: Euler法の変種で、各ステップでノイズを加えることで確率的な要素を導入します。
- DPM++: DPMソルバーの改良版で、より効率的な画像生成を目指しています。
- LMS (Linear Multi-Step Method): Euler法と似ていますが、複数の過去のステップを利用してより正確な予測を行います。
- Heun: Euler法よりも精度が高い二次の数値解法です。
Euler aは簡単な方法で生成速度が速い一方、HeunやDPM2は複雑な方法で生成速度が遅いとされています
画像の収束と品質について
DPM++ SDEは、高品質な画像を生成することができるものの、同じ条件で何度も生成を行っても、毎回異なる結果(画像)になりやすい。
収束性は低いです(再現性が低いとも言えます。)
特定の画像を正確に再生成したい場合には不利な特性となります。
DPM++ 2MおよびDPM++ 2M Karrasは収束性が良く、ステップ数が多いほど性能が向上します。
つまり、再現性が高いいとも言えます。
特定の画像を正確に再生成したい場合には有利な特性となります。
Euler系
Euler法は、数学における微分方程式を解くための単純な方法です。
この方法を使って、AIはランダムなノイズから始めて、徐々にそのノイズを減らし、最終的にはクリアな画像を生成します。
比較的、少ないサンプリング回数で品質が安定します
また、サンプリング回数を大きく変えても画像の構図や内容があまり変化しない
少ないサンプリング回数で多くの画像を出力し、気に入ったものを選ぶ使い方に適していますね
Euler系のサンプリングメソッドは、他のサンプリングメソッドと比べて比較的シンプルなため、複雑な画像を生成する際には限界があるかもしれません
Euler: これは微分方程式を解くための単純で速い方法です。サンプリングが早く、画像を段階的にクリアにしていく直感的な方法として知られています。基本的なEuler法に基づいており、ステップごとにノイズを減らしていきます。
Euler a: Euler法の変種で、各ステップでランダムなノイズを加えます。これにより、画像生成に多様性をもたらし、同じ条件下でも異なる実行で少し異なる結果が出ることがあります。
Heun: Euler法を改良したもので、より精度の高い画像を生成することができますが、計算にはより多くの時間がかかります。HeunはEuler法に似ていますが、より詳細な画像を提供する一方で、時間がほぼ2倍かかることが特徴です。
参考:
- https://www.felixsanz.dev/articles/complete-guide-to-samplers-in-stable-diffusion
- https://easywithai.com/guide/stable-diffusion-best-sampler-comparison/
- https://www.generativelabs.co/post/exploring-samplers-in-stable-diffusion-types-approaches-and-practical-differences
Sampling MethodはStable Diffusionにおける画像生成プロセスの具体的な手法で、異なるSampling MethodsはSampling Stepsの数やCFGスケールの設定によって最適な結果を生み出します。
Sampling Stepsは画像の精緻化に寄与し、CFGスケールはプロンプト忠実度を決定するため、これらの要素のバランスが画像品質とスタイルに直接影響します
おすすめのsampling methodと、人気のsampling method
- Euler a
- DPM++ SDE Karras
- DPM++ 2M Karras
- DPM++ 3M SDE Karras
- DPM++ 3M SD Exponential
- Restart
SDXLで使えないsampling method
SDXLでは、いくつかのサンプラーが利用できなかったり、期待した通りに動作しなかったりすることが報告されています。
現在、問題が確認されているサンプラーは以下の4つです。
DDIM
PLMS
UniPC
Euler a
使わないsampling methodは表示をしない設定
StableDiffusionを使っていくと、使うsampling methodは限られてきます
また、 StableDiffusion WebUIのAUTOMATIC1111では、バージョンが上がることにsampling methodが追加されるので、表示されるものが多くなり見にくくなります
このことから、使わないsampling methodは表示をしない設定を行うことができます
設定方法は、Settingsタブを開き、Sampler parameterの欄の中にある
samplers in user interface (requires restart)のところで、使わないsampling methodにチェックを入れることで非表示に出来ます
使いたくなった時には、チェックを消せば、また表示がされます