# CMStochasticIterativeScheduler

قدّم [Consistency Models](https://huggingface.co/papers/2303.01469) الذي كتبه Yang Song و Prafulla Dhariwal و Mark Chen و Ilya Sutskever جدولة متعددة الخطوات وأخرى بخطوة واحدة (الخوارزمية 1) قادرة على توليد عينات جيدة في خطوة واحدة أو عدد قليل من الخطوات.

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

*حقّقت نماذج الانتشار تقدماً كبيراً في مجالات توليد الصور والصوت والفيديو، لكنها تعتمد على عملية أخذ عينات تكرارية تسبب بطئاً في التوليد. للتغلب على هذه القيود، نقترح نماذج الاتساق، وهي عائلة جديدة من النماذج تولّد عينات عالية الجودة عن طريق خرائط الضوضاء مباشرةً إلى البيانات. فهي تدعم التوليد السريع بخطوة واحدة بالتصميم، مع السماح في الوقت نفسه بأخذ عينات متعددة الخطوات لتبادل الحسابات مقابل جودة العينة. كما تدعم تحرير البيانات بدون تدريب مسبق، مثل ملء الصور (inpainting)، والتلوين، والدقة الفائقة، دون الحاجة إلى تدريب صريح على هذه المهام. يمكن تدريب نماذج الاتساق إما عن طريق تقطير نماذج الانتشار المدربة مسبقاً، أو كنماذج توليدية مستقلة تماماً. من خلال تجارب شاملة، نثبت أنها تتفوق على تقنيات التقطير الحالية لنماذج الانتشار في أخذ العينات بخطوة واحدة وبضع خطوات، محققةً أحدث مستوى من الأداء (state-of-the-art) بمقياس FID قدره 3.55 على CIFAR-10 و6.20 على ImageNet 64x64 للتوليد بخطوة واحدة. عند تدريبها بشكل منفصل، تصبح نماذج الاتساق عائلة جديدة من النماذج التوليدية يمكن أن تتفوق على النماذج التوليدية الحالية بخطوة واحدة وغير العدائية على المعايير القياسية مثل CIFAR-10 وImageNet 64x64 وLSUN 256x256.*

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

## CMStochasticIterativeScheduler[[diffusers.CMStochasticIterativeScheduler]]

#### diffusers.CMStochasticIterativeScheduler[[diffusers.CMStochasticIterativeScheduler]]

```python
diffusers.CMStochasticIterativeScheduler(num_train_timesteps: int = 40, sigma_min: float = 0.002, sigma_max: float = 80.0, sigma_data: float = 0.5, s_noise: float = 1.0, rho: float = 7.0, clip_denoised: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L43)

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

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

sigma_min (`float`، القيمة الافتراضية 0.002) : الحد الأدنى لحجم الضوضاء في جدول سيجما. القيمة الافتراضية هي 0.002 من التنفيذ الأصلي.

sigma_max (`float`، القيمة الافتراضية 80.0) : الحد الأقصى لشدة الضوضاء في جدول سيجما. القيمة الافتراضية هي 80.0 من التنفيذ الأصلي.

sigma_data (`float`، القيمة الافتراضية 0.5) : الانحراف المعياري لتوزيع البيانات من [ورقة](https://huggingface.co/papers/2206.00364) EDM. القيمة الافتراضية هي 0.5 من التنفيذ الأصلي.

s_noise (`float`، القيمة الافتراضية 1.0) : مقدار الضوضاء الإضافية لمقاومة فقدان التفاصيل أثناء أخذ العينات. النطاق المعقول هو [1.000، 1.011]. القيمة الافتراضية هي 1.0 من التنفيذ الأصلي.

rho (`float`، القيمة الافتراضية 7.0) : المعامل المستخدم لحساب جدول Karras sigma من [ورقة](https://huggingface.co/papers/2206.00364) EDM. القيمة الافتراضية هي 7.0 من التنفيذ الأصلي.

clip_denoised (`bool`، القيمة الافتراضية `True`) : ما إذا كان سيتم قص المخرجات بعد إزالة الضوضاء إلى `(-1, 1)`.

timesteps (`list` أو `np.ndarray` أو `torch.Tensor`، *اختياري*) : جدول صريح لخطوات الزمن يمكن تحديده اختيارياً. يُتوقع أن تكون الخطوات مرتبة تصاعدياً.

التعيّن متعدد الخطوات والتعيّن أحادي الخطوة لنماذج الاتساق.

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

#### add_noise[[diffusers.CMStochasticIterativeScheduler.add_noise]]

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

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

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

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

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

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

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

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

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

#### get_scalings[[diffusers.CMStochasticIterativeScheduler.get_scalings]]

```python
get_scalings(sigma: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L276)

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

sigma (`torch.Tensor`) : قيمة سيجما الحالية في جدول الضوضاء.

**يعيد:** `tuple[torch.Tensor, torch.Tensor]`

مجموعة تحتوي على `c_skip` (التحجيم لعينة الإدخال) و`c_out` (التحجيم لإخراج النموذج).

يُحسب عوامل التوسيع لمخرجات نموذج الاتساق.

#### get_scalings_for_boundary_condition[[diffusers.CMStochasticIterativeScheduler.get_scalings_for_boundary_condition]]

```python
get_scalings_for_boundary_condition(sigma: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L294)

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

sigma (`torch.Tensor`) : قيمة سيجما الحالية في جدول سيجما الخاص بـ Karras.

**يعيد:** `tuple[torch.Tensor, torch.Tensor]`

مجموعة مرتبة من عنصرين حيث يكون `c_skip` (الذي يوزّن العينة الحالية) هو العنصر الأول و`c_out` (الذي يوزّن مخرجات نموذج الاتساق) هو العنصر الثاني.

يحصل على معاملات التوسيع المستخدمة في ترميز نموذج الاتساق (من الملحق C من [الورقة](https://huggingface.co/papers/2303.01469)) لفرض شرط الحد.

> [!TIP] > يُضبط `epsilon` في معادلات `c_skip` و`c_out` على `sigma_min`.

#### index_for_timestep[[diffusers.CMStochasticIterativeScheduler.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/main/src/diffusers/schedulers/scheduling_consistency_models.py#L318)

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

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

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

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

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

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

#### scale_model_input[[diffusers.CMStochasticIterativeScheduler.scale_model_input]]

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

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L136)

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

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

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

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

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

يُقيّم مدخل نموذج الاتساق بواسطة `(sigma**2 + sigma_data**2) ** 0.5`.

#### set_begin_index[[diffusers.CMStochasticIterativeScheduler.set_begin_index]]

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

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L126)

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

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

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

#### set_timesteps[[diffusers.CMStochasticIterativeScheduler.set_timesteps]]

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

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L180)

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

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

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

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

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

#### sigma_to_t[[diffusers.CMStochasticIterativeScheduler.sigma_to_t]]

```python
sigma_to_t(sigmas: float | numpy.ndarray)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L161)

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

sigmas (`float` أو `np.ndarray`) : قيمة Karras sigma واحدة أو مصفوفة من قيم Karras sigma.

**يعيد:** `np.ndarray`

مصفوفة خطوات زمنية مدخلة مُقيّمة.

يحصل على خطوات زمنية مُقيَّمة من قيم Karras sigmas كمدخل إلى نموذج الاتساق.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L364)

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

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

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

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

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

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

**يعيد:** [CMStochasticIterativeSchedulerOutput](/docs/diffusers/main/ar/api/schedulers/cm_stochastic_iterative#diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput) أو `tuple`

إذا كانت `True` قيمة return_dict، يُعاد [CMStochasticIterativeSchedulerOutput](/docs/diffusers/main/ar/api/schedulers/cm_stochastic_iterative#diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput)، وإلا يُعاد tuple يكون العنصر الأول فيه tensor العينة.

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

## CMStochasticIterativeSchedulerOutput[[diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput]]

#### diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput[[diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput]]

```python
diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput(prev_sample: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_consistency_models.py#L30)

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

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

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

