# DDIM

[نماذج الانتشار الضمنية غير الضجيج](https://huggingface.co/papers/2010.02502) (DDIM) من تأليف جيامينغ سونغ وتشينلين منغ وستيفانو إيرمون.

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

*حققت نماذج الانتشار الاحتمالية لإزالة الضوضاء (DDPMs) توليد صور عالية الجودة دون تدريب عدائي، لكنها تتطلب محاكاة سلسلة ماركوف لعدد كبير من الخطوات لإنتاج عينة. لتسريع عملية أخذ العينات، نقدم نماذج الانتشار الضمنية لإزالة الضوضاء (DDIMs)، وهي فئة أكثر كفاءة من النماذج الاحتمالية الضمنية التكرارية التي تتبع نفس إجراء التدريب المستخدم في DDPMs. في نماذج DDPMs، يُعرَّف العملية التوليدية على أنها عكس عملية انتشار ماركوفية. نبني فئة من عمليات الانتشار غير الماركوفية التي تؤدي إلى هدف تدريب متطابق، لكن عملية العكس فيها يمكن أن تكون أسرع بكثير في أخذ العينات. نُظهر تجريبيًا أن نماذج DDIMs يمكنها إنتاج عينات عالية الجودة أسرع بمقدار 10 إلى 50 مرة من حيث الوقت الفعلي مقارنةً بنماذج DDPMs، وتتيح لنا الموازنة بين الحساب وجودة العينة، كما يمكنها تنفيذ استيفاء دلالي ذي معنى للصور مباشرةً في الفضاء الكامن.*

يمكن العثور على قاعدة الكود الأصلية في [ermongroup/ddim](https://github.com/ermongroup/ddim).

## DDIMPipeline[[diffusers.DDIMPipeline]]

#### diffusers.DDIMPipeline[[diffusers.DDIMPipeline]]

```python
diffusers.DDIMPipeline(unet: UNet2DModel, scheduler: DDIMScheduler)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/ddim/pipeline_ddim.py#L37)

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

unet ([UNet2DModel](/docs/diffusers/main/ar/api/models/unet2d#diffusers.UNet2DModel)) : نموذج `UNet2DModel` لإزالة الضوضاء من الكامنات المُرمّزة للصورة.

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

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

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

#### __call__[[diffusers.DDIMPipeline.__call__]]

```python
__call__(batch_size: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, eta: float = 0.0, num_inference_steps: int = 50, use_clipped_model_output: bool | None = None, output_type: str | None = 'pil', return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/ddim/pipeline_ddim.py#L62)

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

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

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

eta (`float`، *اختياري*، القيمة الافتراضية 0.0) : يتوافق مع المعامل eta (η) من ورقة [DDIM](https://huggingface.co/papers/2010.02502). ينطبق فقط على [DDIMScheduler](/docs/diffusers/main/ar/api/schedulers/ddim#diffusers.DDIMScheduler)، ويُتجاهل في المجدولين الآخرين. القيمة `0` تتوافق مع DDIM والقيمة `1` تتوافق مع DDPM.

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

use_clipped_model_output (`bool`، *اختياري*، القيمة الافتراضية `None`) : إذا كانت `True` أو `False`، راجع التوثيق الخاص بـ [DDIMScheduler.step()](/docs/diffusers/main/ar/api/schedulers/ddim#diffusers.DDIMScheduler.step). إذا كانت `None`، لن يتم تمرير أي شيء إلى المجدول في المراحل اللاحقة (استخدم `None` للمجدولات التي لا تدعم هذا الحجة).

output_type (`str`، *اختياري*، الافتراضي `"pil"`) : صيغة الصورة المولّدة. اختر بين `"pil"` (`PIL.Image`) أو `"np"` (`np.array`) أو `"pt"` (`torch.Tensor`).

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [ImagePipelineOutput](/docs/diffusers/main/ar/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) بدلاً من tuple عادي.

**يعيد:** [ImagePipelineOutput](/docs/diffusers/main/ar/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [ImagePipelineOutput](/docs/diffusers/main/ar/api/pipelines/consistency_models#diffusers.ImagePipelineOutput)، وإلا يُعاد `tuple` يكون عنصره الأول قائمة بالصور المولّدة

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

مثال:

```py
>>> from diffusers import DDIMPipeline
>>> import PIL.Image
>>> import numpy as np

>>> # load model and scheduler
>>> pipe = DDIMPipeline.from_pretrained("fusing/ddim-lsun-bedroom")

>>> # run pipeline in inference (sample random noise and denoise)
>>> image = pipe(eta=0.0, num_inference_steps=50)

>>> # process image to PIL
>>> image_processed = image.cpu().permute(0, 2, 3, 1)
>>> image_processed = (image_processed + 1.0) * 127.5
>>> image_processed = image_processed.numpy().astype(np.uint8)
>>> image_pil = PIL.Image.fromarray(image_processed[0])

>>> # save image
>>> image_pil.save("test.png")
```

## ImagePipelineOutput[[diffusers.ImagePipelineOutput]]

#### diffusers.ImagePipelineOutput[[diffusers.ImagePipelineOutput]]

```python
diffusers.ImagePipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)
```

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

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

images (`List[PIL.Image.Image]` أو `np.ndarray`) : قائمة من صور PIL منزوعة الضوضاء بطول `batch_size` أو مصفوفة NumPy بأبعاد `(batch_size, height, width, num_channels)`.

فئة الإخراج لخطوط أنابيب الصور.

