# ScoreSdeVeScheduler

`ScoreSdeVeScheduler` é um agendador de equação diferencial estocástica (SDE) com variância explosiva. Foi introduzido no artigo [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 e Ben Poole.

O resumo do artigo é:

*Criar ruído a partir de dados é fácil; criar dados a partir de ruído é modelagem generativa. Apresentamos uma equação diferencial estocástica (SDE) que transforma suavemente uma distribuição de dados complexa em uma distribuição a priori conhecida, injetando lentamente ruído, e uma SDE de tempo reverso correspondente que transforma a distribuição a priori de volta para a distribuição de dados, removendo lentamente o ruído. Crucialmente, a SDE de tempo reverso depende apenas do campo de gradiente dependente do tempo (também conhecido como score) da distribuição de dados perturbada. Aproveitando os avanços na modelagem generativa baseada em score, podemos estimar esses scores com precisão usando redes neurais e usar solucionadores numéricos de SDE para gerar amostras. Mostramos que esse framework encapsula abordagens anteriores em modelagem generativa baseada em score e modelagem probabilística de difusão, permitindo novos procedimentos de amostragem e novas capacidades de modelagem. Em particular, introduzimos um framework preditor-corretor para corrigir erros na evolução da SDE de tempo reverso discretizada. Também derivamos uma ODE neural equivalente que amostra da mesma distribuição que a SDE, mas que adicionalmente permite o cálculo exato de verossimilhança e uma eficiência de amostragem aprimorada. Além disso, fornecemos uma nova maneira de resolver problemas inversos com modelos baseados em score, como demonstrado com experimentos em geração condicional de classe, inpainting de imagem e colorização. Combinado com múltiplas melhorias arquiteturais, alcançamos desempenho recorde para geração incondicional de imagens em CIFAR-10 com um Inception score de 9.89 e FID de 2.20, uma verossimilhança competitiva de 2.99 bits/dim, e demonstramos pela primeira vez a geração de alta fidelidade de imagens de 1024 x 1024 a partir de um modelo generativo baseado em 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)
```

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

**Parâmetros:**

num_train_timesteps (`int`, padrão 2000) : O número de etapas de difusão para treinar o modelo.

snr (`float`, padrão 0.15) : Um coeficiente que pondera o passo da amostra de `model_output` (da rede) para o ruído aleatório.

sigma_min (`float`, padrão 0.01) : A escala de ruído inicial para a sequência de sigma no procedimento de amostragem. O sigma mínimo deve espelhar a distribuição dos dados.

sigma_max (`float`, padrão 1348.0) : O valor máximo usado para o intervalo de timesteps contínuos passados para o modelo.

sampling_eps (`float`, padrão 1e-5) : O valor final da amostragem, onde os timesteps diminuem progressivamente de 1 para epsilon.

correct_steps (`int`, padrão 1) : O número de etapas de correção executadas em uma amostra gerada.

`ScoreSdeVeScheduler` é um agendador de equação diferencial estocástica (SDE) com variância explosiva.

Este modelo herda de [SchedulerMixin](/docs/diffusers/main/pt/api/schedulers/overview#diffusers.SchedulerMixin) e [ConfigMixin](/docs/diffusers/main/pt/api/configuration#diffusers.ConfigMixin). Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os agendadores, como carregamento e salvamento.

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

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

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

**Parâmetros:**

original_samples (`torch.Tensor`) : As amostras originais às quais o ruído será adicionado.

noise (`torch.Tensor`) : O tensor de ruído a ser adicionado às amostras originais.

timesteps (`torch.Tensor`) : Os passos de tempo nos quais adicionar ruído, determinando o nível de ruído a partir da agenda.

**Retorna:** `torch.Tensor`

As amostras ruidosas com ruído adicionado, escalado de acordo com a agenda de passos temporais.

Adicione ruído às amostras originais de acordo com o agendamento de ruído nos timesteps especificados. Este é o processo de difusão direta.

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

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

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

**Parâmetros:**

timesteps (`torch.Tensor`) : O tensor de índices discretos de passo de tempo.

t (`torch.Tensor`) : O tensor dos valores contínuos de timestep.

**Retorna:** `torch.Tensor`

Os valores de sigma para o índice de passo de tempo adjacente (anterior).

Retorna o valor de sigma correspondente ao índice do passo anterior. Quando o passo é zero (sem passo anterior), retorna zero.

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

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

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

**Parâmetros:**

sample (`torch.Tensor`) : A amostra de entrada.

timestep (`int`, *opcional*) : O timestep atual na cadeia de difusão.

**Retorna:** `torch.Tensor`

Uma amostra de entrada escalada.

Garante a intercambiabilidade com agendadores que precisam escalar a entrada do modelo de desruidamento dependendo do passo de tempo atual.

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

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

**Parâmetros:**

num_inference_steps (`int`) : O número de etapas de difusão usadas ao gerar amostras com um modelo pré-treinado.

sigma_min (`float`, *opcional*) : O valor inicial da escala de ruído (sobrepõe o valor fornecido durante a instanciação do agendador).

sigma_max (`float`, *opcional*) : O valor final da escala de ruído (sobrepõe o valor fornecido durante a instanciação do agendador).

sampling_eps (`float`, *opcional*) : O valor final do timestep (sobrepõe o valor fornecido durante a instanciação do scheduler).

Define as escalas de ruído usadas para a cadeia de difusão (a ser executada antes da inferência). Os sigmas controlam o peso dos componentes de `drift` e `diffusion` da atualização da amostra.

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

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

**Parâmetros:**

num_inference_steps (`int`) : O número de etapas de difusão usadas ao gerar amostras com um modelo pré-treinado.

sampling_eps (`float`, *opcional*) : O valor final do timestep (sobrepõe o valor fornecido durante a instanciação do scheduler).

device (`str` ou `torch.device`, *opcional*) : O dispositivo para o qual os timesteps devem ser movidos. Se `None`, os timesteps não são movidos.

Define os passos de tempo contínuos usados para a cadeia de difusão (a ser executado antes da inferência).

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

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

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

**Parâmetros:**

model_output (`torch.Tensor`) : A saída direta do modelo de difusão aprendido.

sample (`torch.Tensor`) : Uma instância atual de uma amostra criada pelo processo de difusão.

generator (`torch.Generator`, *opcional*) : Um gerador de números aleatórios.

return_dict (`bool`, *opcional*, padrão `True`) : Se deve ou não retornar um [SchedulerOutput](/docs/diffusers/main/pt/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) ou `tuple`.

**Retorna:** [SchedulerOutput](/docs/diffusers/main/pt/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) ou `tuple`

Se return_dict for `True`, [SchedulerOutput](/docs/diffusers/main/pt/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) é retornado; caso contrário, uma tupla é retornada, em que o primeiro elemento é o tensor de amostras.

Corrija a amostra prevista com base no `model_output` da rede. Isso é frequentemente executado repetidamente após fazer a previsão para o timestep 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)
```

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

**Parâmetros:**

model_output (`torch.Tensor`) : A saída direta do modelo de difusão aprendido.

timestep (`int`) : O passo de tempo discreto atual na cadeia de difusão.

sample (`torch.Tensor`) : Uma instância atual de uma amostra criada pelo processo de difusão.

generator (`torch.Generator`, *opcional*) : Um gerador de números aleatórios.

return_dict (`bool`, *opcional*, padrão `True`) : Se deve ou não retornar um [SdeVeOutput](/docs/diffusers/main/pt/api/schedulers/score_sde_ve#diffusers.schedulers.scheduling_sde_ve.SdeVeOutput) ou `tuple`.

**Retorna:** [SdeVeOutput](/docs/diffusers/main/pt/api/schedulers/score_sde_ve#diffusers.schedulers.scheduling_sde_ve.SdeVeOutput) ou `tuple`

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

Preveja a amostra do passo de tempo anterior revertendo o SDE. Esta função propaga o processo de difusão a partir das saídas do modelo aprendido (na maioria das vezes, o ruído previsto).

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

[Fonte](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 imagens) : Amostra calculada `(x_{t-1})` do passo anterior. `prev_sample` deve ser usado como entrada do próximo modelo no loop de remoção de ruído.

prev_sample_mean (`torch.Tensor` de forma `(batch_size, num_channels, height, width)` para imagens) : Média de `prev_sample` ao longo dos timesteps anteriores.

Classe de saída para a saída da função `step` do agendador.

