Diffusers documentation
DDIM
DDIM
Denoising Diffusion Implicit Models (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 pode ser encontrado em ermongroup/ddim.
DDIMPipeline
classe diffusers.DDIMPipeline
< source >( unet: UNet2DModelscheduler: DDIMScheduler )
Parâmetros
- unet (UNet2DModel) —
Um
UNet2DModelpara remover o ruído dos latentes da imagem codificada. - scheduler (SchedulerMixin) —
Um scheduler a ser usado em combinação com
unetpara desruidar a imagem codificada. Pode ser um de DDPMScheduler ou DDIMScheduler.
Pipeline para geração de imagens.
Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os pipelines (download, salvamento, execução em um dispositivo específico, etc.).
__call__
< source >( batch_size: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneeta: float = 0.0num_inference_steps: int = 50use_clipped_model_output: bool | None = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
Parâmetros
- batch_size (
int, opcional, padrão 1) — O número de imagens a serem geradas. - generator (
torch.Generator, opcional) — Umtorch.Generatorpara tornar a geração determinística. - eta (
float, opcional, padrão 0.0) — Corresponde ao parâmetro eta (η) do paper DDIM. Aplica-se apenas ao DDIMScheduler e é ignorado em outros schedulers. Um valor de0corresponde a DDIM e1corresponde a DDPM. - num_inference_steps (
int, opcional, padrão 50) — O número de etapas de desruidamento. Mais etapas de desruidamento geralmente resultam em uma imagem de maior qualidade, à custa de uma inferência mais lenta. - use_clipped_model_output (
bool, opcional, padrãoNone) — SeTrueouFalse, consulte a documentação de DDIMScheduler.step(). SeNone, nada é passado para o scheduler a jusante (useNonepara schedulers que não suportam este argumento). - output_type (
str, opcional, padrão"pil") — O formato de saída da imagem gerada. Escolha entre"pil"(PIL.Image),"np"(np.array) ou"pt"(torch.Tensor). - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um ImagePipelineOutput em vez de uma tupla simples.
Retorna
ImagePipelineOutput ou tuple
Se return_dict for True, ImagePipelineOutput é retornado; caso contrário, uma tuple é retornada, onde o primeiro elemento é uma lista com as imagens geradas
A função de chamada do pipeline para geração.
Exemplo:
>>> from diffusers import DDIMPipeline
>>> import PIL.Image
>>> import numpy as np
>>> # load model and scheduler
>>> pipe = DDIMPipeline.from_pretrained("fusing/ddim-lsun-bedroom")
>>> # run pipeline in inference (sample random noise and denoise)
>>> image = pipe(eta=0.0, num_inference_steps=50)
>>> # process image to PIL
>>> image_processed = image.cpu().permute(0, 2, 3, 1)
>>> image_processed = (image_processed + 1.0) * 127.5
>>> image_processed = image_processed.numpy().astype(np.uint8)
>>> image_pil = PIL.Image.fromarray(image_processed[0])
>>> # save image
>>> image_pil.save("test.png")ImagePipelineOutput
classe diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Classe de saída para pipelines de imagem.