# EDMEulerScheduler

Формулировка Karras для планировщика Euler (алгоритм 2) из статьи [Elucidating the Design Space of Diffusion-Based Generative Models](https://huggingface.co/papers/2206.00364) авторов Karras et al. Это быстрый планировщик, который часто позволяет получать качественные результаты за 20–30 шагов. Планировщик основан на исходной реализации [k-diffusion](https://github.com/crowsonkb/k-diffusion/blob/481677d114f6ea445aa009cf5bd7a9cdee909e47/k_diffusion/sampling.py#L51) от [Katherine Crowson](https://github.com/crowsonkb/).

## EDMEulerScheduler[[diffusers.EDMEulerScheduler]]

#### diffusers.EDMEulerScheduler[[diffusers.EDMEulerScheduler]]

```python
diffusers.EDMEulerScheduler(sigma_min: float = 0.002, sigma_max: float = 80.0, sigma_data: float = 0.5, sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras', num_train_timesteps: int = 1000, prediction_type: typing.Literal['epsilon', 'v_prediction'] = 'epsilon', rho: float = 7.0, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero')
```

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

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

sigma_min (`float`, *optional*, по умолчанию `0.002`) : Минимальная величина шума в расписании сигм. В статье EDM [1] это значение было установлено в 0.002; разумный диапазон — [0, 10].

sigma_max (`float`, *optional*, по умолчанию `80.0`) : Максимальная величина шума в расписании сигм. В статье EDM [1] это значение было установлено в 80.0; разумный диапазон — [0.2, 80.0].

sigma_data (`float`, *необязательный*, по умолчанию `0.5`) : Стандартное отклонение распределения данных. В статье EDM [1] это значение установлено в 0.5.

sigma_schedule (`Literal["karras", "exponential"]`, *optional*, по умолчанию `"karras"`) : Расписание сигм для вычисления `sigmas`. По умолчанию используется расписание, предложенное в статье EDM (https://huggingface.co/papers/2206.00364). Расписание `"exponential"` было добавлено в эту модель: https://huggingface.co/stabilityai/cosxl.

num_train_timesteps (`int`, *необязательный*, по умолчанию `1000`) : Количество шагов диффузии для обучения модели.

prediction_type (`Literal["epsilon", "v_prediction"]`, *необязательный*, по умолчанию `"epsilon"`) : Тип предсказания функции планировщика. `"epsilon"` предсказывает шум диффузионного процесса, а `"v_prediction"` (см. раздел 2.4 статьи [Imagen Video](https://huggingface.co/papers/2210.02303)).

rho (`float`, *optional*, по умолчанию `7.0`) : Параметр rho, используемый для расчёта расписания сигм Karras, который установлен в 7.0 в статье EDM [1].

final_sigmas_type (`Literal["zero", "sigma_min"]`, *необязательный*, по умолчанию `"zero"`) : Значение конечного `sigma` для расписания шума в процессе выборки. Если указано `"sigma_min"`, конечное sigma совпадает с последним sigma в расписании обучения. Если указано `"zero"`, конечное sigma устанавливается в 0.

Реализует планировщик Эйлера в формулировке EDM, представленной в работе Karras et al. 2022 [1].

[1] Karras, Tero, et al. "Elucidating the Design Space of Diffusion-Based Generative Models." https://huggingface.co/papers/2206.00364

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

#### add_noise[[diffusers.EDMEulerScheduler.add_noise]]

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

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

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

original_samples (`torch.Tensor`) : исходные образцы, к которым будет добавлен шум.

noise (`torch.Tensor`) : тензор шума, который нужно добавить к исходным образцам.

timesteps (`torch.Tensor`) : Шаги, на которых добавляется шум, определяющие уровень шума по расписанию.

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

Шумовые образцы с добавленным шумом, масштабированным в соответствии с расписанием шагов времени.

Добавьте шум к исходным образцам в соответствии с расписанием шума на указанных временных шагах.

#### index_for_timestep[[diffusers.EDMEulerScheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[float, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)
```

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

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

timestep (`float` или `torch.Tensor`) : значение шага времени, которое нужно найти в расписании.

schedule_timesteps (`torch.Tensor`, *необязательный*) : Расписание временных шагов, в котором выполняется поиск. Если `None`, используется `self.timesteps`.

**Возвращает:** `int`

Индекс шага времени в расписании. Для самого первого шага возвращает второй индекс, если существует несколько совпадений, чтобы избежать пропуска сигмы при начале с середины расписания (например, для image-to-image).

Найдите индекс заданного шага времени в расписании шагов времени.

#### precondition_inputs[[diffusers.EDMEulerScheduler.precondition_inputs]]

```python
precondition_inputs(sample: Tensor, sigma: typing.Union[float, torch.Tensor])
```

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

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

sample (`torch.Tensor`) : входной тензор образца для предварительной обработки.

sigma (`float` или `torch.Tensor`) : текущее значение сигмы (уровня шума).

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

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

Предварительно обработайте входной образец, масштабируя его в соответствии с формулировкой EDM.

#### precondition_noise[[diffusers.EDMEulerScheduler.precondition_noise]]

```python
precondition_noise(sigma: typing.Union[float, torch.Tensor])
```

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

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

sigma (`float` или `torch.Tensor`) : значение сигмы (уровня шума) для предварительной обработки.

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

Значение предобусловленного шума, вычисленное как `0.25 * log(sigma)`.

Предварительно обработайте уровень шума, применив логарифмическое преобразование.

#### precondition_outputs[[diffusers.EDMEulerScheduler.precondition_outputs]]

```python
precondition_outputs(sample: Tensor, model_output: Tensor, sigma: typing.Union[float, torch.Tensor])
```

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

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

sample (`torch.Tensor`) : Тензор входной выборки.

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

sigma (`float` или `torch.Tensor`) : текущее значение сигмы (уровня шума).

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

Образец после шумоподавления, вычисленный путём объединения skip-соединения и масштабирования вывода.

Предварительно обрабатывайте выходные модели в соответствии с формулировкой EDM.

#### scale_model_input[[diffusers.EDMEulerScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: typing.Union[float, torch.Tensor])
```

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

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

sample (`torch.Tensor`) : Тензор входной выборки.

timestep (`float` или `torch.Tensor`) : Текущий шаг (timestep) в цепочке диффузии.

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

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

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

#### set_begin_index[[diffusers.EDMEulerScheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

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

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

begin_index (`int`, по умолчанию `0`) : Начальный индекс для планировщика.

Устанавливает начальный индекс для планировщика. Эта функция должна выполняться из конвейера перед инференсом.

#### set_timesteps[[diffusers.EDMEulerScheduler.set_timesteps]]

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

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

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

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

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

sigmas (`torch.Tensor | list[float]`, *необязательный*) : Пользовательские сигмы для процесса удаления шума. Если не заданы, будет использоваться поведение по умолчанию при передаче `num_inference_steps`.

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

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

```python
step(model_output: Tensor, timestep: typing.Union[float, torch.Tensor], sample: Tensor, s_churn: float = 0.0, s_tmin: float = 0.0, s_tmax: float = inf, s_noise: float = 1.0, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True, pred_original_sample: typing.Optional[torch.Tensor] = None)
```

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

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

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

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

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

s_churn (`float`, *необязательный*, по умолчанию `0.0`) : Количество стохастичности, добавляемой на каждом шаге. Большие значения добавляют больше шума.

s_tmin (`float`, *необязательный*, по умолчанию `0.0`) : Минимальный порог сигмы, ниже которого шум не добавляется.

s_tmax (`float`, *необязательный*, по умолчанию `float("inf")`) : Максимальный порог сигмы, выше которого шум не добавляется.

s_noise (`float`, *необязательный*, по умолчанию `1.0`) : Коэффициент масштабирования шума, добавляемого к образцу.

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

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли [EDMEulerSchedulerOutput](/docs/diffusers/v0.43.0/ru/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) или кортеж.

pred_original_sample (`torch.Tensor`, *необязательный*) : Предсказанный денойзированный образец из предыдущего шага. Если указан, пересчёт пропускается.

**Возвращает:** [EDMEulerSchedulerOutput](/docs/diffusers/v0.43.0/ru/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) или `tuple`

Если `return_dict` равно `True`, возвращается [EDMEulerSchedulerOutput](/docs/diffusers/v0.43.0/ru/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput), иначе возвращается кортеж, где первый элемент — это тензор предыдущей выборки, а второй — тензор предсказанной исходной выборки.

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

## EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]

#### diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]

```python
diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput(prev_sample: Tensor, pred_original_sample: typing.Optional[torch.Tensor] = None)
```

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

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

prev_sample (`torch.Tensor` формы `(batch_size, num_channels, height, width)` для изображений) : Вычисленная выборка `(x_{t-1})` для предыдущего шага. `prev_sample` следует использовать как следующий вход модели в цикле шумоподавления.

pred_original_sample (`torch.Tensor` формы `(batch_size, num_channels, height, width)` для изображений) : Предсказанный денойзированный образец `(x_{0})` на основе вывода модели из текущего шага. `pred_original_sample` можно использовать для предпросмотра прогресса или для guidance.

Класс результата для вывода функции `step` планировщика.

