# DPMSolverMultistepInverse

`DPMSolverMultistepInverse` هو المجدول المعكوس من [DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps](https://huggingface.co/papers/2206.00927) و [DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models](https://huggingface.co/papers/2211.01095) من تأليف تشينغ لو، ويهاو تشو، فان باو، جيانفي تشن، تشونغشوان لي، وجون تشو.

تعتمد الطريقة بشكل أساسي على تعريف عكس DDIM في [Null-text Inversion for Editing Real Images using Guided Diffusion Models](https://huggingface.co/papers/2211.09794) وتنفيذ دفتر الملاحظات الخاص بعكس `DiffEdit` الكامن من [Xiang-cd/DiffEdit-stable-diffusion](https://github.com/Xiang-cd/DiffEdit-stable-diffusion/blob/main/diffedit.ipynb).

## نصائح

يُؤيَّد العتبة الديناميكية من [Imagen](https://huggingface.co/papers/2205.11487)، ولنماذج الانتشار في فضاء البكسلات، يمكنك ضبط كل من `algorithm_type="dpmsolver++"` و`thresholding=True` لاستخدام العتبة الديناميكية. ومن غير المناسب استخدام طريقة العتبات هذه لنماذج الانتشار في فضاء الكمون مثل Stable Diffusion.

## DPMSolverMultistepInverseScheduler[[diffusers.DPMSolverMultistepInverseScheduler]]

#### diffusers.DPMSolverMultistepInverseScheduler[[diffusers.DPMSolverMultistepInverseScheduler]]

```python
diffusers.DPMSolverMultistepInverseScheduler(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'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, solver_order: int = 2, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++', solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint', lower_order_final: bool = True, euler_at_final: bool = False, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, use_flow_sigmas: bool = False, flow_shift: float = 1.0, lambda_min_clipped: float = -inf, variance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = None, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', steps_offset: int = 0)
```

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

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

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

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

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

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

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

solver_order (`int`، القيمة الافتراضية 2) : ترتيب DPMSolver الذي يمكن أن يكون `1` أو `2` أو `3`. يُوصى باستخدام `solver_order=2` للعينة الموجَّهة، و`solver_order=3` للعينة غير المشروطة.

prediction_type (`str`, defaults to `epsilon`, *optional*) : 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` و`algorithm_type="dpmsolver++"`.

algorithm_type (`str`، الافتراضي `dpmsolver++`) : نوع الخوارزمية للمُحلِّل؛ يمكن أن يكون `dpmsolver` أو `dpmsolver++` أو `sde-dpmsolver` أو `sde-dpmsolver++`. يُنفِّذ النوع `dpmsolver` الخوارزميات الواردة في ورقة [DPMSolver](https://huggingface.co/papers/2206.00927)، بينما يُنفِّذ النوع `dpmsolver++` الخوارزميات الواردة في ورقة [DPMSolver++](https://huggingface.co/papers/2211.01095). يُوصى باستخدام `dpmsolver++` أو `sde-dpmsolver++` مع `solver_order=2` لأخذ العينات الموجَّهة كما في Stable Diffusion.

solver_type (`str`، الافتراضي `midpoint`) : نوع المُحلِّل لمُحلِّل الرتبة الثانية؛ يمكن أن يكون `midpoint` أو `heun`. يؤثر نوع المُحلِّل قليلاً على جودة العينة، خاصةً عند استخدام عدد صغير من الخطوات. يُوصى باستخدام مُحلِّلات `midpoint`.

lower_order_final (`bool`، القيمة الافتراضية `True`) : ما إذا كان سيتم استخدام محللات من رتبة أدنى في الخطوات النهائية. صالح فقط لعدد خطوات الاستدلال < 15. يمكن أن يثبّت أخذ العينات لـ DPMSolver عند عدد خطوات < 15، خاصةً عند عدد خطوات <= 10.

euler_at_final (`bool`، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام طريقة أويلر في الخطوة النهائية. إنها موازنة بين الاستقرار العددي وغنى التفاصيل. يمكن أن يُثبّت هذا عملية أخذ العينات لنسخة DPMSolver المعتمدة على المعادلات التفاضلية العشوائية (SDE) عند استخدام عدد صغير من خطوات الاستدلال، لكنه قد يؤدي أحيانًا إلى ضبابية في الصورة.

use_karras_sigmas (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام قيم Karras sigmas لحجم الخطوات في جدول الضوضاء أثناء عملية أخذ العينات. إذا كانت القيمة `True`، تُحدَّد قيم sigmas وفقاً لسلسلة من مستويات الضوضاء {σi}.

use_exponential_sigmas (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام قيم سيجما أسّية لحجم الخطوات في جدول الضوضاء أثناء عملية أخذ العينات.

use_beta_sigmas (`bool`, *optional*, defaults to `False`) : Whether to use beta sigmas for step sizes in the noise schedule during the sampling process. Refer to [Beta Sampling is All You Need](https://huggingface.co/papers/2407.12173) for more information.

use_flow_sigmas (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام قيم سيجما التدفق (flow sigmas) لحجم الخطوات في جدول الضوضاء أثناء عملية أخذ العينات.

flow_shift (`float`، *اختياري*، القيمة الافتراضية 1.0) : معامل إزاحة التدفق. صالح فقط عندما يكون `use_flow_sigmas=True`.

lambda_min_clipped (`float`، القيمة الافتراضية `-inf`) : حدّ القصّ للقيمة الدنيا لـ`lambda(t)` من أجل الاستقرار العددي. وهذا أمر بالغ الأهمية لجدول الضوضاء الجيبية (`squaredcos_cap_v2`).

variance_type (`str`، *اختياري*) : اضبطه على "learned" أو "learned_range" لنماذج الانتشار التي تتنبأ بالتباين. إذا تم ضبطه، فإن مخرجات النموذج تتضمن التباين الغاوسي المتوقع.

timestep_spacing (`str`، القيمة الافتراضية هي `"linspace"`) : الطريقة التي يجب بها قياس خطوات الزمن. راجع الجدول 2 من [جداول ضوضاء الانتشار الشائعة وخطوات العينات معيبة](https://huggingface.co/papers/2305.08891) لمزيد من المعلومات.

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

`DPMSolverMultistepInverseScheduler` هو المجدول العكسي لـ [DPMSolverMultistepScheduler](/docs/diffusers/main/ar/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler).

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

#### add_noise[[diffusers.DPMSolverMultistepInverseScheduler.add_noise]]

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

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

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

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

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

timesteps (`torch.IntTensor`) : الخطوات الزمنية التي يُضاف عندها الضوضاء.

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

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

أضف الضوضاء إلى `original_samples` النظيفة باستخدام الدالة المكافئة في المجدول.

#### convert_model_output[[diffusers.DPMSolverMultistepInverseScheduler.convert_model_output]]

```python
convert_model_output(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

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

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

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

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

مخرجات النموذج المحوّل.

حوّل مخرجات النموذج إلى النوع المقابل الذي يحتاجه خوارزمية DPMSolver/DPMSolver++. صُمِّم DPM-Solver لتقطيع تكامل نموذج التنبؤ بالضوضاء، بينما صُمِّم DPM-Solver++ لتقطيع تكامل نموذج التنبؤ بالبيانات.

> [!TIP] > الخوارزمية ونوع النموذج منفصلان. يمكنك استخدام DPMSolver أو DPMSolver++ لكليهما
الضوضاء > التنبؤ ونماذج التنبؤ بالبيانات.

#### dpm_solver_first_order_update[[diffusers.DPMSolverMultistepInverseScheduler.dpm_solver_first_order_update]]

```python
dpm_solver_first_order_update(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

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

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

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

noise (`torch.Tensor`، *اختياري*) : متجه الضوضاء.

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

المصفوفة العينة عند خطوة الزمن السابقة.

خطوة واحدة لحلّ DPMSolver من الدرجة الأولى (المكافئ لـ DDIM).

#### multistep_dpm_solver_second_order_update[[diffusers.DPMSolverMultistepInverseScheduler.multistep_dpm_solver_second_order_update]]

```python
multistep_dpm_solver_second_order_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

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

model_output_list (`list[torch.Tensor]`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة.

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

noise (`torch.Tensor`، *اختياري*) : ضوضاء عشوائية تُستخدم في متغيرات المُحلِّل العشوائي (`sde-*`). يُشترط توفيره عند ضبط `algorithm_type` على أحد هذه المتغيرات، ولا يُستخدم في الحالات الأخرى.

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

المصفوفة العينة عند خطوة الزمن السابقة.

خطوة واحدة لحلّ DPMSolver متعدد الخطوات من الدرجة الثانية.

#### multistep_dpm_solver_third_order_update[[diffusers.DPMSolverMultistepInverseScheduler.multistep_dpm_solver_third_order_update]]

```python
multistep_dpm_solver_third_order_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

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

model_output_list (`list[torch.Tensor]`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة.

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

noise (`torch.Tensor`، *اختياري*) : متجه الضوضاء.

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

المصفوفة العينة عند خطوة الزمن السابقة.

خطوة واحدة لحلّ DPMSolver متعدد الخطوات من الرتبة الثالثة.

#### scale_model_input[[diffusers.DPMSolverMultistepInverseScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, *args, **kwargs)
```

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

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

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

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

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

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

#### set_timesteps[[diffusers.DPMSolverMultistepInverseScheduler.set_timesteps]]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

variance_noise (`torch.Tensor`) : بديل لتوليد الضوضاء باستخدام `generator` من خلال تقديم الضوضاء مباشرةً للتباين نفسه. مفيد لطرق مثل `CycleDiffusion`.

return_dict (`bool`) : ما إذا كان يجب إرجاع [SchedulerOutput](/docs/diffusers/main/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple` أم لا.

**يعيد:** [SchedulerOutput](/docs/diffusers/main/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple`

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

تنبّأ بالعيّنة من خطوة الزمن السابقة عن طريق عكس معادلة ستوكستك التفاضلية (SDE). تنقل هذه الدالة العيّنة باستخدام محلّل DPMSolver متعدد الخطوات.

## SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

#### diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

```python
diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)
```

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

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

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

الفئة الأساسية لمخرجات دالة `step` في المجدول.

