# VQModel

Le modèle VQ-VAE a été introduit dans [Neural Discrete Representation Learning](https://huggingface.co/papers/1711.00937) par Aaron van den Oord, Oriol Vinyals et Koray Kavukcuoglu. Le modèle est utilisé dans 🤗 Diffusers pour décoder des représentations latentes en images. Contrairement à [AutoencoderKL](/docs/diffusers/main/fr/api/models/autoencoderkl#diffusers.AutoencoderKL), le [VQModel](/docs/diffusers/main/fr/api/models/vq#diffusers.VQModel) fonctionne dans un espace latent quantifié.

L'abstract de l'article est :

*Apprendre des représentations utiles sans supervision reste un défi majeur en apprentissage automatique. Dans cet article, nous proposons un modèle génératif simple mais puissant qui apprend de telles représentations discrètes. Notre modèle, le Vector Quantised-Variational AutoEncoder (VQ-VAE), diffère des VAE à deux égards essentiels : le réseau encodeur produit des codes discrets plutôt que continus ; et la loi a priori est apprise plutôt que statique. Afin d’apprendre une représentation latente discrète, nous intégrons des idées issues de la quantification vectorielle (VQ). L’utilisation de la méthode VQ permet au modèle de contourner les problèmes de « posterior collapse » — où les variables latentes sont ignorées lorsqu’elles sont associées à un décodeur autorégressif puissant — généralement observés dans le cadre des VAE. En associant ces représentations à une loi a priori autorégressive, le modèle peut générer des images, des vidéos et des voix de haute qualité, ainsi que réaliser des conversions de locuteurs de haute qualité et un apprentissage non supervisé de phonèmes, fournissant ainsi des preuves supplémentaires de l’utilité des représentations apprises.*

## VQModel[[diffusers.VQModel]]

#### diffusers.VQModel[[diffusers.VQModel]]

```python
diffusers.VQModel(in_channels: int = 3, out_channels: int = 3, down_block_types: tuple = ('DownEncoderBlock2D',), up_block_types: tuple = ('UpDecoderBlock2D',), block_out_channels: tuple = (64,), layers_per_block: int = 1, act_fn: str = 'silu', latent_channels: int = 3, sample_size: int = 32, num_vq_embeddings: int = 256, norm_num_groups: int = 32, vq_embed_dim: int | None = None, scaling_factor: float = 0.18215, norm_type: str = 'group', mid_block_add_attention = True, lookup_from_codebook = False, force_upcast = False)
```

[Source](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/vq_model.py#L40)

**Paramètres :**

in_channels (int, *facultatif*, valeur par défaut 3) : Nombre de canaux de l'image d'entrée.

out_channels (int, *facultatif*, valeur par défaut 3) : Nombre de canaux dans la sortie.

down_block_types (`tuple[str]`, *facultatif*, par défaut `("DownEncoderBlock2D",)`) : tuple des types de blocs de downsampling.

up_block_types (`tuple[str]`, *facultatif*, par défaut `("UpDecoderBlock2D",)`) : tuple des types de blocs de suréchantillonnage.

block_out_channels (`tuple[int]`, *facultatif*, par défaut `(64,)`) : tuple des canaux de sortie des blocs.

layers_per_block (`int`, *facultatif*, par défaut `1`) : Nombre de couches par bloc.

act_fn (`str`, *facultatif*, par défaut `"silu"`) : La fonction d'activation à utiliser.

latent_channels (`int`, *facultatif*, par défaut `3`) : Nombre de canaux dans l'espace latent.

sample_size (`int`, *facultatif*, par défaut `32`) : Taille d'entrée d'échantillonnage.

num_vq_embeddings (`int`, *facultatif*, par défaut `256`) : Nombre de vecteurs du codebook dans le VQ-VAE.

norm_num_groups (`int`, *facultatif*, valeur par défaut `32`) : Nombre de groupes pour les couches de normalisation.

vq_embed_dim (`int`, *facultatif*) : Dimension cachée des vecteurs du codebook dans le VQ-VAE.

scaling_factor (`float`, *facultatif*, valeur par défaut `0.18215`) : L'écart-type par composante de l'espace latent entraîné, calculé à l'aide du premier lot du jeu de données d'entraînement. Il est utilisé pour mettre à l'échelle l'espace latent afin qu'il ait une variance unitaire lors de l'entraînement du modèle de diffusion. Les latents sont mis à l'échelle avec la formule `z = z * scaling_factor` avant d'être transmis au modèle de diffusion. Lors du décodage, les latents sont remis à l'échelle d'origine avec la formule : `z = 1 / scaling_factor * z`. Pour plus de détails, consultez les sections 4.3.2 et D.1 de l'article [High-Resolution Image Synthesis with Latent Diffusion Models](https://huggingface.co/papers/2112.10752).

norm_type (`str`, *facultatif*, par défaut `"group"`) : Type de couche de normalisation à utiliser. Peut être `"group"` ou `"spatial"`.

Un modèle VQ-VAE pour le décodage des représentations latentes.

Ce modèle hérite de [ModelMixin](/docs/diffusers/main/fr/api/models/overview#diffusers.ModelMixin). Consultez la documentation de la classe parente pour ses méthodes génériques implémentées pour tous les modèles (tels que le téléchargement ou l'enregistrement).

#### forward[[diffusers.VQModel.forward]]

```python
forward(sample: Tensor, return_dict: bool = True)
```

[Source](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/vq_model.py#L163)

**Paramètres :**

sample (`torch.Tensor`) : Échantillon d'entrée.

return_dict (`bool`, *facultatif*, par défaut `True`) : Indique s'il faut retourner un [models.autoencoders.vq_model.VQEncoderOutput](/docs/diffusers/main/fr/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) plutôt qu'un simple tuple.

**Retourne :** [VQEncoderOutput](/docs/diffusers/main/fr/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) ou `tuple`

Si return_dict est True, un [VQEncoderOutput](/docs/diffusers/main/fr/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) est renvoyé, sinon un simple `tuple` est renvoyé.

La méthode forward de [VQModel](/docs/diffusers/main/fr/api/models/vq#diffusers.VQModel).

## VQEncoderOutput[[diffusers.models.autoencoders.vq_model.VQEncoderOutput]]

#### diffusers.models.autoencoders.vq_model.VQEncoderOutput[[diffusers.models.autoencoders.vq_model.VQEncoderOutput]]

```python
diffusers.models.autoencoders.vq_model.VQEncoderOutput(latents: Tensor)
```

[Source](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/vq_model.py#L28)

**Paramètres :**

latents (`torch.Tensor` de forme `(batch_size, num_channels, height, width)`) : L'échantillon de sortie encodé de la dernière couche du modèle.

Sortie de la méthode d'encodage de VQModel.

