Diffusers documentation

AutoencoderKLMiniMaxH3

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AutoencoderKLMiniMaxH3

Модель вариационного автоэнкодера (VAE) для видео с потерей KL, используемая в MiniMax-H3 от MiniMax. Она сочетает каузальный 3D CNN-энкодер с некаузальным ViT-декодером и сжимает данные в 16 раз по пространственному и в 4 раза по временному измерениям.

Три особенности отличают его от большинства автоэнкодеров в библиотеке:

  • Латенты нормализуются по каналам. Параметра scaling_factor нет: пайплайн кодирует с помощью (latent - latents_mean) / latents_std и декодирует с помощью latent * latents_std + latents_mean.
  • Пиксельная конвенция — это нормализованные по ImageNet RGB-значения в базовом диапазоне [0, 1], а не стандартный [-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[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) )

Модель VAE с каузальным 3D CNN-энкодером и некаузальным ViT-декодером, используемая в MiniMax-H3.

Эта модель наследуется от ModelMixin. См. документацию суперкласса для его универсальных методов, реализованных для всех моделей (например, загрузка или сохранение).

Латенты нормализуются с помощью latents_mean / latents_std для каждого канала, а не scaling_factor; конвейер кодирует с помощью (latent - latents_mean) / latents_std и декодирует с помощью latent * latents_std + latents_mean.

Пиксельная конвенция — это RGB, нормализованный по ImageNet, в базовом диапазоне [0, 1], а не в привычном [-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