Diffusers documentation
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler, Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li ve Jun Zhu tarafından geliştirilen DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps ve DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models makalelerindeki çok adımlı zamanlayıcı olan DPMSolverMultistepScheduler'ın Karras formülasyonudur.
DPMSolver (ve geliştirilmiş sürümü DPMSolver++), yakınsama derecesi garantisi olan difüzyon ODE'leri için hızlı, özel bir yüksek dereceli çözücüdür. Deneysel olarak, yalnızca 20 adımla DPMSolver örneklemesi yüksek kaliteli örnekler üretebilir ve 10 adımda bile oldukça iyi örnekler üretebilir.
EDMDPMSolverMultistepScheduler
sınıf diffusers.EDMDPMSolverMultistepScheduler
< source >( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )
Parametreler
- sigma_min (
float, isteğe bağlı, 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 bir aralık [0, 10]'dur. - sigma_max (
float, isteğe bağlı, 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 (
str, isteğe bağlı, varsayılankarras) —sigmasdeğerlerini hesaplamak için kullanılacak sigma zamanlaması. Varsayılan olarak, EDM makalesinde tanıtılan zamanlama kullanılır (https://huggingface.co/papers/2206.00364). Kabul edilen diğer değer “exponential”dır. Üstel zamanlama bu modele dahil edilmiştir: https://huggingface.co/stabilityai/cosxl. - num_train_timesteps (
int, varsayılan 1000) — Modelin eğitileceği difüzyon adım sayısı. - prediction_type (
str, defaults toepsilon, optional) — Prediction type of the scheduler function; can beepsilon(predicts the noise of the diffusion process),sample(directly predicts the noisy sample) orv_prediction` (see section 2.4 of Imagen Video paper). - rho (
float, isteğe bağlı, varsayılan 7.0) — Karras sigma zamanlamasındaki rho parametresi. Bu değer, EDM makalesinde [1] 7.0 olarak ayarlanmıştır. - solver_order (
int, varsayılan 2) —1veya2veya3olabilecek DPMSolver derecesi. Rehberli örneklemeler içinsolver_order=2, koşulsuz örneklemeler içinsolver_order=3kullanılması önerilir. - thresholding (
bool, varsayılanFalse) — “Dinamik eşikleme” yönteminin kullanılıp kullanılmayacağı. Bu, Stable Diffusion gibi gizli uzay difüzyon modelleri için uygun değildir. - dynamic_thresholding_ratio (
float, varsayılan 0.995) — Dinik eşikleme yöntemi için oran. Yalnızcathresholding=Trueolduğunda geçerlidir. - sample_max_value (
float, varsayılan 1.0) — Dinik eşikleme için eşik değeri. Yalnızcathresholding=Truevealgorithm_type="dpmsolver++"olduğunda geçerlidir. - algorithm_type (
str, varsayılandpmsolver++) — Çözücü için algoritma türü;dpmsolver++veyasde-dpmsolver++olabilir.dpmsolver++türü, DPMSolver++ makalesindeki algoritmaları uygular. Stable Diffusion'daki gibi yönlendirilmiş örneklemeler içindpmsolver++veyasde-dpmsolver++'insolver_order=2ile kullanılması önerilir. - solver_type (
str, varsayılanmidpoint) — İkinci mertebeden çözücü için çözücü türü;midpointveyaheunolabilir. Çö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ılanTrue) — 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ılanFalse) — Son adımda Euler yönteminin kullanılıp kullanılmayacağı. Sayısal kararlılık ile detay zenginliği arasında bir denge noktasıdır. Bu, DPMSolver'ın SDE varyantının düşük sayıda çıkarım adımıyla örneklenmesini kararlı hale getirebilir, ancak bazen bulanıklığa yol açabilir. - final_sigmas_type (
str, varsayılan"zero") — Örnekleme sürecindeki gürültü zamanlaması için sonsigmadeğeri."sigma_min"ise, son sigma, eğitim zamanlamasındaki son sigma ile aynıdır.zeroise, son sigma 0 olarak ayarlanır.
Karras et al. 2022 [1]'de sunulan EDM formülasyonunda DPMSolverMultistepScheduler'ı uygular. EDMDPMSolverMultistepScheduler, difüzyon ODE'leri için hızlı, özel bir yüksek dereceli çözücüdür.
[1] Karras, Tero, ve diğerleri. “Elucidating the Design Space of Diffusion-Based Generative Models.” https://huggingface.co/papers/2206.00364
Bu model SchedulerMixin ve 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
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
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ü eklenmesi gereken zaman adımları, zaman çizelgesinden gürültü seviyesini belirler.
Dönüş değeri
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.
convert_model_output
< source >( model_output: Tensorsample: Tensor ) → torch.Tensor
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.
> Algoritma ve model tipi birbirinden bağımsızdır. Hem noise > prediction hem de data prediction modelleri için DPMSolver veya DPMSolver++ kullanabilirsiniz.
dpm_solver_first_order_update
< source >( model_output: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
Parametreler
- model_output (
torch.Tensor) — Öğrenen difüzyon modelinden gelen doğrudan çıktı. - sample (
torch.Tensor) — Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği. - noise (
torch.Tensor, isteğe bağlı) — Orijinal örneklerin üzerine eklenecek gürültü tensörü.
Dönüş değeri
torch.Tensor
Önceki zaman adımındaki örnek tensör.
Birinci dereceden DPMSolver için tek adım (DDIM ile eşdeğer).
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Zamanlamadaki (schedule) belirli bir zaman adımının (timestep) indeksini bulun.
multistep_dpm_solver_second_order_update
< source >( model_output_list: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
Parametreler
- model_output_list (
list[torch.Tensor]) — Öğrenmiş difüzyon modelinin mevcut ve sonraki zaman adımlarındaki doğrudan çıktıları. - sample (
torch.Tensor) — Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği. - noise (
torch.Tensor, isteğe bağlı) — Orijinal örneklerin üzerine eklenecek gürültü tensörü.
Dönüş değeri
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
< source >( model_output_list: listsample: Tensor ) → torch.Tensor
Üçüncü dereceden çok adımlı DPMSolver için tek adım.
precondition_inputs
< source >( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
Giriş örneğini, EDM formülasyonuna göre ölçekleyerek ön koşullandırın.
precondition_noise
< source >( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
Gürültü seviyesini, logaritmik bir dönüşüm uygulayarak ön koşullandırın.
precondition_outputs
< source >( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
Parametreler
- sample (
torch.Tensor) — Girdi örnek tensörü. - model_output (
torch.Tensor) — Öğrenen difüzyon modelinden gelen doğrudan çıktı. - sigma (
floatveyatorch.Tensor) — Güncel sigma (gürültü seviyesi) değeri.
Dönüş değeri
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
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
Euler algoritmasıyla eşleşmesi için gürültü azaltma modelinin girdisini ö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
< source >( begin_index: int = 0 )
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
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device, NoneType] = None )
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
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
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) — SchedulerOutput veyatupledöndürülüp döndürülmemeye karar verir.
Dönüş değeri
SchedulerOutput veya tuple
return_dict True ise SchedulerOutput döndürülür, aksi halde ilk öğesi örnek tensörü olan bir tuple döndürülür.
Önceki zaman adımından örneklemeyi SDE'yi tersine çevirerek tahmin edin. Bu fonksiyon, örneklemeyi çok adımlı DPMSolver ile ilerletir.
SchedulerOutput
sınıf diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Bir zamanlayıcının step işlevinin çıktısı için temel sınıf.