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

  
  

![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/kolors/kolors_header_collage.png)

Kolors هو نموذج توليد صور من نص على نطاق واسع يعتمد على الانتشار الكامن، طورته [فريق Kuaishou Kolors](https://github.com/Kwai-Kolors/Kolors). تم تدريب Kolors على مليارات من أزواج النص والصورة، ويظهر مزايا كبيرة مقارنةً بالنماذج مفتوحة المصدر ومغلقة المصدر من حيث الجودة البصرية، ودقة الدلالات المعقدة، وعرض النص لكل من الأحرف الصينية والإنجليزية. علاوة على ذلك، يدعم Kolors المدخلات الصينية والإنجليزية، مما يُظهر أداءً قوياً في فهم المحتوى الصيني المحدد وتوليده. لمزيد من التفاصيل، يرجى الرجوع إلى هذا [التقرير التقني](https://github.com/Kwai-Kolors/Kolors/blob/master/imgs/Kolors_paper.pdf).

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

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

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

```python
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](https://huggingface.co/openai/clip-vit-large-patch14-336) كمُشفِّر للصور.

> [!TIP]
> يتطلب استخدام IP Adapter مع Kolors أكثر من 24 جيجابايت من ذاكرة VRAM. وللاستفادة منه، نوصي باستخدام [enable_model_cpu_offload()](/docs/diffusers/v0.43.0/ar/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) على وحدات معالجة الرسومات المخصصة للمستهلكين.

> [!TIP]
> على الرغم من أن Kolors مُدمج في Diffusers، إلا أنك بحاجة إلى تحميل مُشفّر الصورة من إصدار (revision) لاستخدام ملفات safetensor. يمكنك ما زال استخدام الفرع الرئيسي للمستودع الأصلي إذا كنت مرتاحًا لتحميل نقاط التفتيش بصيغة pickle.

```python
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]]

```python
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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/kolors/pipeline_kolors.py#L123)

**المعاملات:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/ar/api/models/autoencoderkl#diffusers.AutoencoderKL)) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.

text_encoder (`ChatGLMModel`) : مُشفِّر نص ثابت. يستخدم Kolors [ChatGLM3-6B](https://huggingface.co/THUDM/chatglm3-6b).

tokenizer (`ChatGLMTokenizer`) : مُقسِّم من الفئة [ChatGLMTokenizer](https://huggingface.co/THUDM/chatglm3-6b/blob/main/tokenization_chatglm.py).

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : بنية U-Net الشرطية لفك تشويش كامن الصورة المُرمّزة.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin)) : مُجدول يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد [DDIMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/ddim#diffusers.DDIMScheduler) أو [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler) أو [PNDMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/pndm#diffusers.PNDMScheduler).

force_zeros_for_empty_prompt (`bool`، *اختياري*، القيمة الافتراضية `"False"`) : ما إذا كان يجب إجبار تضمينات الموجه السلبي على أن تكون دائمًا 0. راجع أيضًا إعدادات `Kwai-Kolors/Kolors-diffusers`.

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

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

تورث خط الأنابيب أيضًا طرق التحميل التالية:
- [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) لتحميل أوزان LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.save_lora_weights) لحفظ أوزان LoRA
- [load_ip_adapter()](/docs/diffusers/v0.43.0/ar/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) لتحميل وحدات IP Adapter

#### encode_prompt[[diffusers.KolorsPipeline.encode_prompt]]

```python
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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/kolors/pipeline_kolors.py#L199)

**المعاملات:**

prompt (`str` أو `list[str]`، *اختياري*) : النص الذي سيتم ترميزه

device : (`torch.device`): جهاز torch

num_images_per_prompt (`int`) : عدد الصور التي يجب توليدها لكل موجه

do_classifier_free_guidance (`bool`) : ما إذا كان سيتم استخدام التوجيه الحر للتصنيف أم لا

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`, *اختياري*) : تمثيلات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد pooled negative_prompt_embeds من معامل الإدخال `negative_prompt`.

max_sequence_length (`int` الافتراضي 256) : أقصى طول تسلسل يُستخدم مع `prompt`.

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

#### get_guidance_scale_embedding[[diffusers.KolorsPipeline.get_guidance_scale_embedding]]

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/kolors/pipeline_kolors.py#L590)

**المعاملات:**

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]]

#### diffusers.KolorsImg2ImgPipeline[[diffusers.KolorsImg2ImgPipeline]]

```python
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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/kolors/pipeline_kolors_img2img.py#L142)

**المعاملات:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/ar/api/models/autoencoderkl#diffusers.AutoencoderKL)) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.

text_encoder (`ChatGLMModel`) : مُشفِّر نص ثابت. يستخدم Kolors [ChatGLM3-6B](https://huggingface.co/THUDM/chatglm3-6b).

tokenizer (`ChatGLMTokenizer`) : مُقسِّم من الفئة [ChatGLMTokenizer](https://huggingface.co/THUDM/chatglm3-6b/blob/main/tokenization_chatglm.py).

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : بنية U-Net الشرطية لفك تشويش كامن الصورة المُرمّزة.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin)) : مُجدول يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد [DDIMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/ddim#diffusers.DDIMScheduler) أو [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler) أو [PNDMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/pndm#diffusers.PNDMScheduler).

force_zeros_for_empty_prompt (`bool`، *اختياري*، القيمة الافتراضية `"False"`) : ما إذا كان يجب إجبار تضمينات الموجه السلبي على أن تكون دائمًا 0. راجع أيضًا إعدادات `Kwai-Kolors/Kolors-diffusers`.

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

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

تورث خط الأنابيب أيضًا طرق التحميل التالية:
- [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.load_lora_weights) لتحميل أوزان LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.save_lora_weights) لحفظ أوزان LoRA
- [load_ip_adapter()](/docs/diffusers/v0.43.0/ar/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) لتحميل وحدات IP Adapter

#### encode_prompt[[diffusers.KolorsImg2ImgPipeline.encode_prompt]]

```python
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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/kolors/pipeline_kolors_img2img.py#L219)

**المعاملات:**

prompt (`str` أو `list[str]`، *اختياري*) : النص الذي سيتم ترميزه

device : (`torch.device`): جهاز torch

num_images_per_prompt (`int`) : عدد الصور التي يجب توليدها لكل موجه

do_classifier_free_guidance (`bool`) : ما إذا كان سيتم استخدام التوجيه الحر للتصنيف أم لا

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`, *اختياري*) : تمثيلات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد pooled negative_prompt_embeds من معامل الإدخال `negative_prompt`.

max_sequence_length (`int` الافتراضي 256) : أقصى طول تسلسل يُستخدم مع `prompt`.

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

#### get_guidance_scale_embedding[[diffusers.KolorsImg2ImgPipeline.get_guidance_scale_embedding]]

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/kolors/pipeline_kolors_img2img.py#L718)

**المعاملات:**

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__

