Diffusers documentation
AutoencoderSAME
AutoencoderSAME
O autoencoder SAME (Semantically-Aligned Music Encoder) é usado pelo Stable Audio 3 para comprimir formas de onda de áudio estéreo em uma sequência latente compacta e reconstruí-las.
O codificador empilha módulos SAMETransformerResamplingBlock, cada um dos quais agrupa um número fixo de quadros de patch de áudio e produz um token de saída aprendível por meio de um transformador diferencial. O decodificador inverte esse processo, expandindo cada token latente de volta para um patch de quadros de áudio.
Um gargalo de normalização suave (SoftNormBottleneck) normaliza os latentes antes e depois do modelo de difusão,
proporcionando dinâmicas de treinamento estáveis.
AutoencoderSAME
classe diffusers.AutoencoderSAME
< source >( audio_channels: int = 2patch_size: int = 256encoder_channels: int = 128encoder_c_mults: typing.List[int] = (6,)encoder_strides: typing.List[int] = (16,)encoder_transformer_depths: typing.List[int] = (6,)latent_dim: int = 256use_differential_attention: bool = Truedim_heads: int = 64ff_mult: int = 3sliding_window: int = 1encoder_sinusoidal_blocks: typing.List[int] = (0,)decoder_sinusoidal_blocks: typing.List[int] = (0,)sampling_rate: int = 44100 )
Parâmetros
- audio_channels — Número de canais de áudio (2 para estéreo).
- patch_size — Tamanho do patch sem sobreposição aplicado antes do codificador TRB
(e revertido depois do decodificador TRB). Contribui com
patch_size ×para a razão total de downsampling. Valor de produção: 256. - encoder_channels — Número base de canais para o TRB. 128 para SAME-S, 256 para SAME-L.
- encoder_c_mults — Multiplicador de canais para cada nível de TRB (uma entrada por TRB). Tanto SAME-S quanto SAME-L usam
(6,)— um único TRB cuja dimensão oculta éencoder_channels × 6. - encoder_strides — Passo de down-/up-sampling para cada nível de TRB. Tanto SAME-S quanto SAME-L usam
(16,)— um TRB com passo 16. - encoder_transformer_depths — Camadas de Transformer por nível de TRB. 6 para SAME-S, 12 para SAME-L.
- latent_dim — Dimensionalidade do espaço latente. 256 para ambas as variantes.
- use_differential_attention — Se
True, usa differential attention dentro de cada bloco transformer TRB (padrão ativado para SAME-S/L). - dim_heads — Dimensão da cabeça de atenção. 64 para produção SAME-S/L.
- ff_mult — Fator de expansão do feed-forward SwiGLU.
- sliding_window — Meia-largura da janela deslizante (em latentes) para a atenção com máscara de banda. O uso em produção SAME-S/L é 1.
- encoder_sinusoidal_blocks — Contagem por TRB das camadas finais de transformador
que usam o gating de FFN
sinno encoder (SAME-L:(0,)). - decoder_sinusoidal_blocks — Contagem por TRB das camadas finais de transformador
que usam o gating de FFN
sinno decodificador (SAME-L:(8,)). - sampling_rate — Taxa de amostragem do áudio em Hz (ex.: 44100).
Autoencoder Semantically-Aligned Music Encoder (SAME) do Stable Audio 3 (arXiv 2605.17991).
O modelo consiste em:
- Embedding de patch — reorganiza o áudio estéreo em patches não sobrepostos, trocando tempo por canais (
patch_size ×de redução de amostragem, sem parâmetros aprendidos). - Stack de codificador TRB — blocos
SAMETransformerResamplingBlockque realizam mais uma etapa de redução de amostragem por um fator de∏(encoder_strides). - Gargalo de normalização suave — normalização afim aprendível com desvio padrão em execução.
- Pilha TRB do decodificador — espelha o codificador em ordem inversa.
- Unpatch — reorganiza os canais de volta para a dimensão de tempo.
Razão total de subamostragem: patch_size × ∏(encoder_strides).
Os hiperparâmetros padrão correspondem ao checkpoint SAME-S (stabilityai/SAME-S). Para carregar o SAME-L (stabilityai/SAME-L, usado pelo SA3 Medium), passe encoder_channels=256, encoder_transformer_depths=(12,).
# 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
< source >( sample: Tensorreturn_dict: bool = True )
Codifique áudio estéreo em latentes.
decode
< source >( latents: Tensorreturn_dict: bool = True )
Decodifique os latentes de volta para áudio estéreo.
forward
< source >( sample: Tensorreturn_dict: bool = True )
Codifique e decodifique imediatamente sample (reconstrução).
SAMETransformerResamplingBlock
classe diffusers.models.autoencoders.autoencoder_same.SAMETransformerResamplingBlock
< source >( in_channels: intout_channels: intstride: intmode: str = 'encoder'transformer_depth: int = 3dim_heads: int = 128use_differential: bool = Trueff_mult: int = 3sliding_window: int = 1sinusoidal_blocks: int = 0 )
Parâmetros
- in_channels — Número de canais de entrada.
- out_channels — Número de canais de saída.
- stride — Fator de sub/amostragem.
- mode —
"encoder"ou"decoder". - transformer_depth — Número de camadas de
TransformerBlock. - dim_heads — Dimensão da cabeça de atenção.
- use_differential — Se deve usar atenção diferencial.
- ff_mult — Fator de expansão do feed-forward.
- sliding_window — Meia-largura da janela deslizante em latentes (a meia-largura da faixa é
sliding_window * (stride + 1)). - sinusoidal_blocks — Número de camadas finais de transformer que usam o gating de FFN
sinem vez de SiLU.
Bloco de construção principal do SAME.
Modo codificador (passo S): Agrupa S quadros de entrada consecutivos em um único segmento, adiciona uma única incorporação de saída aprendível e, em seguida, executa D camadas de transformador sobre a sequência de segmento achatada completa, mantendo apenas a incorporação de saída → redução de amostragem por S.
Modo decodificador (passo S): Agrupa 1 quadro de entrada com S embeddings de saída aprendíveis, executa D camadas de transformer sobre a sequência achatada completa e, em seguida, mantém os S embeddings de saída → aumenta a amostragem por S.
A atenção usa uma máscara de banda janela deslizante sobreposta sobre a sequência de segmentos achatada: cada token presta atenção a sliding_window * (stride + 1) vizinhos em cada lado. O RoPE é calculado sobre o comprimento total da sequência. Isso
corresponde exatamente à implementação de referência (um único bloco não sobreposto corresponderia apenas para um segmento).
AutoencoderSAMEOutput
classe diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEOutput
< source >( latents: Tensor )
Saída de AutoencoderSAME.encode().
AutoencoderSAMEDecoderOutput
classe diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEDecoderOutput
< source >( sample: Tensor )
Saída de AutoencoderSAME.decode().