Diffusers 文档

Kolors:用于逼真文本到图像合成的扩散模型的有效训练

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Kolors:用于逼真文本到图像合成的扩散模型的有效训练

LoRA MPS

Kolors 是由快手 Kolors 团队开发的一种基于潜在扩散的大规模文本到图像生成模型。Kolors 在数十亿文本图像对上进行训练,在视觉质量、复杂语义准确性以及中英文文本渲染方面,相较于开源和闭源模型都展现出显著优势。此外,Kolors 支持中英文输入,在理解和生成中文特定内容方面表现出强大的性能。更多详情,请参阅这份技术报告

技术报告摘要如下:

我们推出了 Kolors,这是一种用于文本到图像合成的潜在扩散模型,其特点是对英语和汉语都有深刻的理解,并具有令人印象深刻的逼真度。Kolors 的开发有三个关键见解。首先,与 Imagen 和 Stable Diffusion 3 中使用的大型语言模型 T5 不同,Kolors 基于通用语言模型 (GLM) 构建,这增强了其在中英文方面的理解能力。此外,我们采用多模态大型语言模型对大量训练数据集进行重新标注,以实现细粒度的文本理解。这些策略显著提升了 Kolors 理解复杂语义(特别是涉及多个实体)的能力,并使其具备了先进的文本渲染能力。其次,我们将 Kolors 的训练分为两个阶段:具有广泛知识的概念学习阶段和通过专门策划的高美学数据进行质量改进的阶段。此外,我们研究了噪声调度表的关键作用,并引入了一种新颖的调度表来优化高分辨率图像生成。这些策略共同提升了生成高分辨率图像的视觉吸引力。最后,我们提出了一个类别平衡基准 KolorsPrompts,作为 Kolors 训练和评估的指导。因此,即使采用常用的 U-Net 主干网络,Kolors 在人类评估中也表现出了卓越的性能,超越了现有的开源模型,并达到了 Midjourney-v6 级别的性能,尤其是在视觉吸引力方面。我们将在https://github.com/Kwai-Kolors/Kolors发布 Kolors 的代码和权重,希望它能造福视觉生成社区未来的研究和应用。

使用示例

import torch

from diffusers import DPMSolverMultistepScheduler, KolorsPipeline

pipe = KolorsPipeline.from_pretrained("Kwai-Kolors/Kolors-diffusers", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")
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 适配器才能工作,并且它使用 Openai-CLIP-336 作为图像编码器。

使用 IP 适配器与 Kolors 配合需要超过 24GB 的显存。要使用它,我们建议在消费级 GPU 上使用 enable_model_cpu_offload()

虽然 Kolors 已集成到 Diffusers 中,但您需要从某个修订版加载图像编码器才能使用 safetensor 文件。如果您习惯加载 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,
    torch_dtype=torch.float16,
    revision="refs/pr/4",
)

pipe = KolorsPipeline.from_pretrained(
    "Kwai-Kolors/Kolors-diffusers", image_encoder=image_encoder, torch_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

class diffusers.KolorsPipeline

< >

( vae: AutoencoderKL text_encoder: ChatGLMModel tokenizer: ChatGLMTokenizer unet: UNet2DConditionModel scheduler: KarrasDiffusionSchedulers image_encoder: CLIPVisionModelWithProjection = None feature_extractor: CLIPImageProcessor = None force_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 结合使用的调度器,用于对编码图像潜在表示进行去噪。可以是 DDIMSchedulerLMSDiscreteSchedulerPNDMScheduler 中的一种。
  • force_zeros_for_empty_prompt (bool, 可选, 默认为 "False") — 负面提示词嵌入是否强制始终设置为 0。另请参阅 Kwai-Kolors/Kolors-diffusers 的配置。

用于文本到图像生成的 Kolors 管道。

此模型继承自 DiffusionPipeline。请查看超类文档,了解库为所有管道实现的通用方法(例如下载或保存、在特定设备上运行等)。

该管道还继承了以下加载方法

encode_prompt

< >

( prompt device: typing.Optional[torch.device] = None num_images_per_prompt: int = 1 do_classifier_free_guidance: bool = True negative_prompt = None prompt_embeds: typing.Optional[torch.FloatTensor] = None pooled_prompt_embeds: typing.Optional[torch.Tensor] = None negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None max_sequence_length: int = 256 )

参数

  • prompt (strList[str], 可选) — 待编码的提示词
  • device — (torch.device): torch 设备
  • num_images_per_prompt (int) — 每个提示词应生成的图像数量
  • do_classifier_free_guidance (bool) — 是否使用分类器自由引导
  • negative_prompt (strList[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: Tensor embedding_dim: int = 512 dtype: dtype = torch.float32 ) torch.Tensor

参数

  • w (torch.Tensor) — 生成具有指定引导尺度的嵌入向量,以随后丰富时间步嵌入。
  • 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

  • all
  • 调用

KolorsImg2ImgPipeline

class diffusers.KolorsImg2ImgPipeline

< >

( vae: AutoencoderKL text_encoder: ChatGLMModel tokenizer: ChatGLMTokenizer unet: UNet2DConditionModel scheduler: KarrasDiffusionSchedulers image_encoder: CLIPVisionModelWithProjection = None feature_extractor: CLIPImageProcessor = None force_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 结合使用的调度器,用于对编码图像潜在表示进行去噪。可以是 DDIMSchedulerLMSDiscreteSchedulerPNDMScheduler 之一。
  • force_zeros_for_empty_prompt (bool, 可选, 默认为 "False") — 是否强制将负面提示嵌入始终设置为 0。另请参阅 Kwai-Kolors/Kolors-diffusers 的配置。

用于文本到图像生成的 Kolors 管道。

此模型继承自 DiffusionPipeline。请查看超类文档,了解库为所有管道实现的通用方法(例如下载或保存、在特定设备上运行等)。

该管道还继承了以下加载方法

encode_prompt

< >

( prompt device: typing.Optional[torch.device] = None num_images_per_prompt: int = 1 do_classifier_free_guidance: bool = True negative_prompt = None prompt_embeds: typing.Optional[torch.FloatTensor] = None pooled_prompt_embeds: typing.Optional[torch.Tensor] = None negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None max_sequence_length: int = 256 )

参数

  • prompt (strList[str], 可选) — 待编码的提示词
  • device — (torch.device): torch 设备
  • num_images_per_prompt (int) — 每个提示词应生成的图像数量
  • do_classifier_free_guidance (bool) — 是否使用无分类器指导
  • negative_prompt (strList[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 输入参数生成。
  • max_sequence_length (int 默认为 256) — 与 prompt 一起使用的最大序列长度。

将提示编码为文本编码器隐藏状态。

get_guidance_scale_embedding

< >

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

参数

  • w (torch.Tensor) — 生成具有指定指导比例的嵌入向量,以随后丰富时间步嵌入。
  • 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

  • all
  • 调用
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.