Diffusers documentation

DPMSolverMultistepInverse

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

DPMSolverMultistepInverse

DPMSolverMultistepInverse は、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 に記載されている、逆方向のスケジューラーです。

実装は、主にNull-text Inversion for Editing Real Images using Guided Diffusion ModelsのDDIMインバージョンの定義と、Xiang-cd/DiffEdit-stable-diffusionのDiffEditの潜在インバージョンのノートブック実装に基づいています。

ヒント

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

DPMSolverMultistepInverseScheduler

クラス diffusers.DPMSolverMultistepInverseScheduler

< >

( 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', '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_flow_sigmas: bool = Falseflow_shift: float = 1.0lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0 )

パラメータ

  • num_train_timesteps (int、デフォルト値は 1000) — モデルを学習するための拡散ステップ数。
  • beta_start (float、デフォルト値は 0.0001) — 推論の開始時の beta 値。
  • beta_end (float、デフォルト値は 0.02) — 最終的な beta 値。
  • beta_schedule (str、デフォルトは "linear") — ベータスケジュールです。ベータの範囲から、モデルのステップ処理に使用するベータのシーケンスへのマッピングを指定します。linear、scaled_linear、または squaredcos_cap_v2 から選択してください。
  • trained_betas (np.ndarray, 省略可) — beta_start と beta_end をバイパスして、ベータの配列を直接コンストラクタに渡す場合に使用します。
  • solver_order (int、デフォルトは 2) — 1、2、または 3 を指定できる DPMSolver のオーダーです。ガイド付きサンプリングには solver_order=2、無条件サンプリングには solver_order=3 の使用を推奨します。
  • 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).
  • 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、dpmsolver++、sde-dpmsolver、または sde-dpmsolver++ を指定できます。 dpmsolver タイプは 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 変種のサンプリングを安定化させることができますが、場合によってはぼやけの原因となる可能性があります。
  • 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) — フローシフト係数です。use_flow_sigmas=True の場合のみ有効です。
  • lambda_min_clipped (float, デフォルトは -inf) — 数値の安定性を確保するために、lambda(t) の最小値をクリップする閾値です。これは、cosine (squaredcos_cap_v2) ノイズスケジュールにおいて重要になります。
  • variance_type (str、任意) — 分散を予測する拡散モデルの場合、“learned”または“learned_range”に設定します。設定すると、モデルの出力に予測されたガウス分散が含まれます。
  • timestep_spacing (str、デフォルトは"linspace") — タイムステップをスケーリングする方法です。詳細については、一般的な拡散ノイズスケジュールとサンプルステップは欠陥があるの表2を参照してください。
  • steps_offset (int、デフォルト値は 0)— 一部のモデルファミリーで必要とされる、推論ステップに追加されるオフセットです。

DPMSolverMultistepInverseScheduler は DPMSolverMultistepScheduler の逆スケジューラーです。

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

add_noise

< >

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

パラメータ

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

戻り値

torch.Tensor

ノイズ付きサンプル。

スケジューラーの相当する関数を使用して、クリーンなoriginal_samplesにノイズを追加します。

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と同等)。

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_timesteps

< >

( num_inference_steps: int | None = 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] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • timestep (int) — 拡散チェーンにおける現在の離散タイムステップ。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • generator (torch.Generator、任意) — 乱数生成器です。
  • variance_noise (torch.Tensor) — generator を使用してノイズを生成する代わりに、分散自体のノイズを直接指定するための代替手段です。CycleDiffusion のような手法に有用です。
  • 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