Diffusers documentation
AutoencoderKLMiniMaxH3
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
< 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) )
Модель 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
< 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, необязательный) — Минимальное перекрытие в пикселях между двумя последовательными вертикальными тайлами. - tile_sample_min_overlap_width (
int, необязательный) — Минимальное перекрытие в пикселях между двумя последовательными горизонтальными тайлами.
Включает тайловое кодирование/декодирование 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. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать DecoderOutput вместо обычного кортежа.
Возвращает
DecoderOutput или tuple
Видео после обратного преобразования, форма (batch_size, out_channels, num_frames, height, width).
Кодируйте, а затем декодируйте пакет видео.