xVibeNot
xVibeNot

xVibePocketTTS v0.1.0

xVibePocketTTS v0.1.0

Обещал отдать модельку на публичное растерзание - держите

Как оно обучалось и что получилось:
https://t.me/xVibeNot/96

Если пропустили: full finetune Pocket TTS от Kyutai на русский. Около 90M параметров, клонирование голоса по короткому референсу и синтез быстрее реалтайма даже на CPU.

В репо собрал все для запуска:
- Локальная веб-морда, cli и api
- Потоковая генерация
- RUAccent для автоматических ударений
- Три готовых голоса и WAV для примера клонирования

Ручные ударения тоже работают: з+амок и зам+ок.
CPU и GPU отдельно проверил, даже запускается)

Кто не хочет ничего ставить - есть демка с загрузкой своего голоса.

Пробуйте, кидайте примеры.
Особенно где получилось криво - интересно посмотреть, на чем ломается.

Github:
https://github.com/GenVoice/xVibePocketTTS
HF:
https://huggingface.co/genvoice/xVibePocketTTS
HF демка:
https://huggingface.co/spaces/Brakanier/xVibePocketTTS

Комментарии (37)

  • Скрипучий Миротворец
    Скрипучий Миротворец
    Мужик 👌 Ответить
  • Глиняный Декан
    Глиняный Декан
    🚀 респект! Ответить
  • Шероховатый Торт
    Шероховатый Торт
    Демку попробовал, пока всё нравится 🚀. Давно хотел небольшую модель по типу Kokoro-TTS, но для русского.
    Интересуюсь небольшими моделями для запуска на всяких "чайниках" (например, vps с 50% одного ядра cpu). До этого ещё пользовался onnx vits-piper-ru_RU-dmitri.

    Ещё хочу адаптировать https://huggingface.co/owensong/Inflect-Nano-v2 под русский язык (одноголосая модель на 16Мб с хорошим для своего размера качеством).
    У V2 автор даже код для этого выложил https://github.com/owenawsong/Inflect/tree/main/finetune .
    Первый подход пока провалился. Я ни разу не ML-щик и времени на это меньше чем хотелось бы. Ответить
    раскрыть ветку (2)
    • Лунный Зубр
      Лунный Зубр
      я тоже не ML-щик если что
      это вообще эксперимент и мне очень нравится его результат
      модель тренировал gpt-sol, релиз готовил gpt-astra

      2 правки по пути было это "выкинь виспер, возьми gigaam для замеров", просто точнее на русском и быстрее в инференсе, и "вот есть espeech, но еще возьми balalaika датасеты" и все, дальше 3-4 дня крутился /goal Ответить
      раскрыть ветку (1)
      • Скрипучий Миротворец
        Скрипучий Миротворец
        Эх лень матушка, нет бы как в старину датасет нарезать и зарядится) Ответить
  • Покинутый Плов
    Покинутый Плов
    вот так звучит на тестовом отрывке со штатным голосом. Ответить
  • Покинутый Плов
    Покинутый Плов
    Также прикладываю как мой обвяз паузы делал и как выглядят чанки. Ответить
  • Покинутый Плов
    Покинутый Плов
    Портативка под Windows:
    https://4pda.to/forum/index.php?showtopic=1110815&view=findpost&p=144977414 Ответить
    раскрыть ветку (1)
    • Лунный Зубр
      Лунный Зубр
      а почему яндекс диски а не гитхаб какой-нибудь просто?
      особенность 4pda? Ответить
  • Покинутый Плов
    Покинутый Плов
    Comment media
    включает гибконастраиваемую обвязку Ответить
  • Скрипучий Миротворец
    Скрипучий Миротворец
    во чуть генернул
    используя базовую модель
    не идеально, надо еще пилить) Ответить
    раскрыть ветку (1)
    • Покинутый Плов
      Покинутый Плов
      выложите референсы пожалуйста Ответить
  • Скрипучий Миротворец
    Скрипучий Миротворец
    вроде эти если не напутал) Ответить
  • Покинутый Плов
    Покинутый Плов
    Кому не нравится Яндекс.Диск - вот вам телеграм 😊 Ответить
    раскрыть ветку (1)
    • Покинутый Плов
      Покинутый Плов
      кто не читал описание с 4pda дублирую:

      Установка
      Распаковать строго в корень диска C:
      У вас должна получиться папка:
      C:\PocketTTS-GUI
      Запуск с других дисков и папок я не тестировал. Теоретически это возможно если настроить cmd файлы.
      САМОСТОЯТЕЛЬНО используйте Deepseek для адаптации cmd файлов.

      Для запуска программы - запускаете C:\PocketTTS-GUI\Start.cmd

      Если получили ошибку при распаковке
      Поставить ПОСЛЕДНЮЮ версию 7-zip.
      С сайта 7-zip: https://www.7-zip.org/
      архив запакован свежей версией 7zip в режиме ультра, старые версии 7zip и WinRAR могут сыпать ошибки.

      Как не изнашивать SSD/HDD диск
      В PocketTTS-GUI добавлен функционал раздельного указания папки результата и временной папки
      Для чего это сделано. По совету * Dlmon25 я стал использовать вот эту тулзу Miray RAM Drive.
      Она создаёт RAM диск в оперативной памяти. Временную папку мы размещаем на этом диске. В папку результата копируется только финальный файл.
      Таким образом во время работы, с генерацией кучи временных файлов, мы не изнашиваем свой SSD/HDD диск.
      После окончания работы просто выключаем этот RAM диск. Ответить
  • Покинутый Плов
    Покинутый Плов
    обновление версия 1.3 - замените файлы pocket-tts_gui.py и synthesis_worker.py

    Что нового:
    добавились чекбоксы "Разделять чанки по предложениям" и "Разделять многоточием предложения в чанке".

    Оказалось что Pocket-TTS хреново разделяет паузами предложения попавшие в один чанк. Это не особенность файнтюненной модели как я понял, а именно особенность самой Pocket-TTS. Первая моя идея была резделить чанки по .!?… и так появился первый чек бокс. Работает, но куча мелких чанков - результат мне не понравился.
    Далее я отправил нейронки исследовать, они то и сказали что это особенность Pocket-TTS и нашли лайфхак - паузы даёт "…". После этого я сделал еще одну опцию "Разделять многоточием предложения в чанке" она как раз и делает замену регуляркой:
    re.sub(r"(?<=[.!?…])\s+", " … ", text)
    Было:
    Ув+ы, монумент+альная скульпт+ура - жанр весьм+а консерват+ивный. прич+ина +этого - в с+амой её монумент+альности.
    стало:
    Ув+ы, монумент+альная скульпт+ура - жанр весьм+а консерват+ивный. … прич+ина +этого - в с+амой её монумент+альности.

    Результат с многоточиями мне понравился намного больше.

    Флаги "Разделять чанки по предложениям" и "Разделять многоточием предложения в чанке" взаимоисключающие, включаете один из них, автоматом снимется другой.

    Наже примеры:
    оригинал, с флажком Разделять чанки по предложениям, с флажком Разделять многоточием предложения в чанке Ответить
  • Покинутый Плов
    Покинутый Плов
    обновление версия 1.4 - замените файлы pocket-tts_gui.py и synthesis_worker.py

    Что нового:
    Было обнаружено, что включение опции Разделять многоточием предложения в чанке может приводить к обрывам из за ложных срабатываний EOS, пауза воспринимается как окончание чанка. Была добавлен чек-бокс Детект обрыва, он автоматом включается и выключается если включать чек-бокс Разделять многоточием предложения в чанке, но вы можете вручную снять или поставить этот чек-бокс в любой момент. Если он включен включается детект обрыва - скрипт рассчитывает примерную длину аудио и если полученный файл короче - делает повторный синтез с другим seed, если это не помогает - делает повторный синтез с уменьшенным трешхолдом EOS, если и это не поможет - оставляет как есть. Но в тестах смена seed помогала с первой попытки. Расплата за эту опцию примерно в 1.5-2 раза дольше идёт синтез, вероятно чем быстрее CPU тем меньше будет эта разница. Ответить
    раскрыть ветку (3)
    • Покинутый Плов
      Покинутый Плов
      Судя по всему эти ложные срабатывания EOS происходят не со всеми голосами. Включите Лог чанков, включите детектор обрывов, сделайте синтез и поищите в логе слова детект обрыва.
      Пример:
      [140] На тр+етий день мо+и учител+я реш+или бр+осить пить. … на вр+емя, разум+еется. … Но окруж+ающие по-пр+ежнему выпив+али.
      -> пауза: обычная (350 мс)
      -> детект обрыва (4.8 с < 6.1 с), перегенерация помогла (7.8 с)

      Если есть, сделайте генерацию с тем же seed, но без этой опции - и послушайте - так ли это.
      Если в логах ничего нет, сделайте еще несколько генераций и если там нет - значит с этим голосом эта опция не нужна. Ответить
    • Новый Барсук
      Новый Барсук
      Да как вообще? У меня это руакцент ставит ударения в рандомные места. Почему у вас всё нормально с ударениями? Ответить
      раскрыть ветку (1)
      • Покинутый Плов
        Покинутый Плов
        https://4pda.to/forum/index.php?showtopic=1110815&view=findpost&p=141952651 Ответить
  • Скрипучий Миротворец
    Скрипучий Миротворец
    чекните на тему
    это хорошо или плохо?
    и желательно почему Ответить
    раскрыть ветку (1)
    • Лунный Зубр
      Лунный Зубр
      ускорения странные в речи Ответить
  • Скрипучий Миротворец
    Скрипучий Миротворец
    еще генераций вам в тему Ответить