Diffusers documentation

UniPCMultistepScheduler

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

and get access to the augmented documentation experience

to get started

UniPCMultistepScheduler

UniPCMultistepScheduler は、拡散モデルの高速サンプリングのために設計された、学習不要のフレームワークです。Wenliang Zhao、Lujia Bai、Yongming Rao、Jie Zhou、Jiwen Lu による UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models で提案されました。

正則化項(UniC)と予測項(UniP)で構成されており、統一された解析的な形式を共有し、任意の次数をサポートします。 UniPCは設計上、モデルに依存せず、ピクセル空間/潜在空間のDPMおよび無条件/条件付きサンプリングをサポートします。また、ノイズ予測モデルとデータ予測モデルの両方に適用できます。正則化項UniCは、市販のソルバーの後に適用して精度の次数を高めることも可能です。

論文の抄録は以下の通りです:

拡散確率モデル(DPM)は、高解像度画像合成において非常に有望な能力を示しています。しかし、DPMからのサンプリングは、ノイズ除去ネットワークの複数回の評価が必要であるため時間がかかり、DPMのサンプリングを高速化することがますます重要になっています。高速サンプラーの設計における最近の進歩にもかかわらず、既存の方法では、より少ないステップ(例:<10)が好まれる多くのアプリケーションにおいて、満足できる画像を生成することが依然としてできません。本論文では、既存のDPMサンプラーの後に適用でき、追加のモデル評価なしで精度の次数を高めることができる統一コーレクター(UniC)を開発し、その副産物として、任意の次数をサポートする統一プレディクター(UniP)を導出します。UniPとUniCを組み合わせることで、DPMの高速サンプリングのための統一プレディクター-コーレクターフレームワークUniPCを提案します。UniPCは任意の次数に対して統一された解析的な形式を持ち、特に極めて少ないステップ数において、従来の手法よりもサンプリング品質を大幅に向上させることができます。ピクセル空間と潜在空間のDPMを用いた、無条件サンプリングと条件付きサンプリングの両方を含む広範な実験を通じて、我々の手法を評価しました。UniPCは、わずか10回の関数評価で、CIFAR10(無条件)でFID 3.87、ImageNet 256×256(条件付き)でFID 7.51を達成します。コードはこの https URLで入手できます。

ヒント

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

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

UniPCMultistepScheduler

class diffusers.UniPCMultistepScheduler

< >

( 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.0predict_x0: bool = Truesolver_type: typing.Literal['bh1', 'bh2'] = 'bh2'lower_order_final: bool = Truedisable_corrector: list[int] = []solver_p: SchedulerMixin = Noneuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential'sigma_min: float | None = Nonesigma_max: bool | None = Noneshift_terminal: bool | None = None )

パラメータ

  • 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, 省略可) — beta_start と beta_end をバイパスして、ベータの配列を直接コンストラクタに渡す場合に使用します。
  • solver_order (int、デフォルトは 2) — UniPC のオーダーで、任意の正の整数を指定できます。UniC により、実際の精度のオーダーは solver_order + 1 になります。ガイド付きサンプリングには solver_order=2、無条件サンプリングには solver_order=3 の使用を推奨します。
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", 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), 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 かつ predict_x0=True の場合にのみ有効です。
  • predict_x0 (bool、デフォルトはTrue) — 予測されたx0に対して更新アルゴリズムを使用するかどうか。
  • solver_type ("bh1" または "bh2"、デフォルトは "bh2") — UniPC のソルバータイプです。ステップ数が 10 未満の無条件サンプリングには bh1 を、それ以外には bh2 を使用することをお勧めします。
  • lower_order_final (bool、デフォルト True) — 最終ステップで低次数のソルバーを使用するかどうか。推論ステップ数が 15 未満の場合のみ有効です。ステップ数が 15 未満、特に 10 以下の場合は、DPMSolver のサンプリングを安定させることができます。
  • disable_corrector (list、デフォルト []) — epsilon_theta(x_t, c) と epsilon_theta(x_t^c, c) の間の不一致を緩和するために、どのステップで corrector を無効にするかを決定します。この不一致は、guidance scale が大きい場合に収束に影響を与える可能性があります。通常、corrector は最初の数ステップで無効にされます。
  • solver_p (SchedulerMixin、デフォルトは None) — 指定された場合、アルゴリズムは solver_p + UniC になります。
  • 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) — サンプリング処理中のノイズスケジュールにおいて、ステップサイズにフローシグマを使用するかどうかを指定します。
  • 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)— 一部のモデルファミリーで必要とされる、推論ステップに追加されるオフセットです。
  • final_sigmas_type("zero"または"sigma_min"、デフォルトは"zero")— サンプリングプロセス中のノイズスケジュールにおける最終的なsigma値です。"sigma_min"の場合、最終的なsigmaは学習スケジュールの最後のsigmaと同じになります。zeroの場合、最終的なsigmaは0に設定されます。
  • rescale_betas_zero_snr (bool、デフォルトは False) — betas を再スケーリングして、終端 SNR をゼロにするかどうかを指定します。これにより、モデルは中間の明るさに限定されず、非常に明るく暗いサンプルを生成できるようになります。--offset_noise とゆるく関連しています。

UniPCMultistepScheduler は、拡散モデルの高速サンプリングのために設計された、学習不要のフレームワークです。

このモデルは 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: Tensor = None**kwargs ) → torch.Tensor

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • timestep (int) — 拡散チェーンにおける現在の離散タイムステップ。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。

戻り値

torch.Tensor

変換後のモデルの出力。

モデルの出力を、UniPCアルゴリズムが要求する対応する型に変換します。

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_uni_c_bh_update

< >

( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

パラメータ

  • this_model_output (torch.Tensor) — x_t におけるモデルの出力です。
  • this_timestep (int) — 現在のタイムステップ t。
  • last_sample (torch.Tensor) — 最後の予測器 x_{t-1} による生成サンプル。
  • this_sample (torch.Tensor) — 最後の予測器 x_{t} 以降に生成されたサンプルです。
  • order (int) — このステップにおける UniC-p の p です。有効な精度の次数は order + 1 になるはずです。

戻り値

torch.Tensor

現在のタイムステップにおける修正済みサンプルテンソル。

UniC(B(h)版)の1ステップ。

multistep_uni_p_bh_update

< >

( model_output: Tensor*argssample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

パラメータ

  • model_output (torch.Tensor) — 現在のタイムステップにおける学習済み拡散モデルからの直接の出力。
  • prev_timestep (int) — 拡散チェーンにおける直前の離散タイムステップ。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • order (int) — このタイムステップにおける UniP のオーダーです(UniPC-p の p に相当します)。

戻り値

torch.Tensor

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

UniP(B(h)版)の1ステップ。または、指定されている場合はself.solver_pが使用されます。

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 | None = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: list[float] | None = Nonemu: bool | None = None )

パラメータ

  • num_inference_steps (int) — 事前学習済みモデルでサンプルを生成する際に使用する拡散ステップの数。
  • device (str または torch.device、省略可) — timesteps を移動先とするデバイスです。None の場合、timesteps は移動されません。
  • sigmas (List[float], 任意) — 各拡散ステップで使用するシグマの自定义値。None の場合、シグマは自動的に計算されます。
  • mu (float, 任意) — exponential time shift type を使用する場合の動的シフトに用いる任意の mu パラメータ。

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

ステップ

< >

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

パラメータ

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

戻り値

SchedulerOutput または tuple

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

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

stretch_shift_to_terminal

< >

( t: Tensor ) → torch.Tensor

パラメータ

  • t (torch.Tensor) — 伸縮およびシフトの対象となるタイムステップのテンソル。

戻り値

torch.Tensor

最終値がself.config.shift_terminalに等しくなるよう調整されたタイムステップのテンソル。

shift_terminal 設定値で終了するように、タイムステップスケジュールを伸縮およびシフトします。

参照: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

time_shift

< >

( mu: floatsigma: floatt: Tensor ) → torch.Tensor

パラメータ

  • mu (float) — タイムシフト用の mu パラメータです。
  • sigma (float) — タイムシフト用の sigma パラメータです。
  • t (torch.Tensor) — 入力タイムステップです。

戻り値

torch.Tensor

時間シフトされたタイムステップ。

シグマに時間シフトを適用します。

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