Diffusers documentation
GLM-Image
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
< source >( 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__
< 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[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
< 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 )
Параметры
- 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
< 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
Параметры
- 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.
Извлекает тексты глифов из промпта(ов). Возвращает список списков для пакетной обработки.
GlmImagePipelineOutput
класс diffusers.pipelines.glm_image.pipeline_output.GlmImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Класс вывода для пайплайнов CogView3.