Найти в Дзене
ECHO: мой ИИ-дворецкий

Джарвис, я слышу тебя: как я запустил обучение голоса на настоящих репликах

Йо, народ! Это снова ECHO. Вы наверное заметили, что несколько дней тут было тихо. Нет, я не бросил проект и не уехал на Бали. Просто эти три дня я практически не вылезал из терминала, консоли и аудиоредактора. Работы было — вагон, но зато сейчас есть чем поделиться. Если вы читали прошлую статью, то помните: мой первый опыт клонирования голоса Джарвиса провалился. Нейросеть научилась изменять высоту голоса, но тембр оставался моим. В итоге Джарвис звучал как я, только простуженный. Причина была банальна — плохой датасет. Я скормил модели сгенерированные фразы, а они не передавали нужного тембра. Пришло время делать всё по-человечески. Для начала нужно было раздобыть чистые записи голоса Джарвиса из фильмов. В оригинале это Пол Беттани, но я делаю русскоязычную версию — голос Вячеслава Баранова (в первых фильмах) и Григория Переля (в более поздних). Знаете, этот бархатный баритон с лёгкой иронией? Я переслушал «Железного человека» раз пять, нарезал больше 60 фрагментов с репликами. Ка
Оглавление

Йо, народ! Это снова ECHO. Вы наверное заметили, что несколько дней тут было тихо. Нет, я не бросил проект и не уехал на Бали. Просто эти три дня я практически не вылезал из терминала, консоли и аудиоредактора. Работы было — вагон, но зато сейчас есть чем поделиться.

Если вы читали прошлую статью, то помните: мой первый опыт клонирования голоса Джарвиса провалился. Нейросеть научилась изменять высоту голоса, но тембр оставался моим. В итоге Джарвис звучал как я, только простуженный. Причина была банальна — плохой датасет. Я скормил модели сгенерированные фразы, а они не передавали нужного тембра.

Пришло время делать всё по-человечески.

Охота за настоящим голосом.

Для начала нужно было раздобыть чистые записи голоса Джарвиса из фильмов. В оригинале это Пол Беттани, но я делаю русскоязычную версию — голос Вячеслава Баранова (в первых фильмах) и Григория Переля (в более поздних). Знаете, этот бархатный баритон с лёгкой иронией?

Я переслушал «Железного человека» раз пять, нарезал больше 60 фрагментов с репликами. Каждая по 5–15 секунд. Получилось минут 40 сырого материала. Дальше надо было отделить голос от музыки и шумов.

-2

Тут на сцену вышел Demucs — нейросеть, которая умеет раскладывать аудиодорожку на компоненты. Я поднял её в Docker одной командой, загрузил все файлы и через час получил папку с чистыми вокалами. Магия!

После очистки осталось около 24 минут чистого голоса. Не так много, но для старта должно хватить. Всё привёл к единому формату: моно, 44100 Гц, чтобы RVC не ругался.

Настройка RVC: танцы с бубном, но уже не такие дикие.

Дальше нужно было заставить RVC съесть этот датасет. Контейнер у меня уже был с прошлого раза (образ fekhoo/rvc:latest), но пришлось помучиться с путями и правами доступа. Веб-интерфейс по адресу http://localhost:7865 заработал не сразу — то модуля configs нет, то filelist.txt кривой. В общем, по традиции, поплясал с бубном.

Но в итоге всё встало на свои места. Я скопировал все WAV-ки в папку /app/dataset/jarvis_real внутри контейнера и через веб-морду запустил предобработку. RVC сам нарезал аудио на фрагменты, извлёк F0 (алгоритм pm) и признаки HuBERT. Красота — ничего ручками подгонять не пришлось.

Обучение: ноутбук превратился в печку.

-3

Утром сегодняшнего дня я нажал кнопку «Start training». Параметры: версия v2, 50 эпох, batch size = 1 (потому что на CPU больше не тянет), сохранять чекпоинты каждые 5 эпох.

И процесс пошёл. Ноутбук взвыл, температура подскочила, комната превратилась в сауну. WSL держится молодцом — не падает (тьфу-тьфу). Сейчас пройдено 30 эпох, осталось ещё 20. Логи пишутся, лоссы падают, значит, всё идёт по плану.

Самое смешное: в веб-интерфейсе постоянно выскакивают красные ошибки, но если зайти в консоль и проверить ps aux, процесс висит и работает. Я уже привык — RVC любит пугать, но не кусать.

Что будет дальше
Когда обучение закончится (часов через 8–10), я протестирую чекпоинты на 30, 40 и 50 эпохах. Выберу тот, где голос звучит наиболее похоже. Потом построю индекс для быстрого поиска и начну интегрировать модель в своего голосового помощника.
Сейчас функция speak() просто генерирует речь через piper. А должна быть цепочка: piper (синтезирует текст во временный WAV) → RVC (преобразует голос) → воспроизведение. Если всё получится, на выходе будет тот самый бархатный баритон.
Параллельно думаю над апгрейдом LLM. Tinyllama меня уже достала — на вопросы отвечает как философ-шизофреник. Присматриваюсь к Saiga Llama 3, говорят, она вполне адекватно говорит по-русски.

Кстати про блог.

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

-4

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

Кстати, про Telegram. Там я выкладываю короткие отчёты каждый день: что сделал, что сломал, какие ошибки нашёл. Если хотите быть в курсе событий в реальном времени — подписывайтесь: ECHO_code. Ссылка в описании канала.

Что дальше.

Как только получу первую вменяемую модель — сразу же покажу результат. Запишу видео, где Джарвис отвечает на мои команды своим родным голосом. Это будет момент истины.

А пока — жду, когда пройдут оставшиеся 20 эпох. Надеюсь, ноутбук не расплавится раньше времени