# Kandinsky 6 VAE

Kandinsky 6 采用因果 3D K-VAE 进行视频超分辨率处理，并结合 MMAudio 梅尔频谱 VAE 以及独立的 BigVGAN [MMAudioVocoder](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVocoder)，以实现同步音频生成。

## Kandinsky6SRVAE[[diffusers.Kandinsky6SRVAE]]

[Kandinsky6SRPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) 所使用的因果 3D K-VAE。它能在有界内存的分段中处理任意长度的视频，同时复现单次非分段处理的确切输出。

```python
import torch
from diffusers import Kandinsky6SRVAE

vae = Kandinsky6SRVAE.from_pretrained(
    "kandinskylab/Kandinsky-6.0-VSR-5s-Diffusers", subfolder="vae", torch_dtype=torch.bfloat16
)
```

#### diffusers.Kandinsky6SRVAE[[diffusers.Kandinsky6SRVAE]]

```python
diffusers.Kandinsky6SRVAE(in_channels: int = 3, out_channels: int = 3, latent_channels: int = 64, encoder_block_out_channels: tuple[int, ...] = (16, 128, 256, 512, 1024), decoder_block_out_channels: tuple[int, ...] = (16, 256, 512, 1024, 2048), layers_per_block: int = 2, temporal_compression_ratio: int = 4, temporal_compression_start_level: int = 1, scaling_factor: float = 0.910344004631042)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L516)

**参数：**

in_channels (`int`，默认为 `3`)：像素通道数。

out_channels (`int`，默认为 `3`)：重建的像素通道数。

latent_channels (`int`，默认为 `64`)：潜在通道的数量。

encoder_block_out_channels (`tuple[int, ...]`，默认为 `(16, 128, 256, 512, 1024)`)：编码器每一层中残差块的输出宽度；除最后一层外，每一层在过渡到下一层时，空间尺寸减半，宽度加倍。

decoder_block_out_channels (`tuple[int, ...]`，默认为 `(16, 256, 512, 1024, 2048)`)：解码器各层级中残差块的输出宽度。

layers_per_block (`int`，默认为 `2`)：每个编码器层中的残差块数量；解码器每层多一个。

temporal_compression_ratio (`int`，默认为 `4`)：时间压缩因子；其 `log2` 个连续层级也会压缩时间。

temporal_compression_start_level (`int`，默认为 `1`)：压缩时间的第一层。

scaling_factor (`float`，默认为 `0.910344`)：在潜变量进入扩散 Transformer 之前对其应用的缩放系数。

[Kandinsky6SRPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) 用于对视频进行编码和解码的因果 3D K-VAE。

视频以 16 个像素帧（外加起始帧）为时间片段进行处理。因果卷积会在片段之间传递其填充状态，因此分段仅用于限制峰值内存，不会改变处理结果。

#### encode[[diffusers.Kandinsky6SRVAE.encode]]

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

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L585)

**参数：**

x (`torch.Tensor`，形状为 `(batch_size, channels, num_frames, height, width)`)：像素值位于 `[-1, 1]` 区间内的视频。`num_frames` 应为 `1 + k * temporal_compression_ratio`。

return_dict (`bool`，默认为 `True`)：是否返回 [AutoencoderKLOutput](/docs/diffusers/v0.43.0/zh/api/models/autoencoderkl_qwenimage#diffusers.models.modeling_outputs.AutoencoderKLOutput) 而不是普通元组。

将视频编码为其潜在分布。

#### decode[[diffusers.Kandinsky6SRVAE.decode]]

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

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L611)

**参数：**

z (`torch.Tensor`，形状为 `(batch_size, latent_channels, num_latent_frames, height, width)`)：潜变量，已除以 `scaling_factor`。

return_dict (`bool`，默认为 `True`) : 是否返回 `~models.autoencoder_kl.DecoderOutput` 而不是普通元组。

将潜在变量解码为视频。

#### forward[[diffusers.Kandinsky6SRVAE.forward]]

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

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L642)

**参数：**

sample (`torch.Tensor`，形状为 `(batch_size, channels, num_frames, height, width)`)：像素值位于 `[-1, 1]` 区间内的视频。`num_frames` 应为 `1 + k * temporal_compression_ratio`。

sample_posterior (`bool`，*可选*，默认为 `False`)：是否从潜在后验分布中采样，而不是使用其众数。

return_dict (`bool`，*可选*，默认为 `True`)：是否返回 `~models.autoencoder_kl.DecoderOutput` 而不是普通元组。

generator (`torch.Generator`，*可选*)：一个 [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html)，用于使采样过程具有确定性。

**返回：** `~models.autoencoder_kl.DecoderOutput` 或 `tuple`

如果 `return_dict` 为 True，则返回 `~models.autoencoder_kl.DecoderOutput`，否则返回普通的 `tuple`。其 `sample` 为重建后的视频。

## MMAudioVAE[[diffusers.MMAudioVAE]]

当 `sample_audio=True` 时，[Kandinsky6TI2VAPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) 使用的 mel 频谱 VAE。其 `decode` 输出为 mel 频谱；将其通过 [MMAudioVocoder](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVocoder) 处理即可得到波形。

参考实现可在 [hkchengrex/MMAudio](https://github.com/hkchengrex/MMAudio)（MIT 许可证）中找到。

```python
import torch
from diffusers import MMAudioVAE

audio_vae = MMAudioVAE.from_pretrained(
    "kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers", subfolder="audio_vae", torch_dtype=torch.bfloat16
)
```

#### diffusers.MMAudioVAE[[diffusers.MMAudioVAE]]

```python
diffusers.MMAudioVAE(mel_bins: int = 128, latent_channels: int = 40, hidden_channels: int = 512, channel_multipliers: tuple[int, ...] = (1, 2, 4), layers_per_block: int = 2, sample_rate: int = 44100, n_fft: int = 2048, hop_length: int = 512, scaling_factor: float = 0.417)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L350)

**参数：**

mel_bins (`int`，默认为 `128`)：梅尔频带的数量。

latent_channels (`int`，默认为 `40`)：潜在通道的数量。

hidden_channels (`int`，默认值为 `512`)：自编码器的基础宽度。

channel_multipliers (`tuple[int, ...]`，默认为 `(1, 2, 4)`)：自编码器各层级的宽度乘数。

layers_per_block (`int`，默认为 `2`)：每个编码器层级的残差块数量；解码器在每个层级上多使用一个。

sample_rate (`int`，默认为 `44100`)：波形采样率。

n_fft (`int`，默认为 `2048`)：mel 前端的 FFT 大小。

hop_length (`int`，默认值为 `512`)：mel 前端的跳跃长度。必须与此 VAE 所配对的 [MMAudioVocoder](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVocoder) 的总上采样因子相匹配。

scaling_factor (`float`，默认为 `0.417`)：在潜变量进入扩散 Transformer 之前对其应用的缩放系数。

[Kandinsky6TI2VAPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) 的音频 VAE：一种在 log-mel 频谱上保持幅度的自编码器（MMAudio，https://arxiv.org/abs/2412.15322）。

`encode` 将波形转换为潜在分布；`decode` 将潜在表示还原为梅尔频谱图，随后由 [MMAudioVocoder](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVocoder) 将其转换为波形。一个潜在帧覆盖 `hop_length * 2` 个采样点。

#### encode[[diffusers.MMAudioVAE.encode]]

```python
encode(audio: torch.Tensor, return_dict: bool = True)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L403)

**参数：**

audio (`torch.Tensor`，形状为 `(batch_size, num_samples)`)：采样率为 `sample_rate` 的 `[-1, 1]` 范围内的单声道波形。

return_dict (`bool`，默认为 `True`)：是否返回 [AutoencoderKLOutput](/docs/diffusers/v0.43.0/zh/api/models/autoencoderkl_qwenimage#diffusers.models.modeling_outputs.AutoencoderKLOutput) 而不是普通元组。

将波形编码为其潜在分布。

#### decode[[diffusers.MMAudioVAE.decode]]

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

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L420)

**参数：**

z (`torch.Tensor`，形状为 `(batch_size, latent_channels, num_latent_frames)`)：潜变量，已除以 `scaling_factor`。

return_dict (`bool`，默认为 `True`) : 是否返回 `~models.autoencoder_kl.DecoderOutput` 而不是普通元组。

**返回值：**

形状为 `(batch_size, mel_bins, num_mel_frames)` 的梅尔频谱图，可直接用于 [MMAudioVocoder](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVocoder)。

将潜在变量解码为梅尔频谱图。

#### forward[[diffusers.MMAudioVAE.forward]]

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

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L439)

**参数：**

sample (`torch.Tensor`，形状为 `(batch_size, num_samples)`)：在 `sample_rate` 采样率下、取值范围为 `[-1, 1]` 的单声道波形，用于编码并重建为梅尔频谱图。

sample_posterior (`bool`，*可选*，默认为 `False`)：是否从潜在后验分布中采样，而不是使用其众数。

return_dict (`bool`，*可选*，默认为 `True`)：是否返回 `~models.autoencoder_kl.DecoderOutput` 而不是普通元组。

generator (`torch.Generator`，*可选*)：一个 [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html)，用于使采样过程具有确定性。

**返回：** `~models.autoencoder_kl.DecoderOutput` 或 `tuple`

如果 `return_dict` 为 True，则返回一个 `~models.autoencoder_kl.DecoderOutput`，否则返回一个普通的 `tuple`。其 `sample` 是重建的 mel 频谱图，形状为 `(batch_size, mel_bins, num_mel_frames)`。

## MMAudioVocoder[[diffusers.MMAudioVocoder]]

改编自 BigVGAN-v2 声码器的 MMAudio 捆绑包，其本身源自 [NVIDIA/BigVGAN](https://github.com/NVIDIA/BigVGAN)（MIT 许可证），并采用了 [alias-free-torch](https://github.com/junjun3518/alias-free-torch)（Apache License 2.0）中的抗锯齿 Snake 激活函数。

#### diffusers.MMAudioVocoder[[diffusers.MMAudioVocoder]]

```python
diffusers.MMAudioVocoder(num_mels: int = 128, upsample_initial_channel: int = 1536, upsample_rates: tuple[int, ...] = (8, 4, 2, 2, 2, 2), upsample_kernel_sizes: tuple[int, ...] = (16, 8, 4, 4, 4, 4), resblock_kernel_sizes: tuple[int, ...] = (3, 7, 11), resblock_dilation_sizes: tuple[tuple[int, ...], ...] = ((1, 3, 5), (1, 3, 5), (1, 3, 5)))
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/mmaudio_vocoder.py#L154)

**参数：**

num_mels (`int`，默认为 `128`)：输入频谱图的 mel 分箱数量。必须与配对的 [MMAudioVAE](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVAE) 的 `mel_bins` 相匹配。

upsample_initial_channel (`int`，默认值为 `1536`)：第一层的宽度。

upsample_rates (`tuple[int, ...]`，默认为 `(8, 4, 2, 2, 2, 2)`)：声码器各阶段的升采样因子。它们的乘积即为总升采样因子，必须与配对的 [MMAudioVAE](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVAE) 的 `hop_length` 相匹配。

upsample_kernel_sizes (`tuple[int, ...]`，默认为 `(16, 8, 4, 4, 4, 4)`)：vocoder 各阶段的转置卷积核大小。

resblock_kernel_sizes (`tuple[int, ...]`，默认为 `(3, 7, 11)`)：残差块的卷积核大小。

resblock_dilation_sizes (`tuple[tuple[int, ...], ...]`，默认为 `((1, 3, 5), (1, 3, 5), (1, 3, 5))`)：残差块的膨胀率。

采用 MIT 许可证的 BigVGAN-v2 声码器（https://github.com/NVIDIA/BigVGAN），并结合 https://github.com/junjun3518/alias-free-torch（Apache 2.0）中的抗混叠 Snake 激活函数，将 [MMAudioVAE](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVAE) 解码出的梅尔频谱转换为 [Kandinsky6TI2VAPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) 的波形。

#### forward[[diffusers.MMAudioVocoder.forward]]

```python
forward(mel: torch.Tensor, return_dict: bool = True)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/mmaudio_vocoder.py#L213)

**参数：**

mel (`torch.Tensor`，形状为 `(batch_size, num_mels, num_mel_frames)`)：由 [MMAudioVAE](/docs/diffusers/v0.43.0/zh/api/models/kandinsky6_vae#diffusers.MMAudioVAE) 解码得到的梅尔频谱图。

return_dict (`bool`，默认为 `True`) : 是否返回 `~models.autoencoder_kl.DecoderOutput` 而不是普通元组。

**返回值：**

形状为 `(batch_size, 1, num_samples)` 的波形，取值范围为 `[-1, 1]`。

