Попробовал основные open-source TTS модельки
Перейдем к практике, вчера сел и финально пощупал основные TTS модельки, все гонял на rtx 3090, ниже результаты.
Fish Speech
А именно openaudio-s1-mini:
https://huggingface.co/fishaudio/openaudio-s1-mini
Накурсорить стриминг инференс не получилось, все вышло далеко от реалтайма, да и качество полученного аудио сомнительное.
Chatterbox
Подход тот же, берем основной репозиторий, отправляем курсор писать стриминг реализацию (opus-4.5). В данном случае есть форк со стримингом, но он для англ модели, а нам нужна мультиязычная. Стриминг завелся, но очень медленный, предполагаю какая-то часть осталась на cpu, хотя перепроверял несколько раз.
Немного цифр:
Time to first chunk: 10837.61 ms
Total generation time: 20.753s
Total audio duration: 5.943s
RTF (Real-Time Factor): 3.492
Качество на выходе странное, с акцентом.
XTTS v2
Чекпоинт брал от бананы: https://huggingface.co/tensorbanana/xttsv2_banana
Тут все отлично завелось и работает, инференс под стриминг апи писал давно и сюрпризов не было.
TTFB: 300-350ms
RTF: 0.3
Проблема одна, качество, достаточно шумное аудио на выходе.
F5 / ESpeech
Есть несколько файнтюнов на русский язык, я взял веса от ESpeech SFT 95K:
https://huggingface.co/ESpeech/ESpeech-TTS-1_SFT-95K
Для быстрой генерации выставляем nfe_steps=16
Получаем:
RTF: 0.14
TTFB: 1.8s
А все потому что диффузионная моделька генерит сразу полное аудио, предыдущие могут отдавать чанки по мере генерации.
Как вариант можно ограничить текст по длине для первого шага, чтобы быстрее получить ответ, и пока воспроизводится первый кусок, успеть сгенерировать последующие. Но скорее всего минимальное время ожидания будет около 1 секунды.
Но есть и плюсы, лучшее качество среди всех вариантов. А также поддержка ruaccent для расстановки ударений.
Примеры речи каждой модели можно послушать в телеграме.
Подписывайтесь на Telegram – xVibeNot