# EDMEulerScheduler

صياغة كاراس لمجدول أويلر (الخوارزمية 2) من ورقة [إيضاح مساحة تصميم النماذج التوليدية القائمة على الانتشار](https://huggingface.co/papers/2206.00364) التي كتبها كاراس وآخرون. هذا مجدول سريع يمكنه غالبًا توليد مخرجات جيدة في 20-30 خطوة. يعتمد المجدول على التنفيذ الأصلي لـ [k-diffusion](https://github.com/crowsonkb/k-diffusion/blob/481677d114f6ea445aa009cf5bd7a9cdee909e47/k_diffusion/sampling.py#L51) بواسطة [Katherine Crowson](https://github.com/crowsonkb/).

## EDMEulerScheduler[[diffusers.EDMEulerScheduler]]

#### diffusers.EDMEulerScheduler[[diffusers.EDMEulerScheduler]]

```python
diffusers.EDMEulerScheduler(sigma_min: float = 0.002, sigma_max: float = 80.0, sigma_data: float = 0.5, sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras', num_train_timesteps: int = 1000, prediction_type: typing.Literal['epsilon', 'v_prediction'] = 'epsilon', rho: float = 7.0, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero')
```

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

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

sigma_min (`float`، *اختياري*، القيمة الافتراضية `0.002`) : الحد الأدنى لحجم الضوضاء في جدول سيجما. تم ضبط هذه القيمة على 0.002 في ورقة EDM [1]؛ والنطاق المعقول هو [0، 10].

sigma_max (`float`، *اختياري*، القيمة الافتراضية `80.0`) : الحد الأقصى لحجم الضوضاء في جدول سيجما. تم ضبطه على 80.0 في ورقة EDM [1]؛ النطاق المعقول هو [0.2، 80.0].

sigma_data (`float`، *اختياري*، القيمة الافتراضية `0.5`) : الانحراف المعياري لتوزيع البيانات. تم ضبطه على 0.5 في ورقة EDM [1].

sigma_schedule (`Literal["karras", "exponential"]`، *اختياري*، القيمة الافتراضية `"karras"`) : جدول سيجما لحساب `sigmas`. بشكل افتراضي، نستخدم الجدول المقدم في ورقة EDM (https://huggingface.co/papers/2206.00364). تم دمج جدول `"exponential"` في هذا النموذج: https://huggingface.co/stabilityai/cosxl.

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

prediction_type (`Literal["epsilon", "v_prediction"]`، *اختياري*، القيمة الافتراضية `"epsilon"`) : نوع التنبؤ لدالة المجدول. يتنبأ `"epsilon"` بالضوضاء في عملية الانتشار، بينما يتنبأ `"v_prediction"` (انظر القسم 2.4 من ورقة [Imagen Video](https://huggingface.co/papers/2210.02303)).

rho (`float`، *اختياري*، القيمة الافتراضية `7.0`) : معامل rho المستخدم لحساب جدول Karras sigma، والذي تم ضبطه على 7.0 في ورقة EDM [1].

final_sigmas_type (`Literal["zero", "sigma_min"]`، *اختياري*، القيمة الافتراضية `"zero"`) : القيمة النهائية لـ`sigma` في جدول الضوضاء أثناء عملية أخذ العينات. إذا كانت `"sigma_min"`، فإن قيمة sigma النهائية هي نفسها آخر قيمة sigma في جدول التدريب. إذا كانت `"zero"`، يتم تعيين قيمة sigma النهائية إلى 0.

يُنفّذ مُجدول أويلر بصياغة EDM كما ورد في Karras et al. 2022 [1].

[1] كاراس، تيرو، وآخرون. “إيضاح مساحة التصميم للنماذج التوليدية القائمة على الانتشار.” https://huggingface.co/papers/2206.00364

يرث هذا النموذج من [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.EDMEulerScheduler.add_noise]]

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

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

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

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

noise (`torch.Tensor`) : متجه الضوضاء الذي يُضاف إلى العينات الأصلية.

timesteps (`torch.Tensor`) : الخطوات الزمنية التي يُضاف عندها الضوضاء، مما يحدد مستوى الضوضاء من الجدول الزمني.

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

العينات الضوضائية مع ضوضاء مضافة مُقيّمة وفقًا لجدول خطوات الزمن.

أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة.

#### index_for_timestep[[diffusers.EDMEulerScheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[float, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)
```

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

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

timestep (`float` أو `torch.Tensor`) : قيمة خطوة الزمن التي يجب البحث عنها في الجدول الزمني.

schedule_timesteps (`torch.Tensor`، *اختياري*) : جدول خطوات الزمن للبحث فيه. إذا كان `None`، يتم استخدام `self.timesteps`.

**يعيد:** `int`

مؤشر خطوة الزمن في الجدول. بالنسبة للخطوة الأولى تمامًا، يُرجع المؤشر الثاني إذا كانت هناك تطابقات متعددة، لتجنب تجاوز قيمة سيجما عند البدء من منتصف الجدول (مثلًا، في تحويل الصورة إلى صورة).

ابحث عن فهرس خطوة زمنية محددة في جدول الخطوات الزمنية.

#### precondition_inputs[[diffusers.EDMEulerScheduler.precondition_inputs]]

```python
precondition_inputs(sample: Tensor, sigma: typing.Union[float, torch.Tensor])
```

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

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

sample (`torch.Tensor`) : متجه العينة المُدخل الذي يجب تجهيزه مسبقًا.

sigma (`float` أو `torch.Tensor`) : القيمة الحالية لسيجما (مستوى الضوضاء).

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

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

جهّز عينة الإدخال مسبقًا عن طريق تحجيمها وفقًا لصياغة EDM.

#### precondition_noise[[diffusers.EDMEulerScheduler.precondition_noise]]

```python
precondition_noise(sigma: typing.Union[float, torch.Tensor])
```

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

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

sigma (`float` أو `torch.Tensor`) : قيمة سيجما (مستوى الضوضاء) التي سيتم إعدادها مسبقًا.

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

قيمة الضوضاء المُعدَّلة المُحسوبة على أنها `0.25 * log(sigma)`.

قم بتكييف مستوى الضوضاء من خلال تطبيق تحويل لوغاريتمي.

#### precondition_outputs[[diffusers.EDMEulerScheduler.precondition_outputs]]

```python
precondition_outputs(sample: Tensor, model_output: Tensor, sigma: typing.Union[float, torch.Tensor])
```

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

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

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

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

sigma (`float` أو `torch.Tensor`) : القيمة الحالية لسيجما (مستوى الضوضاء).

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

العينة المُزالة الضوضاء المحسوبة عن طريق دمج اتصال التخطي وتوسيط المخرجات.

قم بإعداد مخرجات النموذج مسبقاً وفقاً لصياغة EDM.

#### scale_model_input[[diffusers.EDMEulerScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: typing.Union[float, torch.Tensor])
```

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

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

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

timestep (`float` أو `torch.Tensor`) : الخطوة الزمنية الحالية في سلسلة الانتشار.

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

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

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

#### set_begin_index[[diffusers.EDMEulerScheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

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

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

begin_index (`int`، القيمة الافتراضية `0`) : فهرس البداية للمجدول.

يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.

#### set_timesteps[[diffusers.EDMEulerScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device] = None, sigmas: typing.Union[list[float], torch.Tensor, NoneType] = None)
```

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

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

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

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

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

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

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

```python
step(model_output: Tensor, timestep: typing.Union[float, torch.Tensor], sample: Tensor, s_churn: float = 0.0, s_tmin: float = 0.0, s_tmax: float = inf, s_noise: float = 1.0, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True, pred_original_sample: typing.Optional[torch.Tensor] = None)
```

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

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

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

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

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

s_churn (`float`، *اختياري*، القيمة الافتراضية `0.0`) : مقدار العشوائية المضاف في كل خطوة. تضيف القيم الأعلى المزيد من الضوضاء.

s_tmin (`float`، *اختياري*، القيمة الافتراضية `0.0`) : الحد الأدنى لعتبة سيغما التي لا يُضاف تحتها أي ضوضاء.

s_tmax (`float`، *اختياري*، القيمة الافتراضية `float("inf")`) : الحد الأقصى لعتبة سيجما التي لا يُضاف فوقها أي ضوضاء.

s_noise (`float`، *اختياري*، القيمة الافتراضية `1.0`) : معامل التدرج للضوضاء المضافة إلى العينة.

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

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

pred_original_sample (`torch.Tensor`, *اختياري*) : العينة المُتنبَّأ بها بعد إزالة الضوضاء من خطوة سابقة. إذا تم تقديمها، يتم تجاوز إعادة الحساب.

**يعيد:** [EDMEulerSchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [EDMEulerSchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput)، وإلا يُعاد tuple حيث العنصر الأول هو tensor للعينة السابقة والعنصر الثاني هو tensor للعينة الأصلية المتوقعة.

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

## EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]

#### diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]

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

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

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

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` الخاصة بالجدول الزمني.

