Diffusers documentation
DiT
DiT
Scalable Diffusion Models with Transformers (DiT) é de William Peebles e Saining Xie.
O resumo do artigo é:
Exploramos uma nova classe de modelos de difusão baseados na arquitetura de transformadores. Treinamos modelos de difusão latente de imagens, substituindo o backbone U-Net comumente utilizado por um transformador que opera em patches latentes. Analisamos a escalabilidade dos nossos Diffusion Transformers (DiTs) pela lente da complexidade do forward pass, medida em Gflops. Descobrimos que DiTs com Gflops mais altos — por meio de aumento da profundidade/largura do transformador ou do número de tokens de entrada — consistentemente apresentam FID mais baixo. Além de possuir boas propriedades de escalabilidade, nossos maiores modelos DiT-XL/2 superam todos os modelos de difusão anteriores nos benchmarks class-conditional ImageNet 512x512 e 256x256, alcançando um FID state-of-the-art de 2.27 no último.
O código original pode ser encontrado em facebookresearch/dit.
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.
DiTPipeline
classe diffusers.DiTPipeline
< source >( transformer: DiTTransformer2DModelvae: AutoencoderKLscheduler: KarrasDiffusionSchedulersid2label: dict[int, str] | None = None )
Parâmetros
- transformer (DiTTransformer2DModel) —
Uma classe condicionada
DiTTransformer2DModelpara desruidar os latentes da imagem codificada. Inicialmente publicada comoTransformer2DModelna configuração, mas a incompatibilidade pode ser ignorada. - vae (AutoencoderKL) — Modelo Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
- scheduler (DDIMScheduler) —
Um scheduler a ser usado em combinação com
transformerpara desruidar os latentes da imagem codificada.
Pipeline para geração de imagens baseado em um backbone Transformer em vez de um UNet.
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 >( class_labels: listguidance_scale: float = 4.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonenum_inference_steps: int = 50output_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
Parâmetros
- class_labels (list[int]) — lista de rótulos de classes do ImageNet para as imagens a serem geradas.
- guidance_scale (
float, opcional, padrão 4.0) — Um valor mais alto de guidance scale incentiva o modelo a gerar imagens fortemente ligadas aopromptde texto, em detrimento da qualidade da imagem. O guidance scale é ativado quandoguidance_scale > 1. - generator (
torch.Generator, opcional) — Umtorch.Generatorpara tornar a geração determinística. - num_inference_steps (
int, opcional, padrão 250) — 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, às custas de uma inferência mais lenta. - 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.
Exemplos:
>>> from diffusers import DiTPipeline, DPMSolverMultistepScheduler
>>> import torch
>>> pipe = DiTPipeline.from_pretrained("facebook/DiT-XL-2-256", torch_dtype=torch.float16)
>>> pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
>>> pipe = pipe.to("cuda")
>>> # pick words from Imagenet class labels
>>> pipe.labels # to print all available words
>>> # pick words that exist in ImageNet
>>> words = ["white shark", "umbrella"]
>>> class_ids = pipe.get_label_ids(words)
>>> generator = torch.manual_seed(33)
>>> output = pipe(class_labels=class_ids, num_inference_steps=25, generator=generator)
>>> image = output.images[0] # label 'white shark'get_label_ids
< source >( label: str | list[str] ) → list of int
Mapeia as strings de rótulos do ImageNet para os ids de classe correspondentes.
ImagePipelineOutput
classe diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Classe de saída para pipelines de imagem.