# ScoreSdeVeScheduler

`ScoreSdeVeScheduler` — это планировщик стохастического дифференциального уравнения (SDE) с растущей дисперсией. Он был предложен в статье [Score-Based Generative Modeling through Stochastic Differential Equations](https://huggingface.co/papers/2011.13456) авторов Yang Song, Jascha Sohl-Dickstein, Diederik P. Kingma, Abhishek Kumar, Stefano Ermon, Ben Poole.

Аннотация из статьи:

*Создание шума из данных — задача простая; создание данных из шума — это генеративное моделирование. Мы представляем стохастическое дифференциальное уравнение (SDE), которое плавно преобразует сложное распределение данных в известное априорное распределение, постепенно добавляя шум, и соответствующее SDE в обратном времени, которое преобразует априорное распределение обратно в распределение данных, постепенно удаляя шум. Принципиально важно, что SDE в обратном времени зависит только от поля градиента, зависящего от времени (также называемого score), возмущённого распределения данных. Благодаря достижениям в области генеративного моделирования на основе score мы можем точно оценивать эти score с помощью нейронных сетей и использовать численные решатели SDE для генерации выборок. Мы показываем, что данный фреймворк объединяет предыдущие подходы в генеративном моделировании на основе score и вероятностном диффузионном моделировании, открывая возможности для новых процедур выборки и новых возможностей моделирования. В частности, мы вводим фреймворк «предиктор-корректор» для исправления ошибок в эволюции дискретизированного SDE в обратном времени. Мы также выводим эквивалентное нейронное ОДУ, которое генерирует выборки из того же распределения, что и SDE, но дополнительно позволяет вычислять точную правдоподобность и повышает эффективность выборки. Кроме того, мы предлагаем новый способ решения обратных задач с помощью моделей на основе score, что продемонстрировано в экспериментах по условной генерации классов, восстановлению изображений (inpainting) и колоризации. В сочетании с несколькими архитектурными улучшениями мы достигли рекордных результатов для безусловной генерации изображений на CIFAR-10: Inception score 9.89 и FID 2.20, конкурентоспособная правдоподобность 2.99 бит/измерение, а также впервые продемонстрировали генерацию изображений высокого разрешения 1024 x 1024 с помощью генеративной модели на основе score.*

## ScoreSdeVeScheduler[[diffusers.ScoreSdeVeScheduler]]

#### diffusers.ScoreSdeVeScheduler[[diffusers.ScoreSdeVeScheduler]]

```python
diffusers.ScoreSdeVeScheduler(num_train_timesteps: int = 2000, snr: float = 0.15, sigma_min: float = 0.01, sigma_max: float = 1348.0, sampling_eps: float = 1e-05, correct_steps: int = 1)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L45)

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

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

snr (`float`, по умолчанию 0.15) : Коэффициент, задающий вес шага от выборки `model_output` (из сети) к случайному шуму.

sigma_min (`float`, по умолчанию 0.01) : Начальный масштаб шума для последовательности сигм в процедуре сэмплирования. Минимальное значение сигмы должно отражать распределение данных.

sigma_max (`float`, по умолчанию 1348.0) : Максимальное значение, используемое для диапазона непрерывных временных шагов, передаваемых в модель.

sampling_eps (`float`, по умолчанию 1e-5) : Конечное значение выборки, на котором шаги времени последовательно уменьшаются от 1 до epsilon.

correct_steps (`int`, по умолчанию 1) : Количество шагов коррекции, выполняемых для сгенерированного образца.

`ScoreSdeVeScheduler` — это планировщик стохастического дифференциального уравнения (SDE) с растущей дисперсией.

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

#### add_noise[[diffusers.ScoreSdeVeScheduler.add_noise]]

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

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L300)

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

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

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

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

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

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

Добавляет шум к исходным образцам в соответствии с расписанием шума на указанных временных шагах. Это процесс прямой диффузии.

#### get_adjacent_sigma[[diffusers.ScoreSdeVeScheduler.get_adjacent_sigma]]

```python
get_adjacent_sigma(timesteps: Tensor, t: Tensor)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L156)

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

timesteps (`torch.Tensor`) : Тензор дискретных индексов временных шагов.

t (`torch.Tensor`) : тензор непрерывных значений временных шагов.

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

Значения сигмы для индекса предыдущего (соседнего) шага по времени.

Возвращает значение сигмы, соответствующее индексу предыдущего шага. Если шаг равен нулю (предыдущий шаг отсутствует), возвращает ноль.

#### scale_model_input[[diffusers.ScoreSdeVeScheduler.scale_model_input]]

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

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L88)

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

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

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

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

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

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

#### set_sigmas[[diffusers.ScoreSdeVeScheduler.set_sigmas]]

```python
set_sigmas(num_inference_steps: int, sigma_min: float | None = None, sigma_max: float | None = None, sampling_eps: float | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L124)

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

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

sigma_min (`float`, *optional*) : Начальное значение масштаба шума (перекрывает значение, заданное при создании планировщика).

sigma_max (`float`, *optional*) : Итоговое значение масштаба шума (перекрывает значение, заданное при создании планировщика).

sampling_eps (`float`, *optional*) : Значение последнего шага (переопределяет значение, заданное при инициализации планировщика).

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

#### set_timesteps[[diffusers.ScoreSdeVeScheduler.set_timesteps]]

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

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L105)

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

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

sampling_eps (`float`, *optional*) : Значение последнего шага (переопределяет значение, заданное при инициализации планировщика).

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

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

#### step_correct[[diffusers.ScoreSdeVeScheduler.step_correct]]

```python
step_correct(model_output: Tensor, sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L245)

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

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

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

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

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

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

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

Исправьте предсказанное значение на основе `model_output` сети. Обычно это выполняется многократно после получения предсказания для предыдущего шага.

#### step_pred[[diffusers.ScoreSdeVeScheduler.step_pred]]

```python
step_pred(model_output: Tensor, timestep: int, sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

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

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

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

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

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

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

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

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

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

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

## SdeVeOutput[[diffusers.schedulers.scheduling_sde_ve.SdeVeOutput]]

#### diffusers.schedulers.scheduling_sde_ve.SdeVeOutput[[diffusers.schedulers.scheduling_sde_ve.SdeVeOutput]]

```python
diffusers.schedulers.scheduling_sde_ve.SdeVeOutput(prev_sample: Tensor, prev_sample_mean: Tensor)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L29)

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

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

prev_sample_mean (`torch.Tensor` формы `(batch_size, num_channels, height, width)` для изображений) : Среднее значение `prev_sample` по предыдущим временным шагам.

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

