# T2I-Adapter

[مُكيّف T2I: تعلّم المُكيّفات لاستخراج قدرات أكثر قابلية للتحكم في نماذج الانتشار من النص إلى الصورة](https://huggingface.co/papers/2302.08453) بقلم تشونغ مو، شينتاو وانغ، ليانغبين شيه، جيان تشانغ، تشونغانغ تشي، يينغ شان، شياوهو تشي.

باستخدام النماذج المُدرَّبة مسبقًا، يمكننا توفير صور تحكم (مثل خريطة العمق) للتحكم في توليد الصور من النص باستخدام Stable Diffusion بحيث تتبع بنية صورة العمق وتُكمل التفاصيل.

ملخص الورقة البحثية هو كالتالي:

*لقد أثبتت القدرة التوليدية المذهلة لنماذج النص إلى الصورة (T2I) واسعة النطاق قوة كبيرة في تعلم الهياكل المعقدة والدلالات الدلالية ذات المعنى. ومع ذلك، فإن الاعتماد على أوامر النص فقط لا يستفيد بالكامل من المعرفة التي تعلمها النموذج، خاصة عندما يكون التحكم المرن والدقيق (مثل التحكم في اللون والهيكل) مطلوباً. في هذه الورقة، نهدف إلى «استخراج» القدرات التي تعلمتها نماذج T2I بشكل ضمني، ثم استخدامها بشكل صريح للتحكم في عملية التوليد بشكل أكثر تفصيلاً. تحديداً، نقترح تعلم محولات T2I-Adapter بسيطة وخفيفة الوزن لمواءمة المعرفة الداخلية في نماذج T2I مع إشارات التحكم الخارجية، مع تجميد نماذج T2I الكبيرة الأصلية. بهذه الطريقة، يمكننا تدريب محولات مختلفة وفقاً لظروف مختلفة، مما يحقق تأثيرات غنية في التحكم والتحرير في لون وهياكل نتائج التوليد. علاوة على ذلك، تتمتع محولات T2I-Adapter المقترحة بخصائص جذابة ذات قيمة عملية، مثل قابلية التركيب وقابلية التعميم. تُظهر التجارب الواسعة أن محول T2I-Adapter الخاص بنا يتمتع بجودة توليد واعدة ونطاق واسع من التطبيقات.*

تمت مساهمة هذا النموذج من قبل مساهم المجتمع [HimariO](https://github.com/HimariO) ❤️ .

## StableDiffusionAdapterPipeline[[diffusers.StableDiffusionAdapterPipeline]]

#### diffusers.StableDiffusionAdapterPipeline[[diffusers.StableDiffusionAdapterPipeline]]

```python
diffusers.StableDiffusionAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, requires_safety_checker: bool = True)
```

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

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

adapter (`T2IAdapter` أو `MultiAdapter` أو `list[T2IAdapter]`) : يوفر شروطًا إضافية لشبكة unet أثناء عملية إزالة الضوضاء. إذا قمت بتعيين عدة Adapter كقائمة، فإن المخرجات من كل Adapter تُجمع معًا لإنشاء شرط إضافي واحد موحّد.

adapter_weights (`list[float]`، *اختياري*، القيمة الافتراضية هي None) : قائمة من الأرقام العشرية تمثل الوزن الذي سيُضرب في مخرجات كل مُكيّف (adapter) قبل جمعها معًا.

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

text_encoder (`CLIPTextModel`) : مُشفِّر نصي مجمّد. يستخدم Stable Diffusion الجزء النصي من [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel)، وتحديداً النسخة [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).

tokenizer (`CLIPTokenizer`) : مُقسِّم من الفئة [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

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).

safety_checker (`StableDiffusionSafetyChecker`) : وحدة تصنيف تُقدّر ما إذا كانت الصور المولّدة يمكن اعتبارها مسيئة أو ضارة. يُرجى الرجوع إلى [بطاقة النموذج](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) للاطلاع على التفاصيل.

feature_extractor (`CLIPImageProcessor`) : نموذج يستخرج الميزات من الصور المولّدة لاستخدامها كمدخلات لـ `safety_checker`.

خط أنابيب لتوليد الصور من النص باستخدام Stable Diffusion مع تعزيزه بواسطة T2I-Adapter https://huggingface.co/papers/2302.08453

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

#### __call__[[diffusers.StableDiffusionAdapterPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, image: typing.Union[torch.Tensor, PIL.Image.Image, list[PIL.Image.Image]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, clip_skip: int | None = None)
```

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

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

prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير `prompt_embeds` بدلاً من ذلك.

image (`torch.Tensor` أو `PIL.Image.Image` أو `list[torch.Tensor]` أو `list[PIL.Image.Image]` أو `list[list[PIL.Image.Image]]`) : شرط الإدخال الخاص بالمُكيّف (Adapter). يستخدم المُكيّف هذا الشرط لإدخال التوجيه إلى Unet. إذا تم تحديد النوع على أنه `torch.Tensor`، فإنه يُمرَّر إلى المُكيّف كما هو. يمكن أيضًا قبول `PIL.Image.Image` كصورة. يتم تغيير حجم صورة التحكم تلقائيًا لتناسب الصورة الناتجة.

height (`int`، *اختياري*، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) : ارتفاع الصورة المولّدة بالبكسل.

width (`int`، *اختياري*، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) : عرض الصورة المولدة بالبكسل.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

timesteps (`list[int]`، *اختياري*) : خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل `timesteps` في طريقة `set_timesteps` الخاصة بهم. إذا لم يُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير `num_inference_steps`. يجب أن تكون بترتيب تنازلي.

sigmas (`list[float]`، *اختياري*) : قيم `sigmas` مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل `sigmas` في طريقة `set_timesteps` الخاصة بهم. إذا لم تُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير `num_inference_steps`.

guidance_scale (`float`, *اختياري*, القيمة الافتراضية 7.5) : مقياس التوجيه كما هو مُعرَّف في [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). يُعرَّف `guidance_scale` على أنه `w` من المعادلة 2. في [Imagen Paper](https://huggingface.co/papers/2205.11487). يتم تفعيل مقياس التوجيه عن طريق تعيين `guidance_scale > 1`. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص `prompt`، وعادةً على حساب انخفاض جودة الصورة.

negative_prompt (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. إذا لم يُعرَّف، يجب تمرير `negative_prompt_embeds` بدلاً من ذلك. إذا لم يُعرَّف، يجب تمرير `negative_prompt_embeds` بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان `guidance_scale` أقل من `1`).

num_images_per_prompt (`int`، *اختياري*، القيمة الافتراضية 1) : عدد الصور التي سيتم توليدها لكل موجه.

eta (`float`، *اختياري*، القيمة الافتراضية 0.0) : يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على [schedulers.DDIMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/ddim#diffusers.DDIMScheduler)، وسيتم تجاهله في الحالات الأخرى.

generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : مولّد واحد أو قائمة من [مولّدات torch](https://pytorch.org/docs/stable/generated/torch.Generator.html) لجعل التوليد حتميًا.

latents (`torch.Tensor`، *اختياري*) : كامنات ضجيج مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، سيتم توليد كامنات من خلال الاستخراج باستخدام `generator` العشوائي المُقدَّم.

prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات النص من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.Tensor`, *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال `negative_prompt`.

output_type (`str`، *اختياري*، القيمة الافتراضية `"pil"`) : صيغة الصورة الناتجة عن عملية التوليد. اختر بين [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` أو `np.array`.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع `~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` بدلاً من tuple عادي.

callback (`Callable`، *اختياري*) : دالة ستُستدعى كل `callback_steps` خطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية: `callback(step: int, timestep: int, latents: torch.Tensor)`.

callback_steps (`int`، *اختياري*، القيمة الافتراضية 1) : التكرار الذي تُستدعى فيه دالة `callback`. إذا لم يتم تحديده، فستُستدعى الدالة في كل خطوة.

cross_attention_kwargs (`dict`, *اختياري*) : قاموس kwargs يُمرَّر إلى `AttnProcessor` إذا تم تحديده، كما هو معرَّف تحت `self.processor` في [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

adapter_conditioning_scale (`float` أو `list[float]`، *اختياري*، القيمة الافتراضية 1.0) : تُضرب مخرجات المُكيّف في `adapter_conditioning_scale` قبل إضافتها إلى الباقي في unet الأصلي. إذا تم تحديد عدة مُكيّفات في init، يمكنك تعيين المقياس المقابل كقائمة.

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

**يعيد:** `~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` أو `tuple`

`~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` if `return_dict` is True, otherwise a `tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of `bool`s denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the `safety_checker`.

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:
```py
>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter

>>> image = load_image(
...     "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )

>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)

>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
...     "CompVis/stable-diffusion-v1-4",
...     adapter=adapter,
...     torch_dtype=torch.float16,
... )

>>> pipe.to("cuda")

>>> out_image = pipe(
...     "At night, glowing cubes in front of the beach",
...     image=color_palette,
... ).images[0]
```

#### enable_attention_slicing[[diffusers.StableDiffusionAdapterPipeline.enable_attention_slicing]]

```python
enable_attention_slicing(slice_size: str | int = 'auto')
```

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

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

slice_size (`str` أو `int`، *اختياري*، القيمة الافتراضية `"auto"`) : عند تعيين `"auto"`، يُنصَّف المدخل إلى رؤوس الانتباه، بحيث يُحسب الانتباه في خطوتين. إذا كانت القيمة `"max"`، فسيتم توفير أقصى قدر من الذاكرة من خلال تشغيل شريحة واحدة في كل مرة. إذا تم تقديم رقم، فسيتم استخدام عدد من الشرائح يساوي `attention_head_dim // slice_size`. في هذه الحالة، يجب أن يكون `attention_head_dim` مضاعفًا لـ `slice_size`.

تفعيل حساب الانتباه المقطّع. عند تفعيل هذا الخيار، يقسم وحدة الانتباه المصفوفة المدخلة إلى شرائح لحساب الانتباه على عدة خطوات. في حالة وجود أكثر من رأس انتباه، يتم تنفيذ الحساب بشكل تسلسلي على كل رأس. وهذا مفيد لتوفير بعض الذاكرة مقابل انخفاض طفيف في السرعة.

> [!WARNING] > ⚠️ لا تفعّل تقطيع الانتباه إذا كنت تستخدم بالفعل `scaled_dot_product_attention` (SDPA)
من PyTorch > 2.0 أو xFormers. عمليات حساب الانتباه هذه فعّالة جداً من حيث الذاكرة، لذا لن تحتاج إلى تفعيل > هذه الوظيفة. إذا قمت بتفعيل تقطيع الانتباه مع SDPA أو xFormers، فقد يؤدي ذلك إلى تباطؤات جسيمة!

أمثلة:

```py
>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5",
...     dtype=torch.float16,
...     use_safetensors=True,
... )

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
```

#### disable_attention_slicing[[diffusers.StableDiffusionAdapterPipeline.disable_attention_slicing]]

```python
disable_attention_slicing()
```

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

تعطيل حساب الانتباه المقطّع. إذا كان `enable_attention_slicing` قد تم استدعاؤه سابقًا، يتم حساب الانتباه في خطوة واحدة.

#### enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionAdapterPipeline.enable_xformers_memory_efficient_attention]]

```python
enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)
```

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

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

attention_op (`Callable`، *اختياري*) : تجاوز المشغّل الافتراضي `None` لاستخدامه كحجة `op` في دالة [`memory_efficient_attention()`](https://facebookresearch.github.io/xformers/components/ops.html#xformers.ops.memory_efficient_attention) الخاصة بـ xFormers.

تفعيل الانتباه الموفّر للذاكرة من [xFormers](https://facebookresearch.github.io/xformers/). عند تفعيل هذا الخيار، يجب أن تلاحظ انخفاضًا في استخدام ذاكرة وحدة معالجة الرسوميات (GPU) وتسريعًا محتملًا أثناء الاستدلال. لا يُضمن التسريع أثناء التدريب.

> [!WARNING] > ⚠️ عند تفعيل كل من الانتباه الموفّر للذاكرة والانتباه المقطّع، يكون الانتباه الموفّر
تتمتع attention بأولوية أعلى.

أمثلة:

```py
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
```

#### disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionAdapterPipeline.disable_xformers_memory_efficient_attention]]

```python
disable_xformers_memory_efficient_attention()
```

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

تعطيل الانتباه الموفّر للذاكرة من [xFormers](https://facebookresearch.github.io/xformers/).

#### encode_prompt[[diffusers.StableDiffusionAdapterPipeline.encode_prompt]]

```python
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
```

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

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

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

negative_prompt_embeds (`torch.Tensor`, *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال `negative_prompt`.

lora_scale (`float`، *اختياري*) : مقياس LoRA سيُطبَّق على جميع طبقات LoRA في مُشفِّر النص إذا كانت طبقات LoRA محمَّلة.

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

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

#### get_guidance_scale_embedding[[diffusers.StableDiffusionAdapterPipeline.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/t2i_adapter/pipeline_stable_diffusion_adapter.py#L648)

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

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

## StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]

#### diffusers.StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]

```python
diffusers.StableDiffusionXLAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, force_zeros_for_empty_prompt: bool = True, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
```

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

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

adapter (`T2IAdapter` أو `MultiAdapter` أو `list[T2IAdapter]`) : يوفر شروطًا إضافية لشبكة unet أثناء عملية إزالة الضوضاء. إذا قمت بتعيين عدة Adapter كقائمة، فإن المخرجات من كل Adapter تُجمع معًا لإنشاء شرط إضافي واحد موحّد.

adapter_weights (`list[float]`، *اختياري*، القيمة الافتراضية هي None) : قائمة من الأرقام العشرية تمثل الوزن الذي سيُضرب في مخرجات كل مُكيّف (adapter) قبل جمعها معًا.

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

text_encoder (`CLIPTextModel`) : مُشفِّر نصي مجمّد. يستخدم Stable Diffusion الجزء النصي من [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel)، وتحديداً النسخة [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).

tokenizer (`CLIPTokenizer`) : مُقسِّم من الفئة [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

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).

safety_checker (`StableDiffusionSafetyChecker`) : وحدة تصنيف تُقدّر ما إذا كانت الصور المولّدة يمكن اعتبارها مسيئة أو ضارة. يُرجى الرجوع إلى [بطاقة النموذج](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) للاطلاع على التفاصيل.

feature_extractor (`CLIPImageProcessor`) : نموذج يستخرج الميزات من الصور المولّدة لاستخدامها كمدخلات لـ `safety_checker`.

خط أنابيب لتوليد الصور من النص باستخدام Stable Diffusion مع تعزيزه بواسطة T2I-Adapter https://huggingface.co/papers/2302.08453

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

تورث خط الأنابيب أيضًا طرق التحميل التالية:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/ar/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) لتحميل تضمينات الانعكاس النصي
- [from_single_file()](/docs/diffusers/v0.43.0/ar/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) لتحميل ملفات `.ckpt`
- [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

#### __call__[[diffusers.StableDiffusionXLAdapterPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] | None = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] | None = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, adapter_conditioning_factor: float = 1.0, clip_skip: int | None = None)
```

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

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

prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير `prompt_embeds` بدلاً من ذلك.

prompt_2 (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات المرسل إلى `tokenizer_2` و`text_encoder_2`. إذا لم يُعرَّف، يُستخدم `prompt` في كلا مشفّري النص

image (`torch.Tensor` أو `PIL.Image.Image` أو `list[torch.Tensor]` أو `list[PIL.Image.Image]` أو `list[list[PIL.Image.Image]]`) : شرط الإدخال الخاص بالمُكيّف (Adapter). يستخدم المُكيّف هذا الشرط لإدخال التوجيه إلى Unet. إذا تم تحديد النوع على أنه `torch.Tensor`، فإنه يُمرَّر إلى المُكيّف كما هو. يمكن أيضًا قبول `PIL.Image.Image` كصورة. يتم تغيير حجم صورة التحكم تلقائيًا لتناسب الصورة الناتجة.

height (`int`، *اختياري*، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) : ارتفاع الصورة المولّدة بالبكسل. أي قيمة أقل من 512 بكسل لن تعمل بشكل جيد مع [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) والنقاط المرجعية التي لم تُضبط بدقة على دقات منخفضة.

width (`int`، *اختياري*، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) : عرض الصورة المولدة بالبكسل. أي قيمة أقل من 512 بكسل لن تعمل بشكل جيد مع [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) والنقاط المرجعية التي لم يتم ضبطها بدقة خصيصًا على الدقات المنخفضة.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

timesteps (`list[int]`، *اختياري*) : خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل `timesteps` في طريقة `set_timesteps` الخاصة بهم. إذا لم يُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير `num_inference_steps`. يجب أن تكون بترتيب تنازلي.

sigmas (`list[float]`، *اختياري*) : قيم `sigmas` مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل `sigmas` في طريقة `set_timesteps` الخاصة بهم. إذا لم تُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير `num_inference_steps`.

denoising_end (`float`، *اختياري*) : عند تحديده، يحدد نسبة (بين 0.0 و 1.0) من إجمالي عملية إزالة الضوضاء التي يجب إكمالها قبل إنهائها مبكرًا عمدًا. ونتيجةً لذلك، سيحتفظ العينة المُعاد بها بكمية كبيرة من الضوضاء كما تحددها الخطوات الزمنية المنفصلة التي يختارها المجدول. ينبغي استخدام معامل denoising_end بشكل مثالي عندما يشكل هذا الخط الأنابيب جزءًا من إعداد متعدد الخطوط الأنابيب "خليط من مُزيلات الضوضاء"، كما هو موضح في [**تحسين مخرجات الصورة**](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/stable_diffusion_xl#refining-the-image-output)

guidance_scale (`float`، *اختياري*، القيمة الافتراضية 5.0) : مقياس التوجيه كما هو مُعرَّف في [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). يُعرَّف `guidance_scale` على أنه `w` من المعادلة 2. في [Imagen Paper](https://huggingface.co/papers/2205.11487). يتم تفعيل مقياس التوجيه عن طريق تعيين `guidance_scale > 1`. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص `prompt`، وعادةً على حساب انخفاض جودة الصورة.

negative_prompt (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. إذا لم يُعرَّف، يجب تمرير `negative_prompt_embeds` بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان `guidance_scale` أقل من `1`).

negative_prompt_2 (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة إليها، والتي سيتم إرسالها إلى `tokenizer_2` و`text_encoder_2`. إذا لم يُعرَّف، يُستخدم `negative_prompt` في كلا مشفري النص

num_images_per_prompt (`int`، *اختياري*، القيمة الافتراضية 1) : عدد الصور التي سيتم توليدها لكل موجه.

eta (`float`، *اختياري*، القيمة الافتراضية 0.0) : يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على [schedulers.DDIMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/ddim#diffusers.DDIMScheduler)، وسيتم تجاهله في الحالات الأخرى.

generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : مولّد واحد أو قائمة من [مولّدات torch](https://pytorch.org/docs/stable/generated/torch.Generator.html) لجعل التوليد حتميًا.

latents (`torch.Tensor`، *اختياري*) : كامنات ضجيج مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، سيتم توليد كامنات من خلال الاستخراج باستخدام `generator` العشوائي المُقدَّم.

prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات النص من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.Tensor`, *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مجمّعة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات نصية مجمّعة من معامل الإدخال `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *اختياري*) : تمثيلات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد pooled negative_prompt_embeds من معامل الإدخال `negative_prompt`.

ip_adapter_image : (`PipelineImageInput`، *اختياري*): إدخال صورة اختياري للعمل مع IP Adapters.

ip_adapter_image_embeds (`list[torch.Tensor]`, *اختياري*) : تمثيلات صور مُولّدة مسبقًا لـ IP-Adapter. يجب أن يكون قائمة بطول يساوي عدد وحدات IP-adapter. يجب أن يكون كل عنصر منها متجهًا (tensor) بشكل `(batch_size, num_images, emb_dim)`. يجب أن يحتوي على تمثيل الصورة السلبية إذا كان `do_classifier_free_guidance` مضبوطًا على `True`. إذا لم يُقدَّم، تُحسب التمثيلات من معامل الإدخال `ip_adapter_image`.

output_type (`str`، *اختياري*، القيمة الافتراضية `"pil"`) : صيغة الصورة الناتجة عن عملية التوليد. اختر بين [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` أو `np.array`.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع `~pipelines.stable_diffusion_xl.StableDiffusionAdapterPipelineOutput` بدلاً من tuple عادي.

callback (`Callable`، *اختياري*) : دالة ستُستدعى كل `callback_steps` خطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية: `callback(step: int, timestep: int, latents: torch.Tensor)`.

callback_steps (`int`، *اختياري*، القيمة الافتراضية 1) : التكرار الذي تُستدعى فيه دالة `callback`. إذا لم يتم تحديده، فستُستدعى الدالة في كل خطوة.

cross_attention_kwargs (`dict`، *اختياري*) : قاموس kwargs يُمرَّر إلى `AttentionProcessor` إذا تم تحديده، كما هو معرَّف تحت `self.processor` في [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

guidance_rescale (`float`, *optional*, defaults to 0.0) : Guidance rescale factor proposed by [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) `guidance_scale` is defined as `φ` in equation 16. of [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891). Guidance rescale factor should fix overexposure when using zero terminal SNR.

original_size (`tuple[int]`، *اختياري*، القيمة الافتراضية (1024, 1024)) : إذا لم تكن `original_size` مطابقة لـ `target_size`، فسيبدو أن الصورة قد خضعت لتقليل أو زيادة حجمها. القيمة الافتراضية لـ `original_size` هي `(height, width)` إذا لم تُحدد. جزء من التكييف الدقيق (micro-conditioning) الخاص بـ SDXL كما هو موضح في القسم 2.2 من [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

crops_coords_top_left (`tuple[int]`، *اختياري*، القيمة الافتراضية (0, 0)) : يمكن استخدام `crops_coords_top_left` لتوليد صورة تبدو وكأنها "مقتطعة" من الموضع `crops_coords_top_left` إلى الأسفل. عادةً ما يتم تحقيق صور مفضلة ومركزة جيدًا عن طريق تعيين `crops_coords_top_left` إلى (0, 0). جزء من micro-conditioning الخاص بـ SDXL كما هو موضح في القسم 2.2 من [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

target_size (`tuple[int]`، *اختياري*، القيمة الافتراضية (1024, 1024)) : في معظم الحالات، يجب ضبط `target_size` على الارتفاع والعرض المطلوبين للصورة المولّدة. إذا لم يُحدَّد، فسيكون الافتراضي `(height, width)`. جزء من التكييف الدقيق (micro-conditioning) الخاص بـ SDXL كما هو موضح في القسم 2.2 من [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). القسم 2.2 من [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

negative_original_size (`tuple[int]`، *اختياري*، القيمة الافتراضية (1024, 1024)) : يُستخدم لتقييد عملية التوليد سلبياً بناءً على دقة صورة محددة. وهو جزء من التكييف الدقيق (micro-conditioning) في SDXL كما هو موضح في القسم 2.2 من [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). لمزيد من المعلومات، راجع موضوع هذا المسألة: https://github.com/huggingface/diffusers/issues/4208.

negative_crops_coords_top_left (`tuple[int]`، *اختياري*، القيمة الافتراضية (0, 0)) : يُستخدم لتوجيه عملية التوليد سلبياً بناءً على إحداثيات قصّ محددة. وهو جزء من التكييف الدقيق (micro-conditioning) في SDXL كما هو موضح في القسم 2.2 من [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). لمزيد من المعلومات، راجع موضوع هذا الإشكال: https://github.com/huggingface/diffusers/issues/4208.

negative_target_size (`tuple[int]`، *اختياري*، القيمة الافتراضية (1024, 1024)) : يُستخدم لتقييد عملية التوليد سلبياً بناءً على دقة الصورة المستهدفة. يجب أن تكون مطابقة لـ `target_size` في معظم الحالات. وهو جزء من التكييف الدقيق (micro-conditioning) في SDXL كما هو موضح في القسم 2.2 من [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). لمزيد من المعلومات، راجع موضوع هذا الإشكال: https://github.com/huggingface/diffusers/issues/4208.

adapter_conditioning_scale (`float` أو `list[float]`، *اختياري*، القيمة الافتراضية 1.0) : تُضرب مخرجات المُكيّف في `adapter_conditioning_scale` قبل إضافتها إلى الباقي في unet الأصلي. إذا تم تحديد عدة مُكيّفات في init، يمكنك تعيين المقياس المقابل كقائمة.

adapter_conditioning_factor (`float`, *اختياري*, القيمة الافتراضية 1.0) : نسبة خطوات الزمن التي يجب تطبيق المُكيّف عليها. إذا كانت `adapter_conditioning_factor` تساوي `0.0`، فلا يُطبَّق المُكيّف إطلاقًا. إذا كانت `adapter_conditioning_factor` تساوي `1.0`، يُطبَّق المُكيّف على جميع خطوات الزمن. إذا كانت `adapter_conditioning_factor` تساوي `0.5`، يُطبَّق المُكيّف على نصف خطوات الزمن.

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

**يعيد:** `~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` أو `tuple`

`~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` إذا كان `return_dict` هو True، وإلا `tuple`. عند إرجاع tuple، يكون العنصر الأول قائمة تحتوي على الصور المولّدة.

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:
```py
>>> import torch
>>> from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler
>>> from diffusers.utils import load_image

>>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L")

>>> model_id = "stabilityai/stable-diffusion-xl-base-1.0"

>>> adapter = T2IAdapter.from_pretrained(
...     "Adapter/t2iadapter",
...     subfolder="sketch_sdxl_1.0",
...     torch_dtype=torch.float16,
...     adapter_type="full_adapter_xl",
... )
>>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler")

>>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
...     model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler
... ).to("cuda")

>>> generator = torch.manual_seed(42)
>>> sketch_image_out = pipe(
...     prompt="a photo of a dog in real world, high quality",
...     negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality",
...     image=sketch_image,
...     generator=generator,
...     guidance_scale=7.5,
... ).images[0]
```

#### enable_attention_slicing[[diffusers.StableDiffusionXLAdapterPipeline.enable_attention_slicing]]

```python
enable_attention_slicing(slice_size: str | int = 'auto')
```

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

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

slice_size (`str` أو `int`، *اختياري*، القيمة الافتراضية `"auto"`) : عند تعيين `"auto"`، يُنصَّف المدخل إلى رؤوس الانتباه، بحيث يُحسب الانتباه في خطوتين. إذا كانت القيمة `"max"`، فسيتم توفير أقصى قدر من الذاكرة من خلال تشغيل شريحة واحدة في كل مرة. إذا تم تقديم رقم، فسيتم استخدام عدد من الشرائح يساوي `attention_head_dim // slice_size`. في هذه الحالة، يجب أن يكون `attention_head_dim` مضاعفًا لـ `slice_size`.

تفعيل حساب الانتباه المقطّع. عند تفعيل هذا الخيار، يقسم وحدة الانتباه المصفوفة المدخلة إلى شرائح لحساب الانتباه على عدة خطوات. في حالة وجود أكثر من رأس انتباه، يتم تنفيذ الحساب بشكل تسلسلي على كل رأس. وهذا مفيد لتوفير بعض الذاكرة مقابل انخفاض طفيف في السرعة.

> [!WARNING] > ⚠️ لا تفعّل تقطيع الانتباه إذا كنت تستخدم بالفعل `scaled_dot_product_attention` (SDPA)
من PyTorch > 2.0 أو xFormers. عمليات حساب الانتباه هذه فعّالة جداً من حيث الذاكرة، لذا لن تحتاج إلى تفعيل > هذه الوظيفة. إذا قمت بتفعيل تقطيع الانتباه مع SDPA أو xFormers، فقد يؤدي ذلك إلى تباطؤات جسيمة!

أمثلة:

```py
>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5",
...     dtype=torch.float16,
...     use_safetensors=True,
... )

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
```

#### disable_attention_slicing[[diffusers.StableDiffusionXLAdapterPipeline.disable_attention_slicing]]

```python
disable_attention_slicing()
```

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

تعطيل حساب الانتباه المقطّع. إذا كان `enable_attention_slicing` قد تم استدعاؤه سابقًا، يتم حساب الانتباه في خطوة واحدة.

#### enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionXLAdapterPipeline.enable_xformers_memory_efficient_attention]]

```python
enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)
```

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

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

attention_op (`Callable`، *اختياري*) : تجاوز المشغّل الافتراضي `None` لاستخدامه كحجة `op` في دالة [`memory_efficient_attention()`](https://facebookresearch.github.io/xformers/components/ops.html#xformers.ops.memory_efficient_attention) الخاصة بـ xFormers.

تفعيل الانتباه الموفّر للذاكرة من [xFormers](https://facebookresearch.github.io/xformers/). عند تفعيل هذا الخيار، يجب أن تلاحظ انخفاضًا في استخدام ذاكرة وحدة معالجة الرسوميات (GPU) وتسريعًا محتملًا أثناء الاستدلال. لا يُضمن التسريع أثناء التدريب.

> [!WARNING] > ⚠️ عند تفعيل كل من الانتباه الموفّر للذاكرة والانتباه المقطّع، يكون الانتباه الموفّر
تتمتع attention بأولوية أعلى.

أمثلة:

```py
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
```

#### disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionXLAdapterPipeline.disable_xformers_memory_efficient_attention]]

```python
disable_xformers_memory_efficient_attention()
```

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

تعطيل الانتباه الموفّر للذاكرة من [xFormers](https://facebookresearch.github.io/xformers/).

#### encode_prompt[[diffusers.StableDiffusionXLAdapterPipeline.encode_prompt]]

```python
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
```

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

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

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

prompt_2 (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات المرسل إلى `tokenizer_2` و`text_encoder_2`. إذا لم يُعرَّف، يُستخدم `prompt` في كلا مشفّري النص

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

negative_prompt_2 (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة إليها، والتي سيتم إرسالها إلى `tokenizer_2` و`text_encoder_2`. إذا لم يُعرَّف، يُستخدم `negative_prompt` في كلا مشفري النص

prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات النص من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.Tensor`, *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مجمّعة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات نصية مجمّعة من معامل الإدخال `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *اختياري*) : تمثيلات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد pooled negative_prompt_embeds من معامل الإدخال `negative_prompt`.

lora_scale (`float`، *اختياري*) : مقياس lora سيُطبَّق على جميع طبقات LoRA في مُشفِّر النص إذا كانت طبقات LoRA محمَّلة.

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

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

#### get_guidance_scale_embedding[[diffusers.StableDiffusionXLAdapterPipeline.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/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py#L817)

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

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

