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.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GLM-Image

Обзор

GLM-Image — это модель генерации изображений, использующая гибридную архитектуру декодера на основе авто-регрессии и диффузии, что эффективно повышает верхнюю границу визуальной точности и детализации. По общему качеству генерации изображений она соответствует отраслевым стандартам подходов на основе LDM, при этом демонстрируя значительные преимущества в сценариях генерации изображений, требующих глубоких знаний.

Архитектура модели: гибридный дизайн декодера с авто-регрессивным и диффузионным подходами

  • Авто регрессионный генератор: модель с 9 млрд параметров, инициализированная из GLM-4-9B-0414, с расширенным словарём для включения визуальных токенов. Модель сначала генерирует компактное кодирование из примерно 256 токенов, а затем расширяет его до 1K–4K токенов, что соответствует выходным изображениям высокого разрешения размером 1K–2K. Вы можете ознакомиться с AR-моделью в классе GlmImageForConditionalGeneration библиотеки transformers.
  • Diffusion Decoder: декодер с 7 млрд параметров, основанный на однопоточной архитектуре DiT для декодирования изображений в латентном пространстве. Он оснащен текстовым модулем Glyph Encoder, что значительно улучшает точность рендеринга текста внутри изображений.

Постобучение с разделённым обучением с подкреплением: модель вводит детализированную модульную стратегию обратной связи с использованием алгоритма GRPO, что существенно повышает качество семантического понимания и визуальных деталей.

  • Авто регрессионный модуль: обеспечивает сигналы обратной связи низкой частоты, сфокусированные на эстетике и семантическом соответствии, что улучшает следование инструкциям и художественную выразительность.
  • Модуль декодера: обеспечивает высокочастотную обратную связь, направленную на точность деталей и точность текста, что приводит к созданию высоко реалистичных текстур, освещения и цветопередачи, а также к более точному рендерингу текста.

GLM-Image поддерживает как генерацию изображений по тексту, так и генерацию изображений по изображению в рамках одной модели

  • Текст в изображение: генерация изображений с высокой детализацией по текстовым описаниям, с особенно высокой производительностью в сценариях с высокой плотностью информации.
  • Image-to-image: поддерживает широкий спектр задач, включая редактирование изображений, перенос стиля, согласованность нескольких объектов и генерацию с сохранением идентичности людей и объектов.

Этот конвейер был предложен пользователем zRzRzRzRzRzRzR. Кодовая база доступна здесь.

Примеры использования

Генерация изображений по тексту

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

Генерация изображений из изображений

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")
  • Поскольку модель AR, используемая в GLM-Image, по умолчанию настроена с параметрами do_sample=True и температурой 0.95, результаты генерации могут существенно различаться от запуска к запуску. Мы не рекомендуем устанавливать do_sample=False, так как это может привести к некорректным или вырожденным результатам работы модели AR.

GlmImagePipeline

класс diffusers.GlmImagePipeline

< >

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

Параметры

  • tokenizer (PreTrainedTokenizer) — Токенизатор для текстового энкодера.
  • processor (AutoProcessor) — Процессор для AR-модели, обрабатывающий шаблоны чата и токенизацию.
  • text_encoder (T5EncoderModel) — Замороженный текстовый энкодер для эмбеддингов глифов.
  • vision_language_encoder (GlmImageForConditionalGeneration) — AR-модель, генерирующая токены изображений по текстовым запросам.
  • vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • transformer (GlmImageTransformer2DModel) — Трансформер с текстовым условием для денойзинга закодированных латентов изображения (DiT).
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

Пайплайн для генерации изображений по тексту с использованием GLM-Image.

Этот конвейер объединяет модель AR (авто-регрессивную) для генерации токенов и модель DiT (диффузионный трансформер) для декодирования изображений.

__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[int, int] = (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[str] = ['latents']max_sequence_length: int = 2048 ) → GlmImagePipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Должен содержать информацию о размере в формате ’<sop>H W<eop>’, где H и W — размеры в токенах (d32). Пример: “A beautiful sunset<sop>36 24<eop>” генерирует изображение размером 1152x768.
  • image — Необязательные условные изображения для генерации изображений по образцу.
  • height (int, необязательный) — Высота в пикселях. Если не указано, вычисляется на основе информации о форме запроса.
  • width (int, необязательный) — Ширина в пикселях. Если не указано, вычисляется на основе информации о форме запроса.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга для DiT.
  • timesteps (list[int], необязательный) — Пользовательские timesteps для процесса денойзинга. Если не заданы, используется расписание по умолчанию планировщика для num_inference_steps.
  • sigmas (list[float], необязательный) — Пользовательские сигмы для процесса удаления шума. Если не заданы, используется расписание по умолчанию планировщика.
  • guidance_scale (float, необязательный, по умолчанию 1.5) — Масштаб руководства для classifier-free guidance.
  • num_images_per_prompt (int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта.
  • generator (torch.Generator, необязательный) — Генератор случайных чисел для воспроизводимости.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, используемые в качестве входных данных для генерации изображений.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Если не указаны, эмбеддинги генерируются из prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Используется, когда включено classifier-free guidance.
  • prior_token_ids (torch.Tensor, необязательный) — Предварительно сгенерированные идентификаторы токенов из generate_prior_tokens. Если переданы, предварительная генерация пропускается.
  • prior_token_image_ids (list[torch.Tensor], необязательный) — Идентификаторы токенов изображений, связанные с prior_token_ids.
  • source_image_grid_thw (list[torch.Tensor], необязательный) — Информация о сетке THW для токенов исходного изображения, по каждому образцу.
  • crops_coords_top_left (tuple[int, int], необязательный, по умолчанию (0, 0)) — Координаты верхнего левого угла кадрирования, используемого для условных эмбеддингов.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода: “pil”, “np” или “latent”.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать GlmImagePipelineOutput вместо обычного кортежа.
  • attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, необязательный) — Функция, вызываемая в конце каждого шага денойзинга.
  • callback_on_step_end_tensor_inputs (list[str], необязательный) — Входные тензоры, передаваемые в callback_on_step_end.
  • max_sequence_length (int, необязательный, по умолчанию 2048) — Максимальная длина последовательности для текстового энкодера.

Возвращает

GlmImagePipelineOutput или tuple

Сгенерированные изображения.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

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

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • do_classifier_free_guidance (bool, необязательный, по умолчанию True) — Использовать ли classifier free guidance.
  • num_images_per_prompt (int, необязательный, по умолчанию 1) — Количество изображений, которые должны быть сгенерированы для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • device — (torch.device, необязательный): устройство torch
  • dtype — (torch.dtype, необязательный): torch dtype
  • max_sequence_length (int, по умолчанию 2048) — Максимальная длина последовательности в закодированном запросе. Можно установить другие значения, но это может привести к ухудшению результатов.

Кодирует промпт в скрытые состояния текстового энкодера.

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

Параметры

  • prompt — одиночный промпт или список промптов
  • height — целевая высота изображения
  • width — целевая ширина изображения
  • image — Нормализованный входной образ в виде List[List[PIL.Image]]. Перед вызовом этого метода входные данные должны быть предварительно проверены с помощью _validate_and_normalize_images().
  • device — целевое устройство
  • generator — Случайный генератор для воспроизводимости

Возвращает

Кортеж

  • prior_token_ids: тензор формы (batch_size, num_tokens) с апсемплированными токенами prior
  • prior_token_image_ids_per_sample: список тензоров, по одному на каждый образец. Каждый тензор содержит апсемплированные идентификаторы токенов prior для всех изображений-условий в данном образце. Для t2i — None.
  • source_image_grid_thw_per_sample: список тензоров, по одному на каждый образец. Каждый тензор имеет форму (num_condition_images, 3) с информацией о сетке после апскейлинга. Для t2i — None.

Сгенерируйте токены-предшественники для модели DiT с помощью модели AR.

get_glyph_texts

< >

( prompt )

Извлекает тексты глифов из промпта(ов). Возвращает список списков для пакетной обработки.

GlmImagePipelineOutput

класс diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput

< >

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

Параметры

  • images (List[PIL.Image.Image] или np.ndarray) — Список денойзированных изображений PIL длиной batch_size или массив numpy с формой (batch_size, height, width, num_channels). Изображения PIL или массив numpy представляют денойзированные изображения диффузионного конвейера.

Класс вывода для пайплайнов CogView3.

Update on GitHub