# CMStochasticIterativeScheduler

Yang Song, Prafulla Dhariwal, Mark Chen ve Ilya Sutskever tarafından yazılan [Consistency Models](https://huggingface.co/papers/2303.01469) makalesi, iyi örnekler üretme yeteneğine sahip çok adımlı ve tek adımlı bir zamanlayıcı (Algorithm 1) tanıttı.

Makalenin özeti şudur:

*Diffüzyon modelleri, görüntü, ses ve video üretimi alanlarında önemli ilerlemeler sağlamış olsa da, yavaş üretime neden olan iteratif bir örneklemleme sürecine bağımlıdırlar. Bu sınırlamayı aşmak için, gürültüyü doğrudan veriye eşleyerek yüksek kaliteli örnekler üreten yeni bir model ailesi olan tutarlılık modellerini öneriyoruz. Tasarım gereği hızlı tek adımlı üretimi desteklerken, hesaplama gücünü örnek kalitesiyle takas etmek için çok adımlı örneklemlemeye de izin verirler. Ayrıca, bu görevler üzerinde açık bir eğitim gerektirmeden, görüntü doldurma (inpainting), renklendirme ve süper çözünürlük gibi sıfır atışlı (zero-shot) veri düzenlemelerini de desteklerler. Tutarlılık modelleri, önceden eğitilmiş diffüzyon modellerinden damıtılarak (distillation) veya tamamen bağımsız üretken modeller olarak eğitilebilir. Kapsamlı deneyler yoluyla, tek ve az adımlı örneklemlemede mevcut diffüzyon modeli damıtma tekniklerinden daha iyi performans gösterdiklerini, tek adımlı üretimde CIFAR-10 üzerinde 3,55 ve ImageNet 64x64 üzerinde 6,20 ile yeni en iyi FID değerlerine ulaştıklarını gösteriyoruz. İzole olarak eğitildiğinde, tutarlılık modelleri; CIFAR-10, ImageNet 64x64 ve LSUN 256x256 gibi standart ölçütlerde mevcut tek adımlı, advers olmayan üretken modellerden daha iyi performans gösterebilen yeni bir üretken model ailesi haline gelir.*

Orijinal kod tabanı [openai/consistency_models](https://github.com/openai/consistency_models) adresinde bulunabilir.

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

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

**Parametreler:**

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

sigma_min (`float`, varsayılan 0.002) : Sigma zamanlamasındaki minimum gürültü büyüklüğü. Orijinal uygulamadan varsayılan olarak 0.002'dir.

sigma_max (`float`, varsayılan 80.0) : Sigma zamanlamasındaki maksimum gürültü büyüklüğü. Orijinal uygulamadan varsayılan olarak 80.0'dır.

sigma_data (`float`, varsayılan 0.5) : EDM [makalesi](https://huggingface.co/papers/2206.00364)ndeki veri dağılımının standart sapması. Orijinal uygulamadan varsayılan olarak 0.5'tir.

s_noise (`float`, varsayılan 1.0) : Örnekleme sırasında detay kaybını dengelemek için eklenen gürültü miktarı. Makul aralık [1.000, 1.011]'dir. Orijinal uygulamadan varsayılan olarak 1.0'dır.

rho (`float`, varsayılan 7.0) : EDM [makalesinden](https://huggingface.co/papers/2206.00364) Karras sigma zamanlamasını hesaplamak için kullanılan parametre. Orijinal uygulamadan 7.0 varsayılan değeridir.

clip_denoised (`bool`, varsayılan `True`) : Gürültüsü azaltılmış çıktıların `(-1, 1)` aralığına kırpılıp kırpılmayacağını belirtir.

timesteps (`list` veya `np.ndarray` veya `torch.Tensor`, *opsiyonel*) : İsteğe bağlı olarak belirtilebilen açık bir timestep zamanlaması. Timestep'lerin artan sırada olması beklenir.

Tutarlılık modelleri için çok adımlı ve tek adımlı örneklemeler.

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.CMStochasticIterativeScheduler.add_noise]]

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

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

**Parametreler:**

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

noise (`torch.Tensor`) : Orijinal örneklerin üzerine eklenecek gürültü tensörü.

timesteps (`torch.Tensor`) : Gürültünün ekleneceği zaman adımları, zaman çizelgesinden gürültü seviyesini belirler.

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

Zaman adımı zamanlamasına göre ölçeklendirilen eklenen gürültüye sahip gürültülü örnekler.

Belirtilen zaman adımlarındaki gürültü planına göre orijinal örneklerin gürültü ekleyin.

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

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

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

**Parametreler:**

sigma (`torch.Tensor`) : Gürültü zamanlamasındaki mevcut sigma değeri.

**Dönüş:** `tuple[torch.Tensor, torch.Tensor]`

`c_skip` (girdi örneği için ölçekleme) ve `c_out` (model çıktısı için ölçekleme) içeren bir demet.

Tutarlılık modeli çıktısı için ölçekleme faktörlerini hesaplar.

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

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

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

**Parametreler:**

sigma (`torch.Tensor`) : Karras sigma zamanlamasındaki mevcut sigma.

**Dönüş:** `tuple[torch.Tensor, torch.Tensor]`

`c_skip` (mevcut örneği ağırlıklandıran) ilk eleman ve `c_out` (tutarlılık modeli çıktısını ağırlıklandıran) ikinci eleman olan iki elemanlı bir demet.

Tutarlılık modeli parametrelendirmesinde (makalenin [ek C](https://huggingface.co/papers/2303.01469) bölümünden) sınır koşulunu uygulamak için kullanılan ölçeklemeleri alır.

> [!TIP] > `c_skip` ve `c_out` denklemlerindeki `epsilon`, `sigma_min` olarak ayarlanır.

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

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

**Parametreler:**

timestep (`float` veya `torch.Tensor`) : Zamanlamada bulunacak timestep değeri.

schedule_timesteps (`torch.Tensor`, *isteğe bağlı*) : Aranacak zaman adımı zamanlaması. `None` ise `self.timesteps` kullanılır.

**Dönüş:** `int`

Zaman adımı planındaki zaman adımının indeksi. Çok eşleşme varsa, planın ortasından başlanırken (örneğin, görüntüden görüntüye) bir sigmanın atlanmaması için çok eşleşme durumunda ikinci indeksi döndürür.

Verilen zaman adımının zaman adımı zaman çizelgesindeki indeksini bulun.

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

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

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

**Parametreler:**

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

timestep (`float` veya `torch.Tensor`) : Difüzyon zincirindeki mevcut zaman adımı.

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

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

Tutarlılık modeli girdisini `(sigma**2 + sigma_data**2) ** 0.5` ile ölçekler.

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

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

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

**Parametreler:**

begin_index (`int`, varsayılan `0`) : Zamanlayıcının başlangıç indeksi.

Zamanlayıcının başlangıç indeksini ayarlar. Bu işlev, çıkarım (inference) öncesinde pipeline'dan çalıştırılmalıdır.

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

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

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

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 zaman adımlarını ayarlar (çalıştırılmadan önce çıkarım yapılmalıdır).

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

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

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

**Parametreler:**

sigmas (`float` veya `np.ndarray`) : Tek bir Karras sigma değeri veya Karras sigma değerlerinden oluşan bir dizi.

**Dönüş:** `np.ndarray`

Ölçeklendirilmiş giriş zaman adımı dizisi.

Tutarlılık modeline girdi olarak Karras sigmaları için ölçeklenmiş zaman adımlarını alır.

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

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

**Parametreler:**

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

timestep (`float` veya `torch.Tensor`) : Difüzyon zincirindeki mevcut 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`) : [CMStochasticIterativeSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/cm_stochastic_iterative#diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput) veya `tuple` döndürülecek mi?

**Dönüş:** [CMStochasticIterativeSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/cm_stochastic_iterative#diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput) veya `tuple`

return_dict `True` ise [CMStochasticIterativeSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/cm_stochastic_iterative#diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput) 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.

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

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

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

Zamanlayıcının `step` işlevi için çıktı sınıfı.

