Diffusers documentation
Kolors : Entraînement efficace d'un modèle de diffusion pour la synthèse photoréaliste d'images à partir de texte
Kolors : Entraînement efficace d'un modèle de diffusion pour la synthèse photoréaliste d'images à partir de texte

Kolors est un modèle de génération d’images à partir de texte à grande échelle, basé sur la diffusion latente, développé par l’équipe Kuaishou Kolors. Entraîné sur des milliards de paires texte-image, Kolors présente des avantages significatifs par rapport aux modèles open source et fermés, en termes de qualité visuelle, de précision sémantique complexe et de rendu du texte pour les caractères chinois et anglais. De plus, Kolors prend en charge les entrées en chinois et en anglais, démontrant de solides performances dans la compréhension et la génération de contenu spécifique au chinois. Pour plus de détails, veuillez consulter ce rapport technique.
L'abstract du rapport technique est le suivant :
Nous présentons Kolors, un modèle de diffusion latente pour la synthèse d'images à partir de texte, caractérisé par sa compréhension approfondie de l'anglais et du chinois, ainsi que par un degré impressionnant de photoréalisme. Trois idées clés ont contribué au développement de Kolors. Premièrement, contrairement au grand modèle de langage T5 utilisé dans Imagen et Stable Diffusion 3, Kolors est construit sur la base du General Language Model (GLM), ce qui renforce ses capacités de compréhension en anglais et en chinois. De plus, nous utilisons un grand modèle de langage multimodal pour réécrire les légendes de l'ensemble de données d'entraînement étendu afin d'obtenir une compréhension fine du texte. Ces stratégies améliorent considérablement la capacité de Kolors à comprendre des sémantiques complexes, en particulier celles impliquant plusieurs entités, et permettent ses avancées en matière de rendu de texte. Deuxièmement, nous divisons l'entraînement de Kolors en deux phases : la phase d'apprentissage des concepts avec des connaissances larges et la phase d'amélioration de la qualité avec des données à haute esthétique spécifiquement sélectionnées. En outre, nous étudions le rôle crucial du calendrier de bruit et introduisons un nouveau calendrier pour optimiser la génération d'images haute résolution. Ces stratégies améliorent collectivement l'attrait visuel des images haute résolution générées. Enfin, nous proposons un benchmark équilibré par catégorie, KolorsPrompts, qui sert de guide pour l'entraînement et l'évaluation de Kolors. Par conséquent, même en utilisant l'architecture U-Net couramment employée, Kolors a démontré des performances remarquables lors des évaluations humaines, surpassant les modèles open source existants et atteignant un niveau de performance comparable à Midjourney-v6, en particulier en termes d'attrait visuel. Nous publierons le code et les poids de Kolors sur https://github.com/Kwai-Kolors/Kolors, et espérons qu'ils bénéficieront aux recherches et applications futures au sein de la communauté de la génération visuelle.
Exemple d'utilisation
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 nécessite un adaptateur IP différent pour fonctionner et utilise Openai-CLIP-336 comme encodeur d'images.
L'utilisation d'un IP Adapter avec Kolors nécessite plus de 24 Go de VRAM. Pour l'utiliser, nous recommandons d'employer enable_model_cpu_offload() sur les GPU grand public.
Bien que Kolors soit intégré dans Diffusers, vous devez charger l’encodeur d’image depuis une révision pour utiliser les fichiers safetensor. Vous pouvez toujours utiliser la branche principale du dépôt d’origine si vous êtes à l’aise avec le chargement de points de contrôle 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
< source >( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )
Paramètres
- vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images vers et depuis des représentations latentes.
- text_encoder (
ChatGLMModel) — Encodeur de texte figé. Kolors utilise ChatGLM3-6B. - tokenizer (
ChatGLMTokenizer) — Tokeniseur de la classe ChatGLMTokenizer. - unet (UNet2DConditionModel) — Architecture U-Net conditionnelle pour le débruitage des latents d'image encodés.
- scheduler (SchedulerMixin) —
Un planificateur à utiliser en combinaison avec
unetpour débruyer les latents de l'image encodée. Peut être l'un des DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler. - force_zeros_for_empty_prompt (
bool, facultatif, valeur par défaut"False") — Indique si les embeddings du prompt négatif doivent être forcés à 0. Consultez également la configuration deKwai-Kolors/Kolors-diffusers.
Pipeline pour la génération d'images à partir de texte utilisant Kolors.
Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, etc.)
Le pipeline hérite également des méthodes de chargement suivantes :
- load_lora_weights() pour charger les poids LoRA
- save_lora_weights() pour enregistrer les poids LoRA
- load_ip_adapter() pour charger des 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 )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - device — (
torch.device) : torch device - num_images_per_prompt (
int) — nombre d'images à générer par invite - do_classifier_free_guidance (
bool) — indique s'il faut utiliser le classifier free guidance ou non - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-poolés pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte pré-poolés seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - negative_pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les pooled negative_prompt_embeds seront générés à partir de l'argument d'entréenegative_prompt. - max_sequence_length (
intpar défaut 256) — Longueur maximale de séquence à utiliser avec leprompt.
Encode le prompt dans les états cachés de l'encodeur de texte.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Paramètres
- w (
torch.Tensor) — Génère des vecteurs d’incorporation avec une échelle de guidage spécifiée afin d’enrichir ensuite les incorporations de pas de temps. - embedding_dim (
int, facultatif, par défaut 512) — Dimension des embeddings à générer. - dtype (
torch.dtype, facultatif, par défauttorch.float32) — Type de données des embeddings générés.
Retourne
torch.Tensor
Vecteurs d'embedding de forme (len(w), embedding_dim).
- tous
- appel
KolorsImg2ImgPipeline
classe diffusers.KolorsImg2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )
Paramètres
- vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images vers et depuis des représentations latentes.
- text_encoder (
ChatGLMModel) — Encodeur de texte figé. Kolors utilise ChatGLM3-6B. - tokenizer (
ChatGLMTokenizer) — Tokeniseur de la classe ChatGLMTokenizer. - unet (UNet2DConditionModel) — Architecture U-Net conditionnelle pour le débruitage des latents d'image encodés.
- scheduler (SchedulerMixin) —
Un planificateur à utiliser en combinaison avec
unetpour débruyer les latents de l'image encodée. Peut être l'un des DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler. - force_zeros_for_empty_prompt (
bool, facultatif, valeur par défaut"False") — Indique si les embeddings du prompt négatif doivent être forcés à 0. Consultez également la configuration deKwai-Kolors/Kolors-diffusers.
Pipeline pour la génération d'images à partir de texte utilisant Kolors.
Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, etc.)
Le pipeline hérite également des méthodes de chargement suivantes :
- load_lora_weights() pour charger les poids LoRA
- save_lora_weights() pour enregistrer les poids LoRA
- load_ip_adapter() pour charger des 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 )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - device — (
torch.device) : torch device - num_images_per_prompt (
int) — nombre d'images à générer par invite - do_classifier_free_guidance (
bool) — indique s'il faut utiliser le classifier free guidance ou non - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-poolés pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte pré-poolés seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.FloatTensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - negative_pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les pooled negative_prompt_embeds seront générés à partir de l'argument d'entréenegative_prompt. - max_sequence_length (
intpar défaut 256) — Longueur maximale de séquence à utiliser avec leprompt.
Encode le prompt dans les états cachés de l'encodeur de texte.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Paramètres
- w (
torch.Tensor) — Génère des vecteurs d’incorporation avec une échelle de guidage spécifiée afin d’enrichir ensuite les incorporations de pas de temps. - embedding_dim (
int, facultatif, par défaut 512) — Dimension des embeddings à générer. - dtype (
torch.dtype, facultatif, par défauttorch.float32) — Type de données des embeddings générés.
Retourne
torch.Tensor
Vecteurs d'embedding de forme (len(w), embedding_dim).
- tous
- appel