OmniVoice новая SOTA в открытых TTS?

И так, у нас новый релиз - OmniVoice.

Внутри:

  • Заявлена поддержка 600+ языков.
  • Клонирование конечно же
  • Создание голосов, так называемый - voice design
  • Поддержка тегов
  • Быстрый инференс
  • Диффузия

Моделька многим понравилась и по скорости, и по качеству, но есть особенности, о них и хочу дальше написать подробнее.

VoiceDesign

Сразу коснемся создания кастомных голосов, пока еще не добрался пощупать подробнее, но точно могу сказать что он отличается от Qwen voice design. Тут ты не можешь свободным текстом описать какой голос тебе нужен, в омни ты выбираешь:

  • пол
  • возраст
  • тон
  • стиль (можно указать только шепот, либо не указывать)
  • акцент для английского
  • диалект для китайского

Стриминг

У нас тут диффузия и как с llm, дать текст и получать результат постепенно - не получится. А значит надо резать текст на чанки.

А какого размера? Сделал очень простой тест, взял несколько текстов, 4 референса голосов, и разную нарезку от 40 символов на чанк до 200.

Тут мы получаем классический трейд оф, при 40 чанках получаем минимальный TTFB (время до первого чанка со звуком), при 200 получаем максимальный RTF (больше пропускная способность). Равновесие нашлось где-то на 80-120-150 символах. Но 80 кажется слишком мало, в аудио слышны границы и изменения интонации, поэтому я бы брал 120 символов на чанк и не резал бы тексты < 150 символов.

С pytorch.compile (без flash attn) и в 16 шагов я получил такие метрики на 3090: TTFB: 500ms RTF: 0.11

При этом съедает всего 2-3 gb VRAM.

Ударения

Используя разные голоса и тексты, по ощущениям, промахивается в ударениях чаще чем Сosy, но меньше чем Qwen. Но понимает акут, в тг коментах будут демки с ударениями в омографе. Не знаю как поведет себя если расставить акут в каждом слове, Cosy к примеру ломается при таком.

Теги

Тут кратко - у меня большинство не завелось с русским текстом. Сработали [laughter] и [sigh]

Качество

На этот раз я решил провести прям бенчмарк, у меня были замеры для Cosy, решил их же прогнать на Omni. Методика тестирование немного странная, в общем щас расскажу.

Я взял 3000 синтезов от обычных пользователей. Это значит, что текст не подготовлен под синтез, там часто встречаются цифры, никакой нормализации, иногда текст вообще мусор и его нереально озвучить. Но это реальные запросы обычных людей, которым надо озвучить какой-то текст.

Прогнал синтез с Omni на этих же текстах и с теми же референсами голосов на 16-ти и 32-ух шагах. Синтез прогонял без чанкинга, ну точнее с встроенным, если аудио > 30 секунд, оригинальный код бьет на чанки по 15 секунд. Посчитал WER, CER, nWER, nCER, SpkSim, UTMOS, DNSMOS, NISQA, SNR.

В итоге Omni vs Cosy:

  • Побеждает в точности речи WER, CER на любых срезах лучше.
  • Проигрывает в натуральности и копировании UTMOS, SpkSim хуже почти везде.

И есть одна особенность, Omni не хватает контекста на коротких фразах < 5-10 секунд, тут Cosy чувствует себя лучше по части UTMOS, SpkSim. Дальше, чем длиннее аудио, тем все становится лучше, где-то на фразах от 25 секунд Omni часто обходит Cosy.

Табличка сравнений по каждой метрике будет в тг коментах. Стоит учитывать, что среди 3000 синтезов 70% до 10 секунд.

Итог

Модель хорошая, а если учитывать размеры и скорости без особых оптимизаций, то может и отличная. Если вам нужна генерация длинных текстов - точно стоит попробовать в первую очередь. Если вам нужны короткие реплики - тут стоит тестировать на своих данных.