# DDPMScheduler

يقترح [نماذج الانتشار الاحتمالية لإزالة الضوضاء](https://huggingface.co/papers/2006.11239) (DDPM) التي قدمها جوناثان هو، وأجاي جاين، وبايتر أبييل، نموذجًا قائمًا على الانتشار يحمل الاسم نفسه. في سياق مكتبة 🤗 Diffusers، يشير DDPM إلى جدولة إزالة الضوضاء المنفصلة الواردة في الورقة البحثية، وكذلك إلى خط المعالجة (pipeline).

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

*نقدّم نتائج عالية الجودة لتوليد الصور باستخدام نماذج الاحتمالية الانتشارية، وهي فئة من نماذج المتغيرات الكامنة مستوحاة من اعتبارات في الديناميكا الحرارية غير المتوازنة. نحصل على أفضل نتائجنا من خلال التدريب على حدّ تقريبي مرجّح مصمَّم وفق ارتباط جديد بين النماذج الاحتمالية الانتشارية ومطابقة درجات إزالة الضوضاء مع ديناميكا لانجفين، وتقبل نماذجنا بشكل طبيعي مخططًا تدريجيًا لفك الضغط مع فقدان يمكن تفسيره كتعميم لفك الترميز الذاتي التتابعي. على مجموعة بيانات CIFAR10 غير الشرطية، نحصل على درجة Inception تبلغ 9.46 ودرجة FID متقدمة تبلغ 3.17. على LSUN بدقة 256x256، نحصل على جودة عينات مماثلة لتلك التي يقدمها ProgressiveGAN. تتوفر تنفيعتنا على [هذا الرابط](https://github.com/hojonathanho/diffusion).*

## DDPMScheduler[[diffusers.DDPMScheduler]]

#### diffusers.DDPMScheduler[[diffusers.DDPMScheduler]]

```python
diffusers.DDPMScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2', 'sigmoid'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, variance_type: typing.Literal['fixed_small', 'fixed_small_log', 'fixed_large', 'fixed_large_log', 'learned', 'learned_range'] = 'fixed_small', clip_sample: bool = True, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, clip_sample_range: float = 1.0, sample_max_value: float = 1.0, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'leading', steps_offset: int = 0, rescale_betas_zero_snr: bool = False)
```

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

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

num_train_timesteps (`int`، القيمة الافتراضية `1000`) : عدد خطوات الانتشار لتدريب النموذج.

beta_start (`float`، القيمة الافتراضية `0.0001`) : القيمة الابتدائية لـ`beta` أثناء الاستدلال.

beta_end (`float`، القيمة الافتراضية `0.02`) : القيمة النهائية لـ`beta`.

beta_schedule (`"linear"` أو `"scaled_linear"` أو `"squaredcos_cap_v2"` أو `"sigmoid"`، الافتراضي هو `"linear"`) : جدول بيتا، وهو إسقاط من نطاق بيتا إلى تسلسل من قيم بيتا لتقدم النموذج خطوة بخطوة.

trained_betas (`np.ndarray`، *اختياري*) : مصفوفة من قيم بيتا تمرر مباشرة إلى منشئ الكائن دون استخدام `beta_start` و`beta_end`.

variance_type (`"fixed_small"`، أو `"fixed_small_log"`، أو `"fixed_large"`، أو `"fixed_large_log"`، أو `"learned"`، أو `"learned_range"`، الافتراضي هو `"fixed_small"`) : قصّ التباين عند إضافة الضوضاء إلى العينة المُزالة الضوضاء.

clip_sample (`bool`، القيمة الافتراضية `True`) : قصّ العينة المتنبأ بها من أجل الاستقرار العددي.

clip_sample_range (`float`، القيمة الافتراضية `1.0`) : الحد الأقصى لحجم قصّ العينة. صالح فقط عندما يكون `clip_sample=True`.

prediction_type (`"epsilon"`, `"sample"`, or `"v_prediction"`, defaults to `"epsilon"`) : Prediction type of the scheduler function; can be `epsilon` (predicts the noise of the diffusion process), `sample` (directly predicts the noisy sample`) or `v_prediction` (see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper).

thresholding (`bool`، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام طريقة "العتبة الديناميكية". هذه الطريقة غير مناسبة لنماذج الانتشار في الفضاء الكامن مثل Stable Diffusion.

dynamic_thresholding_ratio (`float`، القيمة الافتراضية `0.995`) : نسبة طريقة العتبة الديناميكية. صالحة فقط عندما يكون `thresholding=True`.

sample_max_value (`float`، القيمة الافتراضية `1.0`) : قيمة العتبة الخاصة بالتعتيم الديناميكي. صالحة فقط عندما يكون `thresholding=True`.

timestep_spacing (`"linspace"`, `"leading"`, or `"trailing"`, defaults to `"leading"`) : The way the timesteps should be scaled. Refer to Table 2 of the [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) for more information.

steps_offset (`int`، القيمة الافتراضية `0`) : إزاحة تُضاف إلى خطوات الاستدلال، كما تتطلبها بعض عائلات النماذج.

rescale_betas_zero_snr (`bool`، القيمة الافتراضية `False`) : ما إذا كان يجب إعادة مقياس معاملات بيتا (betas) بحيث يكون SNR النهائي صفراً. يتيح هذا النموذج توليد عينات ساطعة جداً ومظلمة جداً بدلاً من تقييده بتوليد عينات بإضاءة متوسطة. له علاقة غير مباشرة بـ [`--offset_noise`](https://github.com/huggingface/diffusers/blob/74fd735eb073eb1d774b1ab4154a0876eb82f055/examples/dreambooth/train_dreambooth.py#L506).

`DDPMScheduler` يستكشف الروابط بين مطابقة درجة إزالة الضوضاء وعينة ديناميكيات لانجفين.

يرث هذا النموذج من [SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin) و [ConfigMixin](/docs/diffusers/v0.43.0/ar/api/configuration#diffusers.ConfigMixin). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدولات التعلم، مثل التحميل والحفظ.

#### add_noise[[diffusers.DDPMScheduler.add_noise]]

```python
add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)
```

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

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

original_samples (`torch.Tensor`) : العينات الأصلية التي سيتم إضافة الضوضاء إليها.

noise (`torch.Tensor`) : الضوضاء التي يجب إضافتها إلى العينات.

timesteps (`torch.IntTensor`) : خطوات الزمن التي تشير إلى مستوى الضوضاء لكل عينة.

**يعيد:** `torch.Tensor`

العينات الضجيجية.

أضف الضوضاء إلى العينات الأصلية وفقًا لحجم الضوضاء في كل خطوة زمنية (وهذا هو عملية الانتشار الأمامي).

#### get_velocity[[diffusers.DDPMScheduler.get_velocity]]

```python
get_velocity(sample: Tensor, noise: Tensor, timesteps: IntTensor)
```

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

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

sample (`torch.Tensor`) : العينة المدخلة.

noise (`torch.Tensor`) : متجه الضوضاء.

timesteps (`torch.IntTensor`) : خطوات الزمن لحساب السرعة.

**يعيد:** `torch.Tensor`

السرعة المحسوبة.

احسب تنبؤ السرعة من العينة والضوضاء وفقًا لصيغة السرعة.

#### previous_timestep[[diffusers.DDPMScheduler.previous_timestep]]

```python
previous_timestep(timestep: int)
```

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

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

timestep (`int`) : خطوة الزمن الحالية.

**يعيد:** `int` أو `torch.Tensor`

خطوة الزمن السابقة.

احسب خطوة الزمن السابقة في سلسلة الانتشار.

#### scale_model_input[[diffusers.DDPMScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: int | None = None)
```

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

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

sample (`torch.Tensor`) : العينة المدخلة.

timestep (`int`، *اختياري*) : الخطوة الزمنية الحالية في سلسلة الانتشار.

**يعيد:** `torch.Tensor`

عينة إدخال مُقيّمة.

يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.

#### set_timesteps[[diffusers.DDPMScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device] = None, timesteps: list[int] | None = None)
```

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

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

num_inference_steps (`int`, *اختياري*) : عدد خطوات الانتشار المستخدمة عند توليد العينات بنموذج مُدرَّب مسبقًا. إذا تم استخدامه، يجب أن يكون `timesteps` هو `None`.

device (`str` أو `torch.device`، *اختياري*) : الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كان `None`، فلن يتم نقل خطوات الزمن.

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

يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).

#### خطوة[[diffusers.DDPMScheduler.step]]

```python
step(model_output: Tensor, timestep: int, sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

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

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

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

timestep (`int`) : الخطوة الزمنية المنفصلة الحالية في سلسلة الانتشار.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

generator (`torch.Generator`، *اختياري*) : مولّد أرقام عشوائية.

return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [DDPMSchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ddpm#diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput) أو `tuple` أم لا.

**يعيد:** [DDPMSchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ddpm#diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput) أو `tuple`

If return_dict is `True`, [DDPMSchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ddpm#diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput) is returned, otherwise a tuple is returned where the first element is the sample tensor.

تنبّأ بالعيّنة من الخطوة الزمنية السابقة عن طريق عكس عملية المعادلة التفاضلية العشوائية (SDE). تنقل هذه الدالة عملية الانتشار من مخرجات النموذج المُتعلَّم (والتي تكون في الغالب الضوضاء المتنبَّأ بها).

## DDPMSchedulerOutput[[diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput]]

#### diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput[[diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput]]

```python
diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput(prev_sample: Tensor, pred_original_sample: typing.Optional[torch.Tensor] = None)
```

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

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

prev_sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)` للصور) : العينة المحسوبة `(x_{t-1})` لخطوة الزمن السابقة. يجب استخدام `prev_sample` كمدخل للنموذج التالي في حلقة إزالة الضوضاء.

pred_original_sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)` للصور) : العينة المُتوقَّع إزالة الضوضاء منها `(x_{0})` بناءً على مخرجات النموذج من خطوة الزمن الحالية. يمكن استخدام `pred_original_sample` لمعاينة التقدم أو للإرشاد.

فئة الإخراج لدالة `step` الخاصة بالجدول الزمني.

