Diffusers documentation

EDMDPMSolverMultistepScheduler

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

EDMDPMSolverMultistepScheduler

EDMDPMSolverMultistepScheduler は、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 に由来するマルチステップスケジューラである DPMSolverMultistepScheduler の Karras 定式化 です。

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

EDMDPMSolverMultistepScheduler

クラス diffusers.EDMDPMSolverMultistepScheduler

< >

( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )

パラメータ

  • sigma_min (float, 任意、デフォルト値は 0.002) — sigma スケジュールにおける最小ノイズ強度です。EDM 論文 [1] では 0.002 に設定されており、適切な範囲は [0, 10] です。
  • sigma_max (float, 任意、デフォルト値は 80.0) — sigma スケジュールにおけるノイズの最大振幅です。EDM 論文 [1] では 80.0 に設定されており、適切な範囲は [0.2, 80.0] です。
  • sigma_data (float、任意、デフォルト値は 0.5) — データ分布の標準偏差です。EDM の論文 [1] では 0.5 に設定されています。
  • sigma_schedule (str、任意、デフォルトは karras) — sigmas を計算するための Sigma スケジュールです。デフォルトでは、EDM 論文 (https://huggingface.co/papers/2206.00364) で提案されたスケジュールを使用します。その他の有効な値は “exponential” です。この指数関数スケジュールは、以下のモデルに組み込まれています: https://huggingface.co/stabilityai/cosxl。
  • num_train_timesteps (int、デフォルト値は 1000) — モデルを学習するための拡散ステップ数。
  • prediction_type (str, defaults to epsilon, optional) — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample) or v_prediction` (see section 2.4 of Imagen Video paper).
  • rho (float, 任意、デフォルト値は 7.0) — Karras シグマスケジュールにおける rho パラメータです。EDM 論文 [1] では 7.0 に設定されていました。
  • solver_order (int、デフォルトは 2) — 1、2、または 3 を指定できる DPMSolver のオーダーです。ガイド付きサンプリングには solver_order=2、無条件サンプリングには solver_order=3 の使用を推奨します。
  • 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 (str、デフォルトは dpmsolver++) — ソルバーのアルゴリズムタイプです。dpmsolver++ または sde-dpmsolver++ を指定できます。dpmsolver++ タイプは、DPMSolver++ 論文に記述されているアルゴリズムを実装しています。Stable Diffusion におけるガイド付きサンプリングのような用途では、dpmsolver++ または sde-dpmsolver++ を solver_order=2 と組み合わせて使用することを推奨します。
  • solver_type (str、デフォルトは midpoint) — 2 次ソルバーのソルバータイプです。midpoint または heun を指定できます。ソルバータイプはサンプルの品質にわずかな影響を与えますが、ステップ数が少ない場合に特に顕著です。midpoint ソルバーの使用を推奨します。
  • lower_order_final (bool、デフォルトは True) — 最終ステップで低次数のソルバーを使用するかどうか。推論ステップ数が 15 未満の場合のみ有効です。ステップ数が 15 未満、特に 10 以下の場合は、DPMSolver のサンプリングを安定させることができます。
  • euler_at_final (bool、デフォルトは False) — 最終ステップでオイラー法を使用するかどうかを指定します。数値的安定性とディテールの豊かさのトレードオフです。推論ステップ数が少ない場合、DPMSolver の SDE 変種のサンプリングを安定化させることができますが、場合によってはぼやけの原因となる可能性があります。
  • final_sigmas_type (str、デフォルトは "zero") — サンプリングプロセス中のノイズスケジュールにおける最終的な sigma 値です。"sigma_min" の場合、最終的な sigma は学習スケジュールの最後の sigma と同じになります。zero の場合、最終的な sigma は 0 に設定されます。

Karras et al. 2022 [1] に示された EDM 定式化における DPMSolverMultistepScheduler を実装します。EDMDPMSolverMultistepScheduler は、拡散 ODE 向けの高速な専用高次ソルバーです。

[1] Karras, Tero, et al. “Elucidating the Design Space of Diffusion-Based Generative Models.” https://huggingface.co/papers/2206.00364

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

add_noise

< >

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

パラメータ

  • original_samples (torch.Tensor) — ノイズが加えられる元のサンプルです。
  • noise (torch.Tensor) — 元のサンプルに追加するノイズのテンソル。
  • timesteps (torch.Tensor) — ノイズを追加するタイムステップ。スケジュールに基づいてノイズレベルを決定します。

戻り値

torch.Tensor

タイムステップスケジュールに従ってスケーリングされたノイズが加えられたノイズ付きサンプル。

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

convert_model_output

< >

( model_output: Tensorsample: Tensor ) → 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: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → 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: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor

パラメータ

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

戻り値

torch.Tensor

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

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

multistep_dpm_solver_third_order_update

< >

( model_output_list: listsample: Tensor ) → torch.Tensor

パラメータ

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

戻り値

torch.Tensor

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

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

precondition_inputs

< >

( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

パラメータ

  • sample (torch.Tensor) — 前処理を行う入力サンプルテンソル。
  • sigma (float または torch.Tensor) — 現在の sigma(ノイズレベル)の値です。

戻り値

torch.Tensor

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

EDMの定式化に従ってスケーリングすることにより、入力サンプルを事前処理します。

precondition_noise

< >

( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

パラメータ

  • sigma (float または torch.Tensor) — 事前処理に使用する sigma(ノイズレベル)の値。

戻り値

torch.Tensor

0.25 * log(sigma) として計算される事前条件付きノイズ値。

対数変換を適用して、ノイズレベルを事前処理します。

precondition_outputs

< >

( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

パラメータ

  • sample (torch.Tensor) — 入力サンプルテンソル。
  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • sigma (float または torch.Tensor) — 現在の sigma(ノイズレベル)の値です。

戻り値

torch.Tensor

スキップ接続と出力スケーリングを組み合わせることで計算されるノイズ除去済みサンプル。

EDMの定式化に従って、モデルの出力を事前処理します。

scale_model_input

< >

( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor

パラメータ

  • sample (torch.Tensor) — 入力サンプルテンソル。
  • timestep (float または torch.Tensor) — 拡散チェーンにおける現在のタイムステップ。

戻り値

torch.Tensor

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

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

set_begin_index

< >

( begin_index: int = 0 )

パラメータ

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

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

set_timesteps

< >

( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device, NoneType] = None )

パラメータ

  • num_inference_steps (int) — 事前学習済みモデルでサンプルを生成する際に使用する拡散ステップの数。
  • device (str または torch.device、省略可) — timesteps を移動先とするデバイスです。None の場合、timesteps は移動されません。

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

ステップ

< >

( 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) — 拡散チェーンにおける現在の離散タイムステップ。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • generator (torch.Generator、任意) — 乱数生成器です。
  • return_dict (bool) — tuple を返すか、SchedulerOutput を返すかを指定します。

戻り値

SchedulerOutput または tuple

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