Diffusers documentation

Kolors: Pelatihan Efektif Model Difusi untuk Sintesis Teks-ke-Gambar yang Fotorealistis

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kolors: Pelatihan Efektif Model Difusi untuk Sintesis Teks-ke-Gambar yang Fotorealistis

LoRA MPS

Kolors adalah model generasi teks-ke-gambar berskala besar berbasis difusi laten, yang dikembangkan oleh tim Kuaishou Kolors. Dilatih pada miliaran pasangan teks-gambar, Kolors menunjukkan keunggulan signifikan dibandingkan model open-source maupun closed-source dalam hal kualitas visual, akurasi semantik kompleks, dan render teks untuk karakter bahasa Mandarin dan Inggris. Selain itu, Kolors mendukung input dalam bahasa Mandarin dan Inggris, serta menunjukkan kinerja yang kuat dalam memahami dan menghasilkan konten spesifik bahasa Mandarin. Untuk detail lebih lanjut, silakan merujuk pada laporan teknis ini.

Abstrak dari laporan teknisnya adalah:

Kami memperkenalkan Kolors, sebuah model difusi laten untuk sintesis teks-ke-gambar, yang ditandai dengan pemahaman mendalam terhadap bahasa Inggris dan Mandarin, serta tingkat fotorealisme yang mengesankan. Terdapat tiga wawasan kunci yang berkontribusi pada pengembangan Kolors. Pertama, berbeda dengan model bahasa besar T5 yang digunakan dalam Imagen dan Stable Diffusion 3, Kolors dibangun di atas General Language Model (GLM), yang meningkatkan kemampuannya dalam memahami bahasa Inggris dan Mandarin. Selain itu, kami menggunakan model bahasa besar multimodal untuk membuat ulang keterangan (recaption) pada dataset pelatihan yang luas guna pemahaman teks yang lebih rinci. Strategi-strategi ini secara signifikan meningkatkan kemampuan Kolors dalam memahami semantik yang rumit, terutama yang melibatkan banyak entitas, serta memungkinkan kemampuan rendering teksnya yang canggih. Kedua, kami membagi pelatihan Kolors menjadi dua fase: fase pembelajaran konsep dengan pengetahuan yang luas dan fase peningkatan kualitas dengan data estetika tinggi yang dikurasi secara khusus. Lebih lanjut, kami menyelidiki peran penting dari jadwal noise (noise schedule) dan memperkenalkan jadwal baru untuk mengoptimalkan generasi gambar resolusi tinggi. Strategi-strategi ini secara kolektif meningkatkan daya tarik visual dari gambar resolusi tinggi yang dihasilkan. Terakhir, kami mengusulkan benchmark seimbang kategori KolorsPrompts, yang berfungsi sebagai panduan untuk pelatihan dan evaluasi Kolors. Akibatnya, bahkan saat menggunakan backbone U-Net yang umum digunakan, Kolors telah menunjukkan kinerja yang luar biasa dalam evaluasi manusia, melampaui model open-source yang ada dan mencapai kinerja setingkat Midjourney-v6, terutama dalam hal daya tarik visual. Kami akan merilis kode dan bobot (weights) Kolors di https://github.com/Kwai-Kolors/Kolors, dan berharap hal ini akan bermanfaat bagi penelitian dan aplikasi masa depan di komunitas generasi visual.

Contoh Penggunaan

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 memerlukan IP Adapter yang berbeda agar dapat berfungsi, dan menggunakan Openai-CLIP-336 sebagai encoder gambar.

Menggunakan IP Adapter dengan Kolors membutuhkan lebih dari 24GB VRAM. Untuk menggunakannya, kami merekomendasikan penggunaan enable_model_cpu_offload() pada GPU konsumen.

Meskipun Kolors sudah terintegrasi di Diffusers, Anda perlu memuat image encoder dari sebuah revisi untuk menggunakan file safetensor. Anda tetap dapat menggunakan cabang utama dari repositori asli jika Anda merasa nyaman memuat checkpoint 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

kelas diffusers.KolorsPipeline

< >

( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )

Parameter

  • vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
  • text_encoder (ChatGLMModel) — Text-encoder yang dibekukan. Kolors menggunakan ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — Tokenizer dari kelas ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — Arsitektur U-Net bersyarat untuk mendenois latens gambar yang telah dikodekan.
  • scheduler (SchedulerMixin) — Scheduler yang digunakan bersama dengan unet untuk menghilangkan noise pada latens gambar yang telah dikodekan. Bisa berupa salah satu dari DDIMScheduler, LMSDiscreteScheduler, atau PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, opsional, default "False") — Apakah embedding prompt negatif harus dipaksa selalu diset ke 0. Lihat juga konfigurasi Kwai-Kolors/Kolors-diffusers.

Pipeline untuk generasi teks-ke-gambar menggunakan Kolors.

Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua pipeline (seperti mengunduh atau menyimpan, menjalankan pada perangkat tertentu, dll.)

Pipeline juga mewarisi metode pemuatan berikut:

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 )

Parameter

  • prompt (str atau list[str], opsional) — prompt yang akan dienkod
  • device — (torch.device): perangkat torch
  • num_images_per_prompt (int) — jumlah gambar yang harus dihasilkan per prompt
  • do_classifier_free_guidance (bool) — apakah akan menggunakan classifier free guidance atau tidak
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • prompt_embeds (torch.FloatTensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pemberatan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
  • pooled_prompt_embeds (torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen input prompt.
  • negative_prompt_embeds (torch.FloatTensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen input negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen input negative_prompt.
  • max_sequence_length (int defaultnya 256) — Panjang maksimum urutan yang digunakan dengan prompt.

Mengkodekan prompt menjadi hidden states dari text encoder.

get_guidance_scale_embedding

< >

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

Parameter

  • w (torch.Tensor) — Menghasilkan vektor embedding dengan skala panduan yang ditentukan untuk selanjutnya memperkaya embedding timestep.
  • embedding_dim (int, opsional, default 512) — Dimensi dari embedding yang akan dihasilkan.
  • dtype (torch.dtype, opsional, default torch.float32) — Tipe data dari embedding yang dihasilkan.

Mengembalikan

torch.Tensor

Vektor embedding dengan bentuk (len(w), embedding_dim).

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

  • semua
  • call

KolorsImg2ImgPipeline

kelas diffusers.KolorsImg2ImgPipeline

< >

( vae: AutoencoderKLtext_encoder: ChatGLMModeltokenizer: ChatGLMTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = False )

Parameter

  • vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
  • text_encoder (ChatGLMModel) — Text-encoder yang dibekukan. Kolors menggunakan ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — Tokenizer dari kelas ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — Arsitektur U-Net bersyarat untuk mendenois latens gambar yang telah dikodekan.
  • scheduler (SchedulerMixin) — Scheduler yang digunakan bersama dengan unet untuk menghilangkan noise pada latens gambar yang telah dikodekan. Bisa berupa salah satu dari DDIMScheduler, LMSDiscreteScheduler, atau PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, opsional, default "False") — Apakah embedding prompt negatif harus dipaksa selalu diset ke 0. Lihat juga konfigurasi Kwai-Kolors/Kolors-diffusers.

Pipeline untuk generasi teks-ke-gambar menggunakan Kolors.

Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua pipeline (seperti mengunduh atau menyimpan, menjalankan pada perangkat tertentu, dll.)

Pipeline juga mewarisi metode pemuatan berikut:

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 )

Parameter

  • prompt (str atau list[str], opsional) — prompt yang akan dienkod
  • device — (torch.device): perangkat torch
  • num_images_per_prompt (int) — jumlah gambar yang harus dihasilkan per prompt
  • do_classifier_free_guidance (bool) — apakah akan menggunakan classifier free guidance atau tidak
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • prompt_embeds (torch.FloatTensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pemberatan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
  • pooled_prompt_embeds (torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen input prompt.
  • negative_prompt_embeds (torch.FloatTensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen input negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen input negative_prompt.
  • max_sequence_length (int defaultnya 256) — Panjang maksimum urutan yang digunakan dengan prompt.

Mengkodekan prompt menjadi hidden states dari text encoder.

get_guidance_scale_embedding

< >

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

Parameter

  • w (torch.Tensor) — Menghasilkan vektor embedding dengan skala panduan yang ditentukan untuk selanjutnya memperkaya embedding timestep.
  • embedding_dim (int, opsional, default 512) — Dimensi dari embedding yang akan dihasilkan.
  • dtype (torch.dtype, opsional, default torch.float32) — Tipe data dari embedding yang dihasilkan.

Mengembalikan

torch.Tensor

Vektor embedding dengan bentuk (len(w), embedding_dim).

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

  • semua
  • call
Update on GitHub