Diffusers documentation
Lumina2
Lumina2
Lumina Image 2.0: A Unified and Efficient Image Generative Model é um transformer de difusão baseado em fluxo com 2 bilhões de parâmetros, capaz de gerar imagens diversas a partir de descrições em texto.
O resumo do artigo é:
Apresentamos o Lumina-Image 2.0, um modelo avançado de texto para imagem que supera os métodos state-of-the-art anteriores em múltiplos benchmarks, ao mesmo tempo em que destaca seu potencial para evoluir para um modelo de inteligência visual generalista. O Lumina-Image 2.0 exibe três propriedades-chave: (1) Unificação – adota uma arquitetura unificada que trata tokens de texto e imagem como uma sequência conjunta, permitindo interações cross-modais naturais e facilitando a expansão de tarefas. Além disso, como captioners de alta qualidade podem fornecer pares de treinamento texto-imagem semanticamente mais alinhados, introduzimos um sistema de legendagem unificado, o UniCaptioner, que gera legendas abrangentes e precisas para o modelo. Isso não apenas acelera a convergência do modelo, mas também melhora a aderência ao prompt, o tratamento de prompts de comprimento variável e a generalização de tarefas por meio de templates de prompt. (2) Eficiência – para melhorar a eficiência da arquitetura unificada, desenvolvemos um conjunto de técnicas de otimização que aprimoram a aprendizagem semântica e a geração de texturas de alto detalhe durante o treinamento, ao mesmo tempo em que incorporam estratégias de aceleração no tempo de inferência sem comprometer a qualidade da imagem. (3) Transparência – disponibilizamos em código aberto todos os detalhes de treinamento, o código e os modelos para garantir reprodutibilidade total, com o objetivo de reduzir a lacuna entre equipes de pesquisa fechadas com muitos recursos e desenvolvedores independentes.
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.
Usando carregamento de arquivo único com Lumina Image 2.0
O carregamento em arquivo único para Lumina Image 2.0 está disponível para o Lumina2Transformer2DModel
import torch
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline
ckpt_path = "https://huggingface.co/Alpha-VLLM/Lumina-Image-2.0/blob/main/consolidated.00-of-01.pth"
transformer = Lumina2Transformer2DModel.from_single_file(
ckpt_path, dtype=torch.bfloat16
)
pipe = Lumina2Pipeline.from_pretrained(
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
"a cat holding a sign that says hello",
generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-single-file.png")
Usando checkpoints quantizados GGUF com Lumina Image 2.0
Os checkpoints quantizados em GGUF para o Lumina2Transformer2DModel podem ser carregados via from_single_file com o GGUFQuantizationConfig
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline, GGUFQuantizationConfig
ckpt_path = "https://huggingface.co/calcuis/lumina-gguf/blob/main/lumina2-q4_0.gguf"
transformer = Lumina2Transformer2DModel.from_single_file(
ckpt_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
dtype=torch.bfloat16,
)
pipe = Lumina2Pipeline.from_pretrained(
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
"a cat holding a sign that says hello",
generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-gguf.png")Lumina2Pipeline
classe diffusers.Lumina2Pipeline
< source >( transformer: Lumina2Transformer2DModelscheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: Gemma2PreTrainedModeltokenizer: GemmaTokenizer )
Parâmetros
- vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
- text_encoder (
Gemma2PreTrainedModel) — Codificador de texto Gemma2 congelado. - tokenizer (
GemmaTokenizerouGemmaTokenizerFast) — Tokenizador Gemma. - transformer (Transformer2DModel) —
Um
Transformer2DModelcondicionado por texto para desruidar os latentes da imagem codificada. - scheduler (SchedulerMixin) —
Um scheduler a ser usado em combinação com
transformerpara desruidar os latentes da imagem codificada.
Pipeline para geração de texto para imagem usando Lumina-T2I.
Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os pipelines (como download ou salvamento, execução em um dispositivo específico, etc.)
__call__
< source >( prompt: str | list[str] = Nonewidth: int | None = Noneheight: int | None = Nonenum_inference_steps: int = 30guidance_scale: float = 4.0negative_prompt: str | list[str] = Nonesigmas: list = Nonenum_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']system_prompt: str | None = Nonecfg_trunc_ratio: float = 1.0cfg_normalization: bool = Truemax_sequence_length: int = 256 ) → ImagePipelineOutput or tuple
Parâmetros
- prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. Se não for definido, é necessário passarprompt_embedsem vez disso. - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). - num_inference_steps (
int, opcional, padrão 30) — 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. - sigmas (
list[float], opcional) — Sigmas personalizados para usar no processo de desruidamento com agendadores que suportam um argumentosigmasem seu métodoset_timesteps. Se não definido, o comportamento padrão quandonum_inference_stepsé passado será usado. - guidance_scale (
float, opcional, padrão 4.0) — Escala de orientação definida em Classifier-Free Diffusion Guidance.guidance_scaleé definido comowda equação 2 do Imagen Paper. A escala de orientação é ativada ao definirguidance_scale > 1. Uma escala de orientação maior incentiva a geração de imagens que estão intimamente ligadas aopromptde texto, geralmente em detrimento de uma menor qualidade de imagem. - num_images_per_prompt (
int, opcional, padrão 1) — O número de imagens a serem geradas por prompt. - height (
int, opcional, padrão é self.unet.config.sample_size) — A altura em pixels da imagem gerada. - width (
int, opcional, padrão é self.unet.config.sample_size) — A largura em pixels da imagem gerada. - generator (
torch.Generatoroulist[torch.Generator], opcional) — Um ou uma lista de geradores do torch para 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 será gerado por amostragem usando ogeneratoraleatório fornecido. - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entradaprompt. - prompt_attention_mask (
torch.Tensor, opcional) — Máscara de atenção pré-gerada para embeddings de texto. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas. Para o Lumina-T2I, este prompt negativo deve ser "". Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - negative_prompt_attention_mask (
torch.Tensor, opcional) — Máscara de atenção pré-gerada para embeddings de texto negativos. - output_type (
str, opcional, padrão"pil") — O formato de saída da imagem gerada. Escolha entre PIL:PIL.Image.Imageounp.array. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um~pipelines.stable_diffusion.IFPipelineOutputem vez de uma tupla simples. - attention_kwargs —
Um dicionário de kwargs que, se especificado, é passado para o
AttentionProcessordefinido emself.processorem diffusers.models.attention_processor. - callback_on_step_end (
Callable, opcional) — Uma função que é chamada no final de cada etapa de desruidamento durante a inferência. A função é chamada com os seguintes argumentos:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsincluirá uma lista de todos os tensores, conforme especificado porcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opcional) — A lista de entradas de tensor para a funçãocallback_on_step_end. Os tensores especificados na lista serão passados como argumentocallback_kwargs. Você só poderá incluir variáveis listadas no atributo._callback_tensor_inputsda sua classe de pipeline. - system_prompt (
str, opcional) — O prompt de sistema a ser usado para a geração de imagem. - cfg_trunc_ratio (
float, opcional, padrão1.0) — A proporção do intervalo de timestep para aplicar a escala de orientação baseada em normalização. - cfg_normalization (
bool, opcional, padrãoTrue) — Se deve aplicar a escala de orientação baseada em normalização. - max_sequence_length (
int, padrão256) — Comprimento máximo da sequência a ser usado com oprompt.
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
Função invocada ao chamar o pipeline para geração.
Exemplos:
>>> import torch
>>> from diffusers import Lumina2Pipeline
>>> pipe = Lumina2Pipeline.from_pretrained("Alpha-VLLM/Lumina-Image-2.0", torch_dtype=torch.bfloat16)
>>> # Enable memory optimizations.
>>> pipe.enable_model_cpu_offload()
>>> prompt = "Upper body of a young woman in a Victorian-era outfit with brass goggles and leather straps. Background shows an industrial revolution cityscape with smoky skies and tall, metal structures"
>>> image = pipe(prompt).images[0]encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str | list[str] = Nonenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonesystem_prompt: str | None = Nonemax_sequence_length: int = 256 )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - negative_prompt (
stroulist[str], opcional) — O prompt que não deve orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). Para Lumina-T2I, isso deve ser "". - do_classifier_free_guidance (
bool, opcional, padrãoTrue) — se deve ou não usar classifier free guidance - num_images_per_prompt (
int, opcional, padrão 1) — número de imagens que devem ser geradas por prompt - device — (
torch.device, opcional): dispositivo torch em que os embeddings resultantes serão colocados - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entradaprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas. Para o Lumina-T2I, deve ser as incorporações da string "". - max_sequence_length (
int, padrão256) — Comprimento máximo da sequência a ser usado para o prompt.
Codifica o prompt em estados ocultos do codificador de texto.