Diffusers documentation

Kolors: تدريب فعّال لنموذج الانتشار لتوليد صور واقعية من النص

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: تدريب فعّال لنموذج الانتشار لتوليد صور واقعية من النص

LoRA MPS

Kolors هو نموذج توليد صور من نص على نطاق واسع يعتمد على الانتشار الكامن، طورته فريق Kuaishou Kolors. تم تدريب Kolors على مليارات من أزواج النص والصورة، ويظهر مزايا كبيرة مقارنةً بالنماذج مفتوحة المصدر ومغلقة المصدر من حيث الجودة البصرية، ودقة الدلالات المعقدة، وعرض النص لكل من الأحرف الصينية والإنجليزية. علاوة على ذلك، يدعم Kolors المدخلات الصينية والإنجليزية، مما يُظهر أداءً قوياً في فهم المحتوى الصيني المحدد وتوليده. لمزيد من التفاصيل، يرجى الرجوع إلى هذا التقرير التقني.

ملخص التقرير التقني هو:

نقدّم Kolors، وهو نموذج انتشار كامن لتوليد الصور من النص، ويتميز بفهمه العميق لكل من الإنجليزية والصينية، فضلاً عن درجة مدهشة من الواقعية الفوتوغرافية. هناك ثلاث رؤى رئيسية ساهمت في تطوير Kolors. أولاً، على عكس نموذج اللغة الكبير T5 المستخدم في Imagen و Stable Diffusion 3، بُني Kolors على نموذج اللغة العام (GLM)، مما يعزز قدراته على الفهم في كل من الإنجليزية والصينية. علاوة على ذلك، نستخدم نموذج لغة كبير متعدد الوسائط لإعادة وصف مجموعة البيانات التدريبية الواسعة من أجل فهم نصي دقيق. تحسّن هذه الاستراتيجيات بشكل كبير قدرة Kolors على فهم الدلالات المعقدة، لا سيما تلك التي تتضمن كيانات متعددة، وتمكّن قدراته المتقدمة في عرض النص. ثانياً، نقسم تدريب Kolors إلى مرحلتين: مرحلة تعلم المفاهيم مع معرفة واسعة، ومرحلة تحسين الجودة مع بيانات عالية الجمال مُنتقاة بعناية. بالإضافة إلى ذلك، ندرس الدور الحاسم لجدول الضوضاء ونقدم جدولا جديدا لتحسين توليد الصور عالية الدقة. تعزز هذه الاستراتيجيات مجتمعة الجاذبية البصرية للصور عالية الدقة المولّدة. أخيراً، نقترح معياراً متوازناً حسب الفئة باسم KolorsPrompts، والذي يعمل كدليل لتدريب وتقييم Kolors. ونتيجة لذلك، حتى عند استخدام هيكل U-Net الشائع الاستخدام، أظهر Kolors أداءً ملحوظاً في التقييمات البشرية، متجاوزاً النماذج مفتوحة المصدر الحالية وتحقيق أداء بمستوى Midjourney-v6، لا سيما من حيث الجاذبية البصرية. سننشر كود Kolors وأوزانه على https://github.com/Kwai-Kolors/Kolors، ونأمل أن يفيد الأبحاث والتطبيقات المستقبلية في مجتمع توليد الصور.

مثال على الاستخدام

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 مُكيّف IP مختلفًا للعمل، وهو يستخدم Openai-CLIP-336 كمُشفِّر للصور.

يتطلب استخدام IP Adapter مع Kolors أكثر من 24 جيجابايت من ذاكرة VRAM. وللاستفادة منه، نوصي باستخدام enable_model_cpu_offload() على وحدات معالجة الرسومات المخصصة للمستهلكين.

على الرغم من أن Kolors مُدمج في Diffusers، إلا أنك بحاجة إلى تحميل مُشفّر الصور من إصدار (revision) لاستخدام ملفات safetensor. يمكنك ما زال استخدام الفرع الرئيسي للمستودع الأصلي إذا كنت مرتاحًا لتحميل نقاط التفتيش بصيغة 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

فئة diffusers.KolorsPipeline

< >

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

المعاملات

  • vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
  • text_encoder (ChatGLMModel) — مُشفِّر نص ثابت. يستخدم Kolors ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — مُقسِّم من فئة ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — بنية U-Net الشرطية لإزالة الضوضاء من الكامنات المُرمّزة للصورة.
  • scheduler (SchedulerMixin) — مجدول يُستخدم بالاقتران مع unet لإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد DDIMScheduler أو LMSDiscreteScheduler أو PNDMScheduler.
  • force_zeros_for_empty_prompt (bool، اختياري، القيمة الافتراضية "False") — ما إذا كان يجب إجبار تضمينات الموجه السلبي على أن تكون دائمًا 0. راجع أيضًا إعدادات Kwai-Kolors/Kolors-diffusers.

خط أنابيب لتوليد الصور من النص باستخدام Kolors.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

تورث خط الأنابيب أيضًا طرق التحميل التالية:

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 )

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي سيتم ترميزه
  • device — (torch.device): جهاز torch
  • num_images_per_prompt (int) — عدد الصور التي يجب توليدها لكل موجه
  • do_classifier_free_guidance (bool) — ما إذا كان سيتم استخدام classifier free guidance أم لا
  • negative_prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).
  • prompt_embeds (torch.FloatTensor, اختياري) — تضمينات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخال prompt.
  • pooled_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مجمّعة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص المجمّعة من معامل الإدخال prompt.
  • negative_prompt_embeds (torch.FloatTensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن المحفّز. إذا لم تُقدَّم، فسيتم توليد تضمينات negative_prompt_embeds المجمعة من معامل الإدخال negative_prompt.
  • max_sequence_length (int الافتراضي 256) — أقصى طول تسلسل يُستخدم مع prompt.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

get_guidance_scale_embedding

< >

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

المعاملات

  • w (torch.Tensor) — توليد متجهات تضمين بمقياس توجيه محدد لغرض إثراء تضمينات خطوة الزمن اللاحقة.
  • embedding_dim (int، اختياري، القيمة الافتراضية 512) — أبعاد التضمينات (embeddings) التي سيتم توليدها.
  • dtype (torch.dtype، اختياري، الافتراضي torch.float32) — نوع البيانات للتضمينات المولّدة.

يعيد

torch.Tensor

متجهات تضمين بشكل (len(w), embedding_dim).

انظر إلى https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

  • الكل
  • call

KolorsImg2ImgPipeline

فئة diffusers.KolorsImg2ImgPipeline

< >

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

المعاملات

  • vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
  • text_encoder (ChatGLMModel) — مُشفِّر نص ثابت. يستخدم Kolors ChatGLM3-6B.
  • tokenizer (ChatGLMTokenizer) — مُقسِّم من فئة ChatGLMTokenizer.
  • unet (UNet2DConditionModel) — بنية U-Net الشرطية لإزالة الضوضاء من الكامنات المُرمّزة للصورة.
  • scheduler (SchedulerMixin) — مجدول يُستخدم بالاقتران مع unet لإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد DDIMScheduler أو LMSDiscreteScheduler أو PNDMScheduler.
  • force_zeros_for_empty_prompt (bool، اختياري، القيمة الافتراضية "False") — ما إذا كان يجب إجبار تضمينات الموجه السلبي على أن تكون دائمًا 0. راجع أيضًا إعدادات Kwai-Kolors/Kolors-diffusers.

خط أنابيب لتوليد الصور من النص باستخدام Kolors.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

تورث خط الأنابيب أيضًا طرق التحميل التالية:

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 )

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي سيتم ترميزه
  • device — (torch.device): جهاز torch
  • num_images_per_prompt (int) — عدد الصور التي يجب توليدها لكل موجه
  • do_classifier_free_guidance (bool) — ما إذا كان سيتم استخدام classifier free guidance أم لا
  • negative_prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).
  • prompt_embeds (torch.FloatTensor, اختياري) — تضمينات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخال prompt.
  • pooled_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مجمّعة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص المجمّعة من معامل الإدخال prompt.
  • negative_prompt_embeds (torch.FloatTensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن المحفّز. إذا لم تُقدَّم، فسيتم توليد تضمينات negative_prompt_embeds المجمعة من معامل الإدخال negative_prompt.
  • max_sequence_length (int الافتراضي 256) — أقصى طول تسلسل يُستخدم مع prompt.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

get_guidance_scale_embedding

< >

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

المعاملات

  • w (torch.Tensor) — توليد متجهات تضمين بمقياس توجيه محدد لغرض إثراء تضمينات خطوة الزمن اللاحقة.
  • embedding_dim (int، اختياري، القيمة الافتراضية 512) — أبعاد التضمينات (embeddings) التي سيتم توليدها.
  • dtype (torch.dtype، اختياري، الافتراضي torch.float32) — نوع البيانات للتضمينات المولّدة.

يعيد

torch.Tensor

متجهات تضمين بشكل (len(w), embedding_dim).

انظر إلى https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

  • الكل
  • call
Update on GitHub