Diffusers documentation
AutoencoderSAME
AutoencoderSAME
Автоэнкодер SAME (Semantically-Aligned Music Encoder) используется в Stable Audio 3 для сжатия стереоаудио-волновых форм в компактную латентную последовательность и их последующей реконструкции.
Кодер складывает модули SAMETransformerResamplingBlock, каждый из которых группирует фиксированное количество кадров аудиопатчей и формирует один обучаемый выходной токен с помощью дифференциального трансформера. Декодер обращает этот процесс, расширяя каждый латентный токен обратно в патч аудиоканов.
Мягкое нормализующее узкое место (SoftNormBottleneck) нормализует латенты до и после диффузионной модели, обеспечивая стабильную динамику обучения.
AutoencoderSAME
класс 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 )
Параметры
- 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
< source >( sample: Tensorreturn_dict: bool = True )
Кодирование стереозвука в латенты.
decode
< source >( latents: Tensorreturn_dict: bool = True )
Декодировать латенты обратно в стереоаудио.
forward
< source >( sample: Tensorreturn_dict: bool = True )
Кодируйте и сразу декодируйте sample (восстановление).
SAMETransformerResamplingBlock
класс 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 )
Параметры
- 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 — количество конечных трансформерных слоёв, использующих
sinFFN-гейтинг вместо 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
< source >( latents: Tensor )
Результат работы AutoencoderSAME.encode().
AutoencoderSAMEDecoderOutput
класс diffusers.models.autoencoders.autoencoder_same.AutoencoderSAMEDecoderOutput
< source >( sample: Tensor )
Результат работы AutoencoderSAME.decode().