# AutoencoderKLMiniMaxH3Image

Модель вариационного автоэнкодера (VAE) для изображений с потерей KL, используемая в [MiniMax-H3-Image](https://huggingface.co/MiniMaxAI/MiniMax-H3-Image) от MiniMax. Она сочетает причинный 3D CNN-энкодер из [AutoencoderKLMiniMaxH3](/docs/diffusers/v0.43.0/ru/api/models/autoencoderkl_minimax_h3#diffusers.AutoencoderKLMiniMaxH3), работающий с одиночным кадром, с 2D ViT-декодером и сжимает изображение в 16 раз по пространственному измерению. Методы `encode` и `decode` принимают и возвращают 4D тензоры изображений.

Она разделяет три соглашения с [AutoencoderKLMiniMaxH3](/docs/diffusers/v0.43.0/ru/api/models/autoencoderkl_minimax_h3#diffusers.AutoencoderKLMiniMaxH3):

- **Латенты нормализуются по каналам.** Параметра `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-Image был выпущен с включённой тайловой обработкой как на этапе кодирования, так и декодирования, а опубликованные изображения получены с использованием смешанных тайлов, поэтому отключение этой функции изменяет результат. Используйте `enable_tiling`, чтобы изменить геометрию тайлов, и `disable_tiling`, чтобы отключить тайловую обработку.

```python
import torch
from diffusers import AutoencoderKLMiniMaxH3Image

vae = AutoencoderKLMiniMaxH3Image.from_pretrained(
    "MiniMaxAI/MiniMax-H3-Image", subfolder="vae_diffusers", dtype=torch.float32
).to("cuda")  # or "mps", "xpu", "cpu"
```

## AutoencoderKLMiniMaxH3Image[[diffusers.AutoencoderKLMiniMaxH3Image]]

#### diffusers.AutoencoderKLMiniMaxH3Image[[diffusers.AutoencoderKLMiniMaxH3Image]]

```python
diffusers.AutoencoderKLMiniMaxH3Image(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 = 24, decoder_num_attention_heads: int = 16, 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.5, decoder_norm_eps: float = 1e-05, 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/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_image.py#L499)

Модель VAE с каузным 3D CNN-энкодером и некаузным 2D ViT-декодером, используемая в [MiniMax-H3-Image](https://huggingface.co/MiniMaxAI). Энкодер представляет собой видеоэнкодер MiniMax-H3, применяемый к одиночному кадру; декодер — это ViT, работающий только с изображениями.

Эта модель наследуется от [ModelMixin](/docs/diffusers/v0.43.0/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]` перед постобработкой.

В отличие от большинства автоэнкодеров в библиотеке, пространственная тайловая обработка **включена по умолчанию**: MiniMax-H3-Image был выпущен с включённой тайловой обработкой как для кодирования, так и для декодирования, а опубликованные изображения являются результатом смешивания тайлов, поэтому отключение тайловой обработки изменяет вывод. Используйте `enable_tiling`, чтобы изменить геометрию тайлов, и `disable_tiling`, чтобы отключить её.

#### encode[[diffusers.AutoencoderKLMiniMaxH3Image.encode]]

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

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_image.py#L758)

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

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

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

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

Скрытое распределение закодированных изображений, по скрытым переменным формы `(batch_size, latent_channels, height // spatial_compression_ratio, width // spatial_compression_ratio)`. Обратите внимание, что MiniMax-H3-Image нормализует выбранные скрытые переменные с помощью `latents_mean` / `latents_std` после этого.

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

#### decode[[diffusers.AutoencoderKLMiniMaxH3Image.decode]]

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

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_image.py#L786)

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

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

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

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

Декодированные изображения, форма `(batch_size, out_channels, height * spatial_compression_ratio, width * spatial_compression_ratio)`.

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

#### enable_tiling[[diffusers.AutoencoderKLMiniMaxH3Image.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/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_image.py#L608)

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

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.AutoencoderKLMiniMaxH3Image.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/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_image.py#L812)

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

sample (`torch.Tensor`) : Входная партия изображений, форма `(batch_size, in_channels, height, width)`.

sample_posterior (`bool`, *необязательный*, по умолчанию `False`) : Нужно ли выполнять выборку из апостериорного распределения вместо взятия его моды.

generator (`torch.Generator`, *необязательный*) : генератор, используемый при `sample_posterior=True`.

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

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

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

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

