sampler

Last-modified: 2025-12-27 (土) 05:13:07

sampler(またはsampling method)は、自然言語処理モデル全般で使用されるワードだが、ここでは画像生成分野に限定して説明した。

 

画像生成分野におけるサンプラー

概要

サンプラーとは、画像生成処理を行うコンポーネントのこと。
画像生成の各ステップでは、画像生成モデル(U-Net拡散モデルあるいはFlow Matchingモデル)が次にどう描き換えるべきかを計算し、
サンプラーはそれを元にそのステップでどれだけ進捗を進めるかを決めながら画像を少しずつ完成形へ近づけていく。
その際にスケジューラの定めた更新スケジュールが参照される。

特に、画像生成モデルは時間軸方向での一貫性を自力で保つことに限界がある。
そのためサンプラーは、過去ステップの状態(時間軸方向の情報)を参照しながら、モデルの予測誤差を補正する役割も担っている。

 

以下の別名がある

  • sampling method *1
  • Schedulers、スケジューラ(紛らわしいが、diffusersライブラリではサンプラーと併せてスケジューラと呼称している)
  • ソルバー
    • というか、ODEは本来サンプラーではなくただのソルバー
    • 最初期のDDPMサンプラーは確率に基づくサンプル抽出を行うから「サンプラー」だったのだが、拡散モデルではランダム性のないODEソルバーもまとめてサンプラーにカテゴライズされている

Samplerには種類があり、画像生成アプリによってどのsamplerが使えるか決まっている。
例えば、下記のようなものがある。

サンプラーでよく使われている手法

下のグラフのような描画過程において、ステップ数=間に何個点を打てばモデルの理想的な描画過程を追えるか が収束の速さになります。
Eulerサンプラーは何の補正もかけず局所勾配だけを使います。

サンプラー潜在空間で処理を行っているため、確度の高い方向に向かって「何になるかわからないノイズ」→「ぼやけた落書きっぽい何か」→「masterpeice」の順に上っていくように見えています。ピクセル空間での表現とは違います。
sampler-graph-2.png

 
  • ODEソルバー (Ordinary Differential Equation Solver)
    初期ノイズ注入以降のランダム性がないサンプラーです。
    最初の1回しかサイコロを振らないため、SDXLモデルでは極所解に陥りやすく良くも悪くも尖った絵を描きやすい傾向があります。
    Flow MatchingモデルはODEとして設計されているので、こちらのほうが相性がいいことが多いです。
    ODEソルバーは完成画像への描画工程について、決定論的な唯一の工程があると考えモデルをその工程の常微分方程式(ODE)とみなし、モデルの予測スコアをその微分係数と考えて積分します。
  • SDEソルバー(Stochastic Differential Equation Solver)
    ステップ毎に確率的な揺らぎを加えるサンプラーです。実際に行われている処理はノイズ再注入に近いです。
    毎回サイコロを振りなおすため、SDXLモデルでは誤差が平均化されて無難な絵になる傾向があります。
    Flow MatchingモデルはODEとして設計されているうえ、高周波成分に反応しやすいためアグレッシブな効果が出やすく注意が必要です。
    SDEソルバーは完成画像への描画工程について、確率的な揺らぎのある工程と考えモデルをその工程の確率微分方程式(SDE)とみなし、モデルの予測スコアをその微分係数と考えて積分します。
    画像生成AIでは一般に疑似乱数を使うので、シード値が同じであれば生成結果が変わらない点はODEソルバーと同じです。
  • 多段法 (Multi-step)
    効率的に補正を行うために使われている手法です。
    拡散モデル系のサンプラーでは、複数回分のモデルの予測スコアが必要な場合に過去ステップでの予測結果を再利用するサンプラーを総称してマルチステップサンプラーと呼んでいます。
  • 指数積分法 (Exponential Integrator)
    SDXLモデルのモデルの予測誤差を抑えるために使われている手法です。
    Flow Matchingモデルではあってもなくても変わりませんが、この手法を採用しているサンプラーは他にも予測誤差を抑える仕組みを持っていることが多いです。
    U-Net拡散モデルではノイズが減衰する速度が決まっているので、指数関数を使ってそちらだけ先に計算してしまいます(定型的な式では仕掛かり画像xtを減衰させますが、これは逆拡散過程ではノイズから始まる為)。
    残りの信号成分について、モデルの予測スコアの信頼性を推定しながら補正します。
     
    残念ながらv-predモデルは予測が揺れやすく、指数積分法の前提を満たさないため相性が悪いです。

サンプラーの特徴的なやつ

ベースモデルによっては、Eulerサンプラー以外のサンプラーだと生成に失敗したり品質が下がったりする場合もあります。モデルの説明はちゃんと読もう。
惰性でDPM++系のサンプラーを選んで問題が発生した場合などはサンプラーをEulerに戻してみましょう。

カテゴリODE寄りSDE寄り特徴実写/アニメ絵
ベーシックEuler系Euler a系凡庸だがモデルとの相性問題が少ない相性は特にないが、アニメ絵ではDPM++ 2M等より好まれる傾向がある
多段法
(指数積分)
DPM++ 2M系DPM++ 2M SDE系比較的処理速度が落ちず、安定していて適度にシャープ

数学的前提がモデルに合っていないため、収束保証がそこまで強くない
比較的万能だが、どちらかというと実写で好まれる傾向がある
DPM++ 2M SDE Heun系
DPM++ 3M SDE系
DPM(無印)
UniPC系
多段法
(その他)
RES multistep系RES multistep ancestral系DPM++ 2Mよりモデルの性質に合った計算なので安定
SA-Solver系実質的に低ステップ蒸留モデル専用
gradient_estimation系良くも悪くもくっきりアニメ向き
ER-SDE
iPNDM系
PLMS
LMS
単段指数積分法DPM++ 2S a系安定していてソフトだが遅いどちらかというと実写向き
DPM++ SDE系
DPM2DPM2 a
SEEDS-2/3
DEIS
その他Heun系
LCMLCMモデル専用
DDIMDDPM拡散モデルの元祖だが、Flow Matchingモデルには適合しない
  • アニメ絵向きか実写向きかについては、現実世界にはパキっとした線というものはあまり存在しないので、適度にシャープになるものが実写向き、アニメ絵については絵柄次第
  • SDEサンプラーは出力も若干マイルドになる傾向がある。これはランダム成分の散布によって極端な外れ値が出にくくなるため。
  • 一般的に、モデル予測値の近似精度が高いサンプラーのほうが鮮明な画像が得られる。
  • ただし、複数回分のモデル予測スコアを使うタイプのサンプラーはモデルの予測確度が低く揺らぎの大きい部分(グラデーションや細かい模様)が平均化されてのっぺりしたりプラスチック化しやすい。
  • 生成が安定するかはモデルの予測誤差を抑えられるかにかかっており、近似精度とはまた別。生成の安定に重点を置くものは、近似精度の割にはソフトになる傾向がある。

Stable Diffusion web UIで使えるsampler

  • Euler (オイラー法)
    ほぼ何もせずモデルの予測スコアを反映するので、モデルとの相性問題が発生しづらい
    近似精度が粗い為、輪郭がぼやけて眠たい絵面になりやすい
  • Heun (ホイン法)
    Eulerの改良版だが精度を上げるためにモデルを2回呼んで均すためEuler等に比べて2倍の処理時間かかる
    計算コスト的にはステップ数2倍で他のサンプラーを使うのと大差なく、そちらのほうが品質が上がることが多いため現在はあまり使われない
    SDXLモデルのうちv-predとは非常に相性が悪く破綻する
    Flow Matchingモデルは予測が安定している為、事実上v-predと同じベロシティ形式のスコアであっても問題なく使える
    2つのサンプルを均すため、モデルの予測確度が高い部分がくっきりと描写され、揺らぎの大きい部分は平均化される
    具体的には、主線や輪郭は強調されるが、グラデーションなど細かい模様がつぶれやすい
  • LMS (線形多段法/Linear Multistep Solver)
    Eulerと同等のスピードで精度を上げる、多段法の基礎を築いたサンプラー
    通常過去4回分のノイズ除去の結果から次のノイズ除去量を決めるという処理を行っている
    ステップごとに何度もモデルを呼ぶのではなく、過去の予測結果を再利用する為、Heun法より高速に動作する
    予測確度の高い部分が強調されて絵柄がシャープになる
    しかしながらモデルの予測精度次第ではかえって誤差が蓄積してしまい逆効果になることもあり、
    LMSはEulerよりも最終的な収束に必要なステップ数が大きくなりがち
    現状肯定バイアスが強いFlow Matchingモデルでは特に顕著で、次数を下げて精度を落とさないと推奨サンプラーと同じステップ数では収束しない
  • PLMS (疑似線形多段法/Pseudo LMS)
    LMSの発展形でニューラルネット用に調整したもの
    SD1の標準サンプラーで、当時の推奨は50ステップだった*2
  • DDIM (Denoising Diffusion Implicit Models/ノイズ除去型の暗黙的拡散モデル)
    Diffusionモデルを効率化するために提案されたサンプラーのうち最も初期のもの。少プロンプトで小さな画像サイズなら少ステップで一気に収束するが複雑なプロンプトや大きな画像は他のサンプラーと同じくらいのステップ数が必要*3
    ComfyUIではddimを選択するとEulerサンプラーが代用されるが本来は全然別物
    DDIMは画像生成AI全体を含むアーキテクチャで、A1111等に実装されているのはそのサンプラー部分
    学習時と同じステップ数を踏まなくても安定した生成は可能ということを示したサンプラーで、
    現代のサンプラーは実質的にすべてDDIMの延長線上にある
  • DPMとその系統 (DPM-Solver/確率的拡散モデルのためのソルバー)
    Stable Diffusionに搭載された上記に比べて新しいサンプラー
    DPM++ 2M等ではEulerとそう変わらない処理時間で高品質な画像を生成できるよう工夫されている
    ややこしいがDPM(Diffusion Probablistic Model)とは本来U-Net拡散モデルの別名みたいなもので、論文等ではDPMソルバー(=DPMを解くアルゴリズム)と書かれていることが多い
    なおres_multistepの提案者によると、DPM++ 2/3M系は「数学的前提が拡散モデルに合っていない」とのこと*4
    • DPM Fast
      爆速だが極めて不安定で、テスト目的以外での利用価値はほとんどない
       
    • DPM Adaptive
      生成スケジュールを動的に調整し、予測ノイズ量が一定以下になるまで生成処理を続ける
      理論上は効率的に品質を確保できるはずだったが、実際にはかえって破綻しやすい
       
    • DPM2
      DPMをより高精度に改良したがおおよそ2倍の時間がかかる上、CFG強度が高くなると顕著に収束が遅くなる
      Heun法に似ているが、2ステップ分の予測スコアを平均化するのではなくその中間の予測スコアをベースに補正する
      サンプラーは次のステップの状態をできるだけモデルの予測スコアに合わせるように補正するので、2点間の中間の勾配を使うのが正しい)
      シャープだがHeun法より自然な出力になる
       
    • DPM++
      DPMやDPM2の改良版で15~20ステップ程度で高精度に出力を収束させることができる
      名前に「2」と付いていないが、A1111ComfyUIでは実は2次精度で実質的にDPM++ 2S Heun
      DPM2と同様、各ステップでモデルを2回呼ぶためEuler法の2倍時間がかかり、絵柄は少しHeun法っぽくなる
       
    • DPM++ 2M
      多段法を取り入れて効率的に鮮明で詳細な画像が得られるように改良したもの
      処理時間はEulerとそう変わらない。A1111ComfyUIではDPM++より高速
      モデルの予測スコアの揺れに弱く、SDXLモデルではKarras、Flow Matchingモデルではlinear_quadraticスケジューラを使わないとかえって品質が下がる
       
    • DPM++ 2S
      Heun法と同様、ステップごとにモデルを2回呼んで精度を上げる*5
      そのためSingle-stepという名前から受ける印象とは逆に、2Mより遅い
       
    • DPM++ SDE
      DPM++を確率微分方程式で処理するようにし、ステップごとにわずかにランダム成分を加えるようにしたもの
      これにより画像生成モデルが変な方向に行ってもランダム成分により平均化されて無難な出力になる傾向がある
      最後の1ステップを除き、画像はいつまでも完全な収束をしない
      step数はどれくらいがいい?」にある画像を見てほしい、MSE Loss vs Stepsで後述のaがつくタイプと一部例外を除いては0を目指しているがSDEを搭載したものは0.05付近で収束しようとしている
       
    • DPM++ 2M SDE
      DPM++ 2Mよりさらにモデルの予測スコアの揺れに弱く、SDXLモデルではKarras、Flow Matchingモデルではlinear_quadraticスケジューラを使わないと破綻する
       
    • DPM++ 3M SDE
      DPM++ 2M SDEの3次精度版。LMSと同様に過去3回分の誤差を引きずるうえノイズ項の扱いが粗いため、
      現状肯定バイアスがあり高周波に過敏に反応するFlow Matchingモデルでは2Mより品質が下がりやすい
       
    • DPM++ 2M SDE Heun
      疑似Heun法。DPM++ 2Mの計算結果とEuler法による計算結果を平均化する
      これもスケジューラはKarras/linear_quadraticじゃないとダメ
       
  • 名前に CFG++ が付くサンプラー
    • CFG Scaleの取り扱い方法が最適化されている、CFG1~2程度で使用するように設計されている
  • 名前に a が付くサンプラー (ancestralサンプラー*6
    Euler aとかDPM++ 2S a Karras とかのa
    • このタイプはステップごとにノイズをいつもより余計に引いて余計に引いた分のノイズをわざと足す処理を行っているので、どんなにステップを経ても生成画像が途中で収束することはない。ステップによって急に画像の内容が変わったりするのもこの足したノイズによるもの
      SDEで挙げた収束はaがつくタイプは0.10付近へ収束しようとしているのがわかる
    • ただaがつくタイプとSDEは、ステップをいくら上げてもいつまでも収束はしないということは覚えておいて損はありません。
      そして収束をしないという事が悪く働くか良い作用を生むかはあなたの作画意図次第であるということも事実です。

命名規則

Group_13_(1).png
出典:promptpedia

※2「S」と2/3「M」の違いはマルチ「パス」というよりマルチ「ステップ」*7。n回分のモデルのスコアを使うのは同じだが、1ステップで何回もモデルを評価するか、それとも過去のステップの予測スコアを再利用するかの違い。なのでシングルステップのほうが遅い。

上記以外のComfyUIで使えるsampler

  • uni_pc_bh2 (Unified Predictor-Corrector Framework/予測-修正法による統合フレームワーク)
    2025年12月現在、Hires.fix後段の処理など軽いレタッチ程度のi2iに最適といわれているサンプラー
    処理前のディティール、特に主線部分を保持・増強することに優れている
    反面グラデーションの保持などはあまり得意ではなく、直でt2iするとお肌がプラスチックになったり油彩画みたいなグラデの効いていない絵になりやすい
    多段法、指数積分、PC法とできるだけ時間をかけずに精度を上げるための仕組みを全部使った欲張りセット*8
    Heun法等と同じPC法だが、多段法を取り入れているため追加のモデル評価が発生しない
    このためComfyUIの実装では2次精度+PC法のorder3だが3倍の時間はかからない。しかし計算が複雑でDPM++ 2M等より顕著に遅い
    uni_pc(bh1)は10ステップ未満の低ステップ生成向けだが、精度が悪いのであまり利用されない
  • res_multistep (Refined Exponential Solver/指数関数ベースの改良多段法)
    2025年12月現在、t2iでは最も安定かつ高品質なサンプラーの一つとされる
    従来のサンプラーのように「モデルが微分方程式として十分滑らかである」という実際には満たされない前提に依存していないため破綻しにくい
    DPM++ 2M同様にモデルの予測スコアの揺れに弱く、SDXLモデルではKarras、Flow Matchingモデルではlinear_quadraticスケジューラを使わないとかえって品質が下がる
    DPM++ 2Mの改良型。中国系研究者によりDPM++では十分な精度が出ていないとして提案されたもの*9
    DPM++ 2Mより精度が高い。(モデルが同じなら)DPM++ 2Mより少ないステップ数でも品質が保てるとされる
  • res_multistep_ancestral
    res_multistepにステップ毎のノイズ付加処理を追加したもの
    SDXLモデルでは概ねDPM++ 2M SDEの進化系と考えてよい
    Flow Matchingモデルとは相性が悪く、収束せずに発散する
  • sa_solver(Stochastic Adams Solver/確率的拡散過程のための多段法ソルバー)
    低ステップ化蒸留モデルに限っては(他のサンプラーよりは)品質が安定しているサンプラー
    多段法に基づくSDEサンプラーとしては唯一の、数学的な収束条件を満たしているSDEソルバー*10
    normalスケジューラを前提としており他のスケジューラだと破綻する
    数学的な滑らかさがない通常のモデルだと、生成する画像によっては色使いがきつくなることがある
    これも中国系の研究者らによって提案された
    論文の名義にはファーウェイ系の研究者の名も見えるが、diffusersComfyUI本体にも実装されているのでアレなら窓からPCを投げ捨てたほうが良い
  • gradient_estimation (勾配推定法)
    多段法ではないが多段法の特徴である「モデルの予測確度の高い部分を強調する」という点のみを取り入れた軽量なサンプラー
    Toyota Research Instituteが開発した日の丸サンプラーなので安心*11
    米国拠点だし論文の名義は外国人研究者だが。ホンダや日産の系列の人は使えないかも
  • er_sde(Extended Reverse-time SDE/拡張逆時間(=逆拡散過程)SDE)
    収束が速いODEと、高品質だが収束の遅いSDEを統一的に扱えるようにしたもの*12
  • ipndm (Improved Pseudo Numerical Methods for Diffusion Models/拡散モデルのための改良疑似数値解析法)
    PLMSを改良したものでDPMの直接の前身となった手法
    モデルの予測誤差を増幅しやすくアーティファクトが出やすい
  • seeds_2 / seeds_3(Stochastic Explicit Exponential Derivative-free Solvers/導関数不要の確率過程的陽的指数積分法)
    SDEで高品質生成を実現するために提案されたサンプラー*13
    精度は良いが、各ステップで2回も3回もモデルを呼びだすため遅い
    実用上はDPM++ 2M SDE Karras等で十分な品質が確保できるため、あまり普及しなかった
  • deis (Diffusion Exponential Integrator Sampler/拡散指数積分サンプラー)
    歴史的なサンプラーの一つで、指数積分を拡散モデルに持ち込んだ最初期の手法
    DPM++と同時期に発表されたが、安定性は十分ではなく仕組みが複雑で実装が難しかったため、あまり普及しなかった
    ComfuUIにもDPM++より1年遅れて実装されている
  • ddpm (Denoising Diffusion Probabilistic Models/ノイズ除去型の確率的拡散モデル)
    拡散モデル系画像生成AIの原型となったサンプラー
    概ねDDIMと同じと考えてよいが、ステップ毎にノイズを継ぎ足す点が異なる
    このノイズはEuler a等とは異なり、多様性を増すためというよりは学習時のデータ分布を再現するための理論的必然性により撒かれている
    しかしあくまで初期拡散モデルのための仕組みで、Euler aとは違いステップ幅を考慮せずにノイズを付加する為、Flow Matchingモデルは高周波誤差を増幅して破綻する
    ComfyUIだとEuler aと似通った画像が生成されるが、撒かれるノイズの量が異なるので細部に差が出る
    元のDDPMは生成過程のサンプラーだけでなく画像生成のアーキテクチャそのものだったが、ComfyUIなどに実装されているのはサンプラー部分
    筆頭著者のJonathan Ho氏は当時バークレー校の博士課程に在籍していた
    GoogleでImagen(これも拡散モデルベースの画像生成AI)の開発に携わり、その後はIdeogram AIに創業メンバーとして参加*14

sd-scriptsで使えるsampler

diffusersと、学習時のサンプル出力の際に使用する。
'ddim', 'pndm', 'heun', 'dpmsolver', 'dpmsolver++', 'dpmsingle', 'k_lms', 'k_euler', 'k_euler_a', 'k_dpm_2', 'k_dpm_2_a'が選べます。*15

samplerの比較、検証結果など

比較結果 ケース1

比較結果 ケース2