Diffusers documentation
GLM-Image
GLM-Image
Visão geral
GLM-Image é um modelo de geração de imagens que adota uma arquitetura híbrida de decodificador autoregressivo + difusão, elevando efetivamente o limite superior de fidelidade visual e detalhes finos. Em termos de qualidade geral de geração de imagens, ele se alinha às abordagens padrão do setor baseadas em LDM, demonstrando, no entanto, vantagens significativas em cenários de geração de imagens intensivos em conhecimento.
Arquitetura do modelo: um design híbrido de decodificador autoregressivo + difusão、
- Gerador autoregressivo: um modelo de 9B parâmetros inicializado a partir de GLM-4-9B-0414, com um vocabulário expandido para incorporar tokens visuais. O modelo primeiro gera uma codificação compacta de aproximadamente 256 tokens, em seguida expande para 1K–4K tokens, correspondendo a saídas de imagens de alta resolução de 1K–2K. Você pode verificar o modelo AR na classe
GlmImageForConditionalGenerationda bibliotecatransformers. - Diffusion Decoder: um decodificador de 7 bilhões de parâmetros baseado em uma arquitetura DiT de fluxo único para decodificação de imagens no espaço latente. Ele é equipado com um módulo de texto Glyph Encoder, melhorando significativamente a renderização precisa de texto dentro das imagens.
Pós-treino com aprendizado por reforço desacoplado: o modelo introduz uma estratégia de feedback modular e de granularidade fina usando o algoritmo GRPO, aprimorando substancialmente tanto a compreensão semântica quanto a qualidade dos detalhes visuais.
- Módulo autoregressivo: fornece sinais de feedback de baixa frequência focados em estética e alinhamento semântico, melhorando o seguimento de instruções e a expressividade artística.
- Módulo decodificador: fornece feedback de alta frequência direcionado à fidelidade de detalhes e à precisão do texto, resultando em texturas, iluminação e reprodução de cores altamente realistas, bem como em uma renderização de texto mais precisa.
O GLM-Image suporta tanto a geração de texto para imagem quanto a geração de imagem para imagem em um único modelo
- Texto para imagem: gera imagens de alto detalhe a partir de descrições textuais, com desempenho particularmente forte em cenários densos em informações.
- Image-to-image: suporta uma ampla variedade de tarefas, incluindo edição de imagem, transferência de estilo, consistência de múltiplos sujeitos e geração que preserva a identidade para pessoas e objetos.
Este pipeline foi contribuído por zRzRzRzRzRzRzR. A base de código pode ser encontrada aqui.
Exemplos de uso
Geração de Texto para Imagem
import torch
from diffusers.pipelines.glm_image import GlmImagePipeline
pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image",dtype=torch.bfloat16,device_map="cuda")
prompt = "A beautifully designed modern food magazine style dessert recipe illustration, themed around a raspberry mousse cake. The overall layout is clean and bright, divided into four main areas: the top left features a bold black title 'Raspberry Mousse Cake Recipe Guide', with a soft-lit close-up photo of the finished cake on the right, showcasing a light pink cake adorned with fresh raspberries and mint leaves; the bottom left contains an ingredient list section, titled 'Ingredients' in a simple font, listing 'Flour 150g', 'Eggs 3', 'Sugar 120g', 'Raspberry puree 200g', 'Gelatin sheets 10g', 'Whipping cream 300ml', and 'Fresh raspberries', each accompanied by minimalist line icons (like a flour bag, eggs, sugar jar, etc.); the bottom right displays four equally sized step boxes, each containing high-definition macro photos and corresponding instructions, arranged from top to bottom as follows: Step 1 shows a whisk whipping white foam (with the instruction 'Whip egg whites to stiff peaks'), Step 2 shows a red-and-white mixture being folded with a spatula (with the instruction 'Gently fold in the puree and batter'), Step 3 shows pink liquid being poured into a round mold (with the instruction 'Pour into mold and chill for 4 hours'), Step 4 shows the finished cake decorated with raspberries and mint leaves (with the instruction 'Decorate with raspberries and mint'); a light brown information bar runs along the bottom edge, with icons on the left representing 'Preparation time: 30 minutes', 'Cooking time: 20 minutes', and 'Servings: 8'. The overall color scheme is dominated by creamy white and light pink, with a subtle paper texture in the background, featuring compact and orderly text and image layout with clear information hierarchy."
image = pipe(
prompt=prompt,
height=32 * 32,
width=36 * 32,
num_inference_steps=30,
guidance_scale=1.5,
generator=torch.Generator(device="cuda").manual_seed(42), # or "mps", "xpu", "cpu"
).images[0]
image.save("output_t2i.png")Geração de Imagem para Imagem
import torch
from diffusers.pipelines.glm_image import GlmImagePipeline
from PIL import Image
pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image",dtype=torch.bfloat16,device_map="cuda")
image_path = "cond.jpg"
prompt = "Replace the background of the snow forest with an underground station featuring an automatic escalator."
image = Image.open(image_path).convert("RGB")
image = pipe(
prompt=prompt,
image=[image], # can input multiple images for multi-image-to-image generation such as [image, image1]
height=33 * 32,
width=32 * 32,
num_inference_steps=30,
guidance_scale=1.5,
generator=torch.Generator(device="cuda").manual_seed(42), # or "mps", "xpu", "cpu"
).images[0]
image.save("output_i2i.png")- Como o modelo AR usado no GLM-Image é configurado com
do_sample=Truee uma temperatura de0.95por padrão, as imagens geradas podem variar significativamente entre execuções. Não recomendamos definir do_sample=False, pois isso pode levar a saídas incorretas ou degeneradas do modelo AR.
GlmImagePipeline
classe diffusers.GlmImagePipeline
< source >( tokenizer: ByT5Tokenizerprocessor: GlmImageProcessortext_encoder: T5EncoderModelvision_language_encoder: GlmImageForConditionalGenerationvae: AutoencoderKLtransformer: GlmImageTransformer2DModelscheduler: FlowMatchEulerDiscreteScheduler )
Parâmetros
- tokenizer (
PreTrainedTokenizer) — Tokenizer para o codificador de texto. - processor (
AutoProcessor) — Processador para o modelo AR lidar com modelos de chat e tokenização. - text_encoder (
T5EncoderModel) — Codificador de texto congelado para incorporações de glifos. - vision_language_encoder (
GlmImageForConditionalGeneration) — O modelo AR que gera tokens de imagem a partir de prompts de texto. - vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
- transformer (GlmImageTransformer2DModel) — Um transformer condicionado por texto para desruidar os latentes da imagem codificada (DiT).
- 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 GLM-Image.
Este pipeline integra tanto o modelo AR (autoregressivo) para geração de tokens quanto o modelo DiT (diffusion transformer) para decodificação de imagens.
__call__
< source >( prompt: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list[int] | None = Nonesigmas: list[float] | None = Noneguidance_scale: float = 1.5num_images_per_prompt: int = 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] = Noneprior_token_ids: typing.Optional[torch.Tensor] = Noneprior_token_image_ids: list[torch.Tensor] | None = Nonesource_image_grid_thw: list[torch.Tensor] | None = Nonecrops_coords_top_left: tuple = (0, 0)output_type: str = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 2048 ) → GlmImagePipelineOutput or tuple
Parâmetros
- prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. Deve conter informações de formato no formato ’H W ’, onde H e W são as dimensões dos tokens (d32). Exemplo: “A beautiful sunset 36 24 ” gera uma imagem de 1152x768. - image — Imagens de condição opcionais para geração de imagem para imagem.
- height (
int, opcional) — A altura em pixels. Se não for fornecida, é derivada das informações de forma do prompt. - width (
int, opcional) — A largura em pixels. Se não for fornecida, é derivada das informações de forma do prompt. - num_inference_steps (
int, opcional, padrão50) — O número de etapas de desruidamento para DiT. - timesteps (
list[int], opcional) — Timesteps personalizados para usar no processo de remoção de ruído. Se não definidos, o agendamento padrão do scheduler paranum_inference_stepsé utilizado. - sigmas (
list[float], opcional) — Sigmas personalizados para usar no processo de desruidamento. Se não definidos, o agendamento padrão do agendador é usado. - guidance_scale (
float, opcional, padrão1.5) — Escala de orientação para orientação sem classificador. - num_images_per_prompt (
int, opcional, padrão1) — O número de imagens a serem geradas por prompt. - generator (
torch.Generator, opcional) — Gerador aleatório para reprodutibilidade. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados para serem usados como entradas para a geração de imagens. - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Se não fornecidas, as incorporações são geradas a partir deprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas. Usadas quando a orientação sem classificador (classifier-free guidance) está habilitada. - prior_token_ids (
torch.Tensor, opcional) — IDs de tokens anteriores pré-gerados porgenerate_prior_tokens. Se fornecidos, a geração anterior é ignorada. - prior_token_image_ids (
list[torch.Tensor], opcional) — Ids de tokens de imagem associados aprior_token_ids. - source_image_grid_thw (
list[torch.Tensor], opcional) — Informações da grade THW por amostra para os tokens da imagem de origem. - crops_coords_top_left (
tuple[int, int], opcional, padrão(0, 0)) — As coordenadas do canto superior esquerdo do recorte usado para os embeddings de condicionamento. - output_type (
str, opcional, padrão"pil") — Formato de saída: “pil”, “np” ou “latent”. - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar umGlmImagePipelineOutputem vez de uma tupla simples. - attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado para oAttentionProcessor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opcional) — Uma função chamada no final de cada etapa de desruidamento. - callback_on_step_end_tensor_inputs (
list[str], opcional) — Entradas de tensor passadas paracallback_on_step_end. - max_sequence_length (
int, opcional, padrão2048) — Comprimento máximo da sequência para o codificador de texto.
Retorna
GlmImagePipelineOutput ou tuple
Imagens geradas.
Função invocada ao chamar o pipeline para geração.
Exemplos:
>>> import torch
>>> from diffusers import GlmImagePipeline
>>> pipe = GlmImagePipeline.from_pretrained("zai-org/GLM-Image", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]
>>> image.save("output.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonedevice: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = Nonemax_sequence_length: int = 2048 )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - 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. Dispositivo torch para colocar os embeddings resultantes - 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. - device — (
torch.device, opcional): dispositivo torch - dtype — (
torch.dtype, opcional): dtype do torch - max_sequence_length (
int, padrão2048) — Comprimento máximo da sequência no prompt codificado. Pode ser definido para outros valores, mas isso pode levar a resultados piores.
Codifica o prompt em estados ocultos do codificador de texto.
generate_prior_tokens
< source >( prompt: str | list[str]height: intwidth: intimage: list[list[PIL.Image.Image]] | None = Nonedevice: typing.Optional[torch.device] = Nonegenerator: typing.Optional[torch.Generator] = None ) → Tuple of
Parâmetros
- prompt — Prompt único ou lista de prompts
- height — Altura da imagem de destino
- width — Largura da imagem de destino
- image — Entrada de imagem normalizada como List[List[PIL.Image]]. Deve ser pré-validada usando _validate_and_normalize_images() antes de chamar este método.
- device — Dispositivo de destino
- generator — Gerador aleatório para reprodutibilidade
Retorna
Tupla de
- prior_token_ids: Tensor de forma (batch_size, num_tokens) com tokens anteriores interpolados
- prior_token_image_ids_per_sample: Lista de tensores, um por amostra. Cada tensor contém os ids de tokens prior upsampled para todas as imagens de condição naquela amostra. None para t2i.
- source_image_grid_thw_per_sample: Lista de tensores, um por amostra. Cada tensor tem a forma (num_condition_images, 3) com informações de grade ampliadas. None para t2i.
Gere tokens anteriores para o modelo DiT usando o modelo AR.
Extrai os textos dos glifos dos prompts. Retorna uma lista de listas para processamento em lote.
GlmImagePipelineOutput
classe diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Classe de saída para os pipelines do CogView3.