Diffusers documentation
UniPCMultistepScheduler
UniPCMultistepScheduler
UniPCMultistepScheduler, difüzyon modellerinin hızlı örneklenmesi için tasarlanmış eğitim gerektirmeyen bir çerçevedir. Wenliang Zhao, Lujia Bai, Yongming Rao, Jie Zhou ve Jiwen Lu tarafından UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models makalesinde tanıtılmıştır.
UniPC, bir düzeltici (UniC) ve bir öngörücüden (UniP) oluşur; bu iki bileşen birleşik analitik bir forma sahiptir ve keyfi dereceleri destekler. UniPC, tasarım gereği model bağımsızdır ve koşulsuz/koşullu örneklemede piksel uzayında/latent uzayda DPM'leri destekler. Ayrıca hem gürültü tahmini hem de veri tahmini modellerine uygulanabilir. UniC düzelticisi, doğruluk derecesini artırmak için herhangi bir hazır çözücünün ardından da uygulanabilir.
Makalenin özeti şudur:
Diffusion probabilistic models (DPMs), yüksek çözünürlüklü görüntü sentezinde çok umut verici bir yetenek sergilemiştir. Ancak, gürültü azaltma ağının birden fazla kez değerlendirilmesi nedeniyle, önceden eğitilmiş bir DPM'den örnek almak zaman alıcıdır; bu durum, DPM örneklemesinin hızlandırılmasını giderek daha önemli hale getirmektedir. Hızlı örnekleme tasarımlarındaki son ilerlemelere rağmen, mevcut yöntemler, daha az adımın (ör. <10) tercih edildiği birçok uygulamada tatmin edici görüntüler üretememektedir. Bu makalede, herhangi bir mevcut DPM örnekleme yönteminin ardından uygulanabilen, ek model değerlendirmesi gerektirmeden doğruluk derecesini artıran birleşik bir düzeltici (UniC) geliştirdik ve bir yan ürün olarak, keyfi dereceleri destekleyen birleşik bir tahmin edici (UniP) türettik. UniP ve UniC'yi birleştirerek, DPM'lerin hızlı örneklemesi için UniPC adını verdiğimiz birleşik bir tahmin edici-düzeltici çerçevesi öneriyoruz. Bu çerçeve, herhangi bir derece için birleşik analitik bir forma sahiptir ve önceki yöntemlere kıyasla örneklemeyi, özellikle son derece az adımlarda, önemli ölçüde iyileştirebilir. Yöntemlerimizi, hem piksel uzayında hem de gizli uzayda DPM'ler kullanarak hem koşulsuz hem de koşullu örneklemeyi içeren kapsamlı deneylerle değerlendiriyoruz. UniPC'miz, yalnızca 10 fonksiyon değerlendirmesiyle CIFAR10'da (koşulsuz) 3,87 FID ve ImageNet 256×256'da (koşullu) 7,51 FID elde edebilir. Kod, bu https URL adresinde mevcuttur.
İ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 predict_x0=True 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.
UniPCMultistepScheduler
sınıf diffusers.UniPCMultistepScheduler
< 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.0predict_x0: bool = Truesolver_type: typing.Literal['bh1', 'bh2'] = 'bh2'lower_order_final: bool = Truedisable_corrector: list = []solver_p: SchedulerMixin = Noneuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential'sigma_min: float | None = Nonesigma_max: bool | None = Noneshift_terminal: bool | None = None )
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 haritadır.linear,scaled_linearveyasquaredcos_cap_v2seçeneklerinden birini seçin. - 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ılan2) — UniPC derecesi, herhangi bir pozitif tam sayı olabilir. UniC nedeniyle etkin doğruluk derecesisolver_order + 1olur. Yönlendirilmiş örneklemeler içinsolver_order=2, koşulsuz örneklemeler için isesolver_order=3kullanılması önerilir. - prediction_type (
"epsilon","sample","v_prediction", or"flow_prediction", defaults to"epsilon", optional) — Prediction type of the scheduler function; can beepsilon(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ı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=Truevepredict_x0=Trueolduğunda geçerlidir. - predict_x0 (
bool, varsayılanTrue) — Tahmin edilen x0 üzerinde güncelleme algoritmasının kullanılıp kullanılmayacağı. - solver_type (
"bh1"veya"bh2", varsayılan"bh2") — UniPC için çözümleyici türü. Adım sayısı < 10 olduğunda koşulsuz örneklemeler içinbh1kullanılması, diğer durumlarda isebh2kullanı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. - disable_corrector (
list, varsayılan[]) — Büyük bir yönlendirme ölçeğinde yakınsamayı etkileyebilecekepsilon_theta(x_t, c)ileepsilon_theta(x_t^c, c)arasındaki uyumsuzluğu azaltmak için düzelticinin (corrector) hangi adımda devre dışı bırakılacağını belirler. Düzeltici genellikle ilk birkaç adımda devre dışı bırakılır. - solver_p (
SchedulerMixin, varsayılanNone) — Belirtilirse algoritmanınsolver_p + UniChaline gelmesini sağlayan herhangi bir başka zamanlayıcı. - 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_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ğı. - 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. - final_sigmas_type (
"zero"veya"sigma_min", 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.zeroise, son sigma 0 olarak ayarlanır. - 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.
UniPCMultistepScheduler, difüzyon modellerinin hızlı örneklenmesi için tasarlanmış, eğitim gerektirmeyen bir çerçevedir.
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: Tensor = None**kwargs ) → torch.Tensor
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.
Dönüş değeri
torch.Tensor
Dönüştürülen model çıktısı.
Model çıktısını UniPC algoritmasının gerektirdiği ilgili tipe dönüştürün.
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_uni_c_bh_update
< source >( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor
Parametreler
- this_model_output (
torch.Tensor) — Modelinx_tçıktısı. - this_timestep (
int) — Güncel zaman adımıt. - last_sample (
torch.Tensor) — Son tahmincix_{t-1}öncesindeki üretilmiş örnek. - this_sample (
torch.Tensor) — Son tahmincix_{t}sonrasında üretilen örnek. - order (
int) — Bu adımda UniC-p'ninpdeğeri. Etkin doğruluk derecesiorder + 1olmalıdır.
Dönüş değeri
torch.Tensor
Güncel zaman adımındaki düzeltilmiş örnek tensörü.
UniC (B(h) sürümü) için bir adım.
multistep_uni_p_bh_update
< source >( model_output: Tensor*argssample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor
Parametreler
- model_output (
torch.Tensor) — Mevcut zaman adımında öğrenilen difüzyon modelinden gelen doğrudan çıktı. - prev_timestep (
int) — Difüzyon zincirindeki ö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 zaman adımındaki UniP sırası (UniPC-p'deki p'ye karşılık gelir).
Dönüş değeri
torch.Tensor
Önceki zaman adımındaki örnek tensör.
UniP (B(h) sürümü) için bir adım. Alternatif olarak, self.solver_p belirtilirse kullanılır.
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 | None = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: list[float] | None = Nonemu: bool | None = None )
Parametreler
- num_inference_steps (
int) — Ö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. - sigmas (
List[float], isteğe bağlı) — Her difüzyon adımı için kullanılacak sigmaların özel değerleri.Noneise sigmalar otomatik olarak hesaplanır. - mu (
float, isteğe bağlı) — Üstel zaman kaydırma türü kullanılırken dinamik kaydırma için isteğe bağlı mu parametresi.
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: Tensorreturn_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. - 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 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ı UniPC ile ilerletir.
stretch_shift_to_terminal
< source >( t: Tensor ) → torch.Tensor
Zaman adımlı zaman çizelgesini uzatarak ve kaydırarak, yapılandırılmış shift_terminal yapılandırma değeriyle sonlanmasını sağlar.
time_shift
< source >( mu: floatsigma: floatt: Tensor ) → torch.Tensor
Sigmalara zaman kaydırma uygulayın.
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.