Diffusers documentation

Kolors: Treinamento eficaz de modelo de difusão para síntese fotorealista de texto para imagem

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: Treinamento eficaz de modelo de difusão para síntese fotorealista de texto para imagem

LoRA MPS

Kolors é um modelo de geração de texto para imagem em larga escala baseado em difusão latente, desenvolvido pela equipe Kuaishou Kolors. Treinado em bilhões de pares de texto-imagem, o Kolors apresenta vantagens significativas em relação a modelos de código aberto e fechados em qualidade visual, precisão semântica complexa e renderização de texto para caracteres em chinês e inglês. Além disso, o Kolors suporta entradas em chinês e inglês, demonstrando forte desempenho na compreensão e geração de conteúdo específico do chinês. Para mais detalhes, consulte este relatório técnico.

O resumo do relatório técnico é:

Apresentamos o Kolors, um modelo de difusão latente para síntese de texto para imagem, caracterizado por seu profundo entendimento do inglês e do chinês, bem como por um impressionante grau de fotorrealismo. Há três insights-chave que contribuem para o desenvolvimento do Kolors. Em primeiro lugar, diferentemente do grande modelo de linguagem T5 usado no Imagen e no Stable Diffusion 3, o Kolors é construído sobre o General Language Model (GLM), o que aprimora suas capacidades de compreensão tanto em inglês quanto em chinês. Além disso, empregamos um grande modelo de linguagem multimodal para recapturar o extenso conjunto de dados de treinamento para uma compreensão de texto de granularidade fina. Essas estratégias melhoram significativamente a capacidade do Kolors de compreender semânticas intrincadas, particularmente aquelas envolvendo múltiplas entidades, e permitem suas avançadas capacidades de renderização de texto. Em segundo lugar, dividimos o treinamento do Kolors em duas fases: a fase de aprendizado de conceitos com conhecimento amplo e a fase de melhoria de qualidade com dados de alta estética especificamente curados. Além disso, investigamos o papel crítico do agendamento de ruído e introduzimos um agendamento novo para otimizar a geração de imagens em alta resolução. Essas estratégias, coletivamente, aprimoram o apelo visual das imagens em alta resolução geradas. Por fim, propomos um benchmark balanceado por categoria, o KolorsPrompts, que serve como guia para o treinamento e a avaliação do Kolors. Consequentemente, mesmo ao empregar o backbone U-Net comumente utilizado, o Kolors demonstrou desempenho notável em avaliações humanas, superando os modelos open-source existentes e alcançando desempenho no nível do Midjourney-v6, especialmente em termos de apelo visual. Lançaremos o código e os pesos do Kolors em https://github.com/Kwai-Kolors/Kolors, e esperamos que isso benefite pesquisas e aplicações futuras na comunidade de geração visual.

Exemplo de uso

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 precisa de um IP Adapter diferente para funcionar e usa Openai-CLIP-336 como codificador de imagem.

Usar um IP Adapter com Kolors requer mais de 24GB de VRAM. Para usá-lo, recomendamos usar enable_model_cpu_offload() em GPUs de consumo.

Embora o Kolors esteja integrado ao Diffusers, você precisa carregar o codificador de imagem de uma revisão para usar os arquivos safetensor. Você ainda pode usar o branch principal do repositório original, se estiver confortável carregando checkpoints 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

classe diffusers.KolorsPipeline

< >

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

Parâmetros

  • vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
  • text_encoder (ChatGLMModel) — Codificador de texto congelado. O Kolors usa ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — Tokenizer da classe ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — Arquitetura U-Net condicional para desruidar os latentes da imagem codificada.
  • scheduler (SchedulerMixin) — Um scheduler a ser usado em combinação com unet para desruidar os latentes da imagem codificada. Pode ser um de DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, opcional, padrão "False") — Se as embeddings do prompt negativo devem ser forçadas a serem sempre definidas como 0. Veja também a configuração de Kwai-Kolors/Kolors-diffusers.

Pipeline para geração de texto para imagem usando Kolors.

Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os pipelines (como download ou salvamento, execução em um dispositivo específico, etc.)

O pipeline também herda os seguintes métodos de carregamento:

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 )

Parâmetros

  • prompt (str ou list[str], opcional) — prompt a ser codificado
  • device — (torch.device): dispositivo torch
  • num_images_per_prompt (int) — número de imagens que devem ser geradas por prompt
  • do_classifier_free_guidance (bool) — se deve usar classifier free guidance ou não
  • negative_prompt (str ou list[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passar negative_prompt_embeds em vez disso. Ignorado quando não se usa orientação (ou seja, ignorado se guidance_scale for menor que 1).
  • prompt_embeds (torch.FloatTensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entrada prompt.
  • pooled_prompt_embeds (torch.Tensor, opcional) — Embeddings de texto agrupados pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não fornecidos, os embeddings de texto agrupados serão gerados a partir do argumento de entrada prompt.
  • negative_prompt_embeds (torch.FloatTensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entrada negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, opcional) — Embeddings de texto negativo pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompt. Se não for fornecido, os pooled negative_prompt_embeds serão gerados a partir do argumento de entrada negative_prompt.
  • max_sequence_length (int padrão 256) — Comprimento máximo da sequência a ser usado com o prompt.

Codifica o prompt em estados ocultos do codificador de texto.

get_guidance_scale_embedding

< >

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

Parâmetros

  • w (torch.Tensor) — Gera vetores de incorporação com uma escala de orientação especificada para, em seguida, enriquecer as incorporações de passo de tempo.
  • embedding_dim (int, opcional, padrão 512) — Dimensão dos embeddings a serem gerados.
  • dtype (torch.dtype, opcional, padrão torch.float32) — Tipo de dados dos embeddings gerados.

Retorna

torch.Tensor

Vetores de incorporação com forma (len(w), embedding_dim).

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

  • todos
  • call

KolorsImg2ImgPipeline

classe diffusers.KolorsImg2ImgPipeline

< >

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

Parâmetros

  • vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
  • text_encoder (ChatGLMModel) — Codificador de texto congelado. O Kolors usa ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — Tokenizer da classe ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — Arquitetura U-Net condicional para desruidar os latentes da imagem codificada.
  • scheduler (SchedulerMixin) — Um scheduler a ser usado em combinação com unet para desruidar os latentes da imagem codificada. Pode ser um de DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, opcional, padrão "False") — Se as embeddings do prompt negativo devem ser forçadas a serem sempre definidas como 0. Veja também a configuração de Kwai-Kolors/Kolors-diffusers.

Pipeline para geração de texto para imagem usando Kolors.

Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os pipelines (como download ou salvamento, execução em um dispositivo específico, etc.)

O pipeline também herda os seguintes métodos de carregamento:

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 )

Parâmetros

  • prompt (str ou list[str], opcional) — prompt a ser codificado
  • device — (torch.device): dispositivo torch
  • num_images_per_prompt (int) — número de imagens que devem ser geradas por prompt
  • do_classifier_free_guidance (bool) — se deve usar classifier free guidance ou não
  • negative_prompt (str ou list[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passar negative_prompt_embeds em vez disso. Ignorado quando não se usa orientação (ou seja, ignorado se guidance_scale for menor que 1).
  • prompt_embeds (torch.FloatTensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entrada prompt.
  • pooled_prompt_embeds (torch.Tensor, opcional) — Embeddings de texto agrupados pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não fornecidos, os embeddings de texto agrupados serão gerados a partir do argumento de entrada prompt.
  • negative_prompt_embeds (torch.FloatTensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entrada negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, opcional) — Embeddings de texto negativo pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompt. Se não for fornecido, os pooled negative_prompt_embeds serão gerados a partir do argumento de entrada negative_prompt.
  • max_sequence_length (int padrão 256) — Comprimento máximo da sequência a ser usado com o prompt.

Codifica o prompt em estados ocultos do codificador de texto.

get_guidance_scale_embedding

< >

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

Parâmetros

  • w (torch.Tensor) — Gera vetores de incorporação com uma escala de orientação especificada para, em seguida, enriquecer as incorporações de passo de tempo.
  • embedding_dim (int, opcional, padrão 512) — Dimensão dos embeddings a serem gerados.
  • dtype (torch.dtype, opcional, padrão torch.float32) — Tipo de dados dos embeddings gerados.

Retorna

torch.Tensor

Vetores de incorporação com forma (len(w), embedding_dim).

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

  • todos
  • call
Update on GitHub