Diffusers documentation
VQDiffusionScheduler
VQDiffusionScheduler
VQDiffusionScheduler, dönüştürücü modelin çıktısını, bir önceki difüzyon zaman adımındaki gürültüsüz görüntü için bir örneğe dönüştürür. Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan ve Baining Guo tarafından Vector Quantized Diffusion Model for Text-to-Image Synthesis makalesinde tanıtılmıştır.
Makalenin özeti şudur:
Metinden görüntüye üretim için vektör kuantize edilmiş difüzyon (VQ-Diffusion) modelini sunuyoruz. Bu yöntem, son zamanlarda geliştirilen Gürültü Azaltma Difüzyon Olasılıksal Modelinin (DDPM) koşullu bir varyantı tarafından modellenen gizli uzaya sahip bir vektör kuantize edilmiş varyansiyonel otoenkoderin (VQ-VAE) temelinde kuruludur. Bu gizli uzay yönteminin, mevcut yöntemlerdeki tek yönlü önyargıyı ortadan kaldırmakla kalmayıp, mevcut yöntemlerde ciddi bir sorun olan hata birikimini önlemek için maske-ve-değiştirme difüzyon stratejisini entegre etmemize de olanak tanıdığı için metinden görüntüye üretim görevleri için son derece uygun olduğunu tespit ettik. Deneylerimiz, benzer sayıda parametreye sahip geleneksel otoregresif (AR) modellerle karşılaştırıldığında VQ-Diffusion'ın önemli ölçüde daha iyi metinden görüntüye üretim sonuçları ürettiğini göstermektedir. Önceki GAN tabanlı metinden görüntüye yöntemlerle karşılaştırıldığında, VQ-Diffusion'ımız daha karmaşık sahneleri işleyebilir ve sentezlenen görüntü kalitesini büyük ölçüde iyileştirebilir. Son olarak, yöntemimizdeki görüntü üretim hesabının yeniden parametrelendirme yoluyla son derece verimli hale getirilebileceğini gösteriyoruz. Geleneksel AR yöntemlerinde, metinden görüntüye üretim süresi çıktı görüntü çözünürlüğüyle doğrusal olarak artar ve bu nedenle normal boyutlu görüntüler için bile oldukça zaman alıcıdır. VQ-Diffusion, kalite ve hız arasında daha iyi bir denge kurmamıza olanak tanır. Deneylerimiz, yeniden parametrelendirmeye sahip VQ-Diffusion modelinin, daha iyi bir görüntü kalitesi elde ederken geleneksel AR yöntemlerinden on beş kat daha hızlı olduğunu göstermektedir.
VQDiffusionScheduler
sınıf diffusers.VQDiffusionScheduler
< source >( num_vec_classes: intnum_train_timesteps: int = 100alpha_cum_start: float = 0.99999alpha_cum_end: float = 9e-06gamma_cum_start: float = 9e-06gamma_cum_end: float = 0.99999 )
Parametreler
- num_vec_classes (
int) — Gizli piksellerin vektör gömme sınıflarının sayısı. Maskelenmiş gizli piksel sınıfını da içerir. - num_train_timesteps (
int, varsayılan100) — Modelin eğitileceği difüzyon adım sayısı. - alpha_cum_start (
float, varsayılan0.99999) — Başlangıç kümülatif alfa değeri. - alpha_cum_end (
float, varsayılan0.000009) — Bitiş birikimli alfa değeri. - gamma_cum_start (
float, varsayılan0.000009) — Başlangıç kümülatif gamma değeri. - gamma_cum_end (
float, varsayılan0.99999) — Bitiş kümülatif gamma değeri.
Vektör kuantize difüzyon için bir zamanlayıcı.
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.
apply_cumulative_transitions
< source >( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Parametreler
- q (
torch.Tensor, şekli(batch size, num classes - 1, num latent pixels)) — Maskelenmemiş gizli piksel sınıfları üzerindeki log olasılıklar. - t (
intveyatorch.Tensor) — Hangi kümülatif geçiş matrisinin kullanılacağını belirleyen zaman adımı.
Dönüş değeri
torch.Tensor, şekli (batch size, num classes, num latent pixels)
Mask sınıf olasılıkları eklenmiş geçişli log olasılıklar.
Bir zaman adımında kümülatif geçiş matrisini, maskelenmemiş sınıflar üzerindeki log olasılıklara uygulayın.
log_Q_t_transitioning_to_known_class
< source >( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor
Parametreler
- t (
intveyatorch.Tensor) — Hangi geçiş matrisinin kullanılacağını belirleyen zaman adımı. - x_t (
torch.LongTensor, şekli(batch size, num latent pixels)) —tzamanında her latent pikselin sınıfları. - log_onehot_x_t (
torch.Tensor, şekli(batch size, num classes, num latent pixels)) —x_t'nin log one-hot vektörleri. - cumulative (
bool) — cumulativeFalseise, tek adımlı geçiş matrisit-1->tkullanılır. cumulativeTrueise, kümülatif geçiş matrisi0->tkullanılır.
Dönüş değeri
torch.Tensor
Döndürülen matrisin her sütunu, tam olasılık geçiş matrisinin log olasılıklarının bir satırıdır. cumulative True olduğunda tensörün şekli (batch size, num classes - 1, num latent pixels), aksi halde (batch size, num classes, num latent pixels) şeklindedir.
Kümülatif olduğunda, başlangıç gizli pikseli maskelemediği için tensör bir satır daha az içerir.
Burada:
q_n,n. gizli pikselin ileri süreci için olasılık dağılımıdır.- C_0, gizli piksel gömme sınıfıdır
- C_k, maskelenmiş gizli pikselin sınıfıdır
kümülatif olmayan sonuç (logaritmalara yer verilmeden):
kümülatif sonuç (logaritmalara yer verilmeden):
x_t içindeki her gizli piksel için (kümülatif veya kümülatif olmayan) geçiş matrisinin satırlarının log olasılıklarını hesaplar.
q_posterior
< source >( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Parametreler
- log_p_x_0 (
torch.Tensor, şekli(batch size, num classes - 1, num latent pixels)) — Başlangıç gizli piksellerinin tahmin edilen sınıfları için log olasılıklar. Başlangıç gürültüsüz görüntü maskelenemeyeceğinden, maskelenmiş sınıf için bir tahmin içermez. - x_t (
torch.LongTensor, şekli(batch size, num latent pixels)) —tzamanında her latent pikselin sınıfları. - t (
intveyatorch.Tensor) — Hangi geçiş matrisinin kullanılacağını belirleyen zaman adımı.
Dönüş değeri
torch.Tensor, şekli (batch size, num classes, num latent pixels)
t-1 zaman adımında görüntünün tahmin edilen sınıfları için log olasılıklar.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
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: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]
Parametreler
- model_output (
torch.Tensor, şekli(batch size, num classes - 1, num latent pixels)) — Başlangıç gizli piksellerinin tahmin edilen sınıfları için log olasılıklar. Başlangıç gürültüsüz görüntü maskelenemeyeceğinden, maskelenmiş sınıf için bir tahmin içermez. - timestep (
intveyatorch.Tensor) — Hangi geçiş matrislerinin kullanılacağını belirleyen zaman adımı. - sample (
torch.LongTensor, şekli(batch size, num latent pixels)) — Mevcut zaman adımında her latent pikselin sınıfları. - generator (
torch.Generator, isteğe bağlı) — Örnekleme yapılmadan öncep(x_{t-1} | x_t)'ye uygulanan gürültü için rastgele sayı üreteci. - return_dict (
bool, varsayılanTrue) — Bir VQDiffusionSchedulerOutput veyatupledöndürülüp döndürülmediğini belirtir.
Dönüş değeri
VQDiffusionSchedulerOutput veya tuple[torch.LongTensor]
return_dict True ise VQDiffusionSchedulerOutput döndürülür, aksi halde ilk öğesi örnek tensörü olan bir tuple döndürülür.
Önceki zaman adımındaki örneklemi, ters geçiş dağılımı ile tahmin edin. Dağılımın nasıl hesaplandığına dair daha fazla ayrıntı için q_posterior() işlevine bakın.
VQDiffusionSchedulerOutput
sınıf diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput
< source >( prev_sample: LongTensor )
Zamanlayıcının adım fonksiyonu çıktısı için çıktı sınıfı.