# DPMSolverMultistepInverse

`DPMSolverMultistepInverse`, Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li ve Jun Zhu tarafından yazılan [DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps](https://huggingface.co/papers/2206.00927) ve [DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models](https://huggingface.co/papers/2211.01095) makalelerindeki tersine çevrilmiş zamanlayıcıdır.

Uygulama büyük ölçüde [Null-text Inversion for Editing Real Images using Guided Diffusion Models](https://huggingface.co/papers/2211.09794) makalesindeki DDIM tersine çevirme tanımına ve [Xiang-cd/DiffEdit-stable-diffusion](https://github.com/Xiang-cd/DiffEdit-stable-diffusion/blob/main/diffedit.ipynb) deposundaki `DiffEdit` latent tersine çevirmesinin notebook uygulamasına dayanmaktadır.

## İpuçları

[Imagen](https://huggingface.co/papers/2205.11487)'den dinik eşikleme desteklenmektedir ve piksel uzayında çalışan difüzyon modelleri için dinamik eşikleme kullanmak üzere hem `algorithm_type="dpmsolver++"` hem de `thresholding=True` değerlerini ayarlayabilirsiniz. Bu eşikleme yöntemi, Stable Diffusion gibi gizli uzayda çalışan difüzyon modelleri için uygun değildir.

## DPMSolverMultistepInverseScheduler[[diffusers.DPMSolverMultistepInverseScheduler]]

#### diffusers.DPMSolverMultistepInverseScheduler[[diffusers.DPMSolverMultistepInverseScheduler]]

```python
diffusers.DPMSolverMultistepInverseScheduler(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'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, solver_order: int = 2, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++', solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint', lower_order_final: bool = True, euler_at_final: bool = False, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, use_flow_sigmas: bool = False, flow_shift: float = 1.0, lambda_min_clipped: float = -inf, variance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = None, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', steps_offset: int = 0)
```

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

**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` veya `squaredcos_cap_v2` seçeneklerinden birini seçin.

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.

solver_order (`int`, varsayılan 2) : `1` veya `2` veya `3` olabilecek DPMSolver derecesi. Rehberli örneklemeler için `solver_order=2`, koşulsuz örneklemeler için ise `solver_order=3` kullanılması önerilir.

prediction_type (`str`, defaults to `epsilon`, *optional*) : 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` ve `algorithm_type="dpmsolver++"` olduğunda geçerlidir.

algorithm_type (`str`, varsayılan `dpmsolver++`) : Çözücü için algoritma türü; `dpmsolver`, `dpmsolver++`, `sde-dpmsolver` veya `sde-dpmsolver++` olabilir. `dpmsolver` türü [DPMSolver](https://huggingface.co/papers/2206.00927) makalesindeki algoritmaları, `dpmsolver++` türü ise [DPMSolver++](https://huggingface.co/papers/2211.01095) makalesindeki algoritmaları uygular. Stable Diffusion'daki gibi yönlendirilmiş örneklemeler için `dpmsolver++` veya `sde-dpmsolver++`'in `solver_order=2` ile kullanılması önerilir.

solver_type (`str`, varsayılan `midpoint`) : İkinci mertebe çözücü için çözücü türü; `midpoint` veya `heun` olabilir. Çözücü türü, özellikle adım sayısı az olduğunda örnek kalitesini hafifçe etkiler. `midpoint` çözücülerinin kullanılması önerilir.

lower_order_final (`bool`, varsayılan `True`) : Son adımlarda düşük dereceli çözücülerin kullanılıp kullanılmayacağı. Yalnızca 15'ten az çıkarım adımı için geçerlidir. Bu, özellikle 10 ve altı adımlar için DPMSolver'ın 15'ten az adımlarda örneklemesini kararlı hale getirebilir.

euler_at_final (`bool`, varsayılan `False`) : Son adımda Euler yönteminin kullanılıp kullanılmayacağı. Sayısal kararlılık ile detay zenginliği arasında bir ödünleşimdir. Bu, DPMSolver'ın SDE varyantının örneklemesini, düşük sayıda çıkarım adımı için kararlı hale getirebilir, ancak bazen bulanıklığa yol açabilir.

use_karras_sigmas (`bool`, *isteğe bağlı*, varsayılan `False`) : Örnekleme sürecinde gürültü zamanlamasındaki adım boyutları için Karras sigmalarının kullanılıp kullanılmayacağını belirtir. `True` ise, sigmalar {σi} gürültü seviyeleri dizisine göre belirlenir.

use_exponential_sigmas (`bool`, *isteğe bağlı*, varsayılan `False`) : Örnekleme sürecinde gürültü zamanlamasındaki adım boyutları için üstel sigmaların kullanılıp kullanılmayacağını belirtir.

use_beta_sigmas (`bool`, *isteğe bağlı*, varsayılan `False`) : Örnekleme sürecinde gürültü zamanlamasında adım boyutları için beta sigmaların kullanılıp kullanılmayacağını belirtir. Daha fazla bilgi için [Beta Sampling is All You Need](https://huggingface.co/papers/2407.12173) makalesine bakın.

use_flow_sigmas (`bool`, *isteğe bağlı*, varsayılan `False`) : Örnekleme sürecinde gürültü zamanlamasında adım boyutları için akış sigmalarının kullanılıp kullanılmayacağı.

flow_shift (`float`, *isteğe bağlı*, varsayılan 1.0) : Akış kaydırma faktörü. Yalnızca `use_flow_sigmas=True` olduğunda geçerlidir.

lambda_min_clipped (`float`, varsayılan `-inf`) : Sayısal kararlılık için `lambda(t)`'nin minimum değerine uygulanan kırpma eşiği. Bu, kosinüs (`squaredcos_cap_v2`) gürültü zamanlaması için kritiktir.

variance_type (`str`, *isteğe bağlı*) : Varyans tahmin eden difüzyon modelleri için "learned" veya "learned_range" olarak ayarlayın. Ayarlanırsa, modelin çıktısı tahmin edilen Gauss varyansını içerir.

timestep_spacing (`str`, varsayılan `"linspace"`) : 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.

`DPMSolverMultistepInverseScheduler`, [DPMSolverMultistepScheduler](/docs/diffusers/main/tr/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)'in ters zamanlayıcısı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.DPMSolverMultistepInverseScheduler.add_noise]]

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

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

**Parametreler:**

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

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

timesteps (`torch.IntTensor`) : Gürültü eklenecek zaman adımları.

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

Gürültülü örnekler.

`original_samples` değerlerine, zamanlayıcının eşdeğer fonksiyonunu kullanarak gürültü ekleyin.

#### convert_model_output[[diffusers.DPMSolverMultistepInverseScheduler.convert_model_output]]

```python
convert_model_output(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

**Parametreler:**

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

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

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

Dönüştürülen model çıktısı.

Model çıktısını, DPMSolver/DPMSolver++ algoritmasının gerektirdiği ilgili tipe dönüştürün. DPM-Solver, gürültü tahmin modelinin bir integralini ayrıklaştırmak için tasarlanmıştır ve DPM-Solver++, veri tahmin modelinin bir integralini ayrıklaştırmak için tasarlanmıştır.

> [!TIP] > Algoritma ve model tipi birbirinden bağımsızdır. Her ikisi için de DPMSolver veya DPMSolver++ kullanabilirsiniz
noise > tahmin ve veri tahmin modelleri.

#### dpm_solver_first_order_update[[diffusers.DPMSolverMultistepInverseScheduler.dpm_solver_first_order_update]]

```python
dpm_solver_first_order_update(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

**Parametreler:**

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

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

noise (`torch.Tensor`, *isteğe bağlı*) : Gürültü tensörü.

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

Önceki zaman adımındaki örnek tensör.

Birinci dereceden DPMSolver için tek adım (DDIM ile eşdeğer).

#### multistep_dpm_solver_second_order_update[[diffusers.DPMSolverMultistepInverseScheduler.multistep_dpm_solver_second_order_update]]

```python
multistep_dpm_solver_second_order_update(model_output_list: list, *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

**Parametreler:**

model_output_list (`list[torch.Tensor]`) : Öğrenen difüzyon modelinin mevcut ve sonraki zaman adımlarındaki doğrudan çıktıları.

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

noise (`torch.Tensor`, *isteğe bağlı*) : Stokastik (`sde-*`) çözücü varyantları tarafından kullanılan rastgele gürültü. `algorithm_type` bunlardan birine ayarlandığında zorunludur, aksi takdirde kullanılmaz.

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

Önceki zaman adımındaki örnek tensör.

İkinci mertebeden çok adımlı DPMSolver için tek adım.

#### multistep_dpm_solver_third_order_update[[diffusers.DPMSolverMultistepInverseScheduler.multistep_dpm_solver_third_order_update]]

```python
multistep_dpm_solver_third_order_update(model_output_list: list, *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

**Parametreler:**

model_output_list (`list[torch.Tensor]`) : Öğrenen difüzyon modelinin mevcut ve sonraki zaman adımlarındaki doğrudan çıktıları.

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

noise (`torch.Tensor`, *isteğe bağlı*) : Gürültü tensörü.

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

Önceki zaman adımındaki örnek tensör.

Üçüncü dereceden çok adımlı DPMSolver için tek adım.

#### scale_model_input[[diffusers.DPMSolverMultistepInverseScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, *args, **kwargs)
```

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

**Parametreler:**

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

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

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

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

**Parametreler:**

num_inference_steps (`int`) : Ö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.

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

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

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

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

variance_noise (`torch.Tensor`) : `generator` ile gürültü üretmek yerine, varyans için gürültüyü doğrudan sağlayarak bunu yapmanın alternatifi. `CycleDiffusion` gibi yöntemler için faydalıdır.

return_dict (`bool`) : [SchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) mu yoksa `tuple` mu döndürüleceğini belirtir.

**Dönüş:** [SchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) veya `tuple`

return_dict `True` ise [SchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) döndürülür, aksi halde bir tuple döndürülür ve bu tuple'ın ilk öğesi örnek tensörüdür.

Önceki zaman adımından örneklemeyi SDE'yi tersine çevirerek tahmin edin. Bu fonksiyon, örneklemeyi çok adımlı DPMSolver ile ilerletir.

## SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

#### diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

```python
diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)
```

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

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

Bir zamanlayıcının `step` işlevinin çıktısı için temel sınıf.

