Diffusers documentation
AutoencoderKLMiniMaxH3
AutoencoderKLMiniMaxH3
MiniMax による MiniMax-H3 で使用される、KL 損失付きの動画変分オートエンコーダ (VAE) モデルです。因果的な 3D CNN エンコーダと非因果的な ViT デコーダを組み合わせ、空間方向に 16 倍、時間方向に 4 倍に圧縮します。
このモデルをライブラリ内の他の大多数のオートエンコーダーと区別する3つの点があります。
- Latents はチャンネルごとに正規化されます。
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
class 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) )
MiniMax-H3で使用される、因果的な3D CNNエンコーダーと非因果的なViTデコーダーを備えたVAEモデル。
このモデルは ModelMixin を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存など)については、スーパークラスのドキュメントを参照してください。
Latents は scaling_factor ではなく、チャンネルごとの latents_mean / latents_std で正規化されます。パイプラインは (latent - latents_mean) / latents_std でエンコードし、latent * latents_std + latents_mean でデコードします。
ピクセルの規約は、通常の[-1, 1]ではなく、[0, 1]を基準範囲とするImageNet正規化済みRGBです。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
< source >( x: Tensorreturn_dict: bool = True )
パラメータ
- x (
torch.Tensor) — 入力バッチの動画。形状は(batch_size, in_channels, num_frames, height, width)です。 - return_dict (
bool、省略可、デフォルトはTrue) — プレーンなタプルではなく AutoencoderKLOutput を返すかどうか。
バッチの動画を潜在変数にエンコードします。
decode
< source >( 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
< 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 )
パラメータ
- tile_sample_min_height (
int、省略可) — ピクセル空間におけるタイルの高さです。この値より高いフレームは、高さ方向に分割されます。 - tile_sample_min_width (
int, 省略可) — ピクセル空間におけるタイルの幅です。この幅より広いフレームは、幅方向に分割されます。 - tile_sample_min_overlap_height (
int, 省略可) — 縦方向の2つの連続するタイル間の最小重複量(ピクセル単位)。 - tile_sample_min_overlap_width (
int, 省略可) — 2つの連続する水平タイル間の最小重複幅(ピクセル単位)。
タイル化されたVAEエンコード/デコードを有効にします。このオプションを有効にすると、VAEはフレームをタイルに分割し、各タイルを個別にエンコードまたはデコードした上で、重複部分を線形にブレンドして再結合します。これによりメモリ要件が低減され、より大きなフレームの処理が可能になります。
forward
< source >( 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の場合に使用される Generator。 - return_dict (
bool、任意、デフォルトはTrue) — プレーンなタプルではなく DecoderOutput を返すかどうか。
戻り値
DecoderOutput または tuple
ラウンドトリップされた動画、形状は(batch_size, out_channels, num_frames, height, width)です。
バッチの動画をエンコードしてからデコードします。