Diffusers documentation
Kolors: Fotoğerçekçi Metinden Görüntüye Sentez İçin Difüzyon Modelinin Etkili Eğitimi
Kolors: Fotoğerçekçi Metinden Görüntüye Sentez İçin Difüzyon Modelinin Etkili Eğitimi

Kolors, Kuaishou Kolors ekibi tarafından geliştirilen, latent difüzyona dayalı büyük ölçekli metinden görüntüye üretim modelidir. Milyarlarca metin-görüntü çifti üzerinde eğitilen Kolors, görsel kalite, karmaşık semantik doğruluğu ve hem Çince hem de İngilizce karakterlerde metin işleme konularında hem açık kaynaklı hem de kapalı kaynaklı modellere kıyasla belirgin avantajlar sunar. Ayrıca Kolors, hem Çince hem de İngilizce girdileri destekleyerek Çin'e özgü içeriğin anlaşılması ve üretilmesinde güçlü bir performans sergiler. Daha fazla ayrıntı için bu teknik rapora bakın.
Teknik rapordan alınan özet şudur:
Kolors'u sunuyoruz; metinden görüntüye sentez için tasarlanmış, İngilizce ve Çince'de derinlemesine anlama yeteneğine ve etkileyici bir fotogerçekçilik derecesine sahip bir latent difüzyon modelidir. Kolors'un geliştirilmesine katkıda bulunan üç temel içgörü bulunmaktadır. Birincisi, Imagen ve Stable Diffusion 3'te kullanılan büyük dil modeli T5'in aksine, Kolors, İngilizce ve Çince'deki anlama yeteneklerini artıran Genel Dil Modeli (GLM) üzerine inşa edilmiştir. Ayrıca, ince taneli metin anlama için kapsamlı eğitim veri setini yeniden başlıklandırmak üzere çok modlu büyük bir dil modeli kullanıyoruz. Bu stratejiler, özellikle birden fazla varlık içeren karmaşık anlamları anlama konusunda Kolors'un yeteneğini önemli ölçüde artırır ve gelişmiş metin renderlama özelliklerini mümkün kılar. İkincisi, Kolors'un eğitimini iki aşamaya bölüyoruz: geniş bilgiye sahip kavram öğrenme aşaması ve özellikle seçilmiş yüksek estetik verilerle kalite iyileştirme aşaması. Bunun yanı sıra, gürültü zamanlamasının (noise schedule) kritik rolünü inceliyor ve yüksek çözünürlüklü görüntü üretimini optimize etmek için yeni bir zamanlama öneriyoruz. Bu stratejiler, birlikte, üretilen yüksek çözünürlüklü görüntülerin görsel çekiciliğini artırır. Son olarak, Kolors'un eğitim ve değerlendirmesi için bir rehber görevi gören, kategori dengeli bir referans seti (benchmark) olan KolorsPrompts'u öneriyoruz. Sonuç olarak, yaygın olarak kullanılan U-Net omurgasını (backbone) kullanmasına rağmen Kolors, insan değerlendirmelerinde olağanüstü bir performans sergilemiş, mevcut açık kaynaklı modelleri geride bırakmış ve özellikle görsel çekicilik açısından Midjourney-v6 seviyesinde performans elde etmiştir. Kolors'un kodunu ve ağırlıklarını https://github.com/Kwai-Kolors/Kolors adresinde yayınlayacağız ve görsel üretim topluluğundaki gelecekteki araştırmalara ve uygulamalara fayda sağlamasını umuyoruz.
Kullanım Örneği
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 çalışması için farklı bir IP Adapter gereklidir ve görüntü kodlayıcı olarak Openai-CLIP-336 kullanır.
Kolors ile bir IP Adapter kullanmak 24GB'tan fazla VRAM gerektirir. Bunu kullanmak için tüketici GPU'larında enable_model_cpu_offload() kullanmanızı öneririz.
Kolors, Diffusers içinde entegre edilmiştir ancak safetensor dosyalarını kullanmak için görüntü kodlayıcıyı bir revizyondan yüklemeniz gerekir. pickle checkpoint'lerini yüklemekte sorun yaşamıyorsanız, orijinal repozituarın ana dalını kullanmaya devam edebilirsiniz.
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
sınıf diffusers.KolorsPipeline
< source >( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )
Parametreler
- vae (AutoencoderKL) — Görselleri latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.
- text_encoder (
ChatGLMModel) — Donmuş metin kodlayıcı. Kolors ChatGLM3-6B kullanır. - tokenizer (
ChatGLMTokenizer) — Tokenizer of class ChatGLMTokenizer. - unet (UNet2DConditionModel) — Kodlanmış görüntü latentlerini gürültüden arındırmak için koşullu U-Net mimarisi.
- scheduler (SchedulerMixin) —
Kodlanmış görüntü latentlerini gürültüden arındırmak için
unetile birlikte kullanılacak bir zamanlayıcı. DDIMScheduler, LMSDiscreteScheduler veya PNDMScheduler olabilir. - force_zeros_for_empty_prompt (
bool, isteğe bağlı, varsayılan"False") — Negatif istek gömme değerlerinin her zaman 0 olarak ayarlanıp ayarlanmayacağına dair. AyrıcaKwai-Kolors/Kolors-diffusersyapılandırmasına da bakın.
Kolors kullanılarak metinden görüntüye üretim için Pipeline.
Bu model DiffusionPipeline sınıfından devralır. Kütüphanenin tüm pipeline'lar için uyguladığı genel yöntemler (indirme veya kaydetme, belirli bir cihazda çalıştırma vb.) için üst sınıf belgelendirmesine bakın.
Pipeline ayrıca aşağıdaki yükleme yöntemlerini devralır:
- LoRA ağırlıklarını yüklemek için load_lora_weights()
- LoRA ağırlıklarını kaydetmek için save_lora_weights()
- IP Adapter'ları yüklemek için load_ip_adapter()
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 )
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — kodlanacak prompt - device — (
torch.device): torch cihazı - num_images_per_prompt (
int) — her prompt için oluşturulacak görsel sayısı - do_classifier_free_guidance (
bool) — classifier free guidance kullanılacak mı - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmamışsa, bunun yerinenegative_prompt_embedsparametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yaniguidance_scaledeğeri1'den küçükse) yok sayılır. - prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından oluşturulur. - pooled_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş havuzlanmış metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, havuzlanmış metin gömme değerleripromptgirdi argümanından oluşturulur. - negative_prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - negative_pooled_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif havuzlanmış metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, havuzlanmış negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - max_sequence_length (
int, varsayılan 256) —promptile kullanılacak maksimum dizi uzunluğu.
İsteği metin kodlayıcı gizli durumlarına kodlar.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Parametreler
- w (
torch.Tensor) — Belirtilen bir yönlendirme ölçeğiyle gömme vektörleri üretin ve ardından zaman adımları gömmelerini zenginleştirmek için kullanın. - embedding_dim (
int, isteğe bağlı, varsayılan 512) — Oluşturulacak gömme boyutu. - dtype (
torch.dtype, isteğe bağlı, varsayılantorch.float32) — Oluşturulan gömme vektörlerinin veri türü.
Dönüş değeri
torch.Tensor
(len(w), embedding_dim) biçiminde gömme vektörleri.
- tümü
- call
KolorsImg2ImgPipeline
sınıf diffusers.KolorsImg2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )
Parametreler
- vae (AutoencoderKL) — Görselleri latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.
- text_encoder (
ChatGLMModel) — Donmuş metin kodlayıcı. Kolors ChatGLM3-6B kullanır. - tokenizer (
ChatGLMTokenizer) — Tokenizer of class ChatGLMTokenizer. - unet (UNet2DConditionModel) — Kodlanmış görüntü latentlerini gürültüden arındırmak için koşullu U-Net mimarisi.
- scheduler (SchedulerMixin) —
Kodlanmış görüntü latentlerini gürültüden arındırmak için
unetile birlikte kullanılacak bir zamanlayıcı. DDIMScheduler, LMSDiscreteScheduler veya PNDMScheduler olabilir. - force_zeros_for_empty_prompt (
bool, isteğe bağlı, varsayılan"False") — Negatif istek gömme değerlerinin her zaman 0 olarak ayarlanıp ayarlanmayacağına dair. AyrıcaKwai-Kolors/Kolors-diffusersyapılandırmasına da bakın.
Kolors kullanılarak metinden görüntüye üretim için Pipeline.
Bu model DiffusionPipeline sınıfından devralır. Kütüphanenin tüm pipeline'lar için uyguladığı genel yöntemler (indirme veya kaydetme, belirli bir cihazda çalıştırma vb.) için üst sınıf belgelendirmesine bakın.
Pipeline ayrıca aşağıdaki yükleme yöntemlerini devralır:
- LoRA ağırlıklarını yüklemek için load_lora_weights()
- LoRA ağırlıklarını kaydetmek için save_lora_weights()
- IP Adapter'ları yüklemek için load_ip_adapter()
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 )
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — kodlanacak prompt - device — (
torch.device): torch cihazı - num_images_per_prompt (
int) — her prompt için oluşturulacak görsel sayısı - do_classifier_free_guidance (
bool) — classifier free guidance kullanılacak mı - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmamışsa, bunun yerinenegative_prompt_embedsparametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yaniguidance_scaledeğeri1'den küçükse) yok sayılır. - prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından oluşturulur. - pooled_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş havuzlanmış metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, havuzlanmış metin gömme değerleripromptgirdi argümanından oluşturulur. - negative_prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - negative_pooled_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif havuzlanmış metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, havuzlanmış negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - max_sequence_length (
int, varsayılan 256) —promptile kullanılacak maksimum dizi uzunluğu.
İsteği metin kodlayıcı gizli durumlarına kodlar.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Parametreler
- w (
torch.Tensor) — Belirtilen bir yönlendirme ölçeğiyle gömme vektörleri üretin ve ardından zaman adımları gömmelerini zenginleştirmek için kullanın. - embedding_dim (
int, isteğe bağlı, varsayılan 512) — Oluşturulacak gömme boyutu. - dtype (
torch.dtype, isteğe bağlı, varsayılantorch.float32) — Oluşturulan gömme vektörlerinin veri türü.
Dönüş değeri
torch.Tensor
(len(w), embedding_dim) biçiminde gömme vektörleri.
- tümü
- call