Diffusers documentation

AutoencoderSAME

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AutoencoderSAME

Автоэнкодер SAME (Semantically-Aligned Music Encoder) используется в Stable Audio 3 для сжатия стереоаудио-волновых форм в компактную латентную последовательность и их последующей реконструкции.

Кодер складывает модули SAMETransformerResamplingBlock, каждый из которых группирует фиксированное количество кадров аудиопатчей и формирует один обучаемый выходной токен с помощью дифференциального трансформера. Декодер обращает этот процесс, расширяя каждый латентный токен обратно в патч аудиоканов.

Мягкое нормализующее узкое место (SoftNormBottleneck) нормализует латенты до и после диффузионной модели, обеспечивая стабильную динамику обучения.

AutoencoderSAME

класс diffusers.AutoencoderSAME

< >

( 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 )

Параметры

  • audio_channels — Количество аудиоканалов (2 для стерео).
  • patch_size — Размер неперекрывающихся патчей, применяемый перед кодировщиком TRB (и восстанавливаемый после декодера TRB). Вносит вклад patch_size × в общее соотношение downsampling. Значение для продакшена: 256.
  • encoder_channels — Базовое количество каналов для TRB. 128 для SAME-S, 256 для SAME-L.
  • encoder_c_mults — Множитель каналов для каждого уровня TRB (одна запись на TRB). И SAME-S, и SAME-L используют (6,) — один TRB, размерность скрытого слоя которого равна encoder_channels × 6.
  • encoder_strides — шаг даун-/ап-сэмплинга для каждого уровня TRB. Оба SAME-S и SAME-L используют (16,) — один TRB с шагом 16.
  • encoder_transformer_depths — слои Transformer на каждом уровне TRB. 6 для SAME-S, 12 для SAME-L.
  • latent_dim — Размерность латентного пространства. 256 для обоих вариантов.
  • use_differential_attention — Если True, использовать differential attention внутри каждого блока TRB-трансформера (по умолчанию включено для SAME-S/L).
  • dim_heads — Размерность головы внимания. 64 для SAME-S/L в продакшене.
  • ff_mult — коэффициент расширения SwiGLU для полносвязного слоя.
  • sliding_window — Полуширина скользящего окна (в латентах) для внимания с полосной маской. В производственных системах SAME-S/L используется значение 1.
  • encoder_sinusoidal_blocks — Количество конечных трансформерных слоёв на каждый TRB, использующих sin-гейтинг FFN в энкодере (SAME-L: (0,)).
  • decoder_sinusoidal_blocks — Количество конечных трансформерных слоёв в каждом TRB, использующих sin-гейтинг FFN в декодере (SAME-L: (8,)).
  • sampling_rate — Частота дискретизации аудио в Гц (например, 44100).

Автоэнкодер Semantically-Aligned Music Encoder (SAME) из Stable Audio 3 (arXiv 2605.17991).

Модель состоит из:

  • Встраивание патчей — преобразует стереоаудио в неперекрывающиеся патчи, жертвуя временным разрешением ради каналов (patch_size × даунсемплинг, без обучаемых параметров).
  • Стек TRB энкодера — блоки SAMETransformerResamplingBlock, которые дополнительно уменьшают размерность в ∏(encoder_strides) раз.
  • Soft-norm bottleneck — обучаемая аффинная нормализация с текущим стандартным отклонением.
  • Стек декодера 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,).

# 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

< >

( sample: Tensorreturn_dict: bool = True )

Параметры

  • sample — тензор формы (B, audio_channels, T).
  • return_dict — Если True, возвращает AutoencoderSAMEOutput.

Кодирование стереозвука в латенты.

decode

< >

( latents: Tensorreturn_dict: bool = True )

Параметры

  • latents — тензор латентов (B, latent_dim, T_latent).
  • return_dict — Если True, возвращает AutoencoderSAMEDecoderOutput.

Декодировать латенты обратно в стереоаудио.

forward

< >

( sample: Tensorreturn_dict: bool = True )

Параметры

  • sample — тензор формы (B, audio_channels, T).
  • return_dict — Если True, возвращает AutoencoderSAMEDecoderOutput.

Кодируйте и сразу декодируйте sample (восстановление).

SAMETransformerResamplingBlock

класс diffusers.models.autoencoders.autoencoder_same.SAMETransformerResamplingBlock

< >

( 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 )

Параметры

  • in_channels — Количество входных каналов.
  • out_channels — Количество выходных каналов.
  • stride — коэффициент понижающего/повышающего дискретизирования.
  • mode — "encoder" или "decoder".
  • transformer_depth — количество слоёв TransformerBlock.
  • dim_heads — размерность головы внимания.
  • use_differential — Использовать ли дифференциальное внимание.
  • ff_mult — коэффициент расширения feed-forward.
  • sliding_window — Полуширина скользящего окна в латентах (полуширина полосы составляет sliding_window * (stride + 1)).
  • sinusoidal_blocks — количество конечных трансформерных слоёв, использующих sin FFN-гейтинг вместо SiLU.

Базовый строительный блок SAME.

Режим кодировщика (шаг S): Группирует S последовательных входных кадров в один сегмент, добавляет единственное обучаемое выходное вложение, затем прогоняет D слои трансформера по всей развёрнутой последовательности сегмента и сохраняет только выходное вложение → уменьшение размера в S раз.

Режим декодера (шаг S): Группирует 1 входной кадр с S обучаемыми выходными эмбеддингами, прогоняет D слои трансформера по всей развёрнутой последовательности, затем сохраняет S выходных эмбеддингов → апсемплинг с коэффициентом S.

Attention использует перекрывающуюся скользящую оконную маску по сглаженной последовательности сегментов: каждый токен обращается к sliding_window * (stride + 1) соседям с каждой стороны. RoPE вычисляется по полной длине последовательности. Это точно соответствует эталонной реализации (один неперекарывающийся чанк совпадал бы только для одного сегмента).

AutoencoderSAMEOutput

класс diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEOutput

< >

( latents: Tensor )

Результат работы AutoencoderSAME.encode().

AutoencoderSAMEDecoderOutput

класс diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEDecoderOutput

< >

( sample: Tensor )

Результат работы AutoencoderSAME.decode().

Update on GitHub