Samplingとは?

拡散モデルは、ノイズを一気に消しているわけではなく、ノイズを少しずつ減らすステップを何回も進めながら画像を作っています。

学習時は本当に細かくステップを分けてノイズを少しずつ増やしていますが、生成時も同じ細かさで1段階ずつノイズを消していくと、ステップ数が多くなりすぎて現実的な時間では終わりません。

そこで実際の生成では、本当はもっと細かく分かれているノイズの段階を、代表となるいくつかのステップにまとめ直し、たとえば20ステップ前後で完成するようにします。

このときの 全体を何ステップに分けるか、1ステップでどれくらいノイズを減らすか といったノイズの減らし方の決め方全体を、このサイトでは Sampling と呼びます。


サンプラーとスケジューラー

ComfyUIでは、Samplingを2つの要素に分けて設定します。

サンプラー

「次のステップでどれくらいノイズを減らすか」を計算するアルゴリズムです。

  • Euler:1ステップぶんの変化量をそのまま適用する
  • DPM系:過去のステップも参照して賢く補正

その他、なるべく少ないステップ数で綺麗に仕上がるよう進化してきた結果、めちゃめちゃな数のサンプラーが発明されましたが、2〜3個覚えておけば十分です。

スケジューラー

「全体のステップのどこで、どれくらいノイズを減らすか」という時間割を決めます。

拡散モデルは学習時に、ノイズレベルを少しずつ変えながら連続的に画像を壊していく前提で学習しています。そのまま同じ細かさでノイズを取り除いていくとステップ数が多くなりすぎるため、実際の生成時には「その軌道上のいくつかのノイズレベルだけを代表として選んで」計算しています。 スケジューラーは、早い段階で大きく減らすか、後半を微調整に使うか、といった配分を決めています。


どれくらい品質に効くのか?

Samplingが画質に影響しないわけではありませんが、この設定にこだわったところでそれほど品質が上がるわけではありません。

基本的には Euler + normal 20step を選んでおけばよいでしょう。

相性の悪い組み合わせに注意

ただし、サンプラー・スケジューラー・CFG・ステップ数の組み合わせによって、うまく生成できない場合があります。

参考: Stable Diffusion Deep Dive - CFG - Don't Accidentally Fry Your Images

例えば、DPM++ 2M Karras 20step だとCFG 25を超えると赤信号です。

実際に生成してみると:

  • DPM++ 2M Karras / Step数 20 / CFG 8

  • DPM++ 2M Karras / Step数 20 / CFG 30

CFG以外の原因でも、このように彩度が上がりすぎた画像が生成されることがあります。このような画像を over-saturated colorsburn out と表現することがあります。

逆にこのような画像が生成されれば、サンプラーやCFGの組み合わせが悪いかもしれません。


高速化用のSampling(LCM系など)

通常の拡散モデルは20ステップ前後かけてノイズを減らしますが、元のモデルが「20ステップ」で行う変化を1〜数ステップで近似できるように学習し直したモデルがあります。

こうしたモデルを高速化蒸留モデルと呼びます。代表的なものにLCM(Latent Consistency Model)やLightning系などがあります。

これらは専用サンプラー(LCMサンプラーなど)と組み合わせて使うか、最近のものではEulerなどの汎用サンプラーでも動くよう調整されています。

特に注意点する点として、CFG = 1を前提に学習されていることが多いため、まずチェックしておきましょう。