Diffusers documentation

GLM-Image

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GLM-Image

Resumen

GLM-Image es un modelo de generación de imágenes que adopta una arquitectura de decodificador híbrido autoregresivo + difusión, lo que permite elevar eficazmente el límite superior de la fidelidad visual y los detalles de grano fino. En cuanto a la calidad general de la generación de imágenes, se alinea con los enfoques estándar de la industria basados en LDM, mientras que demuestra ventajas significativas en escenarios de generación de imágenes intensivos en conocimiento.

Arquitectura del modelo: un diseño de decodificador híbrido autoregresivo + difusión

  • Generador autoregresivo: un modelo de 9B parámetros inicializado desde GLM-4-9B-0414, con un vocabulario ampliado para incorporar tokens visuales. El modelo primero genera una codificación compacta de aproximadamente 256 tokens y luego la expande a 1K–4K tokens, lo que corresponde a salidas de imágenes de alta resolución de 1K–2K. Puede consultar el modelo AR en la clase GlmImageForConditionalGeneration de la biblioteca transformers.
  • Diffusion Decoder: un decodificador de 7B parámetros basado en una arquitectura DiT de un solo flujo para la decodificación de imágenes en el espacio latente. Está equipado con un módulo de texto Glyph Encoder, lo que mejora significativamente el renderizado preciso de texto dentro de las imágenes.

Entrenamiento posterior con aprendizaje por refuerzo desacoplado: el modelo introduce una estrategia de retroalimentación modular y de gran granularidad que utiliza el algoritmo GRPO, mejorando sustancialmente tanto la comprensión semántica como la calidad de los detalles visuales.

  • Módulo autoregresivo: proporciona señales de retroalimentación de baja frecuencia centradas en la estética y la alineación semántica, mejorando el seguimiento de instrucciones y la expresividad artística.
  • Módulo decodificador: proporciona retroalimentación de alta frecuencia orientada a la fidelidad del detalle y la precisión del texto, lo que resulta en texturas, iluminación y reproducción de color altamente realistas, así como en un renderizado de texto más preciso.

GLM-Image admite tanto la generación de texto a imagen como la de imagen a imagen dentro de un único modelo

  • Texto a imagen: genera imágenes de alto detalle a partir de descripciones textuales, con un rendimiento especialmente sólido en escenarios con alta densidad de información.
  • Imagen a imagen: admite una amplia gama de tareas, incluida la edición de imágenes, la transferencia de estilo, la consistencia de múltiples sujetos y la generación que preserva la identidad para personas y objetos.

Este pipeline fue aportado por zRzRzRzRzRzRzR. La base de código se puede encontrar aquí.

Ejemplos de uso

Generación de texto a imagen

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")

Generación de imagen a imagen

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")
  • Dado que el modelo AR utilizado en GLM-Image se configura de forma predeterminada con do_sample=True y una temperatura de 0.95, las imágenes generadas pueden variar significativamente entre ejecuciones. No recomendamos establecer do_sample=False, ya que esto puede provocar salidas incorrectas o degeneradas del modelo AR.

GlmImagePipeline

clase diffusers.GlmImagePipeline

< >

( tokenizer: ByT5Tokenizerprocessor: GlmImageProcessortext_encoder: T5EncoderModelvision_language_encoder: GlmImageForConditionalGenerationvae: AutoencoderKLtransformer: GlmImageTransformer2DModelscheduler: FlowMatchEulerDiscreteScheduler )

Parámetros

  • tokenizer (PreTrainedTokenizer) — Tokenizador para el codificador de texto.
  • processor (AutoProcessor) — Procesador para el modelo AR para manejar plantillas de chat y tokenización.
  • text_encoder (T5EncoderModel) — Codificador de texto congelado para incrustaciones de glifos.
  • vision_language_encoder (GlmImageForConditionalGeneration) — El modelo AR que genera tokens de imagen a partir de prompts de texto.
  • vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes a partir de y hacia representaciones latentes.
  • transformer (GlmImageTransformer2DModel) — Un transformer condicionado por texto para desruidar los latentes de imagen codificados (DiT).
  • scheduler (SchedulerMixin) — Un scheduler para usar en combinación con transformer para desruidar los latentes de la imagen codificada.

Pipeline para la generación de imágenes a partir de texto usando GLM-Image.

Esta pipeline integra tanto el modelo AR (autoregresivo) para la generación de tokens como el modelo DiT (transformador de difusión) para la decodificación de imágenes.

__call__

< >

( 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 (str o list[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Debe contener información de forma en el formato ’H W’, donde H y W son las dimensiones de los tokens (d32). Ejemplo: “A beautiful sunset36 24” genera una imagen de 1152x768.
  • image — Imágenes de condición opcionales para la generación de imagen a imagen.
  • height (int, opcional) — La altura en píxeles. Si no se proporciona, se deriva de la información de forma del prompt.
  • width (int, opcional) — El ancho en píxeles. Si no se proporciona, se deriva de la información de forma del prompt.
  • num_inference_steps (int, opcional, valor predeterminado 50) — El número de pasos de desruido para DiT.
  • timesteps (list[int], opcional) — Pasos de tiempo personalizados para usar en el proceso de desruido. Si no se definen, se utiliza el plan predeterminado del programador para num_inference_steps.
  • sigmas (list[float], opcional) — Sigmas personalizados para usar en el proceso de desruido. Si no se definen, se utiliza la programación predeterminada del programador.
  • guidance_scale (float, opcional, valor predeterminado 1.5) — Escala de guía para la guía libre de clasificador.
  • num_images_per_prompt (int, opcional, valor predeterminado 1) — El número de imágenes que se generarán por indicación.
  • generator (torch.Generator, opcional) — Generador aleatorio para la reproducibilidad.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados que se usarán como entradas para la generación de imágenes.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Si no se proporcionan, las incrustaciones se generan a partir de prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se utiliza cuando la guía libre de clasificador está habilitada.
  • prior_token_ids (torch.Tensor, opcional) — IDs de tokens previos pregenerados desde generate_prior_tokens. Si se proporciona, se omite la generación previa.
  • prior_token_image_ids (list[torch.Tensor], opcional) — ids de tokens de imagen asociados con prior_token_ids.
  • source_image_grid_thw (list[torch.Tensor], opcional) — Información de la cuadrícula THW por muestra para los tokens de la imagen de origen.
  • crops_coords_top_left (tuple[int, int], opcional, valor predeterminado (0, 0)) — Las coordenadas de la esquina superior izquierda del recorte utilizado para las incrustaciones de condicionamiento.
  • output_type (str, opcional, valor predeterminado "pil") — Formato de salida: “pil”, “np” o “latent”.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un GlmImagePipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) — Una función que se llama al final de cada paso de desruido.
  • callback_on_step_end_tensor_inputs (list[str], opcional) — Entradas de tensor pasadas a callback_on_step_end.
  • max_sequence_length (int, opcional, valor predeterminado 2048) — Longitud máxima de la secuencia para el codificador de texto.

Devuelve

GlmImagePipelineOutput o tuple

Imágenes generadas.

Función invocada al llamar a la pipeline para la generación.

Ejemplos:

>>> 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

< >

( 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 (str o list[str], opcional) — prompt a codificar
  • do_classifier_free_guidance (bool, opcional, valor predeterminado True) — Si se debe usar classifier free guidance o no.
  • num_images_per_prompt (int, opcional, valor predeterminado 1) — Número de imágenes que deben generarse por indicación. Dispositivo de torch en el que colocar las incrustaciones resultantes
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • device — (torch.device, opcional): dispositivo de torch
  • dtype — (torch.dtype, opcional): dtype de torch
  • max_sequence_length (int, por defecto 2048) — Longitud máxima de la secuencia en el prompt codificado. Se puede establecer en otros valores, pero puede dar lugar a peores resultados.

Codifica el prompt en estados ocultos del codificador de texto.

generate_prior_tokens

< >

( 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 — Un solo prompt o una lista de prompts
  • height — Altura de la imagen objetivo
  • width — Ancho de la imagen objetivo
  • image — Entrada de imagen normalizada como List[List[PIL.Image]]. Debe validarse y normalizarse previamente usando _validate_and_normalize_images() antes de llamar a este método.
  • device — Dispositivo de destino
  • generator — Generador aleatorio para la reproducibilidad

Devuelve

Tupla de

  • prior_token_ids: Tensor de forma (batch_size, num_tokens) con tokens previos ampliados
  • prior_token_image_ids_per_sample: Lista de tensores, uno por muestra. Cada tensor contiene los ids de tokens prior ampliados para todas las imágenes de condición en esa muestra. None para t2i.
  • source_image_grid_thw_per_sample: Lista de tensores, uno por muestra. Cada tensor tiene forma (num_condition_images, 3) con información de la cuadrícula ampliada. None para t2i.

Genere tokens previos para el modelo DiT usando el modelo AR.

get_glyph_texts

< >

( prompt )

Extrae los textos de los glifos de los prompts. Devuelve una lista de listas para el procesamiento por lotes.

GlmImagePipelineOutput

clase diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarray )

Parámetros

  • images (List[PIL.Image.Image] o np.ndarray) — Lista de imágenes PIL desruidas de longitud batch_size o matriz numpy de forma (batch_size, height, width, num_channels). Las imágenes PIL o la matriz numpy presentan las imágenes desruidas del pipeline de difusión.

Clase de salida para las pipelines de CogView3.

Update on GitHub