# AutoencoderKLPH3Image

Изображение VAE для [P-H3-Image](https://huggingface.co/PrunaAI/P-H3-Image) от Pruna AI. Используется энкодер и латентное пространство [видео VAE](./autoencoderkl_minimax_h3) MiniMax-H3, а также декодер ViT, который декодирует один латентный кадр в изображение.

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

- Изображения передаются как однокадровые видео, `(batch_size, channels, 1, height, width)`, с пространственным сжатием 16x.
- Латенты нормализуются по каналам с помощью `latents_mean` / `latents_std`, а не `scaling_factor`.
- Пиксели — это RGB, нормализованные по ImageNet в диапазоне `[0, 1]`: `encode` ожидает `(pixel - imagenet_mean) / imagenet_std`, а `decode` возвращает значения в этом пространстве.
- Пространственная тайловая обработка включена по умолчанию, с тайлами размером 256 пикселей и перекрытием не менее 64 пикселей.

```python
import torch
from diffusers import AutoencoderKLPH3Image

vae = AutoencoderKLPH3Image.from_pretrained("PrunaAI/P-H3-Image", subfolder="vae", dtype=torch.bfloat16).to(
    "cuda"
)  # or "mps", "xpu", "cpu"
```

Выходные проекции энкодера и декодера остаются в float32 независимо от того, в каком `dtype` загружена модель.

## AutoencoderKLPH3Image[[diffusers.AutoencoderKLPH3Image]]

#### diffusers.AutoencoderKLPH3Image[[diffusers.AutoencoderKLPH3Image]]

```python
diffusers.AutoencoderKLPH3Image(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, 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_p_h3_image.py#L493)

VAE изображений для [P-H3-Image](https://huggingface.co/PrunaAI/P-H3-Image): VAE-энкодер и латентное пространство MiniMax-H3, с `PH3ImageViTDecoder`, который декодирует один латентный кадр.

Изображения передаются как однокадровые видео, `(batch_size, channels, 1, height, width)`. Как и в [AutoencoderKLMiniMaxH3](/docs/diffusers/main/ru/api/models/autoencoderkl_minimax_h3#diffusers.AutoencoderKLMiniMaxH3), пиксели представляют собой нормализованные по ImageNet RGB-значения в диапазоне `[0, 1]` (среднее `(0.485, 0.456, 0.406)`, стандартное отклонение `(0.229, 0.224, 0.225)`), а пространственная тайловая обработка включена по умолчанию.

#### encode[[diffusers.AutoencoderKLPH3Image.encode]]

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

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

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

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

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

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

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

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

#### decode[[diffusers.AutoencoderKLPH3Image.decode]]

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

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

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

z (`torch.Tensor`) : Входная батч латентов, форма `(batch_size, latent_channels, 1, 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, 1, height, width)`.

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

#### enable_tiling[[diffusers.AutoencoderKLPH3Image.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_p_h3_image.py#L575)

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

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.AutoencoderKLPH3Image.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_p_h3_image.py#L784)

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

sample (`torch.Tensor`) : Входная партия изображений в виде однокадровых видео, форма `(batch_size, in_channels, 1, 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, 1, height, width)`.

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

