# ScoreSdeVeScheduler

`ScoreSdeVeScheduler` es un programador de ecuaciones diferenciales estocásticas (SDE) con varianza creciente. Fue introducido en el artículo [Score-Based Generative Modeling through Stochastic Differential Equations](https://huggingface.co/papers/2011.13456) de Yang Song, Jascha Sohl-Dickstein, Diederik P. Kingma, Abhishek Kumar, Stefano Ermon y Ben Poole.

El resumen del artículo es:

*Crear ruido a partir de datos es fácil; crear datos a partir de ruido es modelado generativo. Presentamos una ecuación diferencial estocástica (SDE) que transforma suavemente una distribución de datos compleja en una distribución previa conocida mediante la inyección lenta de ruido, y una SDE de tiempo inverso correspondiente que transforma la distribución previa de vuelta a la distribución de datos mediante la eliminación lenta del ruido. Crucialmente, la SDE de tiempo inverso depende solo del campo de gradiente dependiente del tiempo (también conocido como score) de la distribución de datos perturbada. Aprovechando los avances en el modelado generativo basado en score, podemos estimar estos scores con precisión mediante redes neuronales y utilizar solucionadores numéricos de SDE para generar muestras. Mostramos que este marco encapsula enfoques anteriores en el modelado generativo basado en score y el modelado probabilístico de difusión, permitiendo nuevos procedimientos de muestreo y nuevas capacidades de modelado. En particular, introducimos un marco predictor-corrección para corregir errores en la evolución de la SDE de tiempo inverso discretizada. También derivamos una ODE neuronal equivalente que muestrea de la misma distribución que la SDE, pero que además permite el cálculo exacto de la verosimilitud y una eficiencia de muestreo mejorada. Además, proporcionamos una nueva forma de resolver problemas inversos con modelos basados en score, como se demuestra con experimentos en generación condicional por clase, inpainting de imágenes y colorización. Combinado con múltiples mejoras arquitectónicas, logramos un rendimiento récord para la generación de imágenes incondicional en CIFAR-10 con un Inception score de 9.89 y un FID de 2.20, una verosimilitud competitiva de 2.99 bits/dim, y demostramos por primera vez la generación de alta fidelidad de imágenes de 1024 x 1024 a partir de un modelo generativo basado en 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)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L45)

**Parámetros:**

num_train_timesteps (`int`, por defecto 2000) : El número de pasos de difusión para entrenar el modelo.

snr (`float`, por defecto 0.15) : Un coeficiente que pondera el paso desde la muestra de `model_output` (de la red) hasta el ruido aleatorio.

sigma_min (`float`, por defecto 0.01) : La escala de ruido inicial para la secuencia de sigma en el procedimiento de muestreo. La sigma mínima debe reflejar la distribución de los datos.

sigma_max (`float`, valor predeterminado 1348.0) : El valor máximo utilizado para el rango de pasos temporales continuos que se pasan al modelo.

sampling_eps (`float`, por defecto 1e-5) : El valor final de la muestreo, donde los pasos de tiempo disminuyen progresivamente de 1 a epsilon.

correct_steps (`int`, por defecto 1) : El número de pasos de corrección realizados en una muestra generada.

`ScoreSdeVeScheduler` es un programador de ecuación diferencial estocástica (SDE) con varianza creciente.

Este modelo hereda de [SchedulerMixin](/docs/diffusers/main/es/api/schedulers/overview#diffusers.SchedulerMixin) y [ConfigMixin](/docs/diffusers/main/es/api/configuration#diffusers.ConfigMixin). Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los programadores, como la carga y el guardado.

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

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

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L300)

**Parámetros:**

original_samples (`torch.Tensor`) : Las muestras originales a las que se les añadirá ruido.

noise (`torch.Tensor`) : El tensor de ruido que se añadirá a las muestras originales.

timesteps (`torch.Tensor`) : Los pasos de tiempo en los que se añade ruido, determinando el nivel de ruido a partir de la programación.

**Devuelve:** `torch.Tensor`

Las muestras ruidosas con ruido añadido escalado según la programación de pasos de tiempo.

Añade ruido a las muestras originales según el programa de ruido en los pasos de tiempo especificados. Este es el proceso de difusión hacia adelante.

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

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

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L156)

**Parámetros:**

timesteps (`torch.Tensor`) : El tensor de índices discretos de pasos de tiempo.

t (`torch.Tensor`) : El tensor de valores de paso de tiempo continuos.

**Devuelve:** `torch.Tensor`

Los valores de sigma para el índice de paso de tiempo adyacente (anterior).

Devuelve el valor de sigma correspondiente al índice del paso anterior. Cuando el paso es cero (no hay paso anterior), devuelve cero.

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

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

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L88)

**Parámetros:**

sample (`torch.Tensor`) : La muestra de entrada.

timestep (`int`, *opcional*) : El paso temporal actual en la cadena de difusión.

**Devuelve:** `torch.Tensor`

Una muestra de entrada escalada.

Garantiza la interoperabilidad con los programadores que necesitan escalar la entrada del modelo de desruido en función del paso temporal actual.

#### 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)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L124)

**Parámetros:**

num_inference_steps (`int`) : El número de pasos de difusión utilizados al generar muestras con un modelo preentrenado.

sigma_min (`float`, *opcional*) : El valor inicial de la escala de ruido (anula el valor dado durante la instanciación del programador).

sigma_max (`float`, *opcional*) : El valor final de la escala de ruido (anula el valor dado durante la instanciación del programador).

sampling_eps (`float`, *opcional*) : El valor final del paso temporal (anula el valor dado durante la instanciación del programador).

Establece las escalas de ruido utilizadas para la cadena de difusión (debe ejecutarse antes de la inferencia). Los sigmas controlan el peso de los componentes de `drift` y `diffusion` de la actualización de la muestra.

#### 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)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L105)

**Parámetros:**

num_inference_steps (`int`) : El número de pasos de difusión utilizados al generar muestras con un modelo preentrenado.

sampling_eps (`float`, *opcional*) : El valor final del paso temporal (anula el valor dado durante la instanciación del programador).

device (`str` o `torch.device`, *opcional*) : El dispositivo al que deben moverse los pasos de tiempo. Si es `None`, los pasos de tiempo no se mueven.

Establece los pasos de tiempo continuo utilizados para la cadena de difusión (para ejecutarse antes de la inferencia).

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

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

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L245)

**Parámetros:**

model_output (`torch.Tensor`) : La salida directa del modelo de difusión aprendido.

sample (`torch.Tensor`) : Una instancia actual de una muestra creada por el proceso de difusión.

generator (`torch.Generator`, *opcional*) : Un generador de números aleatorios.

return_dict (`bool`, *opcional*, valor predeterminado `True`) : Si se devuelve un [SchedulerOutput](/docs/diffusers/main/es/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) o una `tuple`.

**Devuelve:** [SchedulerOutput](/docs/diffusers/main/es/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) o `tuple`

If return_dict es `True`, se devuelve [SchedulerOutput](/docs/diffusers/main/es/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput); en caso contrario, se devuelve una tupla cuyo primer elemento es el tensor de muestras.

Corrige la muestra predicha en función de `model_output` de la red. Esto se suele ejecutar repetidamente después de realizar la predicción para el paso de tiempo anterior.

#### 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)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L177)

**Parámetros:**

model_output (`torch.Tensor`) : La salida directa del modelo de difusión aprendido.

timestep (`int`) : El paso de tiempo discreto actual en la cadena de difusión.

sample (`torch.Tensor`) : Una instancia actual de una muestra creada por el proceso de difusión.

generator (`torch.Generator`, *opcional*) : Un generador de números aleatorios.

return_dict (`bool`, *opcional*, valor predeterminado `True`) : Indica si se debe devolver un [SdeVeOutput](/docs/diffusers/main/es/api/schedulers/score_sde_ve#diffusers.schedulers.scheduling_sde_ve.SdeVeOutput) o una `tuple`.

**Devuelve:** [SdeVeOutput](/docs/diffusers/main/es/api/schedulers/score_sde_ve#diffusers.schedulers.scheduling_sde_ve.SdeVeOutput) o `tuple`

If return_dict is `True`, [SdeVeOutput](/docs/diffusers/main/es/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.

Predice la muestra del paso de tiempo anterior invirtiendo el SDE. Esta función propaga el proceso de difusión desde las salidas del modelo aprendido (con mayor frecuencia, el ruido predicho).

## 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)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_sde_ve.py#L29)

**Parámetros:**

prev_sample (`torch.Tensor` de forma `(batch_size, num_channels, height, width)` para imágenes) : Muestra `(x_{t-1})` calculada del paso de tiempo anterior. `prev_sample` debe usarse como entrada del modelo en la siguiente iteración del bucle de desruido.

prev_sample_mean (`torch.Tensor` de forma `(batch_size, num_channels, height, width)` para imágenes) : Media de `prev_sample` promediada sobre los pasos de tiempo anteriores.

Clase de salida para la salida de la función `step` del programador.

