Diffusers documentation

Kolors: Entrenamiento eficaz de un modelo de difusión para la síntesis fotorrealista de texto a imagen

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kolors: Entrenamiento eficaz de un modelo de difusión para la síntesis fotorrealista de texto a imagen

LoRA MPS

Kolors es un modelo de generación de texto a imagen a gran escala basado en difusión latente, desarrollado por el equipo Kuaishou Kolors. Entrenado con miles de millones de pares de texto-imagen, Kolors presenta ventajas significativas frente a los modelos de código abierto y de código cerrado en calidad visual, precisión semántica compleja y renderizado de texto para caracteres chinos e ingleses. Además, Kolors admite entradas en chino e inglés, demostrando un rendimiento sólido en la comprensión y generación de contenido específico del chino. Para más detalles, consulte este informe técnico.

El resumen del informe técnico es:

Presentamos Kolors, un modelo de difusión latente para la síntesis de imágenes a partir de texto, caracterizado por su profundo entendimiento tanto del inglés como del chino, así como por un impresionante grado de fotorrealismo. Hay tres ideas clave que contribuyen al desarrollo de Kolors. En primer lugar, a diferencia del modelo de lenguaje grande T5 utilizado en Imagen y Stable Diffusion 3, Kolors se basa en el General Language Model (GLM), lo que mejora sus capacidades de comprensión tanto en inglés como en chino. Además, empleamos un modelo de lenguaje grande multimodal para recapturar el extenso conjunto de datos de entrenamiento para una comprensión del texto a nivel de detalle fino. Estas estrategias mejoran significativamente la capacidad de Kolors para comprender semánticas intrincadas, en particular aquellas que involucran múltiples entidades, y permiten sus avanzadas capacidades de renderizado de texto. En segundo lugar, dividimos el entrenamiento de Kolors en dos fases: la fase de aprendizaje de conceptos con conocimiento amplio y la fase de mejora de calidad con datos de alta estética específicamente curados. Además, investigamos el papel crítico del programa de ruido e introducimos un programa novedoso para optimizar la generación de imágenes de alta resolución. Estas estrategias, en conjunto, mejoran la atracción visual de las imágenes de alta resolución generadas. Por último, proponemos un benchmark equilibrado por categorías, KolorsPrompts, que sirve como guía para el entrenamiento y la evaluación de Kolors. En consecuencia, incluso al emplear el backbone U-Net comúnmente utilizado, Kolors ha demostrado un rendimiento notable en evaluaciones humanas, superando a los modelos de código abierto existentes y alcanzando un rendimiento a nivel de Midjourney-v6, especialmente en términos de atracción visual. Publicaremos el código y los pesos de Kolors en https://github.com/Kwai-Kolors/Kolors, y esperamos que beneficie la investigación y las aplicaciones futuras en la comunidad de generación visual.

Ejemplo 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 necesita un IP Adapter diferente para funcionar y utiliza Openai-CLIP-336 como codificador de imágenes.

Usar un IP Adapter con Kolors requiere más de 24 GB de VRAM. Para usarlo, recomendamos emplear enable_model_cpu_offload() en GPUs de consumo.

Aunque Kolors está integrado en Diffusers, necesitas cargar el codificador de imágenes desde una revisión para usar los archivos safetensor. Aún puedes usar la rama principal del repositorio original si te sientes cómodo cargando puntos de control en formato 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

clase 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 y decodificar imágenes a partir de y hacia representaciones latentes.
  • text_encoder (ChatGLMModel) — Codificador de texto congelado. Kolors utiliza ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — Tokenizer de la clase ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — Arquitectura U-Net condicional para desruidar los latentes de imagen codificados.
  • scheduler (SchedulerMixin) — Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada. Puede ser uno de DDIMScheduler, LMSDiscreteScheduler o PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, opcional, valor predeterminado "False") — Si las incrustaciones del prompt negativo deben forzarse a establecerse siempre en 0. Consulte también la configuración de Kwai-Kolors/Kolors-diffusers.

Pipeline para la generación de imágenes a partir de texto usando Kolors.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)

El pipeline también hereda los siguientes métodos de carga:

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 o list[str], opcional) — prompt a codificar
  • device — (torch.device): dispositivo de torch
  • num_images_per_prompt (int) — número de imágenes que deben generarse por prompt
  • do_classifier_free_guidance (bool) — si se debe usar classifier free guidance o no
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • pooled_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto agrupadas pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporciona, las incrustaciones de texto agrupadas se generarán a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo agrupadas pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, se generarán pooled negative_prompt_embeds a partir del argumento de entrada negative_prompt.
  • max_sequence_length (int por defecto 256) — Longitud máxima de secuencia para usar con el prompt.

Codifica el prompt en estados ocultos del codificador de texto.

get_guidance_scale_embedding

< >

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

Parámetros

  • w (torch.Tensor) — Genera vectores de incrustación con una escala de orientación especificada para enriquecer posteriormente las incrustaciones de paso temporal.
  • embedding_dim (int, opcional, valor predeterminado 512) — Dimensión de los embeddings a generar.
  • dtype (torch.dtype, opcional, valor predeterminado torch.float32) — Tipo de datos de los embeddings generados.

Devuelve

torch.Tensor

Vectores de incrustación con forma (len(w), embedding_dim).

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

  • todos
  • call

KolorsImg2ImgPipeline

clase 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 y decodificar imágenes a partir de y hacia representaciones latentes.
  • text_encoder (ChatGLMModel) — Codificador de texto congelado. Kolors utiliza ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — Tokenizer de la clase ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — Arquitectura U-Net condicional para desruidar los latentes de imagen codificados.
  • scheduler (SchedulerMixin) — Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada. Puede ser uno de DDIMScheduler, LMSDiscreteScheduler o PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, opcional, valor predeterminado "False") — Si las incrustaciones del prompt negativo deben forzarse a establecerse siempre en 0. Consulte también la configuración de Kwai-Kolors/Kolors-diffusers.

Pipeline para la generación de imágenes a partir de texto usando Kolors.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)

El pipeline también hereda los siguientes métodos de carga:

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 o list[str], opcional) — prompt a codificar
  • device — (torch.device): dispositivo de torch
  • num_images_per_prompt (int) — número de imágenes que deben generarse por prompt
  • do_classifier_free_guidance (bool) — si se debe usar classifier free guidance o no
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • pooled_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto agrupadas pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporciona, las incrustaciones de texto agrupadas se generarán a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo agrupadas pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, se generarán pooled negative_prompt_embeds a partir del argumento de entrada negative_prompt.
  • max_sequence_length (int por defecto 256) — Longitud máxima de secuencia para usar con el prompt.

Codifica el prompt en estados ocultos del codificador de texto.

get_guidance_scale_embedding

< >

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

Parámetros

  • w (torch.Tensor) — Genera vectores de incrustación con una escala de orientación especificada para enriquecer posteriormente las incrustaciones de paso temporal.
  • embedding_dim (int, opcional, valor predeterminado 512) — Dimensión de los embeddings a generar.
  • dtype (torch.dtype, opcional, valor predeterminado torch.float32) — Tipo de datos de los embeddings generados.

Devuelve

torch.Tensor

Vectores de incrustación con forma (len(w), embedding_dim).

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

  • todos
  • call
Update on GitHub