# VQModel

El modelo VQ-VAE se introdujo en [Neural Discrete Representation Learning](https://huggingface.co/papers/1711.00937) de Aaron van den Oord, Oriol Vinyals y Koray Kavukcuoglu. El modelo se utiliza en 🤗 Diffusers para decodificar representaciones latentes en imágenes. A diferencia de [AutoencoderKL](/docs/diffusers/v0.43.0/es/api/models/autoencoderkl#diffusers.AutoencoderKL), el [VQModel](/docs/diffusers/v0.43.0/es/api/models/vq#diffusers.VQModel) funciona en un espacio latente cuantizado.

El resumen del artículo es:

*Aprender representaciones útiles sin supervisión sigue siendo un desafío clave en el aprendizaje automático. En este artículo, proponemos un modelo generativo simple pero potente que aprende dichas representaciones discretas. Nuestro modelo, el Vector Quantised-Variational AutoEncoder (VQ-VAE), difiere de los VAE en dos aspectos clave: la red codificadora emite códigos discretos, en lugar de continuos; y la distribución a priori se aprende en lugar de ser estática. Para aprender una representación latente discreta, incorporamos ideas de la cuantización de vectores (VQ). El uso del método VQ permite al modelo evitar problemas de "colapso posterior", donde los latentes se ignoran cuando se emparejan con un decodificador autoregresivo potente, un fenómeno típicamente observado en el marco de los VAE. Al emparejar estas representaciones con una distribución a priori autoregresiva, el modelo puede generar imágenes, videos y voz de alta calidad, así como realizar conversiones de hablante de alta calidad y aprendizaje no supervisado de fonemas, lo que proporciona más evidencia de la utilidad de las representaciones aprendidas.*

## VQModel[[diffusers.VQModel]]

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

```python
diffusers.VQModel(in_channels: int = 3, out_channels: int = 3, down_block_types: tuple[str, ...] = ('DownEncoderBlock2D',), up_block_types: tuple[str, ...] = ('UpDecoderBlock2D',), block_out_channels: tuple[int, ...] = (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)
```

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

**Parámetros:**

in_channels (int, *opcional*, valor predeterminado 3) : Número de canales en la imagen de entrada.

out_channels (int,  *opcional*, valor predeterminado 3) : Número de canales en la salida.

down_block_types (`tuple[str]`, *opcional*, por defecto `("DownEncoderBlock2D",)`) : tupla de tipos de bloques de muestreo descendente.

up_block_types (`tuple[str]`, *opcional*, por defecto `("UpDecoderBlock2D",)`) : tupla de tipos de bloques de remuestreo ascendente.

block_out_channels (`tuple[int]`, *opcional*, valor predeterminado `(64,)`) : tupla de canales de salida de bloque.

layers_per_block (`int`, *opcional*, valor predeterminado `1`) : Número de capas por bloque.

act_fn (`str`, *opcional*, por defecto `"silu"`) : La función de activación a utilizar.

latent_channels (`int`, *opcional*, valor predeterminado `3`) : Número de canales en el espacio latente.

sample_size (`int`, *opcional*, valor predeterminado `32`) : Tamaño de entrada de muestra.

num_vq_embeddings (`int`, *opcional*, valor predeterminado `256`) : Número de vectores del libro de códigos en el VQ-VAE.

norm_num_groups (`int`, *opcional*, valor predeterminado `32`) : Número de grupos para las capas de normalización.

vq_embed_dim (`int`, *opcional*) : Dimensión oculta de los vectores del libro de códigos en el VQ-VAE.

scaling_factor (`float`, *opcional*, valor predeterminado `0.18215`) : La desviación estándar por componente del espacio latente entrenado, calculada utilizando el primer lote del conjunto de entrenamiento. Esto se utiliza para escalar el espacio latente para que tenga varianza unitaria al entrenar el modelo de difusión. Los latentes se escalan con la fórmula `z = z * scaling_factor` antes de ser pasados al modelo de difusión. Al decodificar, los latentes se escalan de vuelta a la escala original con la fórmula: `z = 1 / scaling_factor * z`. Para más detalles, consulte las secciones 4.3.2 y D.1 del artículo [High-Resolution Image Synthesis with Latent Diffusion Models](https://huggingface.co/papers/2112.10752).

norm_type (`str`, *opcional*, por defecto `"group"`) : Tipo de capa de normalización a utilizar. Puede ser `"group"` o `"spatial"`.

Un modelo VQ-VAE para decodificar representaciones latentes.

Este modelo hereda de [ModelMixin](/docs/diffusers/v0.43.0/es/api/models/overview#diffusers.ModelMixin). Consulta la documentación de la superclase para sus métodos genéricos implementados para todos los modelos (como la descarga o el guardado).

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

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

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

**Parámetros:**

sample (`torch.Tensor`) : Muestra de entrada.

return_dict (`bool`, *opcional*, por defecto `True`) : Indica si se debe devolver un [models.autoencoders.vq_model.VQEncoderOutput](/docs/diffusers/v0.43.0/es/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) en lugar de una tupla simple.

**Devuelve:** [VQEncoderOutput](/docs/diffusers/v0.43.0/es/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) o `tuple`

Si return_dict es True, se devuelve un [VQEncoderOutput](/docs/diffusers/v0.43.0/es/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput); en caso contrario, se devuelve una `tuple` simple.

El método forward de [VQModel](/docs/diffusers/v0.43.0/es/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)
```

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

**Parámetros:**

latents (`torch.Tensor` de forma `(batch_size, num_channels, height, width)`) : La muestra de salida codificada de la última capa del modelo.

Salida del método de codificación de VQModel.

