Buckets:

hf-doc-build/doc / diffusers /main /tr /api /schedulers /singlestep_dpm_solver.md
mishig's picture
|
download
raw
21.3 kB

DPMSolverSinglestepScheduler

DPMSolverSinglestepScheduler, 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 tek adımlı zamanlayıcıdır.

DPMSolver (ve geliştirilmiş sürüm DPMSolver++) difüzyon ODE'leri için yakınsama derecesi garantisi sunan 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.

Orijinal uygulama LuChengTHU/dpm-solver adresinde bulunabilir.

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

DPMSolverSinglestepScheduler[[diffusers.DPMSolverSinglestepScheduler]]

diffusers.DPMSolverSinglestepScheduler[[diffusers.DPMSolverSinglestepScheduler]]

diffusers.DPMSolverSinglestepScheduler(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++'] = 'dpmsolver++', solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint', lower_order_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, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero', lambda_min_clipped: float = -inf, variance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = None, use_dynamic_shifting: bool = False, time_shift_type: typing.Literal['exponential'] = 'exponential')

Kaynak

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 ("linear", "scaled_linear" veya "squaredcos_cap_v2", varsayılan olarak "linear") : Beta zamanlaması, modelin adım atması için beta aralığından beta dizisine bir eşleme. linear, scaled_linear veya squaredcos_cap_v2 seçeneklerinden birini seçin.

trained_betas (np.ndarray veya list[float], isteğe bağlı) : beta_start ve beta_end değerlerini 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 ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon") : Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.

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) : Dinik eşikleme için eşik değeri. Yalnızca thresholding=True ve algorithm_type="dpmsolver++" olduğunda geçerlidir.

algorithm_type ("dpmsolver", "dpmsolver++" veya "sde-dpmsolver++", varsayılan olarak "dpmsolver++") : Çözücü için algoritma türü; dpmsolver, dpmsolver++ veya sde-dpmsolver++ olabilir. dpmsolver türü, DPMSolver makalesindeki algoritmaları, dpmsolver++ türü ise DPMSolver++ makalesindeki algoritmaları uygular. Stable Diffusion'daki gibi yönlendirilmiş örneklemeler için solver_order=2 ile birlikte dpmsolver++ veya sde-dpmsolver++ kullanılması önerilir.

solver_type ("midpoint" veya "heun", 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 False) : 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.

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 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ış tabanlı modeller için akış kaydırma parametresi.

final_sigmas_type ("zero" veya "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.

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 ("learned" veya "learned_range", 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.

use_dynamic_shifting (bool, varsayılan False) : Gürültü zamanlaması için dinamik kaydırma kullanılıp kullanılmayacağı.

time_shift_type ("exponential", varsayılan olarak "exponential") : Uygulanacak zaman kaydırma türü.

DPMSolverSinglestepScheduler, 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[[diffusers.DPMSolverSinglestepScheduler.add_noise]]

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

Kaynak

Parametreler:

original_samples (torch.Tensor) : Gürültüsüz orijinal örnekler.

noise (torch.Tensor) : Örneklere eklenecek gürültü.

timesteps (torch.IntTensor) : Örneklerin gürültü eklenmesi için kullanılacak zaman adımları.

Dönüş: torch.Tensor

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[[diffusers.DPMSolverSinglestepScheduler.convert_model_output]]

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

Kaynak

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.

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.

> 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.DPMSolverSinglestepScheduler.dpm_solver_first_order_update]]

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

Kaynak

Parametreler:

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

timestep (int) : Difüzyon zincirindeki mevcut ayrık zaman adımı.

prev_timestep (int) : Difüzyon zincirindeki bir önceki ayrık zaman adımı.

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ı) : 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.

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

get_order_list[[diffusers.DPMSolverSinglestepScheduler.get_order_list]]

get_order_list(num_inference_steps: int)

Kaynak

Parametreler:

num_inference_steps (int) : Ön eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı.

Dönüş: list[int]

Her zaman adımı için çözücü sıraları listesi.

Her zaman adımında çözücü sırasını hesaplar.

index_for_timestep[[diffusers.DPMSolverSinglestepScheduler.index_for_timestep]]

index_for_timestep(timestep: typing.Union[int, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)

Kaynak

Parametreler:

timestep (int veya torch.Tensor) : İndeksini bulmak istediğiniz zaman adımı.

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.

Zamanlamadaki (schedule) belirli bir zaman adımının (timestep) indeksini bulun.

scale_model_input[[diffusers.DPMSolverSinglestepScheduler.scale_model_input]]

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

Kaynak

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_begin_index[[diffusers.DPMSolverSinglestepScheduler.set_begin_index]]

set_begin_index(begin_index: int = 0)

Kaynak

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.DPMSolverSinglestepScheduler.set_timesteps]]

set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device] = None, mu: float | None = None, timesteps: list[int] | None = None)

Kaynak

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.

mu (float, isteğe bağlı) : Dinamik zaman kaydırma için üstel. use_dynamic_shifting ve "exponential" değerine sahip bir time_shift_type gerektirir; iletildiğinde flow_shift, exp(mu) olarak ayarlanır.

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ığı stratejisi kullanılır. timesteps geçirilirse, num_inference_steps None olmalıdı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).

singlestep_dpm_solver_second_order_update[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_second_order_update]]

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

Kaynak

Parametreler:

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

timestep (int) : Difüzyon zincirindeki mevcut ve sonraki ayrık zaman adımı.

prev_timestep (int) : Difüzyon zincirindeki bir önceki ayrık zaman adımı.

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ı) : 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.

timestep_list[-2] zamanından prev_timestep zamanındaki çözümü hesaplayan ikinci mertebeden tek adımlı DPMSolver için bir adım.

singlestep_dpm_solver_third_order_update[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_third_order_update]]

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

Kaynak

Parametreler:

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

timestep (int) : Difüzyon zincirindeki mevcut ve sonraki ayrık zaman adımı.

prev_timestep (int) : Difüzyon zincirindeki bir önceki ayrık zaman adımı.

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ı) : 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.

timestep_list[-3] zamanından prev_timestep zamanındaki çözümü hesaplayan üçüncü dereceli tek adımlı DPMSolver için bir adım.

singlestep_dpm_solver_update[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_update]]

singlestep_dpm_solver_update(model_output_list: list, *args, sample: typing.Optional[torch.Tensor] = None, order: int = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Kaynak

Parametreler:

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

timestep (int) : Difüzyon zincirindeki mevcut ve sonraki ayrık zaman adımı.

prev_timestep (int) : Difüzyon zincirindeki bir önceki ayrık zaman adımı.

sample (torch.Tensor) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

order (int) : Bu adımdaki çözücü sırası.

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.

Tek adımlı DPMSolver için tek adım.

adım[[diffusers.DPMSolverSinglestepScheduler.step]]

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

Kaynak

Parametreler:

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

timestep (int 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.

generator (torch.Generator, isteğe bağlı) : Stokastik örneklemeler için rastgele sayı üreteci.

return_dict (bool, varsayılan True) : SchedulerOutput mu yoksa tuple mu döndürüleceğini belirtir.

Dönüş: SchedulerOutput veya tuple

return_dict True ise 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ındaki örneği SDE'yi tersine çevirerek tahmin edin. Bu fonksiyon, örneği singlestep DPMSolver ile ilerletir.

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

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

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

Kaynak

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.

Xet Storage Details

Size:
21.3 kB
·
Xet hash:
3c1556e5aa96b843364fad9324b77a1893922b63155778745e02776cd781c904

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.