Diffusers documentation
CMStochasticIterativeScheduler
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
< source >( 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
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
指定されたタイムステップにおけるノイズスケジュールに従って、元のサンプルにノイズを追加します。
get_scalings
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
Consistency modelの出力に対するスケーリング係数を計算します。
get_scalings_for_boundary_condition
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
論文の付録Cから、境界条件を強制するためにconsistency modelのパラメータ化で使用されるスケーリングを取得します。
>
c_skipとc_outの数式におけるepsilonはsigma_minに設定されています。
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
与えられたタイムステップのタイムステップスケジュールにおけるインデックスを特定します。
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
(sigma**2 + sigma_data**2) ** 0.5 によって、consistency model の入力をスケーリングします。
set_begin_index
< source >( begin_index: int = 0 )
スケジューラの開始インデックスを設定します。この関数は、推論の前にパイプラインから実行する必要があります。
set_timesteps
< source >( 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
< source >( sigmas: float | numpy.ndarray ) → np.ndarray
Karrasシグマから、consistency modelへの入力としてスケーリングされたタイムステップを取得します。
ステップ
< source >( 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
< source >( prev_sample: Tensor )
スケジューラーのstep関数の出力クラス。