# 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/ru/api/schedulers/overview#diffusers.SchedulerMixin) и [ConfigMixin](/docs/diffusers/main/ru/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`) : Разница логарифмов отношения сигнал/шум.

r (`torch.Tensor`) : Соотношение разностей log-SNR.

alpha_prod_t (`torch.Tensor`) : Кумулятивное произведение альф на текущем шаге.

alpha_prod_t_prev (`torch.Tensor`) : Кумулятивное произведение альф на предыдущем шаге.

alpha_prod_t_back (`torch.Tensor`, *необязательный*) : Кумулятивное произведение альф на шаге времени, предшествующем предыдущему шагу.

**Возвращает:** `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`, *необязательный*) : Кумулятивное произведение альф на шаге времени, предшествующем предыдущему шагу.

**Возвращает:** `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`, *необязательный*) : Устройство, на которое следует переместить шаги. Если `None` (по умолчанию), шаги не перемещаются.

Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).

#### шаг[[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` из обрезанного предсказанного исходного образца. Это необходимо, так как предсказанный исходный образец обрезается до [-1, 1], когда `self.config.clip_sample` равно `True`. Если обрезка не выполнялась, «скорректированный» `model_output` совпадал бы с переданным на вход, и `use_clipped_model_output` не оказывает влияния.

generator (`torch.Generator`, *необязательный*) : генератор случайных чисел.

variance_noise (`torch.Tensor`) : Альтернатива генерации шума с помощью `generator` путём прямого предоставления шума для дисперсии. Полезно для методов, таких как `CycleDiffusion`.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли [DDIMSchedulerOutput](/docs/diffusers/main/ru/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) или `tuple`.

**Возвращает:** [DDIMSchedulerOutput](/docs/diffusers/main/ru/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) или `tuple`

If return_dict is `True`, [DDIMSchedulerOutput](/docs/diffusers/main/ru/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) is returned, otherwise a tuple is returned where the first element is the sample tensor.

Предскажите образец из предыдущего шага времени, обращая SDE. Эта функция распространяет процесс диффузии от выходов обученной модели (чаще всего — предсказанного шума).

