Diffusers documentation

DEISMultistepScheduler

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

DEISMultistepScheduler

Diffusion Exponential Integrator Sampler (DEIS), Qinsheng Zhang ve Yongxin Chen tarafından Fast Sampling of Diffusion Models with Exponential Integrator makalesinde önerilmiştir. DEISMultistepScheduler, difüzyon sıradan diferansiyel denklemleri (ODE) için hızlı, yüksek mertebeden bir çözücüdür.

Bu uygulama, DEIS makalesindeki orijinal doğrusal t uzayı yerine log-rho uzayındaki polinom sığdırma formülünü değiştirir. Bu değişiklik, sayısal çözücüye başvurmak yerine üstel çok adımlı güncelleme için kapalı form katsayıları sağlar.

Makalenin özeti şudur:

Son birkaç yıl, üretken modelleme görevlerinde yüksek sadakatli örnekler üretmede Difüzyon modellerinin~(DM) büyük başarısına tanık oldu. DM'nin önemli bir kısıtlaması, istenen doğruluğa ulaşmak için öğrenilen difüzyon sürecinin genellikle yüzlerce ile binlerce zaman ayrıklaştırma adımını gerektiren, meşhur yavaş örnek alma prosedürüdür. Amacımız, yüksek örnek kalitesini korurken çok daha az adımla DM'ler için hızlı bir örnek alma yöntemi geliştirmektir. Bu amaçla, DM'lerdeki örnek alma prosedürünü sistematik olarak analiz ediyoruz ve örnek kalitesini etkileyen ana faktörleri belirliyoruz; bunlar arasında ayrıklaştırma yöntemi en kritik olanıdır. Öğrenilen difüzyon sürecini dikkatlice inceleyerek Diffusion Exponential Integrator Sampler~(DEIS) öneriyoruz. Bu yöntem, sıradan diferansiyel denklemleri (ODE) ayrıklaştırmak için tasarlanan Exponential Integrator'a dayanır ve öğrenilen difüzyon sürecinin yarı doğrusal yapısından yararlanarak ayrıklaştırma hatasını azaltır. Önerilen yöntem herhangi bir DM'ye uygulanabilir ve en fazla 10 adımda yüksek sadakatli örnekler üretebilir. Deneylerimizde, tek bir A6000 GPU üzerinde CIFAR10'dan 50k görsel üretmek yaklaşık 3 dakika sürmektedir. Ayrıca, önceden eğitilmiş DM'leri doğrudan kullanarak, skor fonksiyonu değerlendirmesi~(NFE) sayısı kısıtlı olduğunda, örneğin CIFAR10'da 10 NFE ile 4.17 FID, 3.37 FID ve yalnızca 15 NFE ile 9.74 IS, en iyi örnek alma performansını elde ediyoruz. Kod bu https URL adresinde mevcuttur.

İpuçları

solver_order'un 2 veya 3 olarak ayarlanması önerilir; solver_order=1 ise DDIMScheduler'a eşdeğerdir.

Imagen'den dinik eşikleme desteklenmektedir ve piksel uzayında difüzyon modelleri için dinamik eşikleme kullanmak üzere thresholding=True ayarlayabilirsiniz.

DEISMultistepScheduler

sınıf diffusers.DEISMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = '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['deis'] = 'deis'solver_type: typing.Literal['logrho'] = 'logrho'lower_order_final: bool = Trueuse_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 = 0use_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ıç 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 veya list[float], isteğe bağlı) — beta_start ve beta_end parametrelerini 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 DEIS derecesi. Rehberli örneklemeler için solver_order=2, koşulsuz örneklemeler için 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) — “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 olduğunda geçerlidir.
  • algorithm_type ("deis", varsayılan "deis") — Çözücü için algoritma türü.
  • solver_type ("logrho", varsayılan "logrho") — DEIS için çözümleyici türü.
  • 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.
  • 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ğı.
  • flow_shift (float, isteğe bağlı, varsayılan 1.0) — Akış tabanlı modeller için akış kaydırma parametresi.
  • 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.
  • 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 "exponential") — Uygulanacak zaman kaydırma türü.

DEISMultistepScheduler, difüzyon sıradan diferansiyel denklemleri (ODE) için hızlı yüksek mertebeden 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

< >

( 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ı DEIS algoritmasının ihtiyaç duyduğu ilgili tipe dönüştürün.

deis_first_order_update

< >

( 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ı.
  • 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.

Dönüş değeri

torch.Tensor

Önceki zaman adımındaki örnek tensör.

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

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_deis_second_order_update

< >

( model_output_list: list*argssample: 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) — Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

Dönüş değeri

torch.Tensor

Önceki zaman adımındaki örnek tensör.

İkinci mertebeden çok adımlı DEIS için bir adım.

multistep_deis_third_order_update

< >

( model_output_list: list*argssample: 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) — Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

Dönüş değeri

torch.Tensor

Önceki zaman adımındaki örnek tensör.

Üçüncü dereceden çok adımlı DEIS için bir adım.

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: intdevice: typing.Union[str, torch.device] = Nonemu: float | 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.
  • mu (float, isteğe bağlı) — Dinamik kaydırma için mu parametresi. Yalnızca use_dynamic_shifting=True ve time_shift_type="exponential" olduğunda kullanı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

< >

( 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ı DEIS ile ilerletir.

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