Buckets:

mishig's picture
|
download
raw
19.1 kB

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, metinden görüntüye sentez için derinlemesine İngilizce ve Çince 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 için ç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 iyileştirir ve gelişmiş metin renderlama yeteneklerini 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 kritik rolünü inceliyor ve yüksek çözünürlüklü görüntü üretimini optimize etmek için yeni bir zamanlama sunuyoruz. Bu stratejiler, üretilen yüksek çözünürlüklü görüntülerin görsel çekiciliğini kolektif olarak artırır. Son olarak, Kolors'un eğitim ve değerlendirmesi için bir kılavuz görevi gören, kategori dengeli bir benchmark olan KolorsPrompts'u öneriyoruz. Sonuç olarak, yaygın olarak kullanılan U-Net omurgasını kullanmasına rağmen, Kolors insan değerlendirmelerinde olağanüstü performans göstermiş, 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ı 'de yayınlayacağız ve bunun görsel üretim topluluğundaki gelecekteki araştırmalara ve uygulamalara fayda sağlayacağı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[[diffusers.KolorsPipeline]]

diffusers.KolorsPipeline[[diffusers.KolorsPipeline]]

diffusers.KolorsPipeline(vae: AutoencoderKL, text_encoder: ChatGLMModel, tokenizer: ChatGLMTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, force_zeros_for_empty_prompt: bool = False)

Kaynak

Parametreler:

vae (AutoencoderKL) : Görüntüleri gizil (latent) temsillere kodlamak ve bu temsillerden görüntülere çö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) : ChatGLMTokenizer sınıfının tokenizer'ı.

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 unet ile 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 istem gömme değerlerinin her zaman 0 olarak ayarlanıp ayarlanmayacağı. Ayrıca Kwai-Kolors/Kolors-diffusers yapı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:

encode_prompt[[diffusers.KolorsPipeline.encode_prompt]]

encode_prompt(prompt, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 256)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : kodlanacak istem

device : (torch.device): torch cihazı

num_images_per_prompt (int) : her istem için oluşturulacak görsel sayısı

do_classifier_free_guidance (bool) : sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı

negative_prompt (str veya list[str], isteğe bağlı) : Görsel üretimi yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine negative_prompt_embeds parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani guidance_scale değeri 1'den küçükse) yok sayılır.

prompt_embeds (torch.FloatTensor, isteğe bağlı) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri prompt girdi 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ğerleri prompt girdi 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_prompt girdi argümanından oluşturulur.

negative_pooled_prompt_embeds (torch.Tensor, isteğe bağlı) : Ön 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_prompt girdi argümanından oluşturulacaktır.

max_sequence_length (int varsayılan olarak 256'dir) : prompt ile kullanılacak maksimum dizi uzunluğu.

İsteği metin kodlayıcı gizli durumlarına kodlar.

get_guidance_scale_embedding[[diffusers.KolorsPipeline.get_guidance_scale_embedding]]

get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)

Kaynak

Parametreler:

w (torch.Tensor) : Belirtilen bir yönlendirme ölçeğiyle gömme vektörleri üretir; bu vektörler daha sonra zaman adımları gömmelerini zenginleştirmek için kullanılır.

embedding_dim (int, isteğe bağlı, varsayılan 512) : Üretilecek gömme boyutu.

dtype (torch.dtype, isteğe bağlı, varsayılan torch.float32) : Üretilen gömme (embedding) verilerinin veri türü.

Dönüş: torch.Tensor

(len(w), embedding_dim) biçiminde gömme vektörleri.

https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298 adresine bakın

  • tümü
  • call

KolorsImg2ImgPipeline[[diffusers.KolorsImg2ImgPipeline]]

diffusers.KolorsImg2ImgPipeline[[diffusers.KolorsImg2ImgPipeline]]

diffusers.KolorsImg2ImgPipeline(vae: AutoencoderKL, text_encoder: ChatGLMModel, tokenizer: ChatGLMTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, force_zeros_for_empty_prompt: bool = False)

Kaynak

Parametreler:

vae (AutoencoderKL) : Görüntüleri gizil (latent) temsillere kodlamak ve bu temsillerden görüntülere çö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) : ChatGLMTokenizer sınıfının tokenizer'ı.

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 unet ile 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 istem gömme değerlerinin her zaman 0 olarak ayarlanıp ayarlanmayacağı. Ayrıca Kwai-Kolors/Kolors-diffusers yapı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:

encode_prompt[[diffusers.KolorsImg2ImgPipeline.encode_prompt]]

encode_prompt(prompt, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 256)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : kodlanacak istem

device : (torch.device): torch cihazı

num_images_per_prompt (int) : her istem için oluşturulacak görsel sayısı

do_classifier_free_guidance (bool) : sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı

negative_prompt (str veya list[str], isteğe bağlı) : Görsel üretimi yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine negative_prompt_embeds parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani guidance_scale değeri 1'den küçükse) yok sayılır.

prompt_embeds (torch.FloatTensor, isteğe bağlı) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri prompt girdi 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ğerleri prompt girdi 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_prompt girdi argümanından oluşturulur.

negative_pooled_prompt_embeds (torch.Tensor, isteğe bağlı) : Ön 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_prompt girdi argümanından oluşturulacaktır.

max_sequence_length (int varsayılan olarak 256'dir) : prompt ile kullanılacak maksimum dizi uzunluğu.

İsteği metin kodlayıcı gizli durumlarına kodlar.

get_guidance_scale_embedding[[diffusers.KolorsImg2ImgPipeline.get_guidance_scale_embedding]]

get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)

Kaynak

Parametreler:

w (torch.Tensor) : Belirtilen bir yönlendirme ölçeğiyle gömme vektörleri üretir; bu vektörler daha sonra zaman adımları gömmelerini zenginleştirmek için kullanılır.

embedding_dim (int, isteğe bağlı, varsayılan 512) : Üretilecek gömme boyutu.

dtype (torch.dtype, isteğe bağlı, varsayılan torch.float32) : Üretilen gömme (embedding) verilerinin veri türü.

Dönüş: torch.Tensor

(len(w), embedding_dim) biçiminde gömme vektörleri.

https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298 adresine bakın

  • tümü
  • call

Xet Storage Details

Size:
19.1 kB
·
Xet hash:
bcfb5c3af8d53cfa24b84f55a07e43c82e85560fff080b437169e7bb75fe0099

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.