Обещал отдать модельку на публичное растерзание - держите
Как оно обучалось и что получилось:
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)
Интересуюсь небольшими моделями для запуска на всяких "чайниках" (например, 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-щик и времени на это меньше чем хотелось бы.
это вообще эксперимент и мне очень нравится его результат
модель тренировал gpt-sol, релиз готовил gpt-astra
2 правки по пути было это "выкинь виспер, возьми gigaam для замеров", просто точнее на русском и быстрее в инференсе, и "вот есть espeech, но еще возьми balalaika датасеты" и все, дальше 3-4 дня крутился /goal
https://4pda.to/forum/index.php?showtopic=1110815&view=findpost&p=144977414
особенность 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 диск.
Что нового:
добавились чекбоксы "Разделять чанки по предложениям" и "Разделять многоточием предложения в чанке".
Оказалось что Pocket-TTS хреново разделяет паузами предложения попавшие в один чанк. Это не особенность файнтюненной модели как я понял, а именно особенность самой Pocket-TTS. Первая моя идея была резделить чанки по .!?… и так появился первый чек бокс. Работает, но куча мелких чанков - результат мне не понравился.
Далее я отправил нейронки исследовать, они то и сказали что это особенность Pocket-TTS и нашли лайфхак - паузы даёт "…". После этого я сделал еще одну опцию "Разделять многоточием предложения в чанке" она как раз и делает замену регуляркой:
re.sub(r"(?<=[.!?…])\s+", " … ", text)
Было:Ув+ы, монумент+альная скульпт+ура - жанр весьм+а консерват+ивный. прич+ина +этого - в с+амой её монумент+альности.стало:
Ув+ы, монумент+альная скульпт+ура - жанр весьм+а консерват+ивный. … прич+ина +этого - в с+амой её монумент+альности.Результат с многоточиями мне понравился намного больше.
Флаги "Разделять чанки по предложениям" и "Разделять многоточием предложения в чанке" взаимоисключающие, включаете один из них, автоматом снимется другой.
Наже примеры:
оригинал, с флажком Разделять чанки по предложениям, с флажком Разделять многоточием предложения в чанке
Что нового:
Было обнаружено, что включение опции Разделять многоточием предложения в чанке может приводить к обрывам из за ложных срабатываний EOS, пауза воспринимается как окончание чанка. Была добавлен чек-бокс Детект обрыва, он автоматом включается и выключается если включать чек-бокс Разделять многоточием предложения в чанке, но вы можете вручную снять или поставить этот чек-бокс в любой момент. Если он включен включается детект обрыва - скрипт рассчитывает примерную длину аудио и если полученный файл короче - делает повторный синтез с другим seed, если это не помогает - делает повторный синтез с уменьшенным трешхолдом EOS, если и это не поможет - оставляет как есть. Но в тестах смена seed помогала с первой попытки. Расплата за эту опцию примерно в 1.5-2 раза дольше идёт синтез, вероятно чем быстрее CPU тем меньше будет эта разница.
Пример:
[140] На тр+етий день мо+и учител+я реш+или бр+осить пить. … на вр+емя, разум+еется. … Но окруж+ающие по-пр+ежнему выпив+али.
-> пауза: обычная (350 мс)
-> детект обрыва (4.8 с < 6.1 с), перегенерация помогла (7.8 с)
Если есть, сделайте генерацию с тем же seed, но без этой опции - и послушайте - так ли это.
Если в логах ничего нет, сделайте еще несколько генераций и если там нет - значит с этим голосом эта опция не нужна.
это хорошо или плохо?
и желательно почему