Diffusers documentation

GLM-Image

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