Diffusers documentation

TCDScheduler

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

TCDScheduler

Jianbin Zheng, Minghui Hu, Zhongyi Fan, Chaoyue Wang, Changxing Ding, Dacheng Tao ve Tat-Jen Cham tarafından tanıtılan Trajectory Consistency Distillation, az sayıda adımda iyi örnekler üretebilen Strategic Stochastic Sampling (Algorithm 4) yöntemini ortaya koymuştur. Consistency Models içindeki çok adımlı zamanlayıcının (Algorithm 1) gelişmiş bir tekrarı olarak ayırt edilen Strategic Stochastic Sampling, özellikle yörünge tutarlılık fonksiyonu için tasarlanmıştır.

Makalenin özeti şudur:

Latent Consistency Model (LCM), Consistency Model'i latent uzaya genişletir ve metinden görüntüye sentezin hızlandırılmasında etkileyici performans elde etmek için yönlendirilmiş tutarlılık damıtma tekniğinden yararlanır. Ancak, LCM'nin hem netlik hem de detaylı incelik içeren görüntüler üretmekte zorlandığını gözlemledik. Bu sınırlamayı ele almak için öncelikle altta yatan nedenleri inceleyip açıklıyoruz. Araştırmamız, ana sorunun üç ayrı alandaki hatalardan kaynaklandığını belirlemiştir. Sonuç olarak, yörünge tutarlılık fonksiyonunu ve stratejik stokastik örnekleme yöntemini kapsayan Trajectory Consistency Distillation (TCD)'yi tanıttık. Yörünge tutarlılık fonksiyonu, kendi tutarlılık sınır koşulunun kapsamını genişleterik damıtma hatalarını azaltır ve TCD'ye Probability Flow ODE'nin tüm yörüngesini doğru bir şekilde izleme yeteneği kazandırır. Ayrıca, stratejik stokastik örnekleme, çok adımlı tutarlılık örneklemede içkin olan birikmiş hataları aşmak için özellikle tasarlanmış ve TCD modelini tamamlamak için özenle uyarlanmıştır. Deneyler, TCD'nin düşük NFE'lerde görüntü kalitesini önemli ölçüde artırdığını ve yüksek NFE'lerde öğretmen modele kıyasla daha detaylı sonuçlar ürettiğini göstermektedir.

Orijinal kod tabanı jabir-zheng/TCD adresinde bulunabilir.

TCDScheduler

sınıf diffusers.TCDScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.00085beta_end: float = 0.012beta_schedule: str = 'scaled_linear'trained_betas: numpy.ndarray | list[float] | None = Noneoriginal_inference_steps: int = 50clip_sample: bool = Falseclip_sample_range: float = 1.0set_alpha_to_one: bool = Truesteps_offset: int = 0prediction_type: str = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0timestep_spacing: str = 'leading'timestep_scaling: float = 10.0rescale_betas_zero_snr: bool = False )

Parametreler

  • num_train_timesteps (int, varsayılan 1000) — Modelin eğitileceği difüzyon adım sayısı.
  • beta_start (float, varsayılan 0.00085) — Çıkarımın başlangıç beta değeri.
  • beta_end (float, varsayılan 0.012) — Son beta değeri.
  • beta_schedule (str, varsayılan "scaled_linear") — Beta zamanlaması, modelin adım atması için beta aralığını beta dizisine eşleyen bir haritadır. Seçenekler: linear, scaled_linear veya squaredcos_cap_v2.
  • 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.
  • original_inference_steps (int, varsayılan 50) — Doğrusal aralıklı bir zaman adımı zaman çizelgesi oluşturmak için kullanılan varsayılan çıkarım adımı sayısıdır. Bu çizelgeden, nihai zaman adımı zaman çizelgesini oluşturmak için num_inference_steps eşit aralıklı zaman adımı alınacaktır.
  • clip_sample (bool, varsayılan False) — Sayısal kararlılık için tahmin edilen örneği kırpın.
  • clip_sample_range (float, varsayılan 1.0) — Örnek kırpma için maksimum büyüklük. Yalnızca clip_sample=True olduğunda geçerlidir.
  • set_alpha_to_one (bool, varsayılan True) — Her difüzyon adımı, o adımdaki ve bir önceki adımdaki alfa çarpım değerini kullanır. Son adım için bir önceki alfa yoktur. Bu seçenek True olduğunda bir önceki alfa çarpımı 1 olarak sabitlenir, aksi halde 0. adımdaki alfa değeri kullanılır.
  • steps_offset (int, varsayılan 0) — Bazı model ailelerinin gerektirdiği gibi, çıkarım adımlarına eklenen bir ofset.
  • prediction_type (str, 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) or v_prediction` (see section 2.4 of Imagen Video paper).
  • 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.
  • timestep_spacing (str, varsayılan "leading") — Adımları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.
  • timestep_scaling (float, varsayılan 10.0) — Tutarlılık modelinin sınır koşulları olan c_skip ve c_out hesaplanırken timestep'lerin çarpılacağı katsayı. Bu değeri artırmak, yaklaşık hatayı azaltır (ancak varsayılan 10.0 değeri için yaklaşık hata zaten oldukça küçüktü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.

TCDScheduler, Trajectory Consistency Distillation makalesi tarafından tanıtılan Strategic Stochastic Sampling yöntemini içine alır ve özgürce yörünge gezinmesine olanak tanımak için orijinal Multistep Consistency Sampling'i genişletir.

Bu kod, TCD'nin resmi deposuna (https://github.com/jabir-zheng/TCD) dayanmaktadır.

Bu model SchedulerMixin ve ConfigMixin sınıflarından devralır. ~ConfigMixin, zamanlayıcının __init__ fonksiyonuna iletilen num_train_timesteps gibi tüm yapılandırma özniteliklerini saklamaktan sorumludur. Bunlara scheduler.config.num_train_timesteps yoluyla erişilebilir. SchedulerMixin, SchedulerMixin.save_pretrained() ve from_pretrained() fonksiyonları aracılığıyla genel yükleme ve kaydetme işlevselliği sağlar.

add_noise

< >

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

Parametreler

  • original_samples (torch.Tensor) — Gürültü eklenecek orijinal örnekler.
  • noise (torch.Tensor) — Örneklere eklenecek gürültü.
  • timesteps (torch.IntTensor) — Her örnek için gürültü seviyesini gösteren zaman adımları.

Dönüş değeri

torch.Tensor

Gürültülü örnekler.

Her zaman adımındaki gürültü büyüklüğüne göre orijinal örneklerin gürültü ekleyin (bu, ileri difüzyon sürecidir).

get_velocity

< >

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

Parametreler

  • sample (torch.Tensor) — Girdi örneği.
  • noise (torch.Tensor) — Gürültü tensörü.
  • timesteps (torch.IntTensor) — Hız hesaplama için zaman adımları.

Dönüş değeri

torch.Tensor

Hesaplanan hız.

Hız formülüne göre örnek ve gürültüden hız tahminini hesaplayın.

index_for_timestep

< >

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

Parametreler

  • timestep (float veya torch.Tensor) — Zamanlamada (schedule) bulunacak timestep değeri.
  • 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. Çok eşleşme varsa, planın ortasından başlanırken bir sigmanın atlanmaması için (örneğin, görüntüden görüntüye) ikinci indeksi döndürür.

Verilen zaman adımının zaman adımı zaman çizelgesindeki indeksini bulun.

önceki_adım

< >

( timestep: int ) → int or torch.Tensor

Parametreler

  • timestep (int) — Güncel zaman adımı.

Dönüş değeri

int veya torch.Tensor

Önceki zaman adımı.

Difüzyon zincirindeki bir önceki zaman adımını hesaplayın.

scale_model_input

< >

( sample: Tensortimestep: typing.Union[int, torch.Tensor, NoneType] = None ) → torch.Tensor

Parametreler

  • sample (torch.Tensor) — Girdi örneği.
  • timestep (int veya torch.Tensor, isteğe bağlı) — Difüzyon zincirindeki mevcut zaman adımı.

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, NoneType] = Noneoriginal_inference_steps: int | None = Nonetimesteps: list[int] | None = Nonestrength: float = 1.0 )

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ı. Kullanılırsa, timesteps None olmalıdır.
  • device (str veya torch.device, isteğe bağlı) — Adımların (timesteps) taşınacağı cihaz. None ise adımlar taşınmaz.
  • original_inference_steps (int, isteğe bağlı) — Doğrusal aralıklı bir zaman adımı zaman çizelgesi oluşturmak için kullanılacak olan orijinal çıkarım adımı sayısıdır (standart diffusers uygulamasından farklıdır). Ardından bu zaman çizelgesinden, indeksler açısından eşit aralıklı olacak şekilde num_inference_steps zaman adımı alınır ve bu, nihai zaman adımı zaman çizelgemiz olarak kullanılır. Ayarlanmazsa, bu değer original_inference_steps özniteliğine varsayılan olarak ayarlanır.
  • timesteps (list[int], isteğe bağlı) — Timesteps arasında keyfi aralıklara destek sağlamak için kullanılan özel timesteps. None ise, eğitim/distillasyon timestep zaman çizelgesinde timesteps arasında eşit aralıklı varsayılan timestep aralıklandırma stratejisi kullanılır. timesteps geçirilirse, num_inference_steps None olmalıdır.
  • strength (float, varsayılan 1.0) — img2img, inpaint gibi işlemlerde çıkarım için kullanılan zaman adımı sayısını belirlemek için 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: Tensoreta: float = 0.3generator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → TCDSchedulerOutput or tuple[torch.Tensor, torch.Tensor]

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.
  • eta (float, varsayılan 0.3) — Her adımdaki stokastikliği kontrol etmek için kullanılan stokastik bir parametredir (makalede gamma olarak adlandırılır). eta = 0 olduğunda deterministik örneklemeyi, eta = 1 olduğunda ise tam stokastik örneklemeyi temsil eder.
  • generator (torch.Generator, isteğe bağlı) — Rastgele sayı üreteci.
  • return_dict (bool, varsayılan True) — Bir TCDSchedulerOutput veya tuple döndürülüp döndürülmemeye karar verir.

Dönüş değeri

TCDSchedulerOutput veya tuple[torch.Tensor, torch.Tensor]

return_dict True ise TCDSchedulerOutput döndürülür, aksi halde önceki örnek ve tahmin edilen gürültülü örneği içeren bir tuple döndürülür.

Önceki zaman adımındaki örneği SDE'yi tersine çevirerek tahmin edin. Bu işlev, öğrenilen model çıktılarını (en sık tahmin edilen gürültüyü) kullanarak difüzyon sürecini ilerletir.

TCDSchedulerOutput

sınıf diffusers.schedulers.scheduling_tcd.TCDSchedulerOutput

< >

( prev_sample: Tensorpred_noised_sample: typing.Optional[torch.Tensor] = None )

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.
  • pred_noised_sample (torch.Tensor, görüntüler için (batch_size, num_channels, height, width) boyutunda, isteğe bağlı) — Mevcut zaman adımındaki model çıktısına dayalı olarak tahmin edilen gürültülü örnek (x_{s}).

Zamanlayıcının step işlevi çıktısı için çıktı sınıfı.

Update on GitHub