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

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
< source >( 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
unetpara 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 deKwai-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:
- load_lora_weights() para cargar los pesos de LoRA
- save_lora_weights() para guardar los pesos de LoRA
- load_ip_adapter() para cargar IP Adapters
encode_prompt
< source >( 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 (
strolist[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 (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scalees menor que1). - 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 entradaprompt. - 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 entradaprompt. - 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 entradanegative_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 entradanegative_prompt. - max_sequence_length (
intpor defecto 256) — Longitud máxima de secuencia para usar con elprompt.
Codifica el prompt en estados ocultos del codificador de texto.
get_guidance_scale_embedding
< source >( 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 predeterminadotorch.float32) — Tipo de datos de los embeddings generados.
Devuelve
torch.Tensor
Vectores de incrustación con forma (len(w), embedding_dim).
- todos
- call
KolorsImg2ImgPipeline
clase diffusers.KolorsImg2ImgPipeline
< source >( 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
unetpara 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 deKwai-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:
- load_lora_weights() para cargar los pesos de LoRA
- save_lora_weights() para guardar los pesos de LoRA
- load_ip_adapter() para cargar IP Adapters
encode_prompt
< source >( 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 (
strolist[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 (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scalees menor que1). - 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 entradaprompt. - 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 entradaprompt. - 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 entradanegative_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 entradanegative_prompt. - max_sequence_length (
intpor defecto 256) — Longitud máxima de secuencia para usar con elprompt.
Codifica el prompt en estados ocultos del codificador de texto.
get_guidance_scale_embedding
< source >( 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 predeterminadotorch.float32) — Tipo de datos de los embeddings generados.
Devuelve
torch.Tensor
Vectores de incrustación con forma (len(w), embedding_dim).
- todos
- call