Diffusers documentation
EDMEulerScheduler
EDMEulerScheduler
Karras らの論文 Elucidating the Design Space of Diffusion-Based Generative Models に記載されている Euler スケジューラー(アルゴリズム 2)の Karras 定式化です。これは高速なスケジューラーであり、多くの場合、20〜30 ステップで良好な出力を生成できます。このスケジューラーは、Katherine Crowson による元の k-diffusion 実装に基づいています。
EDMEulerScheduler
クラス diffusers.EDMEulerScheduler
< source >( 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
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
指定されたタイムステップにおけるノイズスケジュールに従って、元のサンプルにノイズを追加します。
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
与えられたタイムステップのタイムステップスケジュールにおけるインデックスを特定します。
precondition_inputs
< source >( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
EDMの定式化に従ってスケーリングすることにより、入力サンプルを事前処理します。
precondition_noise
< source >( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
対数変換を適用して、ノイズレベルを事前処理します。
precondition_outputs
< source >( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
EDMの定式化に従って、モデルの出力を事前処理します。
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
Eulerアルゴリズムに合わせて、ノイズ除去モデルの入力をスケーリングします。現在のタイムステップに応じてノイズ除去モデルの入力をスケーリングする必要があるスケジューラーとの相互運用性を保証します。
set_begin_index
< source >( begin_index: int = 0 )
スケジューラの開始インデックスを設定します。この関数は、推論の前にパイプラインから実行する必要があります。
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Union[list[float], torch.Tensor, NoneType] = None )
拡散チェーンで使用される離散タイムステップを設定します(推論の実行前に実行する必要があります)。
ステップ
< source >( 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
< source >( 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関数の出力用のクラス。