# RePaintScheduler

`RePaintScheduler`, aşırı maskelerle denetimsiz inpainting için DDPM tabanlı bir inpainting zamanlayıcısıdır. `RePaintPipeline` ile birlikte kullanılmak üzere tasarlanmıştır ve Andreas Lugmayr ve diğerleri tarafından yazılan [RePaint: Inpainting using Denoising Diffusion Probabilistic Models](https://huggingface.co/papers/2201.09865) makalesine dayanmaktadır.

Makalenin özeti şudur:

*Özgür biçimli inpainting, rastgele bir ikili maske ile belirlenen bölgelere bir görselde yeni içerik ekleme görevidir. Mevcut çoğu yaklaşım, belirli bir maske dağılımı için eğitim alır; bu da genelleyebilme yeteneklerini, görülmemiş maske türlerine sınırlar. Ayrıca, piksel bazlı ve algısal kayıplar ile eğitim, eksik alanlara doğru basit doku uzantılarına yol açar ve anlamlı bir üretim yerine sonuçlanır. Bu çalışmada, aşırı maskelere bile uygulanabilir olan, Gürültü Azaltma Difüzyon Olasılıksal Modeli (DDPM) tabanlı bir inpainting yaklaşımı olan RePaint'i öneriyoruz. Üretici öncül olarak önceden eğitilmiş koşulsuz bir DDPM kullanıyoruz. Üretim sürecini koşullandırmak için, yalnızca ters difüzyon yinelemelerini, maskelenmemiş bölgeleri verilen görsel bilgisiyle örnekleyerek değiştiriyoruz. Bu teknik, orijinal DDPM ağını kendisini değiştirmediği veya koşullandırmadığı için, model herhangi bir inpainting biçimi için yüksek kaliteli ve çeşitli çıktı görselleri üretir. Yöntemimizi, standart ve aşırı maskeler kullanarak hem yüzler hem de genel amaçlı görsel inpainting için doğruluyoruz. RePaint, altı maske dağılımından en az beşinde, son teknoloji Otoregresif ve GAN yaklaşımlarını geride bırakır. GitHub Deposu: [this http URL](http://git.io/RePaint).*

Orijinal uygulama [andreas128/RePaint](https://github.com/andreas128/) adresinde bulunabilir.

## 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)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_repaint.py#L99)

**Parametreler:**

num_train_timesteps (`int`, varsayılan `1000`) : Modelin eğitileceği difüzyon adım sayısı.

beta_start (`float`, varsayılan `0.0001`) : Çıkarımın başlangıç `beta` değeri.

beta_end (`float`, varsayılan `0.02`) : Son `beta` değeri.

beta_schedule (`str`, varsayılan `"linear"`) : Beta zamanlaması, modelin adım atması için beta aralığını beta dizisine eşleyen bir haritalamadır. `linear`, `scaled_linear`, `squaredcos_cap_v2` veya `sigmoid` seçeneklerinden birini seçin.

eta (`float`, varsayılan `0.0`) : Difüzyon adımında eklenen gürültünün ağırlığı. `0.0` değeri DDIM'e, `1.0` değeri ise DDPM'ye karşılık gelir.

trained_betas (`np.ndarray`, *isteğe bağlı*) : `beta_start` ve `beta_end` parametrelerini atlamak için beta dizisini doğrudan yapılandırıcıya iletin.

clip_sample (`bool`, varsayılan `True`) : Sayısal kararlılık için tahmin edilen örneği -1 ile 1 arasında kırpın.

`RePaintScheduler`, verilen bir maske içinde DDPM inpainting için bir zamanlayıcıdır.

Bu model [SchedulerMixin](/docs/diffusers/main/tr/api/schedulers/overview#diffusers.SchedulerMixin) ve [ConfigMixin](/docs/diffusers/main/tr/api/configuration#diffusers.ConfigMixin) sınıflarından devralır. Kütüphanenin tüm zamanlayıcılar için yükleme ve kaydetme gibi genel yöntemleri uyguladığı üst sınıf belgelendirmesini kontrol edin.

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

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

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_repaint.py#L395)

**Parametreler:**

original_samples (`torch.Tensor`) : Gürültü eklenecek orijinal örnekler.

noise (`torch.Tensor`) : Örneklere eklenecek gürültü.

timesteps (`torch.IntTensor`) : Her örnek için gürültü seviyesini belirleyecek zaman adımları.

**Yükselen:** ``NotImplementedError``

- ``NotImplementedError`` -- RePaint eğitimi bunun yerine [DDPMScheduler.add_noise()](/docs/diffusers/main/tr/api/schedulers/ddpm#diffusers.DDPMScheduler.add_noise) kullanmalıdır.

RePaint eğitimi için gürültü eklemenin bu zamanlayıcı tarafından desteklenmediğini belirtin.

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

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

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_repaint.py#L171)

**Parametreler:**

sample (`torch.Tensor`) : Girdi örneği.

timestep (`int`, *isteğe bağlı*) : Difüzyon zincirindeki mevcut zaman adımı.

**Dönüş:** `torch.Tensor`

Ölçeklendirilmiş bir girdi örneği.

Gürültüden arındırma modelinin girdisinin mevcut zaman adımına bağlı olarak ölçeklenmesi gereken zamanlayıcılarla değiştirilebilirliği sağlar.

#### 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)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_repaint.py#L188)

**Parametreler:**

num_inference_steps (`int`) : Ön eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı.

jump_length (`int`, varsayılan `10`) : Tek bir sıçrama için (“j” in RePaint makalesi) zaman içinde geriye gitmeden önce ileriye doğru atılan adım sayısı. Makaledeki Şekil 9 ve 10'a bakın.

jump_n_sample (`int`, varsayılan `10`) : Belirli bir seçilen zaman örneği için ileri zaman sıçraması yapılma sayısı. Makaledeki 9. ve 10. Şekillere bakın.

device (`str` veya `torch.device`, *opsiyonel*) : Timestep'lerin taşınacağı cihaz. `None` ise timestep'ler taşınmaz.

Difüzyon zinciri için kullanılan ayrık zaman adımlarını ayarlar (çalıştırılmadan önce çıkarım yapılmalıdır).

#### adım[[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)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_repaint.py#L264)

**Parametreler:**

model_output (`torch.Tensor`) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.

timestep (`int`) : Difüzyon zincirindeki mevcut ayrık zaman adımı.

sample (`torch.Tensor`) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

original_image (`torch.Tensor`) : Inpainting yapılacak orijinal görüntü.

mask (`torch.Tensor`) : Orijinal görüntünün hangi kısmının inpaint edileceğini 0.0 değerinin gösterdiği maske.

generator (`torch.Generator`, *isteğe bağlı*) : Rastgele sayı üreteci.

return_dict (`bool`, varsayılan `True`) : Bir tuple yerine [RePaintSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/repaint#diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput) döndürülecek mi?

**Dönüş:** [RePaintSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/repaint#diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput) veya `tuple[torch.Tensor, torch.Tensor]`

return_dict `True` ise [RePaintSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/repaint#diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput) döndürülür, aksi takdirde bir tuple döndürülür; bu tuple'ın ilk öğesi önceki örnek, ikinci öğesi ise tahmin edilen orijinal örnektir.

Önceki zaman adımındaki örneği SDE'yi tersine çevirerek tahmin edin. Bu işlev, öğrenilen model çıktılarını (en sık tahmin edilen gürültüyü) kullanarak difüzyon sürecini ilerletir.

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

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

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_repaint.py#L358)

**Parametreler:**

sample (`torch.Tensor`) : Gürültü eklenen örnek.

timestep (`int`) : Difüzyon zincirindeki mevcut ayrık zaman adımı.

generator (`torch.Generator`, *isteğe bağlı*) : Rastgele sayı üreteci.

**Dönüş:** `torch.Tensor`

Difüzyon zincirinde bir sonraki zaman adımındaki örnek.

Bir örneğe gürültü ekleyerek onu bir difüzyon adımı ileriye taşıyın.

## 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)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_repaint.py#L29)

**Parametreler:**

prev_sample (`torch.Tensor`, görüntüler için `(batch_size, num_channels, height, width)` boyutunda) : Önceki zaman adımının hesaplanan örneği (x_{t-1}). `prev_sample`, gürültü azaltma döngüsünde bir sonraki model girdisi olarak kullanılmalıdır.

pred_original_sample (`torch.Tensor`, görüntüler için şekli `(batch_size, num_channels, height, width)`) : Güncel zaman adımındaki model çıktısına dayalı olarak tahmin edilen gürültüsü azaltılmış örnek (x_{0}). `pred_original_sample`, ilerlemeyi önizlemek veya yönlendirme için kullanılabilir.

Zamanlayıcının adım fonksiyonu çıktısı için çıktı sınıfı.

