# AutoencoderKLMiniMaxH3

Модель вариационного автоэнкодера (VAE) для видео с потерей KL, используемая в [MiniMax-H3](https://huggingface.co/MiniMaxAI/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` латентным кадрам.

```python
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]]

#### diffusers.AutoencoderKLMiniMaxH3[[diffusers.AutoencoderKLMiniMaxH3]]

```python
diffusers.AutoencoderKLMiniMaxH3(in_channels: int = 3, out_channels: int = 3, latent_channels: int = 24, block_out_channels: tuple[int, ...] = (128, 256, 256, 512, 512, 1024), layers_per_block: int = 2, spatial_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 = 32, norm_eps: float = 1e-06, spatial_padding_mode: str = 'reflect', decoder_num_layers: int = 36, decoder_num_attention_heads: int = 32, decoder_attention_head_dim: int = 64, decoder_num_register_tokens: int = 4, decoder_ffn_mult: int = 4, decoder_rope_theta: float = 100.0, decoder_rope_dim_ratio: float = 0.75, decoder_norm_eps: float = 1e-05, clip_length: int = 17, token_drop: int = 3, latents_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))
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L505)

Модель VAE с каузальным 3D CNN-энкодером и некаузальным ViT-декодером, используемая в [MiniMax-H3](https://huggingface.co/MiniMaxAI).

Эта модель наследуется от [ModelMixin](/docs/diffusers/main/ru/api/models/overview#diffusers.ModelMixin). См. документацию суперкласса для его универсальных методов, реализованных для всех моделей (например, загрузка или сохранение).

Латенты нормализуются с помощью `latents_mean` / `latents_std` для каждого канала, а не `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.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[[diffusers.AutoencoderKLMiniMaxH3.encode]]

```python
encode(x: Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L855)

**Параметры:**

x (`torch.Tensor`) : Входная партия видео, форма `(batch_size, in_channels, num_frames, height, width)`.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : следует ли возвращать [AutoencoderKLOutput](/docs/diffusers/main/ru/api/models/autoencoderkl_qwenimage#diffusers.models.modeling_outputs.AutoencoderKLOutput) вместо обычного кортежа.

**Возвращает:**

Скрытое распределение закодированных видео. Обратите внимание, что MiniMax-H3 впоследствии нормализует выбранные скрытые значения с помощью `latents_mean` / `latents_std`.

Кодирует пакет видео в латенты.

#### decode[[diffusers.AutoencoderKLMiniMaxH3.decode]]

```python
decode(z: Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L883)

**Параметры:**

z (`torch.Tensor`) : Входная батч латентных видео, форма `(batch_size, latent_channels, num_latent_frames, height, width)`.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Нужно ли возвращать [DecoderOutput](/docs/diffusers/main/ru/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) вместо обычного кортежа.

**Возвращает:** [DecoderOutput](/docs/diffusers/main/ru/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) или `tuple`

Декодированные видео, форма `(batch_size, out_channels, num_frames, height, width)`.

Декодировать пакет латентных видео.

#### enable_tiling[[diffusers.AutoencoderKLMiniMaxH3.enable_tiling]]

```python
enable_tiling(tile_sample_min_height: int | None = None, tile_sample_min_width: int | None = None, tile_sample_min_overlap_height: int | None = None, tile_sample_min_overlap_width: int | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L628)

**Параметры:**

tile_sample_min_height (`int`, *optional*) : Высота тайла в пиксельном пространстве. Кадры, высота которых превышает это значение, разбиваются по вертикали.

tile_sample_min_width (`int`, *optional*) : Ширина тайла в пиксельном пространстве. Кадры, шире этого значения, разбиваются по ширине.

tile_sample_min_overlap_height (`int`, *optional*) : Минимальное перекрытие, в пикселях, между двумя последовательными вертикальными тайлами.

tile_sample_min_overlap_width (`int`, *optional*) : Минимальное перекрытие, в пикселях, между двумя последовательными горизонтальными тайлами.

Включает тайловое кодирование/декодирование VAE. При включении этого параметра VAE разбивает кадры на тайлы, кодирует или декодирует каждый тайл отдельно и линейно смешивает области перекрытия обратно. Это снижает требования к памяти и позволяет обрабатывать кадры большего размера.

#### forward[[diffusers.AutoencoderKLMiniMaxH3.forward]]

```python
forward(sample: Tensor, sample_posterior: bool = False, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L908)

**Параметры:**

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](/docs/diffusers/main/ru/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) вместо обычного кортежа.

**Возвращает:** [DecoderOutput](/docs/diffusers/main/ru/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) или `tuple`

Видео после обратного преобразования, форма `(batch_size, out_channels, num_frames, height, width)`.

Кодируйте, а затем декодируйте пакет видео.

