Buckets:

mishig's picture
|
download
raw
11.7 kB
# 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](https://huggingface.co/papers/2111.14822) 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[[diffusers.VQDiffusionScheduler]]
#### diffusers.VQDiffusionScheduler[[diffusers.VQDiffusionScheduler]]
```python
diffusers.VQDiffusionScheduler(num_vec_classes: int, num_train_timesteps: int = 100, alpha_cum_start: float = 0.99999, alpha_cum_end: float = 9e-06, gamma_cum_start: float = 9e-06, gamma_cum_end: float = 0.99999)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L142)
**Parametreler:**
num_vec_classes (`int`) : Gizli piksellerin vektör gömmelemelerinin sınıf sayısı. Maskelenmiş gizli piksel sınıfını da içerir.
num_train_timesteps (`int`, varsayılan `100`) : Modelin eğitileceği difüzyon adım sayısı.
alpha_cum_start (`float`, varsayılan `0.99999`) : Başlangıç kümülatif alfa değeri.
alpha_cum_end (`float`, varsayılan `0.000009`) : Bitiş birikimli alfa değeri.
gamma_cum_start (`float`, varsayılan `0.000009`) : Başlangıç kümülatif gamma değeri.
gamma_cum_end (`float`, varsayılan `0.99999`) : Bitiş kümülatif gamma değeri.
Vektör kuantize difüzyon için bir zamanlayıcı.
Bu model [SchedulerMixin](/docs/diffusers/main/tr/api/schedulers/overview#diffusers.SchedulerMixin) ve [ConfigMixin](/docs/diffusers/main/tr/api/configuration#diffusers.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[[diffusers.VQDiffusionScheduler.apply_cumulative_transitions]]
```python
apply_cumulative_transitions(q: Tensor, t: typing.Union[int, torch.Tensor])
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L491)
**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 (`int` veya `torch.Tensor`) : Hangi kümülatif geçiş matrisinin kullanılacağını belirleyen zaman adımı.
**Dönüş:** `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[[diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class]]
```python
log_Q_t_transitioning_to_known_class(t: typing.Union[int, torch.Tensor], x_t: LongTensor, log_onehot_x_t: Tensor, cumulative: bool)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L392)
**Parametreler:**
t (`int` veya `torch.Tensor`) : Hangi geçiş matrisinin kullanılacağını belirleyen zaman adımı.
x_t (`torch.LongTensor`, şekli `(batch size, num latent pixels)`) : `t` zamanı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`) : cumulative `False` ise, tek adımlı geçiş matrisi `t-1`->`t` kullanılır. cumulative `True` ise, kümülatif geçiş matrisi `0`->`t` kullanılır.
**Dönüş:** `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)`'tir.
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):
```
q_0(x_t | x_{t-1} = C_0) ... q_n(x_t | x_{t-1} = C_0)
. . .
. . .
. . .
q_0(x_t | x_{t-1} = C_k) ... q_n(x_t | x_{t-1} = C_k)
```
kümülatif sonuç (logaritmalara yer verilmeden):
```
q_0_cumulative(x_t | x_0 = C_0) ... q_n_cumulative(x_t | x_0 = C_0)
. . .
. . .
. . .
q_0_cumulative(x_t | x_0 = C_{k-1}) ... q_n_cumulative(x_t | x_0 = C_{k-1})
```
`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[[diffusers.VQDiffusionScheduler.q_posterior]]
```python
q_posterior(log_p_x_0: Tensor, x_t: LongTensor, t: typing.Union[int, torch.Tensor])
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L281)
**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)`) : `t` zamanında her latent pikselin sınıfları.
t (`int` veya `torch.Tensor`) : Hangi geçiş matrisinin kullanılacağını belirleyen zaman adımı.
**Dönüş:** `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.
`t-1` zaman adımında görüntünün tahmin edilen sınıfları için log olasılıkları hesaplar:
```
p(x_{t-1} | x_t) = sum( q(x_t | x_{t-1}) * q(x_{t-1} | x_0) * p(x_0) / q(x_t | x_0) )
```
#### set_timesteps[[diffusers.VQDiffusionScheduler.set_timesteps]]
```python
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device, NoneType] = None)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L214)
**Parametreler:**
num_inference_steps (`int`) : Ön eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı.
device (`str` veya `torch.device`, *opsiyonel*) : Timestep'lerin ve difüzyon süreci parametrelerinin (alpha, beta, gamma) taşınacağı cihaz.
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[[diffusers.VQDiffusionScheduler.step]]
```python
step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: LongTensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L236)
**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 (`int` veya `torch.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ı*) : `p(x_{t-1} | x_t)`'den örneklenmeden önce gürültüye uygulanan rastgele sayı üreteci.
return_dict (`bool`, varsayılan `True`) : [VQDiffusionSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) mu yoksa `tuple` mu döndürüleceğini belirtir.
**Dönüş:** [VQDiffusionSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) veya `tuple[torch.LongTensor]`
return_dict `True` ise [VQDiffusionSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.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()](/docs/diffusers/main/tr/api/schedulers/vq_diffusion#diffusers.VQDiffusionScheduler.q_posterior) işlevine bakın.
## VQDiffusionSchedulerOutput[[diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput]]
#### diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput[[diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput]]
```python
diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput(prev_sample: LongTensor)
```
[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L27)
**Parametreler:**
prev_sample (`torch.LongTensor`, şekli `(batch size, num latent pixels)`) : Önceki zaman adımında hesaplanan örnek. `prev_sample`, gürültü azaltma döngüsünde bir sonraki model girdisi olarak kullanılmalıdır.
Zamanlayıcının adım fonksiyonu çıktısı için çıktı sınıfı.

Xet Storage Details

Size:
11.7 kB
·
Xet hash:
420fd252dbc3ef0ac62890adfcb69d2c0d4d0944a84902e82eeae96f874833e6

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.