Diffusers documentation

CMStochasticIterativeScheduler

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

CMStochasticIterativeScheduler

Yang Song、Prafulla Dhariwal、Mark Chen、Ilya Sutskever による Consistency Models は、1 ステップまたは少数のステップで良好なサンプルを生成できるマルチステップおよびワンステップのスケジューラ(アルゴリズム 1)を導入しました。

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

Diffusionモデルは画像・音声・動画生成の分野を大きく前進させましたが、反復的なサンプリングプロセスに依存しているため、生成が遅いという課題があります。この制約を克服するために、ノイズをデータへ直接マッピングすることで高品質なサンプルを生成する新しいモデルファミリーであるconsistencyモデルを提案します。consistencyモデルは設計上、1ステップでの高速生成をサポートしつつ、計算量とサンプル品質のトレードオフを可能にするマルチステップサンプリングにも対応します。また、これらのタスクに対する明示的なトレーニングを必要とせずに、画像インペインティング、カラー化、スーパーリゾリューションなどのゼロショットデータ編集にも対応します。consistencyモデルは、事前学習済みDiffusionモデルからの蒸留によって学習することも、完全に独立した生成モデルとして学習することも可能です。広範な実験を通じて、1ステップおよび少数ステップのサンプリングにおいて、既存のDiffusionモデル向け蒸留手法を上回ることを示しました。1ステップ生成において、CIFAR-10でFID 3.55、ImageNet 64x64で6.20という新たなSOTAを達成しています。独立して学習された場合、consistencyモデルは、CIFAR-10、ImageNet 64x64、LSUN 256x256といった標準ベンチマークにおいて、既存の1ステップ・非敵対的生成モデルを上回る性能を発揮する、新しい生成モデルファミリーとなります。

元のコードベースはopenai/consistency_modelsで確認できます。

CMStochasticIterativeScheduler

class diffusers.CMStochasticIterativeScheduler

< >

( num_train_timesteps: int = 40sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5s_noise: float = 1.0rho: float = 7.0clip_denoised: bool = True )

パラメータ

  • num_train_timesteps (int, デフォルト値: 40) — モデルを学習するための拡散ステップ数。
  • sigma_min (float、デフォルト値: 0.002) — sigma スケジュールにおける最小ノイズの大きさ。元の実装から引き継がれており、デフォルト値は 0.002 です。
  • sigma_max (float、デフォルト値: 80.0) — sigma スケジュールにおけるノイズの最大振幅です。元の実装から引き継がれており、デフォルト値は 80.0 です。
  • sigma_data (float、デフォルト値: 0.5) — EDM 論文におけるデータ分布の標準偏差です。元の実装から引き継いで、デフォルト値は 0.5 です。
  • s_noise (float、デフォルト値: 1.0) — サンプリング中の詳細の劣化を補うために追加するノイズの量です。適切な範囲は [1.000, 1.011] です。元の実装ではデフォルト値は 1.0 です。
  • rho (float、デフォルト値: 7.0) — EDMの 論文 から Karras sigma スケジュールを計算するためのパラメータです。元の実装から 7.0 がデフォルト値として採用されています。
  • clip_denoised (bool、デフォルトはTrue) — デノイズされた出力を(-1, 1)にクリップするかどうか。
  • timesteps (list または np.ndarray または torch.Tensor、省略可能) — 任意で指定できる明示的なタイムステップスケジュールです。タイムステップは昇順であることが期待されます。

Consistencyモデルにおけるマルチステップサンプリングとワンステップサンプリング。

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

add_noise

< >

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

パラメータ

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

戻り値

torch.Tensor

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

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

get_scalings

< >

( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]

パラメータ

  • sigma (torch.Tensor) — ノイズスケジュールにおける現在の sigma 値。

戻り値

tuple[torch.Tensor, torch.Tensor]

c_skip(入力サンプルのスケーリング)とc_out(モデル出力のスケーリング)を含むタプル。

Consistency modelの出力に対するスケーリング係数を計算します。

get_scalings_for_boundary_condition

< >

( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]

パラメータ

  • sigma (torch.Tensor) — Karras sigma スケジュールにおける現在の sigma。

戻り値

tuple[torch.Tensor, torch.Tensor]

c_skip(現在のサンプルの重み)が最初の要素、c_out(consistency model の出力の重み)が2番目の要素である、2要素のタプルです。

論文の付録Cから、境界条件を強制するためにconsistency modelのパラメータ化で使用されるスケーリングを取得します。

> c_skip と c_out の数式における epsilon は sigma_min に設定されています。

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番目のインデックスを返します。

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

scale_model_input

< >

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

パラメータ

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

戻り値

torch.Tensor

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

(sigma**2 + sigma_data**2) ** 0.5 によって、consistency model の入力をスケーリングします。

set_begin_index

< >

( begin_index: int = 0 )

パラメータ

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

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

set_timesteps

< >

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

パラメータ

  • num_inference_steps (int, 任意) — 事前学習済みモデルでサンプルを生成する際に使用する拡散ステップ数です。
  • device (str または torch.device、省略可) — timesteps を移動先とするデバイスです。None の場合、timesteps は移動されません。
  • timesteps (list[int]、任意) — timesteps 間の任意の間隔をサポートするために使用されるカスタムな timesteps。None の場合、timesteps 間の等間隔というデフォルトの timesteps 間隔戦略が使用されます。timesteps が渡された場合、num_inference_steps は None でなければなりません。

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

sigma_to_t

< >

( sigmas: float | numpy.ndarray ) → np.ndarray

パラメータ

  • sigmas (float または np.ndarray) — 単一の Karras sigma または Karras sigma の配列。

戻り値

np.ndarray

スケーリングされた入力タイムステップ配列。

Karrasシグマから、consistency modelへの入力としてスケーリングされたタイムステップを取得します。

ステップ

< >

( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → CMStochasticIterativeSchedulerOutput or tuple

パラメータ

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

戻り値

CMStochasticIterativeSchedulerOutput または tuple

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

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

CMStochasticIterativeSchedulerOutput

class diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput

< >

( prev_sample: Tensor )

パラメータ

  • prev_sample(画像の場合、torch.Tensor、形状 (batch_size, num_channels, height, width)) — 前のタイムステップの計算済みサンプル (x_{t-1})。prev_sample は、デノイジングループにおける次のモデル入力として使用します。

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

Update on GitHub