Buckets:
| # DDIMScheduler | |
| [Denoising Diffusion Implicit Models](https://huggingface.co/papers/2010.02502) (DDIM), de Jiaming Song, Chenlin Meng e Stefano Ermon. | |
| O resumo do artigo é: | |
| *Os modelos probabilísticos de difusão de desruidamento (DDPMs) alcançaram a geração de imagens de alta qualidade sem treinamento adversarial, mas exigem a simulação de uma cadeia de Markov por muitas etapas para produzir uma amostra. Para acelerar a amostragem, apresentamos os modelos implícitos de difusão de desruidamento (DDIMs), uma classe mais eficiente de modelos probabilísticos iterativos implícitos com o mesmo procedimento de treinamento que os DDPMs. Nos DDPMs, o processo generativo é definido como o inverso de um processo de difusão markoviano. Construímos uma classe de processos de difusão não markovianos que levam ao mesmo objetivo de treinamento, mas cujo processo inverso pode ser muito mais rápido para amostrar. Demonstramos empiricamente que os DDIMs podem produzir amostras de alta qualidade de 10× a 50× mais rápido em termos de tempo real em comparação com os DDPMs, permitem-nos equilibrar o custo computacional pela qualidade da amostra e podem realizar interpolação de imagens semanticamente significativa diretamente no espaço latente.* | |
| O código original deste artigo pode ser encontrado em [ermongroup/ddim](https://github.com/ermongroup/ddim), e você pode entrar em contato com o autor em [tsong.me](https://tsong.me/). | |
| ## Dicas | |
| O artigo [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) afirma que uma incompatibilidade entre as configurações de treinamento e de inferência leva a resultados subótimos na geração de inferência para o Stable Diffusion. Para corrigir isso, os autores propõem: | |
| > [!WARNING] | |
| > 🧪 Este é um recurso experimental! | |
| 1. reescalar o agendamento de ruído para impor uma razão sinal-ruído (SNR) terminal zero | |
| ```py | |
| pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, rescale_betas_zero_snr=True) | |
| ``` | |
| 2. treinar um modelo com `v_prediction` (adicione o seguinte argumento aos scripts [train_text_to_image.py](https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image.py) ou [train_text_to_image_lora.py](https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image_lora.py)) | |
| ```bash | |
| --prediction_type="v_prediction" | |
| ``` | |
| 3. altere o sampler para sempre começar do último timestep | |
| ```py | |
| pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing") | |
| ``` | |
| 4. reescalar a orientação sem classificador para evitar superexposição | |
| ```py | |
| image = pipe(prompt, guidance_rescale=0.7).images[0] | |
| ``` | |
| Por exemplo: | |
| ```py | |
| from diffusers import DiffusionPipeline, DDIMScheduler | |
| import torch | |
| pipe = DiffusionPipeline.from_pretrained("ptx0/pseudo-journey-v2", dtype=torch.float16) | |
| pipe.scheduler = DDIMScheduler.from_config( | |
| pipe.scheduler.config, rescale_betas_zero_snr=True, timestep_spacing="trailing" | |
| ) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k" | |
| image = pipe(prompt, guidance_rescale=0.7).images[0] | |
| image | |
| ``` | |
| ## DDIMScheduler[[diffusers.DDIMScheduler]] | |
| #### diffusers.DDIMScheduler[[diffusers.DDIMScheduler]] | |
| ```python | |
| diffusers.DDIMScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: str = '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', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, clip_sample_range: float = 1.0, sample_max_value: float = 1.0, timestep_spacing: typing.Literal['leading', 'trailing', 'linspace'] = 'leading', rescale_betas_zero_snr: bool = False) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L139) | |
| **Parâmetros:** | |
| num_train_timesteps (`int`, padrão 1000) : O número de etapas de difusão para treinar o modelo. | |
| beta_start (`float`, padrão 0.0001) : O valor inicial de `beta` para a inferência. | |
| beta_end (`float`, padrão 0.02) : O valor final de `beta`. | |
| beta_schedule (`Literal["linear", "scaled_linear", "squaredcos_cap_v2"]`, padrão `"linear"`) : O agendamento de beta, um mapeamento de um intervalo de beta para uma sequência de betas para o avanço do modelo. Deve ser um de `"linear"`, `"scaled_linear"` ou `"squaredcos_cap_v2"`. | |
| trained_betas (`np.ndarray`, *opcional*) : Passe um array de betas diretamente para o construtor para ignorar `beta_start` e `beta_end`. | |
| clip_sample (`bool`, padrão `True`) : Recorta a amostra prevista para estabilidade numérica. | |
| clip_sample_range (`float`, padrão 1.0) : A magnitude máxima para o recorte de amostras. Válido apenas quando `clip_sample=True`. | |
| set_alpha_to_one (`bool`, padrão `True`) : Cada etapa de difusão usa o valor do produto de alfas nessa etapa e na etapa anterior. Para a etapa final, não há um alfa anterior. Quando esta opção é `True`, o produto de alfas anterior é fixado em `1`; caso contrário, é usado o valor de alfa da etapa 0. | |
| steps_offset (`int`, padrão 0) : Um deslocamento adicionado às etapas de inferência, conforme exigido por algumas famílias de modelos. | |
| prediction_type (`Literal["epsilon", "sample", "v_prediction"]`, padrão `"epsilon"`) : Tipo de previsão da função do agendador. Deve ser um dos seguintes: `"epsilon"` (prevê o ruído do processo de difusão), `"sample"` (prevê diretamente a amostra com ruído) ou `"v_prediction"` (veja a seção 2.4 do paper [Imagen Video](https://huggingface.co/papers/2210.02303)). | |
| thresholding (`bool`, padrão `False`) : Se deve usar o método de "limiar dinâmico". Isso não é adequado para modelos de difusão em espaço latente, como o Stable Diffusion. | |
| dynamic_thresholding_ratio (`float`, padrão 0.995) : A proporção para o método de limiar dinâmico. Válido apenas quando `thresholding=True`. | |
| sample_max_value (`float`, padrão 1.0) : O valor de limiar para o limiar dinâmico. Válido apenas quando `thresholding=True`. | |
| timestep_spacing (`Literal["leading", "trailing", "linspace"]`, padrão `"leading"`) : A forma como os timesteps devem ser escalados. Deve ser um dos valores `"leading"`, `"trailing"` ou `"linspace"`. Consulte a Tabela 2 do artigo [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) para mais informações. | |
| rescale_betas_zero_snr (`bool`, padrão `False`) : Se deve reescalar os betas para ter SNR terminal zero. Isso permite que o modelo gere amostras muito claras e escuras, em vez de limitá-lo a amostras com brilho médio. Relacionado de forma solta a [`--offset_noise`](https://github.com/huggingface/diffusers/blob/74fd735eb073eb1d774b1ab4154a0876eb82f055/examples/dreambooth/train_dreambooth.py#L506). | |
| `DDIMScheduler` estende o procedimento de remoção de ruído introduzido nos modelos probabilísticos de difusão de desruído (DDPMs) com orientação não markoviana. | |
| 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.DDIMScheduler.add_noise]] | |
| ```python | |
| add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L517) | |
| **Parâmetros:** | |
| original_samples (`torch.Tensor`) : As amostras originais às quais o ruído será adicionado. | |
| noise (`torch.Tensor`) : O ruído a ser adicionado às amostras. | |
| timesteps (`torch.IntTensor`) : Os timesteps que indicam o nível de ruído para cada amostra. | |
| **Retorna:** `torch.Tensor` | |
| As amostras ruidosas. | |
| Adicione ruído às amostras originais de acordo com a magnitude do ruído em cada timestep (este é o processo de difusão direta). | |
| #### get_velocity[[diffusers.DDIMScheduler.get_velocity]] | |
| ```python | |
| get_velocity(sample: Tensor, noise: Tensor, timesteps: IntTensor) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L560) | |
| **Parâmetros:** | |
| sample (`torch.Tensor`) : A amostra de entrada. | |
| noise (`torch.Tensor`) : O tensor de ruído. | |
| timesteps (`torch.IntTensor`) : Os passos de tempo para o cálculo da velocidade. | |
| **Retorna:** `torch.Tensor` | |
| A velocidade calculada. | |
| Calcule a previsão de velocidade a partir da amostra e do ruído de acordo com a fórmula de velocidade. | |
| #### scale_model_input[[diffusers.DDIMScheduler.scale_model_input]] | |
| ```python | |
| scale_model_input(sample: Tensor, timestep: int = None) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L245) | |
| **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_timesteps[[diffusers.DDIMScheduler.set_timesteps]] | |
| ```python | |
| set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device] = None) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L334) | |
| **Parâmetros:** | |
| num_inference_steps (`int`) : O número de etapas de difusão usadas ao gerar amostras com um modelo pré-treinado. | |
| device (`str | torch.device`, *opcional*) : O dispositivo a ser usado para os timesteps. | |
| **Exceções:** ``ValueError`` | |
| - ``ValueError`` -- Se `num_inference_steps` for maior que `self.config.num_train_timesteps`. | |
| Define os passos discretos usados para a cadeia de difusão (a ser executado antes da inferência). | |
| #### etapa[[diffusers.DDIMScheduler.step]] | |
| ```python | |
| step(model_output: Tensor, timestep: int, sample: Tensor, eta: float = 0.0, use_clipped_model_output: bool = False, generator: typing.Optional[torch.Generator] = None, variance_noise: typing.Optional[torch.Tensor] = None, return_dict: bool = True) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L384) | |
| **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. | |
| eta (`float`, *opcional*, padrão 0.0) : O peso do ruído para o ruído adicionado na etapa de difusão. Um valor de 0 corresponde a DDIM (determinístico) e 1 corresponde a DDPM (totalmente estocástico). | |
| use_clipped_model_output (`bool`, *opcional*, padrão `False`) : Se `True`, calcula o `model_output` "corrigido" a partir da amostra original prevista recortada. Necessário porque a amostra original prevista é recortada para [-1, 1] quando `self.config.clip_sample` é `True`. Se nenhum recorte tiver ocorrido, o `model_output` "corrigido" coincidiria com o fornecido como entrada e `use_clipped_model_output` não teria efeito. | |
| generator (`torch.Generator`, *opcional*) : Um gerador de números aleatórios para amostragem reprodutível. | |
| variance_noise (`torch.Tensor`, *opcional*) : Alternativa para gerar ruído com `generator` fornecendo diretamente o ruído para a variância em si. Útil para métodos como `CycleDiffusion`. | |
| return_dict (`bool`, *opcional*, padrão `True`) : Se deve ou não retornar um [DDIMSchedulerOutput](/docs/diffusers/main/pt/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) ou `tuple`. | |
| **Retorna:** [DDIMSchedulerOutput](/docs/diffusers/main/pt/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) ou `tuple` | |
| If return_dict is `True`, [DDIMSchedulerOutput](/docs/diffusers/main/pt/api/schedulers/ddim#diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput) 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). | |
| ## DDIMSchedulerOutput[[diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput]] | |
| #### diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput[[diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput]] | |
| ```python | |
| diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput(prev_sample: Tensor, pred_original_sample: typing.Optional[torch.Tensor] = None) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L33) | |
| **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. | |
| pred_original_sample (`torch.Tensor` de forma `(batch_size, num_channels, height, width)` para imagens) : A amostra desrujida prevista `(x_{0})` com base na saída do modelo do timestep atual. `pred_original_sample` pode ser usado para visualizar o progresso ou para orientação. | |
| Classe de saída para a saída da função `step` do agendador. | |
Xet Storage Details
- Size:
- 13.7 kB
- Xet hash:
- b5c1714a41f822bf469fc3d0db9829902e77df3637c607dcd7f89f7b2b3dc2a7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.