# DDPMScheduler

Jonathan Ho, Ajay Jain ve Pieter Abbeel tarafından önerilen [Denoising Diffusion Probabilistic Models](https://huggingface.co/papers/2006.11239) (DDPM), aynı adı taşıyan difüzyon tabanlı bir modeldir. 🤗 Diffusers kütüphanesi bağlamında DDPM, hem makaledeki ayrık gürültü azaltma zamanlayıcısına hem de hattına (pipeline) atıfta bulunur.

Makalenin özeti şudur:

*Nonequilibrium termodinamiğinden ilham alan gizli değişkenli modeller sınıfı olan difüzyon olasılıksal modelleri kullanarak yüksek kaliteli görüntü sentez sonuçları sunuyoruz. En iyi sonuçlarımız, difüzyon olasılıksal modeller ile Langevin dinamiğine sahip gürültü giderme skoru eşleştirmesi arasındaki yeni bir bağlantıya göre tasarlanmış ağırlıklı varyasyonel sınır üzerinde eğitim alarak elde edilmektedir ve modellerimiz, otoregresif çözümlemenin bir genelleştirmesi olarak yorumlanabilen kademeli kayıplı sıkıştırma çözme şemasını doğal olarak kabul etmektedir. Koşulsuz CIFAR10 veri setinde, 9.46 Inception skoru ve alanın en iyisi (state-of-the-art) 3.17 FID skoru elde ediyoruz. 256x256 LSUN üzerinde, ProgressiveGAN'a benzer örnek kalitesi elde ediyoruz. Uygulamamız [bu https URL](https://github.com/hojonathanho/diffusion) adresinde mevcuttur.*

## DDPMScheduler[[diffusers.DDPMScheduler]]

#### diffusers.DDPMScheduler[[diffusers.DDPMScheduler]]

```python
diffusers.DDPMScheduler(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', 'sigmoid'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, variance_type: typing.Literal['fixed_small', 'fixed_small_log', 'fixed_large', 'fixed_large_log', 'learned', 'learned_range'] = 'fixed_small', clip_sample: bool = True, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, clip_sample_range: float = 1.0, sample_max_value: float = 1.0, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'leading', steps_offset: int = 0, rescale_betas_zero_snr: bool = False)
```

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

**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 (`"linear"`, `"scaled_linear"`, `"squaredcos_cap_v2"` veya `"sigmoid"`, varsayılan olarak `"linear"`) : Beta zamanlaması, modelin adım atması için beta aralığını beta dizisine eşleyen bir haritalamadır.

trained_betas (`np.ndarray`, *isteğe bağlı*) : `beta_start` ve `beta_end` kullanılmadan doğrudan yapılandırıcıya geçirilecek bir betalar dizisi.

variance_type (`"fixed_small"`, `"fixed_small_log"`, `"fixed_large"`, `"fixed_large_log"`, `"learned"` veya `"learned_range"`, varsayılan olarak `"fixed_small"`) : Gürültü eklenirken, gürültüsü azaltılmış örnek için varyansı kırpın.

clip_sample (`bool`, varsayılan `True`) : Sayısal kararlılık için tahmini örneği kırpın.

clip_sample_range (`float`, varsayılan `1.0`) : Örnek kırpma için maksimum büyüklük. Yalnızca `clip_sample=True` olduğunda geçerlidir.

prediction_type (`"epsilon"`, `"sample"`, or `"v_prediction"`, defaults to `"epsilon"`) : 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`, varsayılan `False`) : "Dinik eşikleme" yönteminin kullanılıp kullanılmayacağını belirtir. Bu, Stable Diffusion gibi gizli uzay difüzyon modelleri için uygun değildir.

dynamic_thresholding_ratio (`float`, varsayılan `0.995`) : Dinamik eşikleme yöntemi için oran. Yalnızca `thresholding=True` olduğunda geçerlidir.

sample_max_value (`float`, varsayılan `1.0`) : Dinamik eşikleme için eşik değeri. Yalnızca `thresholding=True` olduğunda geçerlidir.

timestep_spacing (`"linspace"`, `"leading"` veya `"trailing"`, varsayılan olarak `"leading"`) : Zaman adımlarının ölçeklendirilme yöntemi. Daha fazla bilgi için [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) makalesindeki Tablo 2'ye bakın.

steps_offset (`int`, varsayılan `0`) : Bazı model ailelerinin gerektirdiği gibi, çıkarım adımlarına eklenen bir ofset.

rescale_betas_zero_snr (`bool`, varsayılan `False`) : Betaların sıfır terminal SNR'ye sahip olacak şekilde yeniden ölçeklenip ölçeklenmeyeceğini belirtir. Bu, modelin orta parlaklıktaki örneklerle sınırlı kalmak yerine çok parlak ve karanlık örnekler üretmesini sağlar. [`--offset_noise`](https://github.com/huggingface/diffusers/blob/74fd735eb073eb1d774b1ab4154a0876eb82f055/examples/dreambooth/train_dreambooth.py#L506) ile gevşek bir şekilde ilişkilidir.

`DDPMScheduler`, gürültü azaltma skoru eşleştirmesi ile Langevin dinamikleri örneklemesi arasındaki bağlantıları araştırı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.DDPMScheduler.add_noise]]

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

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

**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 gösteren zaman adımları.

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

Gürültülü örnekler.

Her zaman adımındaki gürültü büyüklüğüne göre orijinal örneklerin gürültü ekleyin (bu, ileri difüzyon sürecidir).

#### get_velocity[[diffusers.DDPMScheduler.get_velocity]]

```python
get_velocity(sample: Tensor, noise: Tensor, timesteps: IntTensor)
```

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

**Parametreler:**

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

noise (`torch.Tensor`) : Gürültü tensörü.

timesteps (`torch.IntTensor`) : Hız hesaplama için zaman adımları.

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

Hesaplanan hız.

Hız formülüne göre örnek ve gürültüden hız tahminini hesaplayın.

#### previous_timestep[[diffusers.DDPMScheduler.previous_timestep]]

```python
previous_timestep(timestep: int)
```

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

**Parametreler:**

timestep (`int`) : Güncel zaman adımı.

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

Önceki zaman adımı.

Difüzyon zincirindeki bir önceki zaman adımını hesaplayın.

#### scale_model_input[[diffusers.DDPMScheduler.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_ddpm.py#L257)

**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.DDPMScheduler.set_timesteps]]

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

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

**Parametreler:**

num_inference_steps (`int`, *isteğe bağlı*) : Ön eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı. Kullanılırsa, `timesteps` `None` olmalıdır.

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

timesteps (`list[int]`, *isteğe bağlı*) : Timestep'ler arasında keyfi aralıklara destek sağlamak için kullanılan özel timestep'ler. `None` ise, timestep'ler arasında eşit aralıklı varsayılan timestep aralıklandırma stratejisi kullanılır. `timesteps` geçirilirse, `num_inference_steps` `None` olmalıdır.

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.DDPMScheduler.step]]

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

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

**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.

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

return_dict (`bool`, varsayılan `True`) : [DDPMSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ddpm#diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput) veya `tuple` döndürülecek mi?

**Dönüş:** [DDPMSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ddpm#diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput) veya `tuple`

return_dict `True` ise [DDPMSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ddpm#diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput) döndürülür, aksi halde ilk öğesi örnek tensörü olan bir tuple döndürülür.

Ö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.

## DDPMSchedulerOutput[[diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput]]

#### diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput[[diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput]]

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

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

**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 `(x_{t-1})` örneği. `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 `(batch_size, num_channels, height, width)` boyutunda) : Mevcut 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 `step` işlevi çıktısı için çıktı sınıfı.

