# AutoencoderKLMiniMaxH3Audio

MiniMax의 [MiniMax-H3](https://huggingface.co/MiniMaxAI)에 사용되는 오디오 오토인코더입니다. 입력과 출력 모두 웨이브폼이며, 멜 프론트엔드나 별도의 보코더가 없습니다. DAC 계통의 스트라이드 컨볼루션 인코더, 디퓨전 잠재 변수 폭으로의 인과적 어텐션 투영, 그리고 BigVGAN 디코더로 구성됩니다.

인코더는 32 kHz에서 800샘플을 건너뛰며, 즉 초당 40개의 latent를 생성합니다. 따라서 `800 * n`샘플의 웨이브폼은 `n`개의 latent로 인코딩됩니다. 홉의 정수 배가 아닌 웨이브폼은 오른쪽으로 패딩됩니다.

causal-attention 투영은 attention dispatcher를 통해 처리되므로 `set_attention_backend`가 적용됩니다. 해당 마스크는 `is_causal=True`이며, `_native_npu`를 제외한 모든 백엔드가 이를 준수합니다. `_native_npu`의 커널은 causal 플래그를 받지 않습니다.

Autoencoder는 **mono**이며, 스칼라 `scaling_factor` 대신 `latents_mean` / `latents_std`로 채널별로 latents를 정규화합니다. MiniMax-H3는 stereo를 두 개의 *batch* 항목으로 처리하며, 항상 posterior mean(`latent_dist.mode()`)을 사용하고 샘플은 사용하지 않습니다.

```python
import torch
from diffusers import AutoencoderKLMiniMaxH3Audio

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

## AutoencoderKLMiniMaxH3Audio[[diffusers.AutoencoderKLMiniMaxH3Audio]]

#### diffusers.AutoencoderKLMiniMaxH3Audio[[diffusers.AutoencoderKLMiniMaxH3Audio]]

```python
diffusers.AutoencoderKLMiniMaxH3Audio(encoder_dim: int = 64, encoder_rates: tuple = (2, 4, 4, 5, 5), latent_dim: int = 2048, latent_channels: int = 32, num_attention_heads: int = 8, decoder_dim: int = 1024, decoder_rates: tuple = (5, 5, 2, 2, 2, 2, 2), decoder_kernel_sizes: tuple = (9, 9, 4, 4, 4, 4, 4), resblock_kernel_sizes: tuple = (3, 7, 11), resblock_dilation_sizes: tuple = ((1, 3, 5), (1, 3, 5), (1, 3, 5)), sampling_rate: int = 32000, latents_mean: list[float] | None = None, latents_std: list[float] | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_audio.py#L489)

**매개변수:**

encoder_dim (`int`, 기본값 `64`) : 인코더의 첫 번째 컨볼루션 채널 폭입니다. 다운샘플링 단계마다 두 배로 증가합니다.

encoder_rates (`tuple[int]`, 기본값 `(2, 4, 4, 5, 5)`) : 인코더 스트라이드. 이들의 곱(`800`)은 홉 길이, 즉 32 kHz에서 초당 40개의 잠재 변수(latent)를 의미합니다.

latent_dim (`int`, 기본값 `2048`) : latent projections 전후의 encoder trunk 및 decoder input의 폭.

latent_channels (`int`, 기본값 `32`) : Diffusion latent의 폭, 즉 `mean_proj` / `logs_proj` 출력 채널 수.

num_attention_heads (`int`, 기본값 `8`) : 인과적 어텐션 투영 `pre_block`의 헤드 수.

decoder_dim (`int`, 기본값 `1024`) : BigVGAN 초기 채널 수; 모든 업샘플링 단계에서 절반으로 줄어듭니다.

decoder_rates (`tuple[int]`, 기본값 `(5, 5, 2, 2, 2, 2, 2)`) : BigVGAN 업샘플링 비율입니다. 이 값들의 곱은 `prod(encoder_rates)`와 같아야 합니다.

decoder_kernel_sizes (`tuple[int]`, 기본값 `(9, 9, 4, 4, 4, 4, 4)`) : 업샘플링 단계별 전치 컨볼루션 커널 크기.

resblock_kernel_sizes (`tuple[int]`, 기본값 `(3, 7, 11)`) : 각 업샘플링 단계에서 병렬 AMP 잔차 블록의 커널 크기입니다.

resblock_dilation_sizes (`tuple[tuple[int]]`, 기본값은 `((1, 3, 5), (1, 3, 5), (1, 3, 5))`) : AMP 블록별 dilation 값.

sampling_rate (`int`, 기본값 `32000`) : 웨이브폼 샘플링 레이트.

latents_mean (`list[float]`, *선택 사항*) : 파이프라인이 latent를 정규화/역정규화하는 데 사용하는 채널별 latent 평균입니다.

latents_std (`list[float]`, *선택 사항*) : 파이프라인이 latent를 정규화/비정규화하는 데 사용하는 채널별 latent 표준 편차.

[MiniMax-H3](https://huggingface.co/MiniMaxAI)에서 사용하는 오디오 오토인코더: DAC 계통의 컨볼루션 인코더와 BigVGAN 디코더로 구성되며, 모노 32 kHz 웨이브폼을 직접 처리합니다.

이 모델은 [ModelMixin](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin)에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.

#### encode[[diffusers.AutoencoderKLMiniMaxH3Audio.encode]]

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

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_audio.py#L583)

**매개변수:**

sample (`torch.Tensor`) : `[batch_size, 1, samples]` 모양의 모노 웨이브폼. MiniMax-H3는 참조 클립의 두 스테레오 채널을 `batch_size = 2`로 전달합니다.

return_dict (`bool`, 기본값 `True`) : 일반 튜플 대신 `MiniMaxH3AudioEncoderOutput`를 반환할지 여부.

**반환값:** `MiniMaxH3AudioEncoderOutput` 또는 `tuple`

`[batch_size, latent_channels, samples / 800]`에 대한 잠재적 사후 분포.

Encode a waveform into the audio latent posterior.

Waveform은 먼저 `hop_length`(800 samples)의 배수로 오른쪽 패딩됩니다. MiniMax-H3는 항상 후방 **mean**(`latent_dist.mode()`)를 소비합니다. `logs_proj` 헤드는 참조 파이프라인에서 평가되지 않습니다.

#### decode[[diffusers.AutoencoderKLMiniMaxH3Audio.decode]]

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

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_audio.py#L623)

**매개변수:**

latents (`torch.Tensor`) : `[batch_size, latent_channels, num_frames]` 모양의 정규화되지 않은(latent) 값입니다. MiniMax-H3는 두 개의 스테레오 채널을 `batch_size = 2`로 전달합니다.

return_dict (`bool`, 기본값 `True`) : 일반 튜플 대신 [DecoderOutput](/docs/diffusers/main/ko/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput)를 반환할지 여부.

**반환값:** [DecoderOutput](/docs/diffusers/main/ko/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) 또는 `tuple`

`[batch_size, 1, num_frames * 800]` 형태의 웨이브폼이며, `[-1, 1]` 범위로 클램프됩니다.

오디오 잠재 변수를 웨이브폼으로 디코딩합니다.

#### forward[[diffusers.AutoencoderKLMiniMaxH3Audio.forward]]

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

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3_audio.py#L653)

**매개변수:**

sample (`torch.Tensor`) : `[batch_size, 1, samples]` 모양의 모노 웨이브폼.

sample_posterior (`bool`, 기본값 `False`) : 후분포의 모드를 취하는 대신 샘플링할지 여부입니다. MiniMax-H3는 모드를 사용합니다.

return_dict (`bool`, 기본값 `True`) : 일반 튜플 대신 [DecoderOutput](/docs/diffusers/main/ko/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput)를 반환할지 여부.

generator (`torch.Generator`, *선택 사항*) : `sample_posterior=True`일 때 사용되는 Generator입니다.

**반환값:** [DecoderOutput](/docs/diffusers/main/ko/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) 또는 `tuple`

`[batch_size, 1, num_frames * 800]` 모양의 왕복 처리된 웨이브폼이며, `[-1, 1]` 범위로 클램프됩니다.

Encode then decode a waveform.

