# DDIMInverseScheduler

`DDIMInverseScheduler` — это инвертированный планировщик из [Denoising Diffusion Implicit Models](https://huggingface.co/papers/2010.02502) (DDIM), предложенный Jiaming Song, Chenlin Meng и Stefano Ermon. Реализация в основном основана на определении инверсии DDIM из работы [Null-text Inversion for Editing Real Images using Guided Diffusion Models](https://huggingface.co/papers/2211.09794).

## DDIMInverseScheduler[[diffusers.DDIMInverseScheduler]]

#### diffusers.DDIMInverseScheduler[[diffusers.DDIMInverseScheduler]]

```python
diffusers.DDIMInverseScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = '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, timestep_spacing: typing.Literal['leading', 'trailing'] = 'leading', rescale_betas_zero_snr: bool = False, **kwargs)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_ddim_inverse.py#L138)

**Параметры:**

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`, произведение предыдущего альфа фиксируется в 0, в противном случае используется значение альфа на шаге `num_train_timesteps - 1`.

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).

timestep_spacing (`str`, по умолчанию `"leading"`) : Способ масштабирования временных шагов. Подробнее см. в таблице 2 статьи [Общие расписания шума диффузии и шаги выборки являются дефектными](https://huggingface.co/papers/2305.08891).

rescale_betas_zero_snr (`bool`, по умолчанию `False`) : Нужно ли перемасштабировать беты для нулевого конечного SNR. Это позволяет модели генерировать очень яркие и тёмные образцы, а не ограничиваться образцами со средней яркостью. Непосредственно связано с [`--offset_noise`](https://github.com/huggingface/diffusers/blob/74fd735eb073eb1d774b1ab4154a0876eb82f055/examples/dreambooth/train_dreambooth.py#L506).

`DDIMInverseScheduler` — это обратный планировщик для [DDIMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/ddim#diffusers.DDIMScheduler).

Эта модель наследуется от [SchedulerMixin](/docs/diffusers/v0.43.0/ru/api/schedulers/overview#diffusers.SchedulerMixin) и [ConfigMixin](/docs/diffusers/v0.43.0/ru/api/configuration#diffusers.ConfigMixin). Общие методы, которые библиотека реализует для всех планировщиков, такие как загрузка и сохранение, описаны в документации суперкласса.

#### scale_model_input[[diffusers.DDIMInverseScheduler.scale_model_input]]

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

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_ddim_inverse.py#L250)

**Параметры:**

sample (`torch.Tensor`) : Входной образец.

timestep (`int`, *необязательный*) : Текущий шаг в цепочке диффузии.

**Возвращает:** `torch.Tensor`

Масштабированный входной образец.

Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.

#### set_timesteps[[diffusers.DDIMInverseScheduler.set_timesteps]]

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

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_ddim_inverse.py#L267)

**Параметры:**

num_inference_steps (`int`) : Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели.

device (`str` или `torch.device`, *необязательный*) : Устройство, на которое следует переместить шаги. Если `None`, шаги не перемещаются.

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

#### шаг[[diffusers.DDIMInverseScheduler.step]]

```python
step(model_output: Tensor, timestep: int, sample: Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_ddim_inverse.py#L311)

**Параметры:**

model_output (`torch.Tensor`) : Прямой вывод из обученной диффузионной модели.

timestep (`int`) : Текущий дискретный шаг времени в цепочке диффузии.

sample (`torch.Tensor`) : Текущая инстанция сэмпла, созданная процессом диффузии.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~schedulers.scheduling_ddim_inverse.DDIMInverseSchedulerOutput` или `tuple`.

**Возвращает:** `~schedulers.scheduling_ddim_inverse.DDIMInverseSchedulerOutput` или `tuple`

Если `True`, возвращается `~schedulers.scheduling_ddim_inverse.DDIMInverseSchedulerOutput`, иначе возвращается кортеж, первым элементом которого является тензор выборки.

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

