Diffusers documentation
Diffusão Latente
Diffusão Latente
O Latent Diffusion foi proposto em High-Resolution Image Synthesis with Latent Diffusion Models por Robin Rombach, Andreas Blattmann, Dominik Lorenz, Patrick Esser, Björn Ommer.
O resumo do artigo é:
Ao decompor o processo de formação de imagens em uma aplicação sequencial de autoencoders de remoção de ruído, os modelos de difusão (DMs) alcançam resultados de síntese state-of-the-art em dados de imagem e além. Além disso, sua formulação permite um mecanismo de orientação para controlar o processo de geração de imagens sem re-treinamento. No entanto, como esses modelos geralmente operam diretamente no espaço de pixels, a otimização de DMs poderosos frequentemente consome centenas de dias de GPU e a inferência é cara devido às avaliações sequenciais. Para permitir o treinamento de DMs em recursos computacionais limitados, mantendo sua qualidade e flexibilidade, aplicamos-os no espaço latente de autoencoders pré-treinados poderosos. Em contraste com trabalhos anteriores, o treinamento de modelos de difusão em tal representação permite, pela primeira vez, alcançar um ponto quase ótimo entre a redução de complexidade e a preservação de detalhes, aumentando significativamente a fidelidade visual. Ao introduzir camadas de atenção cruzada na arquitetura do modelo, transformamos os modelos de difusão em geradores poderosos e flexíveis para entradas de condicionamento gerais, como texto ou caixas delimitadoras, e a síntese de alta resolução torna-se possível de maneira convolucional. Nossos modelos de difusão latente (LDMs) alcançam um novo state of the art para inpainting de imagem e desempenho altamente competitivo em várias tarefas, incluindo geração de imagem incondicional, síntese de cena semântica e super-resolução, reduzindo significativamente os requisitos computacionais em comparação com DMs baseados em pixels.
O código original pode ser encontrado em CompVis/latent-diffusion.
Certifique-se de consultar o guia de Schedulers para aprender a explorar o compromisso entre a velocidade e a qualidade do scheduler, e veja a seção reutilização de componentes entre pipelines para aprender a carregar eficientemente os mesmos componentes em vários pipelines.
LDMTextToImagePipeline
classe diffusers.LDMTextToImagePipeline
< source >( vqvae: diffusers.models.autoencoders.vq_model.VQModel | diffusers.models.autoencoders.autoencoder_kl.AutoencoderKLbert: PreTrainedModeltokenizer: PythonBackendunet: diffusers.models.unets.unet_2d.UNet2DModel | diffusers.models.unets.unet_2d_condition.UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler )
Parâmetros
- vqvae (VQModel) — Modelo de quantização vetorial (VQ) para codificar e decodificar imagens a partir de e para representações latentes.
- bert (
LDMBertModel) — Modelo de codificação de texto baseado emBERT. - tokenizer (BertTokenizer) —
Um
BertTokenizerpara tokenizar texto. - unet (UNet2DConditionModel) —
Um
UNet2DConditionModelpara desruidar os latentes da imagem codificada. - scheduler (SchedulerMixin) —
Um scheduler a ser usado em combinação com
unetpara desruidar os latentes da imagem codificada. Pode ser um de DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler.
Pipeline para geração de texto para imagem usando difusão latente.
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 >( prompt: str | list[str]height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int | None = 50guidance_scale: float | None = 1.0eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = True**kwargs ) → ImagePipelineOutput or tuple
Parâmetros
- prompt (
stroulist[str]) — O prompt ou os prompts para orientar a geração da imagem. - height (
int, opcional, padrãoself.unet.config.sample_size * self.vae_scale_factor) — A altura em pixels da imagem gerada. - width (
int, opcional, padrãoself.unet.config.sample_size * self.vae_scale_factor) — A largura em pixels da imagem gerada. - 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. - guidance_scale (
float, opcional, padrão 1.0) — Um valor mais alto de guidance scale incentiva o modelo a gerar imagens fortemente ligadas ao textoprompt, em detrimento da qualidade da imagem. O guidance scale é ativado quandoguidance_scale > 1. - 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. - generator (
torch.Generator, opcional) — Umtorch.Generatorpara tornar a geração determinística. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados, amostrados de uma distribuição gaussiana, a serem usados como entradas para a geração de imagens. Pode ser usado para ajustar a mesma geração com diferentes prompts. Se não for fornecido, um tensor de latentes é gerado por amostragem usando ogeneratoraleatório fornecido. - 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 DiffusionPipeline
>>> # load model and scheduler
>>> ldm = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")
>>> # run pipeline in inference (sample random noise and denoise)
>>> prompt = "A painting of a squirrel eating a burger"
>>> images = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6).images
>>> # save images
>>> for idx, image in enumerate(images):
... image.save(f"squirrel-{idx}.png")LDMSuperResolutionPipeline
classe diffusers.LDMSuperResolutionPipeline
< source >( vqvae: VQModelunet: UNet2DModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler | diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteScheduler | diffusers.schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler )
Parâmetros
- vqvae (VQModel) — Modelo de quantização vetorial (VQ) para codificar e decodificar imagens a partir de e para representações latentes.
- unet (UNet2DModel) —
Um
UNet2DModelpara remover o ruído da imagem codificada. - scheduler (SchedulerMixin) —
Um scheduler a ser usado em combinação com
unetpara desruidar os latentes da imagem codificada. Pode ser um de DDIMScheduler, LMSDiscreteScheduler, EulerDiscreteScheduler, EulerAncestralDiscreteScheduler, DPMSolverMultistepScheduler ou PNDMScheduler.
Um pipeline para super-resolução de imagens usando difusão latente.
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 >( image: typing.Union[torch.Tensor, PIL.Image.Image] = Nonebatch_size: int | None = 1num_inference_steps: int | None = 100eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
Parâmetros
- image (
torch.TensororPIL.Image.Image) —Imageor tensor representing an image batch to be used as the starting point for the process. - batch_size (
int, opcional, padrão 1) — Número de imagens a serem geradas. - num_inference_steps (
int, opcional, padrão 100) — O número de etapas de remoção de ruído. Mais etapas de remoção de ruído geralmente resultam em uma imagem de maior qualidade, à custa de uma inferência mais lenta. - 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. - generator (
torch.Generatoroulist[torch.Generator], opcional) — Umtorch.Generatorpara tornar a geração determinística. - 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:
>>> import requests
>>> from PIL import Image
>>> from io import BytesIO
>>> from diffusers import LDMSuperResolutionPipeline
>>> import torch
>>> # load model and scheduler
>>> pipeline = LDMSuperResolutionPipeline.from_pretrained("CompVis/ldm-super-resolution-4x-openimages")
>>> pipeline = pipeline.to("cuda")
>>> # let's download an image
>>> url = (
... "https://user-images.githubusercontent.com/38061659/199705896-b48e17b8-b231-47cd-a270-4ffa5a93fa3e.png"
... )
>>> response = requests.get(url)
>>> low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
>>> low_res_img = low_res_img.resize((128, 128))
>>> # run pipeline in inference (sample random noise and denoise)
>>> upscaled_image = pipeline(low_res_img, num_inference_steps=100, eta=1).images[0]
>>> # save image
>>> upscaled_image.save("ldm_generated_image.png")ImagePipelineOutput
classe diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Classe de saída para pipelines de imagem.