Diffusers documentation

DPMSolverSinglestepScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DPMSolverSinglestepScheduler

DPMSolverSinglestepScheduler は、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 に由来する、1ステップのスケジューラーです。

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

元の実装は、LuChengTHU/dpm-solver で確認できます。

ヒント

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

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

DPMSolverSinglestepScheduler

class diffusers.DPMSolverSinglestepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = '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++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: 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']] = Noneuse_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")— ベータスケジュールです。モデルのステップ処理において、ベータの範囲からベータのシーケンスへの変換を定義します。linear、scaled_linear、または squaredcos_cap_v2 から選択してください。
  • trained_betas (np.ndarray または list[float]、省略可) — beta_start と beta_end をバイパスして、ベータの配列を直接コンストラクタに渡すことができます。
  • solver_order (int、デフォルトは 2) — 1、2、または 3 を指定できる DPMSolver の order です。ガイド付きサンプリングには solver_order=2、無条件サンプリングには solver_order=3 の使用を推奨します。
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon") — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_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++"、デフォルトは "dpmsolver++") — ソルバーのアルゴリズムタイプです。dpmsolver、dpmsolver++、または sde-dpmsolver++ を指定できます。dpmsolver タイプは DPMSolver 論文に記述されているアルゴリズムを実装し、 dpmsolver++ タイプは DPMSolver++ 論文に記述されているアルゴリズムを実装します。Stable Diffusion におけるガイド付きサンプリングのような用途では、dpmsolver++ または sde-dpmsolver++ を solver_order=2 と組み合わせて使用することを推奨します。
  • solver_type ("midpoint" または "heun"、デフォルトは "midpoint") — 2 次ソルバーのソルバータイプ。midpoint または heun を指定できます。ソルバータイプはサンプルの品質にわずかな影響を与えますが、ステップ数が少ない場合特に顕著です。midpoint ソルバーの使用を推奨します。
  • lower_order_final (bool、デフォルトはFalse) — 最終ステップで低次数のソルバーを使用するかどうか。推論ステップ数が 15 未満の場合にのみ有効です。ステップ数が 15 未満、特に 10 以下の場合は、DPMSolver のサンプリングを安定させることができます。
  • 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_flow_sigmas (bool、任意、デフォルトはFalse) — サンプリング処理中のノイズスケジュールにおいて、ステップサイズにフローシグマを使用するかどうかを指定します。
  • flow_shift (float、任意、デフォルト値は 1.0) — フローベースモデルにおけるフローシフトパラメータです。
  • 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" を設定します。設定した場合、モデルの出力には予測されたガウス分散が含まれます。
  • use_dynamic_shifting (bool、デフォルトは False) — ノイズスケジュールにダイナミックシフティングを使用するかどうか。
  • time_shift_type ("exponential"、デフォルトは"exponential") — 適用する時間シフトの種類です。

DPMSolverSinglestepScheduler は、拡散 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) — 学習済み拡散モデルからの直接の出力です。
  • timestep (int) — 拡散チェーンにおける現在の離散タイムステップ。
  • prev_timestep (int) — 拡散チェーンにおける直前の離散タイムステップ。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • noise (torch.Tensor, 省略可) — 確率的(sde-*)ソルババリアントで使用されるランダムノイズ。algorithm_type がそれらのいずれかに設定されている場合に必須であり、それ以外の場合は使用されません。

戻り値

torch.Tensor

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

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

get_order_list

< >

( num_inference_steps: int ) → list[int]

パラメータ

  • num_inference_steps (int) — 事前学習済みモデルでサンプルを生成する際に使用する拡散ステップの数。

戻り値

list[int]

各タイムステップにおけるソルバーの順序のリスト。

各タイムステップでソルバーの順序を計算します。

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

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

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

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 の場合、タイムステップ間の等間隔というデフォルトのタイムステップ間隔戦略が使用されます。timesteps が渡された場合、num_inference_steps は None でなければなりません。

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

singlestep_dpm_solver_second_order_update

< >

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

パラメータ

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

戻り値

torch.Tensor

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

2次単一ステップDPMSolverの1ステップ。時刻timestep_list[-2]から時刻prev_timestepでの解を計算します。

singlestep_dpm_solver_third_order_update

< >

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

パラメータ

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

戻り値

torch.Tensor

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

3次の単一ステップ DPMSolver の1ステップ。時刻 timestep_list[-3] から時刻 prev_timestep における解を計算します。

singlestep_dpm_solver_update

< >

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

パラメータ

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

戻り値

torch.Tensor

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

単一ステップのDPMSolverの1ステップ。

ステップ

< >

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

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • timestep (int または torch.Tensor) — 拡散チェーンにおける現在の離散タイムステップです。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • generator (torch.Generator、任意) — 確率的サンプリング用の乱数生成器です。
  • return_dict (bool、デフォルトは True) — tuple を返すか、SchedulerOutput を返すかを指定します。

戻り値

SchedulerOutput または tuple

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

前回のタイムステップからのサンプルを予測するには、SDEを逆方向に適用します。この関数は、singlestep 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