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

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
< source >( 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. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).
تورث خط الأنابيب أيضًا طرق التحميل التالية:
- load_lora_weights() لتحميل أوزان LoRA
- save_lora_weights() لحفظ أوزان LoRA
- load_ip_adapter() لتحميل وحدات 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 )
المعاملات
- 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
< source >( 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).
- الكل
- call
KolorsImg2ImgPipeline
فئة diffusers.KolorsImg2ImgPipeline
< source >( 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. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).
تورث خط الأنابيب أيضًا طرق التحميل التالية:
- load_lora_weights() لتحميل أوزان LoRA
- save_lora_weights() لحفظ أوزان LoRA
- load_ip_adapter() لتحميل وحدات 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 )
المعاملات
- 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
< source >( 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).
- الكل
- call