# CogVideoXDPMScheduler

`CogVideoXDPMScheduler` は、[DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps](https://huggingface.co/papers/2206.00927) および [DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models](https://huggingface.co/papers/2211.01095) に基づいており、CogVideoX モデル向けに特化しています。

## CogVideoXDPMScheduler[[diffusers.CogVideoXDPMScheduler]]

#### diffusers.CogVideoXDPMScheduler[[diffusers.CogVideoXDPMScheduler]]

```python
diffusers.CogVideoXDPMScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.00085, beta_end: float = 0.012, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'scaled_linear', trained_betas: numpy.ndarray | list[float] | None = None, clip_sample: bool = True, set_alpha_to_one: bool = True, steps_offset: int = 0, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon', clip_sample_range: float = 1.0, sample_max_value: float = 1.0, timestep_spacing: typing.Literal['leading', 'linspace', 'trailing'] = 'leading', rescale_betas_zero_snr: bool = False, snr_shift_scale: float = 3.0)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L134)

**パラメータ:**

num_train_timesteps (`int`、デフォルトは 1000) : モデルを学習するための拡散ステップ数。

beta_start (`float`、デフォルト値は 0.0001) : 推論の初期 `beta` 値。

beta_end (`float`、デフォルト値は 0.02) : 最終的な `beta` 値。

beta_schedule (`str`、デフォルトは`"linear"`) : ベータスケジュール。ベータの範囲から、モデルのステップ処理に使用するベータのシーケンスへのマッピングです。`linear`、`scaled_linear`、または`squaredcos_cap_v2`から選択します。

trained_betas (`np.ndarray`、*任意*) : `beta_start` と `beta_end` をバイパスして、ベータの配列を直接コンストラクタに渡す。

clip_sample (`bool`、デフォルトは`True`) : 数値の安定性を確保するために、予測サンプルをクリップします。

clip_sample_range (`float`、デフォルト値は 1.0) : サンプルクリッピングの最大振幅。`clip_sample=True` の場合のみ有効です。

set_alpha_to_one (`bool`、デフォルトは`True`) : 各拡散ステップでは、そのステップと直前のステップのアルファの積の値が使用されます。最終ステップには直前のアルファが存在しません。このオプションが`True`の場合、直前のアルファの積は`1`に固定され、それ以外の場合はステップ0のアルファの値が使用されます。

steps_offset (`int`、デフォルトは 0) : 一部のモデルファミリーで必要とされる、推論ステップに追加されるオフセットです。

prediction_type (`str`, 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`) or `v_prediction` (see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper).

thresholding (`bool`、デフォルトは`False`) : 「動的閾値処理」メソッドを使用するかどうか。Stable Diffusion などの潜在空間拡散モデルには適していません。

dynamic_thresholding_ratio (`float`、デフォルト値は 0.995) : 動的閾値化手法における比率。`thresholding=True` の場合のみ有効です。

sample_max_value (`float`、デフォルト値は 1.0) : 動的閾値処理の閾値。`thresholding=True` の場合のみ有効です。

timestep_spacing (`str`, defaults to `"leading"`) : The way the timesteps should be scaled. Refer to Table 2 of the [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) for more information. Choose from `leading`, `linspace` or `trailing`.

rescale_betas_zero_snr (`bool`、デフォルトは`False`) : ベータを再スケーリングして、終端SNRをゼロにするかどうか。これにより、モデルは中間の明るさに限定されず、非常に明るく暗いサンプルを生成できるようになります。[`--offset_noise`](https://github.com/huggingface/diffusers/blob/74fd735eb073eb1d774b1ab4154a0876eb82f055/examples/dreambooth/train_dreambooth.py#L506)とゆるく関連しています。

snr_shift_scale (`float`、デフォルト値は 3.0) : SNR のシフトスケール。

`DDIMScheduler` は、デノイジング拡散確率モデル（DDPM）で導入されたデノイジング手順を、非マルコフ的ガイダンスによって拡張します。

このモデルは [SchedulerMixin](/docs/diffusers/main/ja/api/schedulers/overview#diffusers.SchedulerMixin) と [ConfigMixin](/docs/diffusers/main/ja/api/configuration#diffusers.ConfigMixin) を継承しています。読み込みや保存など、ライブラリがすべてのスケジューラに対して実装している汎用的なメソッドについては、スーパークラスのドキュメントを参照してください。

#### add_noise[[diffusers.CogVideoXDPMScheduler.add_noise]]

```python
add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L522)

**パラメータ:**

original_samples (`torch.Tensor`) : ノイズが加えられる元のサンプル。

noise (`torch.Tensor`) : サンプルに追加するノイズ。

timesteps (`torch.IntTensor`) : 各サンプルのノイズレベルを示すタイムステップ。

**戻り値:** `torch.Tensor`

ノイズ付きサンプル。

各タイムステップにおけるノイズの大きさに従って、元のサンプルにノイズを追加します（これはフォワード拡散プロセスです）。

#### get_mult[[diffusers.CogVideoXDPMScheduler.get_mult]]

```python
get_mult(h: Tensor, r: Tensor, alpha_prod_t: Tensor, alpha_prod_t_prev: Tensor, alpha_prod_t_back: typing.Optional[torch.Tensor] = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L364)

**パラメータ:**

h (`torch.Tensor`) : log-SNR の差。

r (`torch.Tensor`) : log-SNR の差の比率。

alpha_prod_t (`torch.Tensor`) : 現在のタイムステップにおけるアルファの累積積。

alpha_prod_t_prev (`torch.Tensor`) : 前回のタイムステップにおけるアルファの累積積。

alpha_prod_t_back (`torch.Tensor`, *任意*) : 1ステップ前のタイムステップにおけるアルファの累積積。

**戻り値:** `tuple`

乗数を含むタプル。

前のサンプルと予測された元のサンプルの乗数を計算します。

#### get_variables[[diffusers.CogVideoXDPMScheduler.get_variables]]

```python
get_variables(alpha_prod_t: Tensor, alpha_prod_t_prev: Tensor, alpha_prod_t_back: typing.Optional[torch.Tensor] = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L331)

**パラメータ:**

alpha_prod_t (`torch.Tensor`) : 現在のタイムステップにおけるアルファの累積積。

alpha_prod_t_prev (`torch.Tensor`) : 前回のタイムステップにおけるアルファの累積積。

alpha_prod_t_back (`torch.Tensor`, *任意*) : 1ステップ前のタイムステップにおけるアルファの累積積。

**戻り値:** `tuple`

変数 `h`、`r`、`lamb`、`lamb_next` を含むタプル。

元の実装を参照しながら、DPM-Solver++ (2M) で使用される変数を計算します。

#### get_velocity[[diffusers.CogVideoXDPMScheduler.get_velocity]]

```python
get_velocity(sample: Tensor, noise: Tensor, timesteps: IntTensor)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L565)

**パラメータ:**

sample (`torch.Tensor`) : 入力サンプル。

noise (`torch.Tensor`) : ノイズのテンソル。

timesteps (`torch.IntTensor`) : 速度計算用のタイムステップ。

**戻り値:** `torch.Tensor`

計算された速度。

速度の式に従って、サンプルとノイズから速度予測を計算します。

#### scale_model_input[[diffusers.CogVideoXDPMScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: int | None = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L262)

**パラメータ:**

sample (`torch.Tensor`) : 入力サンプル。

timestep (`int`, *任意*) : 拡散チェーンにおける現在のタイムステップ。

**戻り値:** `torch.Tensor`

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

現在のタイムステップに応じて、デノイジングモデルの入力をスケーリングする必要があるスケジューラとの相互運用性を保証します。

#### set_timesteps[[diffusers.CogVideoXDPMScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device, NoneType] = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L279)

**パラメータ:**

num_inference_steps (`int`) : 事前学習済みモデルでサンプルを生成する際に使用される拡散ステップの数。

device (`str` または `torch.device`、*任意*) : timesteps を移動先とするデバイスです。`None`（デフォルト）の場合、timesteps は移動されません。

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

#### ステップ[[diffusers.CogVideoXDPMScheduler.step]]

```python
step(model_output: Tensor, old_pred_original_sample: Tensor, timestep: int, timestep_back: int, sample: Tensor, eta: float = 0.0, use_clipped_model_output: bool = False, generator: typing.Optional[torch.Generator] = None, variance_noise: typing.Optional[torch.Tensor] = None, return_dict: bool = False)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_dpm_cogvideox.py#L401)

**パラメータ:**

model_output (`torch.Tensor`) : 学習済み拡散モデルからの直接の出力です。

old_pred_original_sample (`torch.Tensor`) : 前のタイムステップからの予測された元のサンプル。

timestep (`int`) : 拡散チェーンにおける現在の離散タイムステップ。

timestep_back (`int`) : 遡るタイムステップ。

sample (`torch.Tensor`) : 拡散プロセスによって生成されたサンプルの現在のインスタンス。

eta (`float`) : 拡散ステップで追加されるノイズの重み。

use_clipped_model_output (`bool`、デフォルトは`False`) : `True`の場合、クリップされた予測元のサンプルから「補正済み」の`model_output`を計算します。`self.config.clip_sample`が`True`の場合、予測元のサンプルは[-1, 1]にクリップされるため、この処理が必要です。クリップが行われていない場合、「補正済み」の`model_output`は入力として提供されたものと同じになり、`use_clipped_model_output`は影響しません。

generator (`torch.Generator`, *任意*) : 乱数生成器。

variance_noise (`torch.Tensor`) : `generator` を使用してノイズを生成する代わりに、分散自体のノイズを直接指定するための代替手段です。`CycleDiffusion` のような手法に有用です。

return_dict (`bool`, *任意*, デフォルトは `True`) : [DDIMSchedulerOutput](/docs/diffusers/main/ja/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) を返すか、`tuple` を返すかを指定します。

**戻り値:** [DDIMSchedulerOutput](/docs/diffusers/main/ja/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) または `tuple`

`True` の場合、[DDIMSchedulerOutput](/docs/diffusers/main/ja/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) が返され、それ以外の場合は、最初の要素がサンプルテンソルであるタプルが返されます。

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

