Diffusers documentation
AutoencoderKLMiniMaxH3
AutoencoderKLMiniMaxH3
Mô hình video variational autoencoder (VAE) có KL loss được sử dụng trong 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_stdvà giải mã bằnglatent * latents_std + latents_mean. - The pixel convention is ImageNet-normalized RGB over a
[0, 1]base range, not the usual[-1, 1].encodeexpects(pixel - imagenet_mean) / imagenet_stdanddecodereturns values in that same space, so a pipeline appliessample * imagenet_std + imagenet_meanand clamps to[0, 1]before postprocessing. - 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.
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
lớp diffusers.AutoencoderKLMiniMaxH3
< source >( in_channels: int = 3out_channels: int = 3latent_channels: int = 24block_out_channels: tuple = (128, 256, 256, 512, 512, 1024)layers_per_block: int = 2spatial_downsample_factors: tuple = (2, 2, 2, 2, 1, 1)temporal_downsample_factors: tuple = (1, 2, 2, 1, 1, 1)norm_num_groups: int = 32norm_eps: float = 1e-06spatial_padding_mode: str = 'reflect'decoder_num_layers: int = 36decoder_num_attention_heads: int = 32decoder_attention_head_dim: int = 64decoder_num_register_tokens: int = 4decoder_ffn_mult: int = 4decoder_rope_theta: float = 100.0decoder_rope_dim_ratio: float = 0.75decoder_norm_eps: float = 1e-05clip_length: int = 17token_drop: int = 3latents_mean: tuple = (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 = (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) )
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.
Mô hình này kế thừa từ 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 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 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à
chặn (clamp) về [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
< source >( x: Tensorreturn_dict: bool = True )
Tham số
- x (
torch.Tensor) — Batch đầu vào của 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 thay vì một tuple thông thường hay không.
Mã hóa một lô video thành các biến ẩn.
decode
< source >( z: Tensorreturn_dict: bool = True ) → DecoderOutput or tuple
Tham số
- z (
torch.Tensor) — Batch đầu vào của các video latent, shape(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 thay vì một tuple thông thường hay không.
Trả về
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
< source >( tile_sample_min_height: int | None = Nonetile_sample_min_width: int | None = Nonetile_sample_min_overlap_height: int | None = Nonetile_sample_min_overlap_width: int | None = None )
Tham số
- tile_sample_min_height (
int, tùy chọn) — 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, tùy chọn) — Chiều rộng của tile trong không gian pixel. Các khung hình có chiều rộng lớn hơn giá trị này sẽ được chia dọc theo chiều rộng. - tile_sample_min_overlap_height (
int, tùy chọn) — Độ chồng lấp 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, tùy chọn) — Độ chồng lấp 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
< source >( sample: Tensorsample_posterior: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → DecoderOutput or tuple
Tham số
- sample (
torch.Tensor) — Batch đầu vào của các video, shape(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 khisample_posterior=True. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một DecoderOutput thay vì một tuple thông thường hay không.
Trả về
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.