Diffusers documentation

EDMEulerScheduler

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

EDMEulerScheduler

Karras らの論文 Elucidating the Design Space of Diffusion-Based Generative Models に記載されている Euler スケジューラー(アルゴリズム 2)の Karras 定式化です。これは高速なスケジューラーであり、多くの場合、20〜30 ステップで良好な出力を生成できます。このスケジューラーは、Katherine Crowson による元の k-diffusion 実装に基づいています。

EDMEulerScheduler

クラス diffusers.EDMEulerScheduler

< >

( 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', 'v_prediction'] = 'epsilon'rho: float = 7.0final_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 (Literal["karras", "exponential"]、任意、デフォルトは "karras") — sigmas を計算するために使用するシグマスケジュールです。デフォルトでは、EDM論文(https://huggingface.co/papers/2206.00364)で導入されたスケジュールを使用します。"exponential" スケジュールは、このモデルに組み込まれています: https://huggingface.co/stabilityai/cosxl。
  • num_train_timesteps (int、任意、デフォルトは1000) — モデルを学習するための拡散ステップ数です。
  • prediction_type (Literal["epsilon", "v_prediction"]、任意、デフォルトは "epsilon") — スケジューラ関数の予測タイプ。"epsilon" は拡散プロセスのノイズを予測し、"v_prediction" は Imagen Video 論文のセクション 2.4 を参照してください。
  • rho (float、任意、デフォルトは 7.0) — Karras sigma スケジュールの計算に使用される rho パラメータです。EDM の論文 [1] では 7.0 に設定されています。
  • final_sigmas_type (Literal["zero", "sigma_min"]、任意、デフォルトは "zero") — サンプリングプロセス中のノイズスケジュールにおける最終的な sigma 値。"sigma_min" の場合、最終的な sigma は学習スケジュールの最後の sigma と同じになります。"zero" の場合、最終的な sigma は 0 に設定されます。

Karras et al. 2022 [1] に示された EDM 定式化における Euler スケジューラーを実装します。

[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

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

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

index_for_timestep

< >

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

パラメータ

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

戻り値

int

スケジュールにおけるタイムステップのインデックスです。最初のステップでは、スケジュールの途中で開始する場合(画像から画像への生成など)にシグマをスキップすることを避けるため、複数の一致が存在する場合は2番目のインデックスを返します。

与えられたタイムステップのタイムステップスケジュールにおけるインデックスを特定します。

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] = Nonesigmas: typing.Union[list[float], torch.Tensor, NoneType] = None )

パラメータ

  • num_inference_steps (int, 任意) — 事前学習済みモデルでサンプルを生成する際に使用する拡散ステップ数です。
  • device (str または torch.device、省略可) — timesteps を移動先とするデバイスです。None の場合、timesteps は移動されません。
  • sigmas (torch.Tensor | list[float]、任意) — デノイジングプロセスに使用するカスタムシグマです。定義されていない場合、num_inference_stepsが渡された際のデフォルトの動作が使用されます。

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

ステップ

< >

( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensors_churn: float = 0.0s_tmin: float = 0.0s_tmax: float = infs_noise: float = 1.0generator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = Truepred_original_sample: typing.Optional[torch.Tensor] = None ) → EDMEulerSchedulerOutput or tuple

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • timestep (float または torch.Tensor) — 拡散チェーンにおける現在の離散タイムステップ。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • s_churn (float、任意、デフォルトは 0.0) — 各ステップで加える確率的ノイズの量です。値が大きいほど、より多くのノイズが加えられます。
  • s_tmin (float、任意、デフォルトは 0.0) — これより小さい sigma 閾値以下では、ノイズが追加されません。
  • s_tmax (float、任意、デフォルトは float("inf")) — これを超えるシグマの閾値では、ノイズが追加されません。
  • s_noise (float、任意、デフォルトは 1.0) — サンプルに追加されるノイズのスケール係数。
  • generator (torch.Generator、任意) — 再現性を確保するための乱数生成器です。
  • return_dict (bool、省略可、デフォルトは True) — EDMEulerSchedulerOutput を返すか、タプルを返すかを指定します。
  • pred_original_sample (torch.Tensor, 任意) — 前のステップからの予測されたノイズ除去済みサンプルです。指定された場合、再計算をスキップします。

戻り値

EDMEulerSchedulerOutput または tuple

return_dict が True の場合、EDMEulerSchedulerOutput が返され、それ以外の場合は、最初の要素が前回のサンプルテンソル、2番目の要素が予測された元のサンプルテンソルであるタプルが返されます。

前のタイムステップのサンプルを、SDEを逆方向に適用することで予測します。この関数は、学習済みモデルの出力(多くの場合、予測されたノイズ)から拡散過程を伝播させます。

EDMEulerSchedulerOutput

クラス diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput

< >

( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )

パラメータ

  • prev_sample(画像の場合、torch.Tensor、形状 (batch_size, num_channels, height, width)) — 前のタイムステップの計算済みサンプル (x_{t-1})。prev_sample は、デノイジングループにおける次のモデル入力として使用します。
  • pred_original_sample(画像の場合、torch.Tensor、形状 (batch_size, num_channels, height, width)) — 現在のタイムステップにおけるモデルの出力に基づいて予測された、ノイズ除去済みのサンプル (x_{0}) です。 pred_original_sample は、進捗のプレビューやガイダンスに使用できます。

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

Update on GitHub