Diffusers documentation

DPMSolverMultistepScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DPMSolverMultistepScheduler

DPMSolverMultistepScheduler は、Cheng Lu、Yuhao Zhou、Fan Bao、Jianfei Chen、Chongxuan Li、Jun Zhu による DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps および DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models に由来するマルチステップスケジューラーです。

DPMSolver(および改良版のDPMSolver++)は、収束次数を保証する拡散ODE用の高速な専用高次ソルバーです。実証的に、DPMSolverによるサンプリングはわずか20ステップで高品質なサンプルを生成でき、10ステップでもかなり良いサンプルを生成できます。

ヒント

ガイドサンプリングではsolver_orderを2に設定すること、無条件サンプリングではsolver_order=3に設定することが推奨されます。

Imagen の動的閾値処理はサポートされており、ピクセル空間の拡散モデルでは、algorithm_type="dpmsolver++" と thresholding=True を設定することで動的閾値処理を使用できます。この閾値処理手法は、Stable Diffusion などの潜在空間拡散モデルには適していません。

DPMSolverおよびDPM-Solver++のSDEバリアントもサポートされていますが、1次および2次のソルバーに限定されます。これは逆方向拡散SDE向けの高速なSDEソルバーです。2次のsde-dpmsolver++の使用を推奨します。

DPMSolverMultistepScheduler

class diffusers.DPMSolverMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_lu_lambdas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )

パラメータ

  • num_train_timesteps (int、デフォルト値は 1000) — モデルを学習するための拡散ステップ数。
  • beta_start (float、デフォルト値は 0.0001) — 推論の開始時の beta 値。
  • beta_end (float、デフォルト値は 0.02) — 最終的な beta 値。
  • beta_schedule("linear"、"scaled_linear"、または "squaredcos_cap_v2"。デフォルトは "linear")— ベータスケジュールです。ベータの範囲を、モデルをステップするためのベータの列にマッピングします。
  • trained_betas (np.ndarray, 省略可) — beta_start と beta_end をバイパスして、ベータの配列を直接コンストラクタに渡す場合に使用します。
  • solver_order (int、デフォルトは 2) — 1、2、または 3 を指定できる DPMSolver のオーダーです。ガイド付きサンプリングには solver_order=2、無条件サンプリングには solver_order=3 の使用を推奨します。
  • prediction_type ("epsilon"、"sample"、"v_prediction"、または "flow_prediction"、デフォルトは "epsilon") — スケジューラ関数の予測タイプ。epsilon は拡散プロセスのノイズを予測し、sample はノイズ付きサンプルを直接予測し、v_prediction は速度を予測します(Imagen Video 論文のセクション 2.4 を参照)、flow_prediction はフローを予測します。
  • thresholding (bool、デフォルトは False) — 「動的閾値処理」メソッドを使用するかどうか。Stable Diffusion などの潜在空間拡散モデルには不向きです。
  • dynamic_thresholding_ratio (float、デフォルト値は 0.995) — 動的閾値化手法の比率。thresholding=True の場合のみ有効です。
  • sample_max_value (float、デフォルト値は 1.0) — 動的閾値処理の閾値です。thresholding=True かつ algorithm_type="dpmsolver++" の場合にのみ有効です。
  • algorithm_type ("dpmsolver"、"dpmsolver++"、"sde-dpmsolver"、または "sde-dpmsolver++"、デフォルトは "dpmsolver++") — ソルバーのアルゴリズムタイプです。dpmsolver タイプは DPMSolver 論文のアルゴリズムを実装し、dpmsolver++ タイプは DPMSolver++ 論文のアルゴリズムを実装します。Stable Diffusion におけるガイド付きサンプリングのような用途では、dpmsolver++ または sde-dpmsolver++ を solver_order=2 と組み合わせて使用することを推奨します。
  • solver_type ("midpoint" または "heun"、デフォルトは "midpoint") — 2階ソルバーのソルバータイプです。ソルバータイプはサンプルの品質にわずかな影響を与えますが、特にステップ数が少ない場合に顕著です。midpoint ソルバーの使用を推奨します。
  • lower_order_final (bool、デフォルトは True) — 最終ステップで低次数のソルバーを使用するかどうか。推論ステップ数が 15 未満の場合のみ有効です。ステップ数が 15 未満、特に 10 以下の場合は、DPMSolver のサンプリングを安定させることができます。
  • euler_at_final (bool、デフォルトは False) — 最終ステップでオイラー法を使用するかどうかを指定します。数値的安定性とディテールの豊かさのトレードオフです。推論ステップ数が少ない場合、DPMSolver の SDE 変種のサンプリングを安定化させることができますが、場合によってはぼやけの原因となる可能性があります。
  • use_karras_sigmas (bool、任意、デフォルトは False) — サンプリング処理中のノイズスケジュールにおけるステップサイズに Karras sigmas を使用するかどうか。True の場合、sigmas はノイズレベルの列 {σi} に基づいて決定されます。
  • use_exponential_sigmas (bool、任意、デフォルトはFalse) — サンプリング処理中のノイズスケジュールにおけるステップサイズに、指数関数的なシグマを使用するかどうかを指定します。
  • use_beta_sigmas (bool, optional, defaults to False) — Whether to use beta sigmas for step sizes in the noise schedule during the sampling process. Refer to Beta Sampling is All You Need for more information.
  • use_lu_lambdas (bool、任意、デフォルトは False) — サンプリングプロセス中のノイズスケジュールにおいて、Lu の DPM-Solver が提案したステップサイズ用の uniform-logSNR を使用するかどうかを指定します。True の場合、シグマとタイムステップは lambda(t) の列に基づいて決定されます。
  • use_flow_sigmas (bool、任意、デフォルトはFalse) — サンプリング処理中のノイズスケジュールにおいて、ステップサイズにフローシグマを使用するかどうかを指定します。
  • flow_shift (float、任意、デフォルト値は 1.0) — flow matching におけるタイムステップスケジュールのシフト値です。
  • final_sigmas_type ("zero" または "sigma_min"、任意、デフォルトは "zero") — サンプリングプロセス中のノイズスケジュールにおける最終的な sigma 値です。"sigma_min" の場合、最終的な sigma は学習スケジュールの最後の sigma と同じになります。"zero" の場合、最終的な sigma は 0 に設定されます。
  • lambda_min_clipped (float, デフォルトは -inf) — 数値の安定性を確保するために、lambda(t) の最小値をクリップする閾値です。これは、cosine (squaredcos_cap_v2) ノイズスケジュールにおいて重要になります。
  • variance_type ("learned" または "learned_range"、省略可能) — 分散を予測する拡散モデルには、"learned" または "learned_range" を設定します。設定した場合、モデルの出力には予測されたガウス分散が含まれます。
  • timestep_spacing ("linspace", "leading", or "trailing", defaults to "linspace") — The way the timesteps should be scaled. Refer to Table 2 of the Common Diffusion Noise Schedules and Sample Steps are Flawed for more information.
  • steps_offset (int、デフォルト値は 0)— 一部のモデルファミリーで必要とされる、推論ステップに追加されるオフセットです。
  • rescale_betas_zero_snr (bool、デフォルトは False) — betas を再スケーリングして、終端 SNR をゼロにするかどうかを指定します。これにより、モデルは中間の明るさに限定されず、非常に明るく暗いサンプルを生成できるようになります。--offset_noise とゆるく関連しています。
  • use_dynamic_shifting (bool、デフォルトは False) — タイムステップスケジュールにダイナミックシフティングを使用するかどうか。
  • time_shift_type ("exponential"、デフォルトは "exponential") — 動的シフトを使用する場合に適用する時間シフトの種類です。

DPMSolverMultistepScheduler は、拡散 ODE 向けの高速な専用高次ソルバーです。

このモデルは SchedulerMixin および ConfigMixin を継承しています。読み込みや保存など、ライブラリがすべてのスケジューラに対して実装している汎用的なメソッドについては、スーパークラスのドキュメントを参照してください。

add_noise

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

パラメータ

  • original_samples (torch.Tensor) — ノイズが加えられていない元のサンプルです。
  • noise (torch.Tensor) — サンプルに追加するノイズ。
  • timesteps (torch.IntTensor) — サンプルにノイズを追加するタイムステップ。

戻り値

torch.Tensor

ノイズ付きサンプル。

指定されたタイムステップにおけるノイズスケジュールに従って、元のサンプルにノイズを追加します。

convert_model_output

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • sample (torch.Tensor, 任意) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。

戻り値

torch.Tensor

変換後のモデルの出力。

モデルの出力を、DPMSolver/DPMSolver++ アルゴリズムが要求する対応する型に変換します。DPM-Solver はノイズ予測モデルの積分を離散化するように設計されており、DPM-Solver++ はデータ予測モデルの積分を離散化するように設計されています。

> アルゴリズムとモデルタイプは分離されています。ノイズ予測モデルとデータ予測モデルの両方で、DPMSolverまたはDPMSolver++を使用できます。

dpm_solver_first_order_update

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • sample (torch.Tensor, 任意) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • noise (torch.Tensor, 省略可) — ノイズテンソルです。

戻り値

torch.Tensor

前のタイムステップのサンプルテンソル。

1次DPMSolverの1ステップ(DDIMと同等)。

index_for_timestep

< >

( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

パラメータ

  • timestep (int または torch.Tensor) — インデックスを特定するためのタイムステップ。
  • schedule_timesteps (torch.Tensor、任意) — 検索対象となるタイムステップスケジュールです。None の場合、self.timesteps が使用されます。

戻り値

int

スケジュールにおけるタイムステップのインデックス。

スケジュール内の指定されたタイムステップのインデックスを取得します。

multistep_dpm_solver_second_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

パラメータ

  • model_output_list (list[torch.Tensor]) — 現在のタイムステップおよびその後のタイムステップにおける、学習済み拡散モデルからの直接の出力です。
  • sample (torch.Tensor, 任意) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • noise (torch.Tensor, 省略可) — 確率的(sde-*)ソルババリアントで使用されるランダムノイズ。algorithm_type がそれらのいずれかに設定されている場合に必須であり、それ以外の場合は使用されません。

戻り値

torch.Tensor

前のタイムステップのサンプルテンソル。

2次多ステップDPMSolverの1ステップ。

multistep_dpm_solver_third_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

パラメータ

  • model_output_list (list[torch.Tensor]) — 現在のタイムステップおよびその後のタイムステップにおける、学習済み拡散モデルからの直接の出力です。
  • sample (torch.Tensor, 任意) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • noise (torch.Tensor, 省略可) — ノイズテンソルです。

戻り値

torch.Tensor

前のタイムステップのサンプルテンソル。

3階の多段DPMSolverの1ステップ。

scale_model_input

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

パラメータ

  • sample (torch.Tensor) — 入力サンプルです。

戻り値

torch.Tensor

スケーリングされた入力サンプル。

現在のタイムステップに応じて、デノイジングモデルの入力をスケーリングする必要があるスケジューラーとの相互運用性を保証します。

set_begin_index

< >

( begin_index: int = 0 )

パラメータ

  • begin_index (int、デフォルトは0) — スケジューラの開始インデックスです。

スケジューラの開始インデックスを設定します。この関数は、推論の前にパイプラインから実行する必要があります。

set_timesteps

< >

( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )

パラメータ

  • num_inference_steps (int, 任意) — 事前学習済みモデルでサンプルを生成する際に使用する拡散ステップ数です。
  • device (str または torch.device、省略可) — timesteps を移動先とするデバイスです。None の場合、timesteps は移動されません。
  • mu (float, 任意) — 動的タイムシフトの指数です。use_dynamic_shifting と time_shift_type が "exponential" である必要があります。指定された場合、flow_shift は exp(mu) に設定されます。
  • timesteps (list[int], 任意) — 任意のタイムステップスケジュールをサポートするために使用するカスタムタイムステップ。None の場合、timestep_spacing 属性に基づいてタイムステップが生成されます。timesteps が渡された場合、num_inference_steps と sigmas は None でなければならず、timestep_spacing 属性は無視されます。

拡散チェーンで使用される離散タイムステップを設定します(推論の実行前に実行する必要があります)。

ステップ

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • timestep (int または torch.Tensor) — 拡散チェーンにおける現在の離散タイムステップです。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • generator (torch.Generator、任意) — 乱数生成器です。
  • variance_noise (torch.Tensor, 任意) — generator を用いてノイズを生成する代わりに、分散自体のノイズを直接指定するための代替手段です。LEdits++ のような手法に有用です。
  • return_dict (bool、デフォルトは True) — tuple を返すか、SchedulerOutput を返すかを指定します。

戻り値

SchedulerOutput または tuple

return_dict が True の場合、SchedulerOutput が返され、それ以外の場合は、最初の要素がサンプルテンソルであるタプルが返されます。

前回のタイムステップのサンプルを、SDEを逆方向に適用することで予測します。この関数は、マルチステップDPMSolverを用いてサンプルを伝播します。

SchedulerOutput

class diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

パラメータ

  • prev_sample(画像の場合、torch.Tensor、形状 (batch_size, num_channels, height, width)) — 前のタイムステップの計算済みサンプル (x_{t-1})。prev_sample は、デノイジングループにおける次のモデル入力として使用します。

スケジューラーのstep関数の出力の基底クラス。

Update on GitHub