Diffusers documentation

Kolors: эффективное обучение диффузионной модели для фотореалистичного синтеза изображений по текстовому описанию

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

Kolors: эффективное обучение диффузионной модели для фотореалистичного синтеза изображений по текстовому описанию

LoRA MPS

Kolors — это модель крупномасштабного генерирования изображений по тексту на основе латентного диффузионного процесса, разработанная командой Kuaishou Kolors. Обученная на миллиардах пар «текст-изображение», Kolors демонстрирует значительные преимущества перед как открытыми, так и закрытыми моделями в отношении визуального качества, точности сложной семантики и рендеринга текста на китайском и английском языках. Кроме того, Kolors поддерживает ввод на китайском и английском языках, показывая высокую эффективность в понимании и генерации контента, специфичного для китайского языка. Дополнительные сведения см. в этом техническом отчёте.

Аннотация из технического отчёта:

Мы представляем Kolors — латентную диффузионную модель для синтеза изображений по текстовому описанию, отличающуюся глубоким пониманием как английского, так и китайского языков, а также впечатляющей степенью фотореализма. Развитие Kolors обусловлено тремя ключевыми идеями. Во-первых, в отличие от большой языковой модели T5, используемой в Imagen и Stable Diffusion 3, Kolors построена на основе General Language Model (GLM), что повышает её способности к пониманию как английского, так и китайского языков. Кроме того, мы используем мультимодальную большую языковую модель для переписывания описаний обширного обучающего набора данных с целью детального понимания текста. Эти стратегии значительно улучшают способность Kolors понимать сложные семантические структуры, особенно те, что включают несколько сущностей, и обеспечивают её продвинутые возможности по рендерингу текста. Во-вторых, мы разделяем обучение Kolors на два этапа: этап обучения концепциям с широкими знаниями и этап повышения качества с специально отобранными данными высокой эстетической ценности. Более того, мы исследуем критическую роль расписания шума и предлагаем новое расписание для оптимизации генерации изображений высокого разрешения. Совокупность этих стратегий повышает визуальную привлекательность генерируемых изображений высокого разрешения. Наконец, мы предлагаем сбалансированный по категориям бенчмарк KolorsPrompts, который служит ориентиром для обучения и оценки Kolors. В результате, даже при использовании общепринятого каркаса U-Net, Kolors продемонстрировала выдающиеся результаты в оценках людьми, превзойдя существующие открытые модели и достигнув уровня производительности Midjourney-v6, особенно в плане визуальной привлекательности. Мы опубликуем код и веса Kolors по адресу https://github.com/Kwai-Kolors/Kolors и надеемся, что это будет полезно для будущих исследований и приложений в сообществе генерации визуального контента.

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

import torch

from diffusers import DPMSolverMultistepScheduler, KolorsPipeline

pipe = KolorsPipeline.from_pretrained("Kwai-Kolors/Kolors-diffusers", dtype=torch.float16, variant="fp16")
pipe.to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config, use_karras_sigmas=True)

image = pipe(
    prompt='一张瓢虫的照片,微距,变焦,高质量,电影,拿着一个牌子,写着"可图"',
    negative_prompt="",
    guidance_scale=6.5,
    num_inference_steps=25,
).images[0]

image.save("kolors_sample.png")

IP Adapter

Для работы Kolors требуется другой IP Adapter, а в качестве кодировщика изображений используется Openai-CLIP-336.

Использование IP Adapter с Kolors требует более 24 ГБ видеопамяти. Для его применения на потребительских GPU мы рекомендуем использовать enable_model_cpu_offload().

Хотя Kolors интегрирован в Diffusers, для использования файлов safetensor необходимо загрузить image encoder из определённой ревизии. Если вы не против загрузки pickle-чекпоинтов, вы по-прежнему можете использовать основную ветку исходного репозитория.

import torch
from transformers import CLIPVisionModelWithProjection

from diffusers import DPMSolverMultistepScheduler, KolorsPipeline
from diffusers.utils import load_image

image_encoder = CLIPVisionModelWithProjection.from_pretrained(
    "Kwai-Kolors/Kolors-IP-Adapter-Plus",
    subfolder="image_encoder",
    low_cpu_mem_usage=True,
    dtype=torch.float16,
    revision="refs/pr/4",
)

pipe = KolorsPipeline.from_pretrained(
    "Kwai-Kolors/Kolors-diffusers", image_encoder=image_encoder, dtype=torch.float16, variant="fp16"
)
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config, use_karras_sigmas=True)

pipe.load_ip_adapter(
    "Kwai-Kolors/Kolors-IP-Adapter-Plus",
    subfolder="",
    weight_name="ip_adapter_plus_general.safetensors",
    revision="refs/pr/4",
    image_encoder_folder=None,
)
pipe.enable_model_cpu_offload()

ipa_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/kolors/cat_square.png")

image = pipe(
    prompt="best quality, high quality",
    negative_prompt="",
    guidance_scale=6.5,
    num_inference_steps=25,
    ip_adapter_image=ipa_image,
).images[0]

image.save("kolors_ipa_sample.png")

KolorsPipeline

класс diffusers.KolorsPipeline

< >

( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )

Параметры

  • vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (ChatGLMModel) — Замороженный текстовый энкодер. Kolors использует ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — токенизатор класса ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — условная архитектура U-Net для удаления шума из закодированных латентов изображения.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "False") — Определяет, следует ли всегда принудительно устанавливать эмбеддинги негативного промпта в 0. См. также конфигурацию Kwai-Kolors/Kolors-diffusers.

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

Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)

Пайплайн также наследует следующие методы загрузки:

encode_prompt

< >

( promptdevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 256 )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • do_classifier_free_guidance (bool) — использовать ли classifier free guidance
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • prompt_embeds (torch.FloatTensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.FloatTensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • max_sequence_length (int, по умолчанию 256) — максимальная длина последовательности, используемая с prompt.

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

get_guidance_scale_embedding

< >

( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor

Параметры

  • w (torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings).
  • embedding_dim (int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов.
  • dtype (torch.dtype, необязательный, по умолчанию torch.float32) — Тип данных для генерируемых эмбеддингов.

Возвращает

torch.Tensor

Векторы встраиваний с формой (len(w), embedding_dim).

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

  • все
  • call

KolorsImg2ImgPipeline

класс diffusers.KolorsImg2ImgPipeline

< >

( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )

Параметры

  • vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (ChatGLMModel) — Замороженный текстовый энкодер. Kolors использует ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — токенизатор класса ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — условная архитектура U-Net для удаления шума из закодированных латентов изображения.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "False") — Определяет, следует ли всегда принудительно устанавливать эмбеддинги негативного промпта в 0. См. также конфигурацию Kwai-Kolors/Kolors-diffusers.

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

Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)

Пайплайн также наследует следующие методы загрузки:

encode_prompt

< >

( promptdevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 256 )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • do_classifier_free_guidance (bool) — использовать ли classifier free guidance
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • prompt_embeds (torch.FloatTensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.FloatTensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • max_sequence_length (int, по умолчанию 256) — максимальная длина последовательности, используемая с prompt.

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

get_guidance_scale_embedding

< >

( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor

Параметры

  • w (torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings).
  • embedding_dim (int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов.
  • dtype (torch.dtype, необязательный, по умолчанию torch.float32) — Тип данных для генерируемых эмбеддингов.

Возвращает

torch.Tensor

Векторы встраиваний с формой (len(w), embedding_dim).

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

  • все
  • call
Update on GitHub