ノイズスケジューラ

Last-modified: 2025-12-15 (月) 17:56:43

概要

ノイズスケジューラとは、本来は画像生成処理において各ステップで描き変える量(=ノイズ予測量)をコントロールするコンポーネントのこと。

画像生成AI(拡散モデルFlow Matchingモデル)は、トレーニング時には1000ステップ等のノイズ拡散過程を踏んで学習している。
基本的には、生成時の各ステップ(多くても50ステップ程度だろう)について、生成何ステップ目を学習時の何ステップ目に対応させるかを決めるのがノイズスケジューラである。
ただしkarrasスケジューラなど、モデルの情報を参照せず純粋に数学的にノイズ除去量を決めるスケジューラも一部存在する。

主なノイズスケジューラ

名称特徴相性
normal無難。学習時の分布に近いスケジュールモデルによらず〇
simple無難。normalに近いモデルによらず〇
karrasSDXLモデルで作画が安定しやすい(デフォルト値だと)Qwen-ImageFLUX.1等のDiTモデル×
betaデフォルト値だとnormalより少しステップごとの描き込み量の変動がマイルドになるのでi2i向き
弄ろうと思えば自由にスケジュールを弄れる
linear_quadratic後半に描きこみを集中。ディティール描写が強いSD1.5・SDXLモデル×
 
  • normal (linear)
    モデルの学習時のノイズスケジュールを素直に反映するので、最適ではないにしても無難なノイズスケジューラ
    SDXLモデルでは前半に構図を安定させてその後ゆっくりディティールの描写を行う。
    各生成ステップを単純に (現在のステップ数÷総生成ステップ数)×(総学習ステップ数[SD1.5やSDXLでは1000]) に相当する学習時ステップ数に対応させる(生成は「逆」拡散過程なので、SDXLなら1000からその値を引いたステップ数になる)。
    対応先の学習時ステップ数が中間値になる場合は線形補完を行う。
    ただし、SDXLモデルではノイズ付加量自体は学習時の拡散過程において絵が崩れていく後半ほど多くなるようになっている。
    このため、「時間間隔としては(生成時と学習時とで)均等」に割り振られているが、「描き込み量(=ノイズ除去量)はノイズの多い前半のほうが多い」というスケジュールになる。
    これは学習時のノイズスケジュールに依存するため、DiT世代のモデルではnormalスケジューラでもSDXLより前半の描き込みが穏やかで後半の描き込みが多いスケジュールになっている。
  • simple
    ComfyUIのsimpleスケジューラはnormalとほぼ同じ……はずだがシグマ値を出してみるとちょっと値が違う。
    normalより前半の描き込みがちょっとだけ緩やかで終盤の描き込みが少し多い。
    normalと異なる点は、線形補間を行わず、モデルが持っている学習時のシグマ値(残留ノイズ量)配列を直接間引く形でスケジュールすること。
  • karras
    SDXLモデルのnormalスケジューラよりもさらに前半に描き込みが偏っているノイズスケジューラ
    低ステップ数での構図の安定に主眼が置かれている。SDXL系(U-Net拡散モデル)が暴れやすいディティール描写の描き込みを適切な量に抑えることで品質を上げる。
    モデルの情報を参照せずにスケジュールを組むため、ComfyUIのデフォルト値だとDiT世代のモデルではnormalスケジューラよりもかなり前半に描き込みが偏る。
    (デフォルト値は)Qwen-ImageFLUX.1といったDiTモデルと相性が悪く、そのまま適用するとほぼまともな絵にならない。
  • beta
    2025年12月現在、uni_pc_bh2サンプラーと合わせてHires.fix処理を行うときの推奨設定となっている。
    ComfyUIのデフォルト値であるα=β=0.6だと、モデル次第だがSDXLモデルでは前半の描き込みが緩やかになり後半のディティール描写が増えるのでi2iに向く。
    ベータ分布に基づくスケジューリングを行う。
    ただし、ベータ分布に基づいて決められるのは「各生成ステップに対応する学習時ステップ数」であり、シグマ値(残留ノイズ量)そのものではない。
    ComfyUIでカスタムサンプラーと「ベータサンプリングスケジューラー」ノードを使えばフリーダムにスケジュールをコントロールできる……がそこまでやるユーザーは稀だろう。
    αを上げると前半、βを上げると後半の描き込みが多くなり、双方の数値が高いほど中間の描き込みが多くなる
    (正確には、描き込みが多くなるというより生成ステップのその部分に学習時のより広いステップ範囲を対応させる)。
  • linear_quadratic
    SDXL系のnormalスケジューラとは対照的で、前半は全然描きこまず後半のディティール描写の部分に描き込みを集中させるノイズスケジューラ
    通常のモデルでは構図が安定しにくくなるため推されることは少ないが、NetaLumina系モデルの推奨スケジューラとなっている。
    ディティール描写が過剰になるときは他のスケジューラに差し替えたほうが良い。
    これまたモデル情報を参照せずにスケジュールを組んでいるようで、DiTモデルはQwen-ImageだろうがFLUX.1系だろうがLumina-Image系だろうがみんな同じスケジュールを返す。
    SDXL系(U-Net拡散モデル)とは絶望的に相性が悪く、まずまともな絵にならない。DiT系モデルについてはモデルと描きたいもの次第。

主要ノイズスケジューラの生成過程(10ステップ)

ComfyUIで「基本スケジューラー」ノードの出力を「プレビュー任意」につなぐとシグマ値(残留ノイズ値)の配列を取得できる。

SDXL系モデルの生成過程

U-Net拡散モデルは大局的な整合性を取るのが苦手でディテール描写が暴発しやすい為、
生成過程では大まかな構図を勢いよく描いてからちびちびディテールを描き加えるというスケジュールが基本となっている。

reverse-process-of-sdxl.png

SDXL系モデル e-pred(WAI-illustrious-SDXL v15)

ステップ数シグマ値(残留ノイズ量)
normalsimplekarrasbetalinear_
quadratic
014.614614.614614.614614.614614.6146
17.83998.30289.102911.542814.5416
24.60925.08785.47847.371814.4685
32.91833.32113.16864.372814.3954
41.95022.27651.74942.615214.3223
51.34491.61290.91411.618314.2493
60.93241.16060.44691.027313.6208
70.62500.82990.20140.654911.8817
80.36870.56930.08190.39559.0318
90.02920.34170.02920.19915.0713
100.00000.00000.00000.00000.0000

DiT世代(Qwen-ImageFLUX.1他)の生成過程

Transformerは大局的な整合性を取るのは(同時代の他のAIモデルより)得意な反面、局所的なエラーがそのまま広域に拡散しやすい。
このためU-Net拡散モデルのように前半で勢いよく構図を決めるのではなく、完成形が見えてくるまで慎重に品質をコントロールするスケジュールが基本となっている。
大枠が固まってしまえばTransformerネイティブなSelf-Attentionで強力な整合性が担保される為、終盤の描き込みは鮮やか。

reverse-process-of-dit.png

DiT世代 Qwen-Image(FP8版)

ステップ数シグマ値(残留ノイズ量)
normalsimplekarrasbetalinear_
quadratic
01.00001.00001.00001.00001.0000
10.96190.96600.57510.98710.9950
20.91700.92660.31540.95750.9900
30.86330.88050.16350.91180.9850
40.79790.82570.07910.84730.9800
50,71650.75950.03520.75960.9750
60.61240.67800.01410.64260.9320
70.47460.57510.00490.49120.8130
80.28360.44120.00140.30700.6180
90.00090.25980.00030.11550.3470
100.00000.00000.00000.00000.0000

diffusersにおけるスケジューラ

diffusersライブラリにおいて(のみ)は、ComfyUI等におけるsamplerに相当する。
ComfyUIは逆にサンプラーの中にノイズスケジューラをまとめている(分けることもできる)のだが、diffusersはスケジューラの中にサンプラーを入れてしまっている。