Diffusers documentation

AutoencoderKLMiniMaxH3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AutoencoderKLMiniMaxH3

MiniMax 的 MiniMax-H3 中使用的带 KL 散度损失的视频变分自编码器(VAE)模型。该模型将因果 3D CNN 编码器与非因果 ViT 解码器相结合,在空间维度上压缩 16 倍,在时间维度上压缩 4 倍。

它与该库中大多数自编码器有三点不同:

  • 潜变量按通道进行归一化。 不存在 scaling_factor:流水线使用 (latent - latents_mean) / latents_std 进行编码,并使用 latent * latents_std + latents_mean 进行解码。
  • 像素约定是基于 [0, 1] 基本范围的 ImageNet 归一化 RGB,而非通常的 [-1, 1]。encode 期望输入为 (pixel - imagenet_mean) / imagenet_std,而 decode 返回的值也位于同一空间,因此流水线会应用 sample * imagenet_std + imagenet_mean,并在后处理之前将其截断到 [0, 1]。
  • 空间平铺默认开启。MiniMax-H3 发布时,编码和解码均启用了平铺,且发布的帧为混合平铺帧,因此关闭平铺会改变输出。请使用 enable_tiling 来更改平铺几何结构,并使用 disable_tiling 将其关闭。

时间几何结构由 clip_length(每个编码器块 17 个像素帧)和 token_drop(每次编码丢弃 3 个尾部潜在帧)固定,因此 17 * n + 5 个像素帧对应 5 * n + 2 个潜在帧。

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

< >

( 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) )

一种采用因果 3D CNN 编码器和非因果 ViT 解码器的 VAE 模型,用于 MiniMax-H3。

该模型继承自 ModelMixin。请查阅其父类文档,了解为所有模型实现的通用方法(例如下载或保存)。

潜变量使用逐通道的 latents_mean / latents_std 进行归一化,而不是使用 scaling_factor;流水线通过 (latent - latents_mean) / latents_std 进行编码,并通过 latent * latents_std + latents_mean 进行解码。

像素约定为基于 [0, 1] 基础范围的 ImageNet 归一化 RGB,而非通常的 [-1, 1]:encode 期望输入为 (pixel - imagenet_mean) / imagenet_std,而 decode 返回的值也位于同一空间,因此流水线需要应用 sample * imagenet_std + imagenet_mean(均值 (0.485, 0.456, 0.406),标准差 (0.229, 0.224, 0.225)),并在后处理前将其截断到 [0, 1]。

时间几何结构由 clip_length(每个编码器块 17 个像素帧)和 token_drop(每次编码丢弃 3 个尾部潜在帧)固定:17 * n + 5 个像素帧映射为 5 * n + 2 个潜在帧。

与库中的大多数自编码器不同,空间分块功能默认开启:MiniMax-H3 发布时,编码和解码均启用了分块,且发布的帧为混合分块帧,因此禁用分块会改变输出。使用 enable_tiling 可更改分块几何结构,使用 disable_tiling 可将其关闭。

encode

< >

( x: Tensorreturn_dict: bool = True )

参数

  • x (torch.Tensor) — 输入的视频批次,形状为 (batch_size, in_channels, num_frames, height, width)。
  • return_dict (bool,可选,默认为 True) — 是否返回 AutoencoderKLOutput 而不是普通的元组。

将一批视频编码为潜在表示。

decode

< >

( z: Tensorreturn_dict: bool = True ) → DecoderOutput or tuple

参数

  • z (torch.Tensor) — 输入的潜在视频批次,形状为 (batch_size, latent_channels, num_latent_frames, height, width)。
  • return_dict (bool,可选,默认为 True) — 是否返回 DecoderOutput 而不是普通元组。

返回值

DecoderOutput 或 tuple

解码后的视频,形状为 (batch_size, out_channels, num_frames, height, width)。

解码一批潜在视频。

enable_tiling

< >

( 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 )

参数

  • tile_sample_min_height (int, 可选) — 像素空间中的瓦片高度。高度超过此值的帧将沿高度维度进行分割。
  • tile_sample_min_width (int, 可选) — 像素空间中的瓦片宽度。宽度超过此值的帧将沿宽度维度进行分割。
  • tile_sample_min_overlap_height (int, 可选) — 两个连续垂直瓦片之间的最小重叠像素数。
  • tile_sample_min_overlap_width (int, 可选) — 两个相邻水平瓦片之间的最小重叠宽度,以像素为单位。

启用分块 VAE 编码/解码。启用此选项后,VAE 会将帧分割为多个块,分别对每个块进行编码或解码,并将重叠部分线性混合以重新组合。这可以降低内存需求,从而支持处理更大的帧。

forward

< >

( sample: Tensorsample_posterior: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → DecoderOutput or tuple

参数

  • sample (torch.Tensor) — 输入的视频批次,形状为 (batch_size, in_channels, num_frames, height, width)。
  • sample_posterior (bool,可选,默认为 False) — 是否对后验分布进行采样,而不是取其众数。
  • generator (torch.Generator,可选) — 当 sample_posterior=True 时使用的生成器。
  • return_dict (bool,可选,默认为 True) — 是否返回 DecoderOutput 而不是普通元组。

返回值

DecoderOutput 或 tuple

往返处理后的视频,形状为 (batch_size, out_channels, num_frames, height, width)。

对一批视频进行编码,然后解码。

Update on GitHub