r/deeplearning • u/Working_Hat5120 • 3h ago
SteerTTS: 23M-param TTS with hybrid attention + bidirectional Mamba-3 blocks and masked AdaLN control conditioning
Enable HLS to view with audio, or disable this notification
I wanted a small TTS steerable with explicit numeric controls (so an automated response could set prosody per turn), and couldn't find one. Here's what I built and how it's conditioned.
Architecture:
- FastPitch-style explicit-variance model: phonemes -> encoder -> duration/pitch/energy predictors -> length regulator -> decoder -> 100-band log-mel -> Vocos (frozen)
- Each encoder/decoder block: multi-head self-attention → bidirectional Mamba-3 branch (forward + backward layers summed; complex-valued state, trapezoidal discretization) → conv FFN
- Every LayerNorm is adaptive.
- The mask matters: a control left out is "unspecified" and the model infers it from voice/tag/text; {"rate": 0} explicitly asks for the voice's neutral rate.
- Guidance: Render conditioned + unconditioned and extrapolate durations, pitch, energy and mel.
- Optional flow-matching refiner (ConvNeXt, 10 midpoint steps) for mel detail; a Voicebox-style prompted variant for cloning
Size: 9.6M acoustic + 13.5M Vocos = 23M; refiner adds 17.6M.
Steering results (held-out LibriTTS-R speakers, ±2 SD requests):
- Loudness, median pitch, H1–H2, tilt: Spearman ρ .87–.97 between request and readback
- Pause, voicing, CPPS: weak (ρ .46–.79); CPPS leaks into pitch/level about as much as it moves itself
- Mean gain ~0.5 at s=1; s≈1.5 roughly delivers the requested size, at the cost of more cross-talk WER stays ~1% across all requests
Speed: RTFx 60–80 on an RTX 5070, 4–8 on CPU without the refiner (refiner costs ~12× compute).
No human evals yet, English only, single training seed.
License: weights CC BY-NC 4.0, code MIT.
Model + full eval tables: https://huggingface.co/WhissleAI/steer-tts
Curious whether anyone has compared bidirectional Mamba vs pure attention in small non-autoregressive TTS. I haven't run a clean ablation yet and would like to know what to expect.