Diffusers documentation
DPMSolverMultistepScheduler
DPMSolverMultistepScheduler
DPMSolverMultistepScheduler, 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 ve DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models makalelerinden bir çok adımlı zamanlayıcıdır.
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.
İpuçları
Rehber örneklemesi için solver_order'ın 2 olarak ayarlanması, koşulsuz örneklemesi için ise solver_order=3 olarak ayarlanması önerilir.
Imagen'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.
DPMSolver ve DPM-Solver++'ın SDE varyantı da desteklenir, ancak yalnızca birinci ve ikinci dereceden çözücüler için. Bu, ters yönlü difüzyon SDE'si için hızlı bir SDE çözücüsüdür. İkinci dereceden sde-dpmsolver++'ın kullanılması önerilir.
DPMSolverMultistepScheduler
sınıf diffusers.DPMSolverMultistepScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_lu_lambdas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )
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ıçbetadeğeri. - beta_end (
float, varsayılan 0.02) — Sonbetadeğeri. - beta_schedule (
"linear","scaled_linear"veya"squaredcos_cap_v2", varsayılan"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ı) — Betalar dizisini doğrudan yapılandırıcıya ileterekbeta_startvebeta_endparametrelerini atlayın. - solver_order (
int, varsayılan 2) —1veya2veya3olabilecek DPMSolver derecesi. Rehberli örneklemeler içinsolver_order=2, koşulsuz örneklemeler içinsolver_order=3kullanılması önerilir. - prediction_type (
"epsilon","sample","v_prediction"veya"flow_prediction", varsayılan"epsilon") — Zamanlayıcı işlevinin tahmin türü.epsilondifüzyon sürecinin gürültüsünü tahmin eder,samplegürültülü örneği doğrudan tahmin eder,v_predictionhızı tahmin eder (Imagen Video makalesinin 2.4 bölümüne bakınız) veflow_predictionakışı tahmin eder. - 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 (
"dpmsolver","dpmsolver++","sde-dpmsolver"veya"sde-dpmsolver++", varsayılan olarak"dpmsolver++") — Çözücü için algoritma türü.dpmsolvertürü, DPMSolver makalesindeki algoritmaları,dpmsolver++türü ise DPMSolver++ makalesindeki algoritmaları uygular. Stable Diffusion'daki gibi yönlendirilmiş örneklemeler içindpmsolver++veyasde-dpmsolver++'insolver_order=2ile kullanılması önerilir. - solver_type (
"midpoint"veya"heun", varsayılan"midpoint") — İkinci mertebe çözücü için çözücü türü. Çö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. - use_karras_sigmas (
bool, isteğe bağlı, varsayılanFalse) — Örnekleme sürecinde gürültü zamanlamasındaki adım boyutları için Karras sigmalarının kullanılıp kullanılmayacağını belirtir.Trueise, sigmalar {σi} gürültü seviyeleri dizisine göre belirlenir. - use_exponential_sigmas (
bool, isteğe bağlı, varsayılanFalse) — Örnekleme sürecindeki gürültü zamanlamasında adım boyutları için üstel sigmaların kullanılıp kullanılmayacağı. - use_beta_sigmas (
bool, isteğe bağlı, varsayılanFalse) — Örnekleme sürecindeki gürültü zamanlamasında adım boyutları için beta sigmaların kullanılıp kullanılmayacağı. Daha fazla bilgi için Beta Sampling is All You Need makalesine bakın. - use_lu_lambdas (
bool, isteğe bağlı, varsayılanFalse) — Örnekleme sürecindeki gürültü zamanlamasında adım boyutları için Lu'nun DPM-Solver'ında önerilen uniform-logSNR'ın kullanılıp kullanılmayacağı.Trueise, sigmalar ve zaman adımlarılambda(t)dizisine göre belirlenir. - use_flow_sigmas (
bool, isteğe bağlı, varsayılanFalse) — Ö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ış eşleştirmesi için zaman adımı zaman çizelgesinin kayma değeri. - final_sigmas_type (
"zero"veya"sigma_min", isteğe bağlı, varsayılan"zero") — Örnekleme sürecinde gürültü zamanlaması için sonsigmadeğeri."sigma_min"ise, son sigma, eğitim zamanlamasındaki son sigma ile aynıdır."zero"ise, son sigma 0 olarak ayarlanır. - lambda_min_clipped (
float, varsayılan-inf) — Sayısal kararlılık içinlambda(t)'nin minimum değerinin kırpma eşiği. Bu, kosinüs (squaredcos_cap_v2) gürültü zamanlaması için kritiktir. - variance_type (
"learned"veya"learned_range", isteğe bağlı) — Varians tahmin eden difüzyon modelleri için"learned"veya"learned_range"olarak ayarlayın. Ayarlandığında, modelin çıktısı tahmin edilen Gauss varyansını içerir. - timestep_spacing (
"linspace","leading"veya"trailing", varsayılan"linspace") — Zaman adımlarının ölçeklendirilme biçimi. Daha fazla bilgi için Common Diffusion Noise Schedules and Sample Steps are Flawed 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ılanFalse) — Betalara sıfır son SNR değerine sahip olacak şekilde yeniden ölçeklendirme uygulanıp uygulanmayacağı. Bu, modelin orta parlaklıktaki örneklerle sınırlı kalmak yerine çok parlak ve çok karanlık örnekler üretmesini sağlar.--offset_noiseile gevşek bir şekilde ilişkilidir. - use_dynamic_shifting (
bool, varsayılanFalse) — Zaman adımı zaman çizelgesi için dinamik kaydırma kullanılıp kullanılmayacağı. - time_shift_type (
"exponential", varsayılan"exponential") — Dinamik kaydırma kullanılırken uygulanacak zaman kaydırma türü.
DPMSolverMultistepScheduler, difüzyon ODE'leri için hızlı ve özel yüksek dereceli bir çözücüdür.
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: IntTensor ) → torch.Tensor
Belirtilen zaman adımlarındaki gürültü planına göre orijinal örneklerin gürültü ekleyin.
convert_model_output
< source >( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → 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: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
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üş 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: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → 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, 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_typebunlardan birine ayarlandığında zorunludur, aksi takdirde kullanılmaz.
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: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → 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, 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üş değeri
torch.Tensor
Önceki zaman adımındaki örnek tensör.
Üçüncü dereceden çok adımlı DPMSolver için tek adım.
scale_model_input
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
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_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] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )
Parametreler
- num_inference_steps (
int, isteğe bağlı) — Önceden eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı. - device (
strveyatorch.device, isteğe bağlı) — Adımların (timesteps) taşınacağı cihaz.Noneise adımlar taşınmaz. - mu (
float, isteğe bağlı) — Dinamik zaman kaydırma için üstel.use_dynamic_shiftingvetime_shift_typedeğerinin"exponential"olması gerekir; iletildiğindeflow_shift,exp(mu)olarak ayarlanır. - timesteps (
list[int], isteğe bağlı) — Keyfi timestep zaman çizelgelerini desteklemek için kullanılan özel timestep'ler.Noneise, timestep'lertimestep_spacingözniteliğine dayalı olarak oluşturulur.timestepsgeçirilirse,num_inference_stepsvesigmasNoneolmalıdır vetimestep_spacingözniteliği yok sayılı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
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
Parametreler
- model_output (
torch.Tensor) — Öğrenen difüzyon modelinden gelen doğrudan çıktı. - timestep (
intveyatorch.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. - generator (
torch.Generator, isteğe bağlı) — Rastgele sayı üreteci. - variance_noise (
torch.Tensor, isteğe bağlı) — Varyans için gürültüyü doğrudan sağlayarakgeneratorile gürültü üretmenin alternatifi.LEdits++gibi yöntemler için faydalıdır. - return_dict (
bool, varsayılanTrue) — SchedulerOutput mu yoksatuplemu döndürüleceğini belirtir.
Dönüş değeri
SchedulerOutput veya tuple
return_dict True ise SchedulerOutput döndürülür, aksi takdirde 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
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.