ZYLU-TTS-1.0
About
ZYLU-TTS-1.0 is an English single-speaker TTS model: a Glow-TTS acoustic model and a HiFi-GAN v1 vocoder, both trained from scratch on LJSpeech (no pre-trained weights), on a single NVIDIA A100-SXM4-80GB. It follows the recipe of SupraTTS-0.1-Beta.
- Acoustic model: ~28.6M parameters, same encoder/decoder layout as SupraTTS-0.1-Beta, with the deterministic duration predictor instead of the stochastic one.
- Vocoder: HiFi-GAN v1, ~13.9M parameters (generator), trained on ground-truth mels.
- Fixes applied vs. Coqui defaults: LR scheduler of the acoustic model stepped per step (not per epoch), blank tokens between input tokens, bf16, large batch. Both models share one audio configuration.
- The two models were trained at the same time on the same GPU.
Benchmarks
Evaluated on 10 out-of-domain sentences + 10 held-out LJSpeech sentences, 5 seeds each (the held-out utterances were excluded from the training of both models).
UTMOS is an automatic MOS estimate (1-5), F0-Std is pitch variation inside a sentence in semitones, WER is Whisper (openai/whisper-small.en) word error rate used as a mispronunciation check,
tempo is synthesised duration over real duration on the held-out sentences. Ground truth is measured on the held-out recordings with the same code.
| System | UTMOS (higher is better) | F0-Std [st] | WER % (lower is better) | Tempo vs. Ground Truth |
|---|---|---|---|---|
| Ground Truth (held-out recordings) | 4.35 ± 0.14 | 3.86 | 3.70 | 1.000 |
| Vocoder alone (copy-synthesis of held-out recordings) | 3.52 ± 0.32 | 3.67 | 2.96 | - |
| ZYLU-TTS-1.0 (this model) | 3.09 ± 0.27 | 2.96 | 6.82 | 0.979 |
Numbers from different evaluation setups are not directly comparable, so they are not placed side by side with other models.
Config
- Acoustic: Glow-TTS (12 flow blocks, 192 hidden channels, rel-pos-transformer encoder, 6 layers), deterministic duration predictor
- Vocoder: HiFi-GAN v1 (upsample 8x8x2x2, 512 initial channels), feature-matching weight 108, L1 mel weight 45
- Input: espeak phonemes (en-us), blank tokens between tokens
- Sample rate: 22050 Hz, 80 mel bands
- Dataset: LJSpeech-1.1 (single English female speaker, ~24h), 200 utterances held out
Training
| Acoustic model | Vocoder | |
|---|---|---|
| Steps | 19440 (96 epochs) | 27720 (68 epochs) |
| Batch size | 64 | 32 (8192-sample segments) |
| Precision | bf16 | fp32 |
| Optimizer / LR | Coqui default (RAdam), NoamLR, peak 0.001, warmup 4000, stepped per step | AdamW, 0.0002, ExponentialLR 0.999 per epoch |
| Hardware | 1x NVIDIA A100-SXM4-80GB (shared with the vocoder run) | 1x NVIDIA A100-SXM4-80GB (shared with the acoustic run) |
| Wall-clock time | ~13.0 h | ~13.0 h |
How to Run Locally
Requirements: Python 3.10+, PyTorch with CUDA, pip install "coqui-tts[codec]" "transformers<5", and espeak-ng (apt install espeak-ng).
python3 infer.py "Hello, this is a test." --out output.wav
Or from Python:
import infer
b = infer.load()
wav = infer.synth(b, "Hello, this is a test.")
Limitations
English only, one speaker. Pitch variation is below the real recordings, and the deterministic duration predictor gives identical timing on every run (only the acoustic noise changes with the seed).
Thanks
- Keith Ito, LJSpeech
- Coqui-TTS (maintained by Idiap)
- SupraLabs, SupraTTS-0.1-Beta, the recipe this follows
- Kim et al., Glow-TTS, Kong et al., HiFi-GAN
What's Next
- Stochastic duration predictor and stochastic pitch
- Other languages (Portuguese) and more than one speaker
- Inline style tags and zero-shot cloning
- Downloads last month
- 17