Diffusers documentation
AutoencoderKLMiniMaxH3
AutoencoderKLMiniMaxH3
O modelo de autoencoder variacional de vídeo (VAE) com perda KL usado em MiniMax-H3 pela MiniMax. Ele combina um codificador de CNN 3D causal com um decodificador ViT não causal e comprime 16x espacialmente e 4x temporalmente.
Três coisas o diferenciam da maioria dos autoencoders na biblioteca:
- Os latentes são normalizados por canal. Não há
scaling_factor: um pipeline codifica com(latent - latents_mean) / latents_stde decodifica comlatent * latents_std + latents_mean. - A convenção de pixels é RGB normalizado pelo ImageNet sobre um intervalo base de
[0, 1], e não o intervalo usual de[-1, 1].encodeespera(pixel - imagenet_mean) / imagenet_stdedecoderetorna valores nesse mesmo espaço, de modo que um pipeline aplicasample * imagenet_std + imagenet_meane limita para[0, 1]antes do pós-processamento. - O tileamento espacial está ativado por padrão. O MiniMax-H3 foi lançado com o tileamento ativado tanto para codificação quanto para decodificação, e os quadros liberados são os de tiles mesclados, portanto desativá-lo altera a saída. Use
enable_tilingpara alterar a geometria dos tiles edisable_tilingpara desativá-lo.
A geometria temporal é fixada por clip_length (17 quadros de pixels por bloco do codificador) e token_drop (3 quadros latentes finais descartados por codificação), de modo que 17 * n + 5 quadros de pixels correspondem a 5 * n + 2 quadros latentes.
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
classe 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) )
Um modelo VAE com um codificador de CNN 3D causal e um decodificador ViT não causal, usado no MiniMax-H3.
Este modelo herda de ModelMixin. Consulte a documentação da superclasse para seus métodos genéricos implementados para todos os modelos (como download ou salvamento).
Os latentes são normalizados com latents_mean / latents_std por canal, em vez de um scaling_factor; um pipeline
codifica com (latent - latents_mean) / latents_std e decodifica com latent * latents_std + latents_mean.
A convenção de pixels é RGB normalizado pelo ImageNet sobre uma faixa base de [0, 1], e não a usual [-1, 1]: encode espera (pixel - imagenet_mean) / imagenet_std e decode retorna valores nesse mesmo espaço, portanto um pipeline precisa aplicar sample * imagenet_std + imagenet_mean (média (0.485, 0.456, 0.406), desvio padrão (0.229, 0.224, 0.225)) e limitar para [0, 1] antes do pós-processamento.
A geometria temporal é fixada por clip_length (17 quadros de pixels por bloco do codificador) e token_drop (3 quadros latentes finais descartados por codificação): 17 * n + 5 quadros de pixels mapeiam para 5 * n + 2 quadros latentes.
Diferente da maioria dos autoencoders da biblioteca, o tiling espacial está ativado por padrão: o MiniMax-H3 foi lançado com o tiling habilitado tanto para codificação quanto para decodificação, e os quadros publicados são os de tiles mesclados, portanto, desativar o tiling altera a saída. Use enable_tiling para alterar a geometria dos tiles e disable_tiling para desativá-lo.
encode
< source >( x: Tensorreturn_dict: bool = True )
Parâmetros
- x (
torch.Tensor) — Lote de entrada de vídeos, com forma(batch_size, in_channels, num_frames, height, width). - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar um AutoencoderKLOutput em vez de uma tupla simples.
Codifique um lote de vídeos em latentes.
decode
< source >( z: Tensorreturn_dict: bool = True ) → DecoderOutput or tuple
Parâmetros
- z (
torch.Tensor) — Lote de entrada de vídeos latentes, com forma(batch_size, latent_channels, num_latent_frames, height, width). - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar um DecoderOutput em vez de uma tupla simples.
Retorna
DecoderOutput ou tuple
Os vídeos decodificados, com forma (batch_size, out_channels, num_frames, height, width).
Decodifique um lote de vídeos latentes.
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 )
Parâmetros
- tile_sample_min_height (
int, opcional) — A altura da tile no espaço de pixels. Quadros mais altos que isso são divididos ao longo da dimensão de altura. - tile_sample_min_width (
int, opcional) — A largura do tile no espaço de pixels. Quadros mais largos que esse valor são divididos ao longo da dimensão de largura. - tile_sample_min_overlap_height (
int, opcional) — A sobreposição mínima, em pixels, entre duas tiles verticais consecutivas. - tile_sample_min_overlap_width (
int, opcional) — A sobreposição mínima, em pixels, entre duas tiles horizontais consecutivas.
Ativa a codificação/decodificação em blocos (tiled) do VAE. Quando essa opção está ativada, o VAE divide os quadros em blocos, codifica ou decodifica cada bloco separadamente e mescla linearmente as sobreposições novamente. Isso reduz o requisito de memória e permite o processamento de quadros maiores.
forward
< source >( sample: Tensorsample_posterior: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → DecoderOutput or tuple
Parâmetros
- sample (
torch.Tensor) — Lote de entrada de vídeos, forma(batch_size, in_channels, num_frames, height, width). - sample_posterior (
bool, opcional, padrãoFalse) — Se deve amostrar a posterior em vez de tomar seu modo. - generator (
torch.Generator, opcional) — Gerador usado quandosample_posterior=True. - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar um DecoderOutput em vez de uma tupla simples.
Retorna
DecoderOutput ou tuple
Os vídeos de ida e volta, com forma (batch_size, out_channels, num_frames, height, width).
Codifique e depois decodifique um lote de vídeos.