Diffusers documentation

UniPCMultistepScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

< >

( 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ıç 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 "linear") — Beta zamanlaması, modelin adım atması için beta aralığını beta dizisine eşleyen bir haritadır. linear, scaled_linear veya squaredcos_cap_v2 seçeneklerinden birini seçin.
  • trained_betas (np.ndarray, isteğe bağlı) — Betalar dizisini doğrudan yapılandırıcıya ileterek beta_start ve beta_end parametrelerini atlayın.
  • solver_order (int, varsayılan 2) — UniPC derecesi, herhangi bir pozitif tam sayı olabilir. UniC nedeniyle etkin doğruluk derecesi solver_order + 1 olur. Yönlendirilmiş ö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", optional) — 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) — “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ı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 predict_x0=True olduğunda geçerlidir.
  • predict_x0 (bool, varsayılan True) — 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çin bh1 kullanılması, diğer durumlarda ise bh2 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.
  • disable_corrector (list, varsayılan []) — Büyük bir yönlendirme ölçeğinde yakınsamayı etkileyebilecek epsilon_theta(x_t, c) ile epsilon_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ılan None) — Belirtilirse algoritmanın solver_p + UniC haline gelmesini sağlayan herhangi bir başka zamanlayıcı.
  • 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ü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ılan False) — Ö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ılan False) — Ö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 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.
  • rescale_betas_zero_snr (bool, varsayılan False) — 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_noise ile 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

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

Parametreler

  • original_samples (torch.Tensor) — Gürültü eklenmemiş orijinal örnekler.
  • noise (torch.Tensor) — Örneklere eklenecek gürültü.
  • timesteps (torch.IntTensor) — Örneklere gürültü eklenmesi gereken zaman adımları.

Dönüş değeri

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

< >

( 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

< >

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

Parametreler

  • timestep (int veya torch.Tensor) — Dizininin bulunacağı timestep.
  • schedule_timesteps (torch.Tensor, isteğe bağlı) — Aranacak timestep zaman çizelgesi. None ise self.timesteps kullanılır.

Dönüş değeri

int

Zaman adımı planındaki zaman adımının indeksi.

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

multistep_uni_c_bh_update

< >

( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

Parametreler

  • this_model_output (torch.Tensor) — Modelin x_t çıktısı.
  • this_timestep (int) — Güncel zaman adımı t.
  • last_sample (torch.Tensor) — Son tahminci x_{t-1} öncesindeki üretilmiş örnek.
  • this_sample (torch.Tensor) — Son tahminci x_{t} sonrasında üretilen örnek.
  • order (int) — Bu adımda UniC-p'nin p değeri. Etkin doğruluk derecesi order + 1 olmalı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

< >

( 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

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

Parametreler

  • sample (torch.Tensor) — Girdi örneği.

Dönüş değeri

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

< >

( begin_index: int = 0 )

Parametreler

  • begin_index (int, varsayılan 0) — Zamanlayıcı için 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

< >

( 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 (str veya torch.device, isteğe bağlı) — Adımların (timesteps) taşınacağı cihaz. None ise 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. None ise 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

< >

( 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 (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.
  • return_dict (bool, varsayılan True) — SchedulerOutput mu yoksa tuple mu 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

< >

( t: Tensor ) → torch.Tensor

Parametreler

  • t (torch.Tensor) — Uzatılacak ve kaydırılacak zaman adımlarının tensörü.

Dönüş değeri

torch.Tensor

Son değeri self.config.shift_terminal değerine eşit olacak şekilde ayarlanmış adımlardan oluşan bir tensör.

Zaman adımlı zaman çizelgesini uzatarak ve kaydırarak, yapılandırılmış shift_terminal yapılandırma değeriyle sonlanmasını sağlar.

Referans: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

time_shift

< >

( mu: floatsigma: floatt: Tensor ) → torch.Tensor

Parametreler

  • mu (float) — Zaman kaydırması için mu parametresi.
  • sigma (float) — Zaman kaydırması için sigma parametresi.
  • t (torch.Tensor) — Girdi zaman adımları.

Dönüş değeri

torch.Tensor

Zaman kaydırılmış zaman adımları.

Sigmalara zaman kaydırma uygulayın.

SchedulerOutput

sınıf diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

Parametreler

  • prev_sample (görseller için torch.Tensor, şekli (batch_size, num_channels, height, width)) — Önceki zaman adımının hesaplanan örneği (x_{t-1}). 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.

Update on GitHub