# AutoencoderKLMiniMaxH3

Mô hình video variational autoencoder (VAE) có KL loss được sử dụng trong [MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) của MiniMax. Nó kết hợp bộ mã hóa 3D CNN nhân quả với bộ giải mã ViT không nhân quả và nén 16 lần theo không gian và 4 lần theo thời gian.

Ba điểm khác biệt của nó so với hầu hết các autoencoder trong thư viện:

- **Latents được chuẩn hóa theo từng kênh.** Không có `scaling_factor`: một pipeline mã hóa bằng `(latent - latents_mean) / latents_std` và giải mã bằng `latent * latents_std + latents_mean`.
- Quy ước pixel là **RGB được chuẩn hóa theo ImageNet trên khoảng cơ sở `[0, 1]`**, không phải `[-1, 1]` thông thường. `encode` kỳ vọng `(pixel - imagenet_mean) / imagenet_std` và `decode` trả về các giá trị trong cùng không gian đó, do đó một pipeline sẽ áp dụng `sample * imagenet_std + imagenet_mean` và kẹp vào `[0, 1]` trước khi xử lý hậu kỳ.
- **Chế độ chia ô không gian được bật theo mặc định.** MiniMax-H3 được phát hành với chế độ chia ô được bật cho cả mã hóa và giải mã, và các khung hình được phát hành là các khung hình đã trộn ô, do đó việc tắt chế độ này sẽ làm thay đổi đầu ra. Sử dụng `enable_tiling` để thay đổi hình học của ô và `disable_tiling` để tắt chế độ này.

Hình học thời gian được cố định bởi `clip_length` (17 khung hình pixel cho mỗi khối mã hóa) và `token_drop` (3 khung hình tiềm ẩn cuối bị loại bỏ cho mỗi lần mã hóa), do đó `17 * n + 5` khung hình pixel được ánh xạ thành `5 * n + 2` khung hình tiềm ẩn.

```python
import torch
from diffusers import AutoencoderKLMiniMaxH3

vae = AutoencoderKLMiniMaxH3.from_pretrained(
    "MiniMaxAI/MiniMax-H3", subfolder="vae", dtype=torch.float32
).to("cuda")  # or "mps", "xpu", "cpu"
```

## AutoencoderKLMiniMaxH3[[diffusers.AutoencoderKLMiniMaxH3]]

#### diffusers.AutoencoderKLMiniMaxH3[[diffusers.AutoencoderKLMiniMaxH3]]

```python
diffusers.AutoencoderKLMiniMaxH3(in_channels: int = 3, out_channels: int = 3, latent_channels: int = 24, block_out_channels: tuple[int, ...] = (128, 256, 256, 512, 512, 1024), layers_per_block: int = 2, spatial_downsample_factors: tuple[int, ...] = (2, 2, 2, 2, 1, 1), temporal_downsample_factors: tuple[int, ...] = (1, 2, 2, 1, 1, 1), norm_num_groups: int = 32, norm_eps: float = 1e-06, spatial_padding_mode: str = 'reflect', decoder_num_layers: int = 36, decoder_num_attention_heads: int = 32, decoder_attention_head_dim: int = 64, decoder_num_register_tokens: int = 4, decoder_ffn_mult: int = 4, decoder_rope_theta: float = 100.0, decoder_rope_dim_ratio: float = 0.75, decoder_norm_eps: float = 1e-05, clip_length: int = 17, token_drop: int = 3, latents_mean: tuple[float, ...] = (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), latents_std: tuple[float, ...] = (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0))
```

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

Một mô hình VAE với bộ mã hóa CNN 3D nhân quả và bộ giải mã ViT không nhân quả, được sử dụng trong [MiniMax-H3](https://huggingface.co/MiniMaxAI).

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ữ).

Latents được chuẩn hóa bằng `latents_mean` / `latents_std` cho từng kênh thay vì `scaling_factor`; một pipeline mã hóa bằng `(latent - latents_mean) / latents_std` và giải mã bằng `latent * latents_std + latents_mean`.

Quy ước pixel là RGB được chuẩn hóa theo ImageNet trên dải cơ sở `[0, 1]`, không phải `[-1, 1]` thông thường: `encode` kỳ vọng `(pixel - imagenet_mean) / imagenet_std` và `decode` trả về các giá trị trong cùng không gian đó, do đó một pipeline phải áp dụng `sample * imagenet_std + imagenet_mean` (mean `(0.485, 0.456, 0.406)`, std `(0.229, 0.224, 0.225)`) và kẹp vào `[0, 1]` trước khi xử lý hậu kỳ.

Hình học thời gian được cố định bởi `clip_length` (17 khung hình pixel cho mỗi khối mã hóa) và `token_drop` (3 khung hình tiềm ẩn cuối bị loại bỏ cho mỗi lần mã hóa): `17 * n + 5` khung hình pixel được ánh xạ thành `5 * n + 2` khung hình tiềm ẩn.

Khác với hầu hết các autoencoder trong thư viện, spatial tiling được **bật theo mặc định**: MiniMax-H3 được phát hành với tiling được bật cho cả encoding và decoding, và các frame được phát hành là các frame blended-tile, do đó việc tắt tiling sẽ làm thay đổi đầu ra. Sử dụng `enable_tiling` để thay đổi hình học của tile, `disable_tiling` để tắt tính năng này.

#### encode[[diffusers.AutoencoderKLMiniMaxH3.encode]]

```python
encode(x: Tensor, return_dict: bool = True)
```

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

**Tham số:**

x (`torch.Tensor`) : Lô đầu vào các video, hình dạng `(batch_size, in_channels, num_frames, height, width)`.

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

**Trả về:**

Phân phối ẩn của các video đã được mã hóa. Lưu ý rằng MiniMax-H3 sẽ chuẩn hóa các ẩn đã lấy mẫu bằng `latents_mean` / `latents_std` sau đó.

Mã hóa một lô video thành các biến ẩn.

#### decode[[diffusers.AutoencoderKLMiniMaxH3.decode]]

```python
decode(z: Tensor, return_dict: bool = True)
```

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

**Tham số:**

z (`torch.Tensor`) : Lô đầu vào của các video tiềm ẩn, hình dạng `(batch_size, latent_channels, num_latent_frames, height, width)`.

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

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

Các video đã giải mã, có hình dạng `(batch_size, out_channels, num_frames, height, width)`.

Giải mã một lô video tiềm ẩn.

#### enable_tiling[[diffusers.AutoencoderKLMiniMaxH3.enable_tiling]]

```python
enable_tiling(tile_sample_min_height: int | None = None, tile_sample_min_width: int | None = None, tile_sample_min_overlap_height: int | None = None, tile_sample_min_overlap_width: int | None = None)
```

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

**Tham số:**

tile_sample_min_height (`int`, *optional*) : Chiều cao của tile trong không gian pixel. Các khung hình cao hơn giá trị này sẽ được chia dọc theo chiều cao.

tile_sample_min_width (`int`, *optional*) : Độ rộng của tile trong không gian pixel. Các khung hình rộng hơn giá trị này sẽ được chia dọc theo chiều rộng.

tile_sample_min_overlap_height (`int`, *optional*) : Độ chồng lấn tối thiểu, tính bằng pixel, giữa hai lát cắt dọc liên tiếp.

tile_sample_min_overlap_width (`int`, *optional*) : Độ chồng lấn tối thiểu, tính bằng pixel, giữa hai lát cắt ngang liên tiếp.

Bật mã hóa/giải mã VAE dạng gạch. Khi tùy chọn này được bật, VAE sẽ chia các khung hình thành các gạch, mã hóa hoặc giải mã từng gạch riêng biệt và trộn tuyến tính các phần chồng lấn lại với nhau. Điều này làm giảm yêu cầu về bộ nhớ và cho phép xử lý các khung hình lớn hơn.

#### forward[[diffusers.AutoencoderKLMiniMaxH3.forward]]

```python
forward(sample: Tensor, sample_posterior: bool = False, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

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

**Tham số:**

sample (`torch.Tensor`) : Lô đầu vào các video, hình dạng `(batch_size, in_channels, num_frames, height, width)`.

sample_posterior (`bool`, *tùy chọn*, mặc định là `False`) : Có lấy mẫu từ phân phối hậu nghiệm thay vì lấy mode của nó hay không.

generator (`torch.Generator`, *tùy chọn*) : Generator được sử dụng khi `sample_posterior=True`.

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

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

Các video sau khi thực hiện quá trình round-trip, có hình dạng `(batch_size, out_channels, num_frames, height, width)`.

Mã hóa rồi giải mã một lô video.

