# EDMEulerScheduler

Karras ve ark. tarafından kaleme alınan [Elucidating the Design Space of Diffusion-Based Generative Models](https://huggingface.co/papers/2206.00364) makalesindeki Euler zamanlayıcısının (Algoritma 2) Karras formülasyonu. Bu, genellikle 20-30 adımda iyi çıktılar üretebilen hızlı bir zamanlayıcıdır. Zamanlayıcı, [Katherine Crowson](https://github.com/crowsonkb/) tarafından geliştirilen orijinal [k-diffusion](https://github.com/crowsonkb/k-diffusion/blob/481677d114f6ea445aa009cf5bd7a9cdee909e47/k_diffusion/sampling.py#L51) uygulamasına dayanmaktadır.

## EDMEulerScheduler[[diffusers.EDMEulerScheduler]]

#### diffusers.EDMEulerScheduler[[diffusers.EDMEulerScheduler]]

```python
diffusers.EDMEulerScheduler(sigma_min: float = 0.002, sigma_max: float = 80.0, sigma_data: float = 0.5, sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras', num_train_timesteps: int = 1000, prediction_type: typing.Literal['epsilon', 'v_prediction'] = 'epsilon', rho: float = 7.0, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero')
```

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

**Parametreler:**

sigma_min (`float`, *opsiyonel*, varsayılan `0.002`) : Sigma zamanlamasındaki minimum gürültü büyüklüğü. Bu değer EDM makalesinde [1] 0.002 olarak ayarlanmıştır; makul aralık [0, 10]'dur.

sigma_max (`float`, *opsiyonel*, varsayılan `80.0`) : Sigma zamanlamasındaki maksimum gürültü büyüklüğü. Bu değer EDM makalesinde [1] 80.0 olarak ayarlanmıştır; makul aralık [0.2, 80.0]'dir.

sigma_data (`float`, *isteğe bağlı*, varsayılan `0.5`) : Veri dağılımının standart sapması. Bu değer, EDM makalesinde [1] 0.5 olarak ayarlanmıştır.

sigma_schedule (`Literal["karras", "exponential"]`, *isteğe bağlı*, varsayılan `"karras"`) : `sigmas` değerlerini hesaplamak için kullanılacak sigma zamanlaması. Varsayılan olarak, EDM makalesinde (https://huggingface.co/papers/2206.00364) tanıtılan zamanlamayı kullanırız. `"exponential"` zamanlaması bu modele dahil edilmiştir: https://huggingface.co/stabilityai/cosxl.

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

prediction_type (`Literal["epsilon", "v_prediction"]`, *isteğe bağlı*, varsayılan `"epsilon"`) : Zamanlayıcı işlevinin tahmin türü. `"epsilon"`, difüzyon sürecinin gürültüsünü tahmin eder ve `"v_prediction"` ([Imagen Video](https://huggingface.co/papers/2210.02303) makalesinin 2.4 bölümüne bakın).

rho (`float`, *isteğe bağlı*, varsayılan `7.0`) : Karras sigma zamanlamasını hesaplamak için kullanılan rho parametresi, EDM makalesinde [1] 7.0 olarak ayarlanmıştır.

final_sigmas_type (`Literal["zero", "sigma_min"]`, *isteğe bağlı*, varsayılan `"zero"`) : Örnekleme süreci sırasında gürültü zamanlaması için son `sigma` değeri. `"sigma_min"` ise, son sigma, eğitim zamanlamasındaki son sigma ile aynıdır. `"zero"` ise, son sigma 0 olarak ayarlanır.

Karras et al. 2022 [1]'de sunulan EDM formülasyonunda Euler zamanlayıcısını uygular.

[1] Karras, Tero, ve diğerleri. "Elucidating the Design Space of Diffusion-Based Generative Models." https://huggingface.co/papers/2206.00364

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

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

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

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

#### index_for_timestep[[diffusers.EDMEulerScheduler.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_edm_euler.py#L381)

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

#### precondition_inputs[[diffusers.EDMEulerScheduler.precondition_inputs]]

```python
precondition_inputs(sample: Tensor, sigma: typing.Union[float, torch.Tensor])
```

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

**Parametreler:**

sample (`torch.Tensor`) : Ön koşullandırılacak girdi örnek tensörü.

sigma (`float` veya `torch.Tensor`) : Güncel sigma (gürültü seviyesi) değeri.

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

Ölçeklendirilmiş giriş örneği.

Giriş örneğini, EDM formülasyonuna göre ölçekleyerek ön koşullandırın.

#### precondition_noise[[diffusers.EDMEulerScheduler.precondition_noise]]

```python
precondition_noise(sigma: typing.Union[float, torch.Tensor])
```

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

**Parametreler:**

sigma (`float` veya `torch.Tensor`) : Ön koşullandırılacak sigma (gürültü seviyesi) değeri.

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

`0.25 * log(sigma)` olarak hesaplanan ön koşullandırılmış gürültü değeri.

Gürültü seviyesini, logaritmik bir dönüşüm uygulayarak ön koşullandırın.

#### precondition_outputs[[diffusers.EDMEulerScheduler.precondition_outputs]]

```python
precondition_outputs(sample: Tensor, model_output: Tensor, sigma: typing.Union[float, torch.Tensor])
```

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

**Parametreler:**

sample (`torch.Tensor`) : Girdi örnek tensörü.

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

sigma (`float` veya `torch.Tensor`) : Güncel sigma (gürültü seviyesi) değeri.

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

Atlamalı bağlantı ve çıktı ölçeklendirmesini birleştirerek hesaplanan gürültüden arındırılmış örnek.

Model çıktılarını EDM formülasyonuna göre ön koşullandırın.

#### scale_model_input[[diffusers.EDMEulerScheduler.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_edm_euler.py#L249)

**Parametreler:**

sample (`torch.Tensor`) : Girdi örnek tensörü.

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

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

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

Gürültü azaltma modelinin girdisini Euler algoritmasıyla eşleşecek şekilde ölçeklendirir. Mevcut zaman adımına bağlı olarak gürültü azaltma modelinin girdisini ölçeklendirmesi gereken zamanlayıcılarla değiştirilebilirliği sağlar.

#### set_begin_index[[diffusers.EDMEulerScheduler.set_begin_index]]

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

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

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

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

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

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

sigmas (`torch.Tensor | list[float]`, *isteğe bağlı*) : Gürültü azaltma süreci için kullanılacak özel sigmalar. Tanımlanmamışsa, `num_inference_steps` geçirildiğinde varsayılan davranış kullanılacaktı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.EDMEulerScheduler.step]]

```python
step(model_output: Tensor, timestep: typing.Union[float, torch.Tensor], sample: Tensor, s_churn: float = 0.0, s_tmin: float = 0.0, s_tmax: float = inf, s_noise: float = 1.0, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True, pred_original_sample: typing.Optional[torch.Tensor] = None)
```

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

**Parametreler:**

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

timestep (`float` veya `torch.Tensor`) : 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.

s_churn (`float`, *isteğe bağlı*, varsayılan `0.0`) : Her adımda eklenecek stokastisite miktarı. Daha yüksek değerler daha fazla gürültü ekler.

s_tmin (`float`, *isteğe bağlı*, varsayılan `0.0`) : Gürültü eklenmemesi için gereken minimum sigma eşiği.

s_tmax (`float`, *isteğe bağlı*, varsayılan `float("inf")`) : Gürültü eklenmeyecek maksimum sigma eşiği.

s_noise (`float`, *isteğe bağlı*, varsayılan `1.0`) : Örneğe eklenen gürültü için ölçekleme faktörü.

generator (`torch.Generator`, *isteğe bağlı*) : Yeniden üretilebilirlik için rastgele sayı üreteci.

return_dict (`bool`, *isteğe bağlı*, varsayılan `True`) : [EDMEulerSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) veya tuple döndürülüp döndürülmemeye karar verir.

pred_original_sample (`torch.Tensor`, *isteğe bağlı*) : Önceki adımdan elde edilen tahmini gürültüden arındırılmış örnek. Sağlanırsa yeniden hesaplama atlanır.

**Dönüş:** [EDMEulerSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) veya `tuple`

`return_dict` `True` ise bir [EDMEulerSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/edm_euler#diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput) döndürülür, aksi takdirde bir tuple döndürülür; bu tuple'ın ilk öğesi önceki örnek tensörü, ikinci öğesi ise tahmin edilen orijinal örnek tensörüdü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.

## EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]

#### diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput[[diffusers.schedulers.scheduling_edm_euler.EDMEulerSchedulerOutput]]

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

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

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

