Diffusers documentation
VQDiffusionScheduler
VQDiffusionScheduler
VQDiffusionScheduler convertit la sortie du modèle transformer en un échantillon pour l’image non bruitée à l’étape de diffusion précédente. Il a été introduit dans Vector Quantized Diffusion Model for Text-to-Image Synthesis par Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo.
L'abstract de l'article est :
Nous présentons le modèle de diffusion quantifiée vectorielle (VQ-Diffusion) pour la génération d'images à partir de texte. Cette méthode repose sur un auto-encodeur variationnel quantifié vectoriellement (VQ-VAE) dont l'espace latent est modélisé par une variante conditionnelle du modèle probabiliste de diffusion de débruitage (DDPM) récemment développé. Nous constatons que cette méthode d'espace latent est bien adaptée aux tâches de génération d'images à partir de texte, car elle élimine non seulement le biais unidirectionnel des méthodes existantes, mais nous permet également d'intégrer une stratégie de diffusion par masquage et remplacement pour éviter l'accumulation d'erreurs, un problème grave des méthodes existantes. Nos expériences montrent que le VQ-Diffusion produit des résultats de génération d'images à partir de texte nettement supérieurs à ceux des modèles autorégressifs (AR) conventionnels ayant un nombre de paramètres similaire. Par rapport aux méthodes de génération d'images à partir de texte basées sur des GAN précédentes, notre VQ-Diffusion peut gérer des scènes plus complexes et améliorer considérablement la qualité des images synthétisées. Enfin, nous montrons que le calcul de génération d'images de notre méthode peut être rendu très efficace par reparamétrisation. Avec les méthodes AR traditionnelles, le temps de génération d'images à partir de texte augmente linéairement avec la résolution de l'image de sortie et est donc assez long, même pour des images de taille normale. Le VQ-Diffusion nous permet d'atteindre un meilleur compromis entre qualité et vitesse. Nos expériences indiquent que le modèle VQ-Diffusion avec reparamétrisation est quinze fois plus rapide que les méthodes AR traditionnelles tout en offrant une meilleure qualité d'image.
VQDiffusionScheduler
classe 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 )
Paramètres
- num_vec_classes (
int) — Le nombre de classes des embeddings vectoriels des pixels latents. Inclut la classe du pixel latent masqué. - num_train_timesteps (
int, par défaut100) — Le nombre d'étapes de diffusion pour entraîner le modèle. - alpha_cum_start (
float, par défaut0.99999) — La valeur cumulative alpha de départ. - alpha_cum_end (
float, par défaut0.000009) — La valeur finale de l'alpha cumulé. - gamma_cum_start (
float, par défaut0.000009) — La valeur initiale de gamma cumulé. - gamma_cum_end (
float, par défaut0.99999) — La valeur finale du gamma cumulé.
Un planificateur pour la diffusion à quantification vectorielle.
Ce modèle hérite de SchedulerMixin et ConfigMixin. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les planificateurs, telles que le chargement et l'enregistrement.
apply_cumulative_transitions
< source >( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Paramètres
- q (
torch.Tensorde forme(batch size, num classes - 1, num latent pixels)) — Les probabilités logarithmiques sur les classes des pixels latents non masqués. - t (
intoutorch.Tensor) — L'instant qui détermine quelle matrice de transition cumulée est utilisée.
Retourne
torch.Tensor de forme (batch size, num classes, num latent pixels)
Les probabilités de log des transitions avec les probabilités de classes du masque ajoutées.
Appliquer la matrice de transition cumulée à un pas de temps aux probabilités logarithmiques des classes non masquées.
log_Q_t_transitioning_to_known_class
< source >( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor
Paramètres
- t (
intoutorch.Tensor) — L'instant qui détermine quelle matrice de transition est utilisée. - x_t (
torch.LongTensorde forme(batch size, num latent pixels)) — Les classes de chaque pixel latent au tempst. - log_onehot_x_t (
torch.Tensorde forme(batch size, num classes, num latent pixels)) — Les vecteurs log one-hot dex_t. - cumulative (
bool) — Si cumulative estFalse, la matrice de transition pour une étape uniquet-1->test utilisée. Si cumulative estTrue, la matrice de transition cumulative0->test utilisée.
Retourne
torch.Tensor
Chaque colonne de la matrice renvoyée est une ligne de logarithmes de probabilités de la matrice de transition de probabilité complète. Le tenseur a la forme (batch size, num classes - 1, num latent pixels) lorsque cumulative est True et la forme (batch size, num classes, num latent pixels) sinon.
Lorsqu’ils sont cumulés, le tenseur possède une ligne de moins car le pixel latent initial ne peut pas être masqué.
Où :
q_nest la distribution de probabilité du processus avant pour le pixel latent de rangn.- C_0 est une classe d'incorporation de pixels latents
- C_k est la classe du pixel latent masqué
résultat non cumulatif (en omettant les logarithmes) :
résultat cumulé (en omettant les logarithmes) :
Calcule les probabilités logarithmiques des lignes de la matrice de transition (cumulative ou non cumulative) pour chaque pixel latent de x_t.
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)
Paramètres
- log_p_x_0 (
torch.Tensorde forme(batch size, num classes - 1, num latent pixels)) — Les probabilités logarithmiques des classes prédites pour les pixels latents initiaux. N’inclut pas de prédiction pour la classe masquée, car l’image initiale non bruitée ne peut pas être masquée. - x_t (
torch.LongTensorde forme(batch size, num latent pixels)) — Les classes de chaque pixel latent au tempst. - t (
intoutorch.Tensor) — L'instant qui détermine quelle matrice de transition est utilisée.
Retourne
torch.Tensor de forme (batch size, num classes, num latent pixels)
Les probabilités logarithmiques des classes prédites de l'image à l'instant t-1.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
Paramètres
- num_inference_steps (
int) — Le nombre d'étapes de diffusion utilisées lors de la génération d'échantillons avec un modèle pré-entraîné. - device (
stroutorch.device, facultatif) — L’appareil vers lequel les timesteps et les paramètres du processus de diffusion (alpha, beta, gamma) doivent être déplacés.
Définit les pas de temps discrets utilisés pour la chaîne de diffusion (à exécuter avant l'inférence).
étape
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]
Paramètres
- model_output (
torch.Tensorde forme(batch size, num classes - 1, num latent pixels)) — Les probabilités logarithmiques des classes prédites pour les pixels latents initiaux. N’inclut pas de prédiction pour la classe masquée, car l’image initiale non bruitée ne peut pas être masquée. - timestep (
intoutorch.Tensor) — L'indice de pas qui détermine les matrices de transition utilisées. - sample (
torch.LongTensorde forme(batch size, num latent pixels)) — Les classes de chaque pixel latent à l'étape temporelle actuelle. - generator (
torch.Generator, facultatif) — Générateur de nombres aléatoires pour le bruit appliqué àp(x_{t-1} | x_t)avant son échantillonnage. - return_dict (
bool, par défautTrue) — Indique s'il faut retourner un VQDiffusionSchedulerOutput ou untuple.
Retourne
VQDiffusionSchedulerOutput ou tuple[torch.LongTensor]
If return_dict is True, VQDiffusionSchedulerOutput is
returned, otherwise a tuple is returned where the first element is the sample tensor.
Prédit l'échantillon de l'étape temporelle précédente à l'aide de la distribution de transition inverse. Consultez q_posterior() pour plus de détails sur le calcul de la distribution.
VQDiffusionSchedulerOutput
classe diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput
< source >( prev_sample: LongTensor )
Classe de sortie pour la fonction d'étape du planificateur.