# RePaintScheduler

`RePaintScheduler` هو مُجدول لإصلاح الصور (inpainting) يعتمد على DDPM، مخصص لإصلاح الصور غير المُشرَف عليها باستخدام أقنعة متطرفة. صُمم ليُستخدم مع `RePaintPipeline`، وهو مبني على ورقة [RePaint: Inpainting using Denoising Diffusion Probabilistic Models](https://huggingface.co/papers/2201.09865) التي كتبها Andreas Lugmayr وآخرون.

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

*إعادة رسم الصور بحرية (Free-form inpainting) هي مهمة إضافة محتوى جديد إلى صورة في المناطق المحددة بواسطة قناع ثنائي (binary mask) عشوائي. معظم الأساليب الحالية تُدرَّب على توزيع معين للأقنعة، مما يحدّ من قدرتها على التعميم إلى أنواع أقنعة غير مرئية. علاوة على ذلك، يؤدي التدريب باستخدام الخسائر البكسلية (pixel-wise) والإدراكية (perceptual) غالبًا إلى تمديدات نصية بسيطة نحو المناطق المفقودة بدلاً من توليد ذي معنى دلالي. في هذا العمل، نقترح RePaint: نهج لإعادة رسم الصور يعتمد على نموذج الاحتمالي الانتشاري لإزالة الضوضاء (DDPM) وهو قابل للتطبيق حتى على الأقنعة المتطرفة. نستخدم DDPM غير مشروط مُدرَّب مسبقًا كسابق توليدي (generative prior). لتكييف عملية التوليد، نعدّل فقط تكرارات الانتشار العكسي عن طريق أخذ عينات من المناطق غير المقنعة باستخدام معلومات الصورة المعطاة. وبما أن هذه التقنية لا تعدّل أو تشترط شبكة DDPM الأصلية نفسها، فإن النموذج ينتج صورًا عالية الجودة ومتنوعة لأي شكل من أشكال إعادة الرسم. نتحقق من منهجيتنا لكل من إعادة رسم الوجوه وإعادة رسم الصور العامة باستخدام أقنعة قياسية ومتطرفة. يتفوق RePaint على أحدث الأساليب التلقائية (Autoregressive) وأساليب GAN في خمس على الأقل من أصل ستة توزيعات للأقنعة. مستودع GitHub: [this http URL](http://git.io/RePaint).*

يمكن العثور على التنفيذ الأصلي في [andreas128/RePaint](https://github.com/andreas128/).

## RePaintScheduler[[diffusers.RePaintScheduler]]

#### diffusers.RePaintScheduler[[diffusers.RePaintScheduler]]

```python
diffusers.RePaintScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: str = 'linear', eta: float = 0.0, trained_betas: numpy.ndarray | None = None, clip_sample: bool = True)
```

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

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

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`، أو `sigmoid`.

eta (`float`، القيمة الافتراضية `0.0`) : وزن الضوضاء المضافة أثناء خطوة الانتشار. القيمة `0.0` تقابل DDIM والقيمة `1.0` تقابل DDPM.

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

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

`RePaintScheduler` هو مُجدول لتعبئة الصور (Inpainting) باستخدام DDPM داخل قناع محدد.

يرث هذا النموذج من [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.RePaintScheduler.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_repaint.py#L395)

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

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

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

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

**يرفع:** ``NotImplementedError``

- ``NotImplementedError`` -- يجب أن يستخدم تدريب RePaint [DDPMScheduler.add_noise()](/docs/diffusers/v0.43.0/ar/api/schedulers/ddpm#diffusers.DDPMScheduler.add_noise) بدلاً من ذلك.

أظهر أن إضافة الضوضاء لتدريب RePaint غير مدعومة بواسطة مُجدول المهام هذا.

#### scale_model_input[[diffusers.RePaintScheduler.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_repaint.py#L171)

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

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

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

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

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

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

#### set_timesteps[[diffusers.RePaintScheduler.set_timesteps]]

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

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

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

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

jump_length (`int`، القيمة الافتراضية `10`) : عدد الخطوات المتقدمة في الزمن قبل الرجوع إلى الوراء في الزمن لقفزة واحدة (الحرف “j” في ورقة RePaint). راجع الشكلين 9 و10 في الورقة.

jump_n_sample (`int`، القيمة الافتراضية `10`) : عدد مرات تنفيذ قفزة زمنية للأمام لعينة زمنية محددة. راجع الشكلين 9 و10 في الورقة البحثية.

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

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

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

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

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

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

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

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

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

original_image (`torch.Tensor`) : الصورة الأصلية التي سيتم إجراء عملية inpaint عليها.

mask (`torch.Tensor`) : القناع الذي تشير القيمة 0.0 فيه إلى الجزء من الصورة الأصلية الذي يجب إعادة رسمه.

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

return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [RePaintSchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/repaint#diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput) بدلاً من tuple.

**يعيد:** [RePaintSchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/repaint#diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput) أو `tuple[torch.Tensor, torch.Tensor]`

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

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

#### undo_step[[diffusers.RePaintScheduler.undo_step]]

```python
undo_step(sample: Tensor, timestep: int, generator: typing.Optional[torch.Generator] = None)
```

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

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

sample (`torch.Tensor`) : العينة التي يُضاف إليها الضوضاء.

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

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

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

العينة عند خطوة الزمن التالية في سلسلة الانتشار.

أضف ضوضاء إلى عينة لتحريكها خطوة انتشار واحدة إلى الأمام.

## RePaintSchedulerOutput[[diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput]]

#### diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput[[diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput]]

```python
diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput(prev_sample: Tensor, pred_original_sample: Tensor)
```

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

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

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` لمعاينة التقدم أو للإرشاد.

فئة الإخراج لدالة خطوة المجدول.

