Diffusers documentation
AutoencoderKLMiniMaxH3
AutoencoderKLMiniMaxH3
Model video variational autoencoder (VAE) dengan kerugian KL yang digunakan dalam MiniMax-H3 oleh MiniMax. Model ini menggabungkan encoder 3D CNN kausal dengan decoder ViT non-kausal dan melakukan kompresi 16x secara spasial serta 4x secara temporal.
Tiga hal yang membedakannya dari sebagian besar autoencoder di pustaka:
- Latents dinormalisasi per channel. Tidak ada
scaling_factor: sebuah pipeline meng-encode dengan(latent - latents_mean) / latents_stddan meng-decode denganlatent * latents_std + latents_mean. - Konvensi piksel adalah RGB yang dinormalisasi ImageNet pada rentang dasar
[0, 1], bukan[-1, 1]yang umum.encodemengharapkan(pixel - imagenet_mean) / imagenet_stddandecodemengembalikan nilai dalam ruang yang sama, sehingga pipeline menerapkansample * imagenet_std + imagenet_meandan membatasi ke[0, 1]sebelum pascapemrosesan. - Pengecoran spasial aktif secara bawaan. MiniMax-H3 dirilis dengan pengecoran diaktifkan untuk kedua proses enkoding dan dekoding, dan frame yang dirilis adalah hasil pengecoran yang dicampur, sehingga mematikannya akan mengubah output. Gunakan
enable_tilinguntuk mengubah geometri cor dandisable_tilinguntuk mematikannya.
Geometri temporal ditetapkan oleh clip_length (17 bingkai piksel per chunk encoder) dan token_drop (3 bingkai laten akhir yang dibuang per encode), sehingga 17 * n + 5 bingkai piksel dipetakan ke 5 * n + 2 bingkai laten.
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
kelas diffusers.AutoencoderKLMiniMaxH3
< source >( in_channels: int = 3out_channels: int = 3latent_channels: int = 24block_out_channels: tuple[int, ...] = (128, 256, 256, 512, 512, 1024)layers_per_block: int = 2spatial_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 = 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[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) )
Model VAE dengan encoder CNN 3D kausal dan decoder ViT non-kausal, digunakan dalam MiniMax-H3.
Model ini mewarisi dari ModelMixin. Periksa dokumentasi kelas induk untuk metode generiknya yang diimplementasikan untuk semua model (seperti mengunduh atau menyimpan).
Latents dinormalisasi dengan latents_mean / latents_std per-channel, bukan dengan scaling_factor; sebuah pipeline
meng-encode dengan (latent - latents_mean) / latents_std dan meng-decode dengan latent * latents_std + latents_mean.
Konvensi piksel adalah RGB yang dinormalisasi ImageNet di atas rentang dasar [0, 1], bukan [-1, 1] yang biasa: encode mengharapkan (pixel - imagenet_mean) / imagenet_std dan decode mengembalikan nilai di ruang yang sama, sehingga pipeline harus menerapkan sample * imagenet_std + imagenet_mean (rata-rata (0.485, 0.456, 0.406), standar deviasi (0.229, 0.224, 0.225)) dan
membatasi ke [0, 1] sebelum pascapemrosesan.
Geometri temporal ditetapkan oleh clip_length (17 bingkai piksel per chunk encoder) dan token_drop (3 bingkai laten akhir yang dibuang per encode): 17 * n + 5 bingkai piksel dipetakan ke 5 * n + 2 bingkai laten.
Berbeda dengan sebagian besar autoencoder di pustaka ini, penataan spasial (spatial tiling) aktif secara bawaan: MiniMax-H3 dirilis dengan tiling diaktifkan untuk encoding dan decoding, dan frame yang dirilis adalah hasil blended-tile, sehingga menonaktifkan tiling akan mengubah output. Gunakan enable_tiling untuk mengubah geometri tile, dan disable_tiling untuk menonaktifkannya.
encode
< source >( x: Tensorreturn_dict: bool = True )
Parameter
- x (
torch.Tensor) — Batch input video, bentuk(batch_size, in_channels, num_frames, height, width). - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan AutoencoderKLOutput alih-alih tuple biasa.
Enkodekan batch video menjadi latents.
decode
< source >( z: Tensorreturn_dict: bool = True ) → DecoderOutput or tuple
Parameter
- z (
torch.Tensor) — Batch input video laten, bentuk(batch_size, latent_channels, num_latent_frames, height, width). - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan DecoderOutput alih-alih tuple biasa.
Mengembalikan
DecoderOutput atau tuple
Video yang didekode, bentuk (batch_size, out_channels, num_frames, height, width).
Decode batch video laten.
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 )
Parameter
- tile_sample_min_height (
int, opsional) — Tinggi tile dalam ruang piksel. Frame yang lebih tinggi dari nilai ini akan dipecah sepanjang dimensi tinggi. - tile_sample_min_width (
int, opsional) — Lebar tile dalam ruang piksel. Frame yang lebih lebar dari nilai ini akan dipecah sepanjang dimensi lebar. - tile_sample_min_overlap_height (
int, opsional) — Tumpang tindih minimum, dalam piksel, antara dua tile vertikal yang berurutan. - tile_sample_min_overlap_width (
int, opsional) — Tumpang tindih minimum, dalam piksel, antara dua tile horizontal yang berurutan.
Aktifkan encoding/decoding VAE bertile. Ketika opsi ini diaktifkan, VAE membagi frame menjadi tile, meng-encode atau meng-decode setiap tile secara terpisah, dan mencampur kembali bagian yang tumpang tindih secara linear. Hal ini menurunkan kebutuhan memori dan memungkinkan pemrosesan frame yang lebih besar.
forward
< source >( sample: Tensorsample_posterior: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → DecoderOutput or tuple
Parameter
- sample (
torch.Tensor) — Batch input video, bentuk(batch_size, in_channels, num_frames, height, width). - sample_posterior (
bool, opsional, defaultFalse) — Apakah akan mengambil sampel posterior alih-alih mengambil modusnya. - generator (
torch.Generator, opsional) — Generator yang digunakan saatsample_posterior=True. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan DecoderOutput alih-alih tuple biasa.
Mengembalikan
DecoderOutput atau tuple
Video yang telah diproses bolak-balik, bentuk (batch_size, out_channels, num_frames, height, width).
Encode lalu decode sebuah batch video.