# 自编码器SAME

**SAME**（Semantically-Aligned Music Encoder，语义对齐音乐编码器）自编码器被 [Stable Audio 3](https://stability.ai/news-updates/meet-stable-audio-3-the-model-family-built-for-artistic-experimentation-with-open-weight-models) 用于将立体声音频波形压缩为紧凑的潜在序列并进行重建。

编码器堆叠了 `SAMETransformerResamplingBlock` 模块，每个模块将固定数量的音频 patch 帧分组，并通过差分 Transformer 生成一个可学习的输出 token。解码器则反转此过程，将每个潜在 token 扩展回一组音频帧 patch。

软归一化瓶颈（`SoftNormBottleneck`）在扩散模型之前和之后对潜在变量进行归一化，从而提供稳定的训练动态。

## 自编码器SAME[[diffusers.AutoencoderSAME]]

#### diffusers.AutoencoderSAME[[diffusers.AutoencoderSAME]]

```python
diffusers.AutoencoderSAME(audio_channels: int = 2, patch_size: int = 256, encoder_channels: int = 128, encoder_c_mults: typing.List[int] = (6,), encoder_strides: typing.List[int] = (16,), encoder_transformer_depths: typing.List[int] = (6,), latent_dim: int = 256, use_differential_attention: bool = True, dim_heads: int = 64, ff_mult: int = 3, sliding_window: int = 1, encoder_sinusoidal_blocks: typing.List[int] = (0,), decoder_sinusoidal_blocks: typing.List[int] = (0,), sampling_rate: int = 44100)
```

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

**参数：**

audio_channels : 音频通道数（立体声为 2）。

patch_size : 在 TRB 编码器之前应用的互不重叠的 patch 大小（并在 TRB 解码器之后进行反转）。对总下采样率的贡献为 `patch_size ×`。生产环境中的取值：256。

encoder_channels : TRB 的基础通道数。SAME-S 为 128，SAME-L 为 256。

encoder_c_mults : 每个 TRB 层级的通道乘数（每个 TRB 一个条目）。SAME-S 和 SAME-L 均使用 `(6,)` —— 单个 TRB，其隐藏维度为 `encoder_channels × 6`。

encoder_strides : 每个 TRB 层级的下采样/上采样步长。SAME-S 和 SAME-L 均使用 `(16,)` — 一个步长为 16 的 TRB。

encoder_transformer_depths : 每个 TRB 层级的 Transformer 层数。SAME-S 为 6，SAME-L 为 12。

latent_dim : 潜在空间的维度。两种变体均为 256。

use_differential_attention : 如果 `True`，则在每个 TRB transformer 块内部使用 differential attention（SAME-S/L 默认开启）。

dim_heads : 注意力头维度。生产环境 SAME-S/L 为 64。

ff_mult : SwiGLU 前馈扩展因子。

sliding_window : 用于带状掩码注意力的滑动窗口半宽（以潜在变量计）。生产环境中的 SAME-S/L 使用 1。

encoder_sinusoidal_blocks : 编码器中使用 `sin` FFN 门控的尾部 Transformer 层数（SAME-L: `(0,)`）。

decoder_sinusoidal_blocks : 解码器中使用 `sin` FFN 门控的尾部 Transformer 层数（SAME-L: `(8,)`）。

sampling_rate : 音频采样率，单位为 Hz（例如 44100）。

来自 *Stable Audio 3*（[arXiv 2605.17991](https://arxiv.org/abs/2605.17991)）的语义对齐音乐编码器（SAME）自编码器。

该模型由以下部分组成：

- **补丁嵌入** — 将立体声音频重塑为不重叠的补丁，以时间换取通道数（`patch_size ×` 下采样，无可学习参数）。
- **编码器 TRB 堆栈** — 由 `SAMETransformerResamplingBlock` 块组成，进一步以 `∏(encoder_strides)` 为因子进行下采样。
- **Soft-norm 瓶颈** — 带有运行标准差的可学习仿射归一化。
- **解码器 TRB 堆栈** — 与编码器呈镜像反转结构。
- **Unpatch** — 将通道维度重新整形回时间维度。

总下采样比率：`patch_size × ∏(encoder_strides)`。

默认超参数与 **SAME-S** 检查点（`stabilityai/SAME-S`）相匹配。若要加载 **SAME-L**（`stabilityai/SAME-L`，由 SA3 Medium 使用），请传入 `encoder_channels=256, encoder_transformer_depths=(12,)`。

```python
# SAME-S (108 M params, used by SA3 small models) model = AutoencoderSAME() # default values

# SAME-L (852 M params, used by SA3 Medium) model = AutoencoderSAME(encoder_channels=256,
encoder_transformer_depths=(12,))
```

#### encode[[diffusers.AutoencoderSAME.encode]]

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

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

**参数：**

sample : `(B, audio_channels, T)` 波形张量。

return_dict : 如果 `True`，则返回一个 `AutoencoderSAMEOutput`。

**返回值：**

形状为 `(B, latent_dim, T // downsampling_ratio)` 的潜在张量（当 *return_dict* 为 `True` 时，包裹在 `AutoencoderSAMEOutput` 中）。

将立体声音频编码为潜在表示。

#### decode[[diffusers.AutoencoderSAME.decode]]

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

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

**参数：**

latents : `(B, latent_dim, T_latent)` 潜在张量。

return_dict : 如果 `True`，则返回一个 `AutoencoderSAMEDecoderOutput`。

**返回值：**

形状为 `(B, audio_channels, T_latent × downsampling_ratio)` 的波形张量（当 *return_dict* 为 `True` 时，包裹在 `AutoencoderSAMEDecoderOutput` 中）。

将潜在变量解码回立体声音频。

#### forward[[diffusers.AutoencoderSAME.forward]]

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

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

**参数：**

sample : `(B, audio_channels, T)` 波形张量。

return_dict : 如果 `True`，则返回一个 `AutoencoderSAMEDecoderOutput`。

**返回值：**

重构后的波形（形状与 *sample* 相同，可能因填充而更长），当 *return_dict* 为 `True` 时，会包裹在 `AutoencoderSAMEDecoderOutput` 中。

对 *sample* 进行编码并立即解码（重建）。

## SAMETransformerResamplingBlock[[diffusers.models.autoencoders.autoencoder_same.SAMETransformerResamplingBlock]]

#### diffusers.models.autoencoders.autoencoder_same.SAMETransformerResamplingBlock[[diffusers.models.autoencoders.autoencoder_same.SAMETransformerResamplingBlock]]

```python
diffusers.models.autoencoders.autoencoder_same.SAMETransformerResamplingBlock(in_channels: int, out_channels: int, stride: int, mode: str = 'encoder', transformer_depth: int = 3, dim_heads: int = 128, use_differential: bool = True, ff_mult: int = 3, sliding_window: int = 1, sinusoidal_blocks: int = 0)
```

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

**参数：**

in_channels : 输入通道数。

out_channels : 输出通道数。

stride : 下采样/上采样因子。

mode : `"encoder"` 或 `"decoder"`。

transformer_depth : `TransformerBlock` 层的数量。

dim_heads : 注意力头维度。

use_differential : 是否使用差分注意力。

ff_mult : 前馈扩展因子。

sliding_window : 潜在表示中的滑动窗口半宽（频带半宽为 `sliding_window * (stride + 1)`）。

sinusoidal_blocks : 使用 `sin` FFN 门控而非 SiLU 的末尾 Transformer 层数。

SAME 的核心构建模块。

**编码器模式**（步长 S）：将 S 个连续输入帧分组为一个片段，追加一个可学习的输出嵌入，然后在展平后的完整片段序列上运行 D 层 Transformer，仅保留输出嵌入 → 实现 S 倍下采样。

**解码器模式**（步幅 S）：将 1 个输入帧与 S 个可学习输出嵌入分组，在展平后的完整序列上运行 D 层 Transformer，然后保留 S 个输出嵌入 → 实现 S 倍上采样。

Attention 在展平的分段序列上使用重叠的 *滑动窗口* 带状掩码：每个 token 关注其左右两侧各 `sliding_window * (stride + 1)` 个邻居。RoPE 基于完整序列长度计算。这与参考实现完全一致（单个不重叠的块仅在一个分段上匹配）。

## AutoencoderSAMEOutput[[diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEOutput]]

#### diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEOutput[[diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEOutput]]

```python
diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEOutput(latents: Tensor)
```

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

[AutoencoderSAME.encode()](/docs/diffusers/v0.43.0/zh/api/models/autoencoder_same#diffusers.AutoencoderSAME.encode) 的输出。

## AutoencoderSAMEDecoderOutput[[diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEDecoderOutput]]

#### diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEDecoderOutput[[diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEDecoderOutput]]

```python
diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEDecoderOutput(sample: Tensor)
```

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

[AutoencoderSAME.decode()](/docs/diffusers/v0.43.0/zh/api/models/autoencoder_same#diffusers.AutoencoderSAME.decode) 的输出。

