# Kandinsky 6 VAE

Kandinsky 6 は、動画スーパーレゾリューションに因果的な 3D K-VAE を、同期した音声生成には MMAudio のメルスペクトログラム VAE と独立した BigVGAN [MMAudioVocoder](/docs/diffusers/v0.43.0/ja/api/models/kandinsky6_vae#diffusers.MMAudioVocoder) を組み合わせて使用しています。

## Kandinsky6SRVAE[[diffusers.Kandinsky6SRVAE]]

[Kandinsky6SRPipeline](/docs/diffusers/v0.43.0/ja/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline)で使用される因果的3次元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)`) : エンコーダの各レベルにおける残差ブロックの出力幅です。最後のレベルを除き、次のレベルへ進むにつれて空間サイズが半分になり、幅が2倍になります。

decoder_block_out_channels (`tuple[int, ...]`、デフォルトは`(16, 256, 512, 1024, 2048)`) : デコーダーの各レベルにおける残差ブロックの出力幅。

layers_per_block (`int`、デフォルトは`2`) : エンコーダの各レベルあたりの残差ブロックの数。デコーダは各レベルで1つ多く使用します。

temporal_compression_ratio (`int`、デフォルトは`4`) : 時間方向の圧縮係数。`log2`の値だけ連続したレベルが時間方向も圧縮します。

temporal_compression_start_level (`int`、デフォルトは`1`) : 時間を圧縮する最初のレベル。

scaling_factor (`float`、デフォルトは `0.910344`) : diffusion transformer に入力される前に latents に適用されるスケーリング係数。

[Kandinsky6SRPipeline](/docs/diffusers/v0.43.0/ja/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline)が動画のエンコードとデコードに使用するCausal 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`、shape `(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/ja/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`、shape `(batch_size, latent_channels, num_latent_frames, height, width)`) : `scaling_factor`で除算済みのLatents。

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`、shape `(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/ja/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) が使用するメロスペクトログラム VAE です。その `decode` の出力はメロスペクトログラムであり、[MMAudioVocoder](/docs/diffusers/v0.43.0/ja/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`) : エンコーダの各レベルあたりの残差ブロック数。デコーダは各レベルで1つ多く使用します。

sample_rate (`int`、デフォルトは`44100`) : 波形のサンプリングレート。

n_fft (`int`、デフォルトは`2048`) : メルフロントエンドのFFTサイズ。

hop_length (`int`、デフォルトは`512`) : メルフロントエンドのホップ長です。このVAEとペアで使用する[MMAudioVocoder](/docs/diffusers/v0.43.0/ja/api/models/kandinsky6_vae#diffusers.MMAudioVocoder)の総アップサンプリング係数と一致する必要があります。

scaling_factor (`float`、デフォルトは `0.417`) : diffusion transformer に入力される前に latents に適用されるスケーリング係数。

[Kandinsky6TI2VAPipeline](/docs/diffusers/v0.43.0/ja/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline)のAudio VAE: log-melスペクトログラムに対する、振幅を保持するオートエンコーダー(MMAudio, https://arxiv.org/abs/2412.15322)。

`encode` は波形を潜在分布に変換し、`decode` は潜在変数をメルスペクトログラムに戻します。その後、[MMAudioVocoder](/docs/diffusers/v0.43.0/ja/api/models/kandinsky6_vae#diffusers.MMAudioVocoder) がそれを波形に変換します。1つの潜在フレームは `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`、shape `(batch_size, num_samples)`) : `sample_rate` で `[-1, 1]` の単一チャネル波形。

return_dict (`bool`、デフォルトは`True`) : プレーンなタプルではなく、[AutoencoderKLOutput](/docs/diffusers/v0.43.0/ja/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`、shape は `(batch_size, latent_channels, num_latent_frames)`) : `scaling_factor` で除算済みの Latents。

return_dict (`bool`、デフォルトは`True`) : プレーンなタプルではなく`~models.autoencoder_kl.DecoderOutput`を返すかどうか。

**戻り値:**

`(batch_size, mel_bins, num_mel_frames)` の形状を持つ、[MMAudioVocoder](/docs/diffusers/v0.43.0/ja/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`、shape `(batch_size, num_samples)`) : `sample_rate` で、mel spectrogram としてエンコードおよび再構成するための、`[-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` は、形状が `(batch_size, mel_bins, num_mel_frames)` の再構成されたメルスペクトログラムです。

## MMAudioVocoder[[diffusers.MMAudioVocoder]]

[NVIDIA/BigVGAN](https://github.com/NVIDIA/BigVGAN)(MITライセンス)のBigVGAN-v2ボコーダーMMAudioバンドルから派生し、さらに[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`) : 入力スペクトログラムのメルビンの数。対応する[MMAudioVAE](/docs/diffusers/v0.43.0/ja/api/models/kandinsky6_vae#diffusers.MMAudioVAE)の`mel_bins`と一致する必要があります。

upsample_initial_channel (`int`、デフォルトは`1536`) : 最初の層の幅。

upsample_rates (`tuple[int, ...]`、デフォルトは `(8, 4, 2, 2, 2, 2)`) : vocoder の各ステージのアップサンプリング係数です。これらの積が総アップサンプリング係数となり、対応する [MMAudioVAE](/docs/diffusers/v0.43.0/ja/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))`) : 残差ブロックのDilations。

BigVGAN-v2 ボコーダー（https://github.com/NVIDIA/BigVGAN、MIT ライセンス）と、https://github.com/junjun3518/alias-free-torch（Apache 2.0）のアンチエイリアス Snake 活性化関数を用いて、[MMAudioVAE](/docs/diffusers/v0.43.0/ja/api/models/kandinsky6_vae#diffusers.MMAudioVAE) がデコードしたメルスペクトログラムを、[Kandinsky6TI2VAPipeline](/docs/diffusers/v0.43.0/ja/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`、shape `(batch_size, num_mels, num_mel_frames)`) : [MMAudioVAE](/docs/diffusers/v0.43.0/ja/api/models/kandinsky6_vae#diffusers.MMAudioVAE)によってデコードされたMelスペクトログラム。

return_dict (`bool`、デフォルトは`True`) : プレーンなタプルではなく`~models.autoencoder_kl.DecoderOutput`を返すかどうか。

**戻り値:**

`[-1, 1]` の範囲で、形状が `(batch_size, 1, num_samples)` の波形。

