# VQModel

Mô hình VQ-VAE được giới thiệu trong [Neural Discrete Representation Learning](https://huggingface.co/papers/1711.00937) của Aaron van den Oord, Oriol Vinyals và Koray Kavukcuoglu. Mô hình này được sử dụng trong 🤗 Diffusers để giải mã các biểu diễn ẩn thành hình ảnh. Khác với [AutoencoderKL](/docs/diffusers/main/vi/api/models/autoencoderkl#diffusers.AutoencoderKL), [VQModel](/docs/diffusers/main/vi/api/models/vq#diffusers.VQModel) hoạt động trong không gian ẩn đã được lượng tử hóa.

Tóm tắt từ bài báo là:

*Việc học các biểu diễn hữu ích mà không cần giám sát vẫn là một thách thức quan trọng trong học máy. Trong bài báo này, chúng tôi đề xuất một mô hình sinh đơn giản nhưng mạnh mẽ, có khả năng học các biểu diễn rời rạc như vậy. Mô hình của chúng tôi, Vector Quantised-Variational AutoEncoder (VQ-VAE), khác với VAE ở hai điểm chính: mạng encoder xuất ra các mã rời rạc thay vì liên tục; và phân phối tiên nghiệm được học thay vì tĩnh. Để học một biểu diễn ẩn rời rạc, chúng tôi tích hợp các ý tưởng từ lượng tử hóa vector (VQ). Việc sử dụng phương pháp VQ cho phép mô hình tránh được các vấn đề về "sụp đổ hậu nghiệm" -- nơi các ẩn bị bỏ qua khi được ghép với một bộ giải mã tự hồi quy mạnh mẽ -- thường được quan sát thấy trong khung VAE. Khi ghép các biểu diễn này với một phân phối tiên nghiệm tự hồi quy, mô hình có thể tạo ra các hình ảnh, video và giọng nói chất lượng cao, cũng như thực hiện chuyển đổi giọng nói chất lượng cao và học các âm vị không giám sát, cung cấp thêm bằng chứng về tính hữu dụng của các biểu diễn đã học.*

## 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)
```

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

**Tham số:**

in_channels (int, *tùy chọn*, mặc định là 3) : Số kênh trong ảnh đầu vào.

out_channels (int, *tuỳ chọn*, mặc định là 3) : Số lượng kênh trong đầu ra.

down_block_types (`tuple[str]`, *tùy chọn*, mặc định là `("DownEncoderBlock2D",)`) : tuple các kiểu khối downsample.

up_block_types (`tuple[str]`, *tùy chọn*, mặc định là `("UpDecoderBlock2D",)`) : tuple các kiểu khối upsample.

block_out_channels (`tuple[int]`, *tuỳ chọn*, mặc định là `(64,)`) : bộ tuple của số kênh đầu ra khối.

layers_per_block (`int`, *tuỳ chọn*, mặc định là `1`) : Số lượng lớp trong mỗi khối.

act_fn (`str`, *tùy chọn*, mặc định là `"silu"`) : Hàm kích hoạt cần sử dụng.

latent_channels (`int`, *tuỳ chọn*, mặc định là `3`) : Số kênh trong không gian tiềm ẩn.

sample_size (`int`, *tuỳ chọn*, mặc định là `32`) : Kích thước đầu vào mẫu.

num_vq_embeddings (`int`, *tuỳ chọn*, mặc định là `256`) : Số lượng vector trong codebook của VQ-VAE.

norm_num_groups (`int`, *tuỳ chọn*, mặc định là `32`) : Số nhóm cho các lớp chuẩn hóa.

vq_embed_dim (`int`, *tùy chọn*) : Kích thước chiều ẩn của các vector trong codebook của VQ-VAE.

scaling_factor (`float`, *tuỳ chọn*, mặc định là `0.18215`) : Độ lệch chuẩn từng thành phần của không gian tiềm ẩn đã được huấn luyện, được tính toán bằng cách sử dụng lô đầu tiên của tập huấn luyện. Giá trị này được dùng để chuẩn hóa không gian tiềm ẩn sao cho có phương sai bằng đơn vị khi huấn luyện mô hình khuếch tán. Các biến tiềm ẩn được chuẩn hóa theo công thức `z = z * scaling_factor` trước khi được truyền vào mô hình khuếch tán. Khi giải mã, các biến tiềm ẩn được đưa về thang đo ban đầu theo công thức: `z = 1 / scaling_factor * z`. Để biết thêm chi tiết, hãy tham khảo các mục 4.3.2 và D.1 của bài báo [High-Resolution Image Synthesis with Latent Diffusion Models](https://huggingface.co/papers/2112.10752).

norm_type (`str`, *tùy chọn*, mặc định là `"group"`) : Loại lớp chuẩn hóa cần sử dụng. Có thể là `"group"` hoặc `"spatial"`.

Một mô hình VQ-VAE để giải mã các biểu diễn ẩn.

Mô hình này kế thừa từ [ModelMixin](/docs/diffusers/main/vi/api/models/overview#diffusers.ModelMixin). Hãy xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các mô hình (chẳng hạn như tải xuống hoặc lưu trữ).

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

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

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

**Tham số:**

sample (`torch.Tensor`) : Mẫu đầu vào.

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một [models.autoencoders.vq_model.VQEncoderOutput](/docs/diffusers/main/vi/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) thay vì một tuple thông thường hay không.

**Trả về:** [VQEncoderOutput](/docs/diffusers/main/vi/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) hoặc `tuple`

Nếu return_dict là True, một [VQEncoderOutput](/docs/diffusers/main/vi/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) sẽ được trả về, ngược lại một `tuple` thông thường sẽ được trả về.

Phương thức forward của [VQModel](/docs/diffusers/main/vi/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)
```

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

**Tham số:**

latents (`torch.Tensor` có hình dạng `(batch_size, num_channels, height, width)`) : Mẫu đầu ra đã mã hóa từ lớp cuối cùng của mô hình.

Đầu ra của phương thức mã hóa của VQModel.

