Нейросетевые каверы для чайников

Пару недель назад я захотел сделать кавер с одним определённым голосом на какую-нибудь популярную песню.tl;dr всё получилось и ниже вы узнаете, как повторить такой результат:

Быстрое гугление выдаёт несколько онлайновых сервисов, в которых либо можно выбрать из списка уже обученных моделей, либо это дорого, долго и вне моего контроля над генерацией.

платно
платно

Если допустить немного пердолинга, то есть инструмент для локальной установки с простым веб-интерфейсом и кнопкой "Generate".

Нейросетевые каверы для чайников

Но для полноценной работы ему требуются обученные голосовые модели в формате RVC (об этом ниже), функционала обучения в нём нет.

Ещё немного поисков выдают вариации такого колаба:

Нейросетевые каверы для чайников

Для обучения нужно оплатить подписку Colab Pro, иначе процесс будет прибит сервером с ошибкой "недопустимая инструкция для бесплатного аккаунта". Я покупал подписку здесь.

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

Как это работает

Realistic Voice Cloning (реалистичное копирование голоса) или RVC работает по вполне понимаемому алгоритму.

Нейросетевые каверы для чайников

При обучении:

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

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

  • результат собирается в базу данных и индексируется

При копировании голоса:

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

Конечно "под капотом" всё устроено значительно сложнее, но принцип понятен.

Устанавливаем скрипты для обучения локально

Всё необходимое можно взять отсюда.

Нейросетевые каверы для чайников

Если умеете пользоваться гитом и командной строкой, то можете сразу перейти к пункту про обучение модели. Ниже будет подробная инструкция по установке.

да это же буквально я
да это же буквально я

Требования к железу:

  • компьютер с Windows или Linux
  • дискретная видеокарта с 8 ГБ памяти или больше (поддерживаются NVIDIA, AMD и Intel)

Git

Пользователи линукса разберутся сами, остальным качать отсюда.

Нейросетевые каверы для чайников

Из важных флагов установки только этот:

Нейросетевые каверы для чайников

После запустите командную строку (Win+R > powershell > Enter) и проверьте правильность установки командой:

git -v

Должно быть что-то типа этого:

Нейросетевые каверы для чайников

Теперь командную строку можно закрыть.

Python

Установим python версии 3.9 (это нужно для инструмента генерации в будущем) отсюда (внизу страницы):

Нейросетевые каверы для чайников

При установке необходимо отметить эти опции:

менеджер пакетов для установки зависимостей
менеджер пакетов для установки зависимостей
добавление в переменные среды для запуска из командной строки
добавление в переменные среды для запуска из командной строки

Ещё раз запускаем командную строку и проверяем правильность установки:

python --version
Нейросетевые каверы для чайников

FFmpeg

Качаем отсюда архив:

Нейросетевые каверы для чайников
Нейросетевые каверы для чайников

И распаковываем в любую папку. В моём случае C:\ffmpeg и файл ffmpeg.exe находится по адресу C:\ffmpeg\bin\ffmpeg.exe

Почти готово, нужно только добавить путь к ffmpeg в переменную path.

Нажимаем Win и начинаем вводить "изменение переменных среды":

выбираем этот пункт
выбираем этот пункт
Нейросетевые каверы для чайников

В системных переменных выбираем Path и нажимаем "Изменить..."

Нейросетевые каверы для чайников

Создаём новую переменную с путём до файла ffmpeg.exe

Нейросетевые каверы для чайников

Опять открываем командную строку и проверяем правильность установки:

ffmpeg
Нейросетевые каверы для чайников

Непосредственно установка

Создайте на диске папку, где будет размещаться софт для обучения модели. У меня это C:\AIcovers (обойдитесь без пробелов в именах папок, это упростит работу в будущем).

Откройте командную строку и перейдите в только что созданную папку.

cd C:\AIcovers
Нейросетевые каверы для чайников

Клонируем этот репозиторий в папку train командой:

git clone https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git train
Нейросетевые каверы для чайников

Переходим в папку train:

cd train

Устанавливаем необходимые библиотеки:

pip install torch torchvision torchaudio

Для связки Windows и карт RTX30xx нужно выполнить:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

Для варианта Linux и AMD:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2

Далее выберите свой вариант.

Карта NVIDIA:

pip install -r requirements.txt

Windows и карта AMD или Intel:

pip install -r requirements-dml.txt

Linux и карта Intel:

pip install -r requirements-ipex.txt

Осталось скачать предобученные модели для обработки звука. В основном репозитории нет скрипта для автоматического скачивания этих файлов, поэтому я набросал нечто корявое, но рабочее и отправил PR в основной репозиторий. После мержа курсивный текст будет неактуален.

Скачайте и сохраните у себя файл download_models.py в папке train/tools, куда мы клонировали репозиторий. Затем выполните команду:

python tools/download_models.py
Нейросетевые каверы для чайников

Готово. Запускаем командой:

python infer-web.py

И у нас автоматически должно открыться окно браузера с интерфейсом

Нейросетевые каверы для чайников

Если видите это — поздравляю, вы всё сделали правильно. Читайте дальше, чтобы понять, как этим пользоваться.

Обучаем голосовую модель

В интерфейсе переходим на вкладку "Обучение модели":

Нейросетевые каверы для чайников

Нужно подготовить данные для обучения модели.

Задайте название для модели голоса:

Нейросетевые каверы для чайников

Создайте на диске папку и положите в неё один или несколько файлов с записью голоса. Это должны быть аудиофайлы почти в любом формате. Точно поддерживаются wav, mp3 и m4a.

Голос должен быть максимально очищен от шумов и фоновой музыки. Не должно быть посторонних звуков, которые человек не может издавать ртом.

Для редактирования звука можно воспользоваться бесплатным редактором Audacity.

Введите адрес к папке с аудиозаписями в это поле:

Нейросетевые каверы для чайников

Если в пути к этой папке есть пробелы, то добавьте кавычки:

Нейросетевые каверы для чайников

Нажмите кнопку "Обработать данные" и дождитесь сообщения "end preprocess" в поле справа от кнопки.

Следующая операция выполняется немного дольше. Сперва выберите алгоритм обработки данных (извлечения черт):

Нейросетевые каверы для чайников

Лучшее качество дают rmvpe и rmvpe_gpu. Они по-разному нагружают видеокарту и центральный процессор. Я так и не понял, какой лучше, поэтому выбираю второй.

Нажмите кнопку "Извлечь черты" и дождитесь сообщения "all-feature-done" в поле справа от кнопки.

Нейросетевые каверы для чайников

В последнем пункте задайте число "эпох обучения".

Нейросетевые каверы для чайников

Рекомендуется задавать такие значения:

  • 20-30 для исходника низкого качества с высоким уровнем шума, большее число не улучшит качества обучения
  • ~200 для датасета высокого качества, с низким уровнем фонового шума и достаточной продолжительностью (10 минут и более)

Этот параметр влияет на использование видеопамяти:

Нейросетевые каверы для чайников

Рекомендаций по оптимальному значению не дам, подбирайте экспериментально для каждого датасета, чтобы расход видеопамяти не вылезал за общий её объём, иначе будет использована системная ОЗУ (та самая DDR на материнской плате) и вместо ускорения обучения вы получите замедление.

использовано 3.9 ГБ более медленной системной памяти
использовано 3.9 ГБ более медленной системной памяти

Нажимайте кнопку "Обучить модель" и ждите окончания процесса. Как и в предыдущих этапах в правом поле будет отображаться результат. В консоли можете следить за ходом процесса:

обычно первый цикл (эпоха) обучения выполняется дольше остальных (последнее значение)
обычно первый цикл (эпоха) обучения выполняется дольше остальных (последнее значение)

Медленно, можно быстрее:

уменьшаем значение
уменьшаем значение
сразу же получаем значительное ускорение на том же датасете (11 секунд против 57)
сразу же получаем значительное ускорение на том же датасете (11 секунд против 57)

Дожидаемся окончания обучения.

Нейросетевые каверы для чайников

Теперь нажимаем кнопку "Обучить индекс черт" и ждём ещё немного.

Нейросетевые каверы для чайников

Заходим в папку с нажим скриптом и по пути assets\weights находим файл *имя-модели*.pth (в моём случае my-voice.pth) и копируем его в отдельную папку.

Теперь по пути logs\*имя-модели* (в моём случае logs\my-voice) находим файл с именем формата added_IVFxxx_Flat_nprobe_1_*имя-модели*_v2.index (у меня это added_IVF2050_Flat_nprobe_1_my-voice_v2.index) и копируем его в папку к файлу .pth из предыдущего пункта.

Запакуйте оба файла в архив zip с любым именем. Можно использовать встроенный инструмент Windows из контекстного меню:

Нейросетевые каверы для чайников

Или значительно более быстрый бесплатный 7zip.

Поздравляю, этот архив и есть нужная голосовая модель в формате RVC.

Замена голоса в треках

Предыдущий инструмент, который мы использовали для тренировки модели, вполне подходит для генерации новых треков, но удобство использования у него на очень низком уровне. Обещаю внести свой вклад в исправление этого недостатка. А пока установим намного более дружелюбный инструмент.

Нейросетевые каверы для чайников

Установка

Для начала установим необходимый sox.

Нейросетевые каверы для чайников

Установите его и добавьте в переменные среды путь к папке установки, как мы делали в прошлый раз для FFmpeg:

Нейросетевые каверы для чайников

Откройте командную строку и проверьте правильность установки командой:

sox --version
Нейросетевые каверы для чайников

Перейдите в папку, которую мы создавали для инструмента обучения моделей и клонируйте репозиторий:

cd C:\AIcovers git clone https://github.com/SociallyIneptWeeb/AICoverGen.git make

Установим зависимости:

cd make pip install -r requirements.txt

Скачаем предобученные модели:

python src/download_models.py

Готово. Запускаем:

python src/webui.py

В консоли после запуска будет ссылка, по которой открывается веб-интерфейс:

Нейросетевые каверы для чайников

Для задания другого сетевого порта добавьте параметр --listen-port *номер порта*, а для доступности интерфейса с других компьютеров в локальной сети добавьте параметр --listen.

python src/webui.py --listen --listen-port 8081

Для доступности из интернета можно добавить параметр --share:

Нейросетевые каверы для чайников

Использование

Откроем интерфейс и перейдём на вкладку "Upload model", чтобы добавить обученную на предыдущем этапе модель голоса:

Нейросетевые каверы для чайников

Выберите файл для загрузки, задайте имя модели в поле "Model name" и нажмите кнопку "Upload model".

Если всё правильно, то в поле "Output message" вы увидите такое сообщение:

Нейросетевые каверы для чайников

Теперь переходите на вкладку "Generate" и нажимайте кнопку "Refresh models".

Нейросетевые каверы для чайников

В списке "Voice models" появится загруженная вами модель. Выберите её.

Нейросетевые каверы для чайников

В поле "Song input" можно либо вставить ссылку на ролик на YouTube, либо загрузить файл, выбрать вариант "Upload file instead". Рекомендую начать эксперименты с песни Джонни Кэша, у неё хорошо отделяется вокал и достаточно разборчивый голос для замены.

Нажимайте кнопку "Generate" и ждите результата. Подбирайте параметры, пока не получится что-то хорошее. Делитесь получившимися шедеврами.

Если будут вопросы, то можете задать их мне в телеграме.

Подписывайтесь на канал, ставьте лайки, жмите на колокольчик и всё такое. Всех люблю и обнимаю.

88
5 комментариев

Add PATH

1
Ответить

Можно так, но новичок потом будет искать, как исправить добавленное значение, если ошибётся. Поэтому через интерфейс.
Более продвинутые пользователи сами смогут это сделать без гайда.

1
Ответить

при выполнении команды "python infer-web.py" вылетела ошибка "ImportError: cannot import name 'Undefined' from 'pydantic.fields'"
фиксится этим"pip install pydantic==1.10.11"

1
Ответить

gradio.exceptions.Error: 'index -1 is out of bounds for axis 0 with size 0' - я хуй знает что не так. У них даже на гите есть описание такого бага и нихуя.

Ответить

Я пытался выборочно лечить подобные косяки, но действеннее всё заново переустановить.

1
Ответить