• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Deep-Live-Cam+RVC real-time.

raoulduke666

RAID-массив
Пользователь
Регистрация
08.10.2024
Сообщения
74
Реакции
102
Автор: raoulduke666
Написано специально для xss.pro (c)

Привет, читатель.

В этой статье описано краткое руководство по установке и работе с Deep-Live-Cam в связке с RVC(замена речи) в реальном времени.

Запуск проводился на 4060 VRAM=8, ОЗУ=16. Этого хватает с головой чтобы дипфейк и RVC работали в реальном времени не перегружая мою тачку.

Введение.
С дипфейком Deep-Live-Cam думаю многие знакомы и все знают, что его качество оставляет желать лучшего, но это можно компенсировать его простотой в установке и использовании. Да и если соблюдать некоторые условия, то в целом он может выдать неплохое качество с натяжкой.

С RVC ситуация сложнее. Во первых обучить КАЧЕСТВЕННО модель оказалось не так уж и просто, все очень сильно зависит от качества датасета, темпа речи таргета. Характеристики вашей тачки никак не повлияют на качество обучения, будет только разница во времени обучения, настройка пайплайна сводится только к количеству эпох (влияет на качество) и размеру batchsize (влияет на скорость обучения).

Самым сложным оказалось запустить это в реалтайм, в репозитории нет ни слова о том как это сделать, единственной подсказкой стало название батника "go-realtime-gui", который должен запустить интерфейс для работы в реалтайм и название текстовика с зависимостями "requirements-win-for-realtime_vc_gui.txt". На первый взгляд все просто, гитклон, установил зависимости, запустил батник и погнал...))) Но на деле все оказалось не так просто.

Установка Deep-Live-Cam.

Начнем с дипфейка. На форуме уже есть толковый мануал по установке.

https://xss.pro/threads/127106/

Повторятся не буду, единственное скажу, что лучше использовать venv при работе с окружением. Я не читал репозиторий внимательно, поэтому поставил через анаконда и потом после установки всех зависимостей у меня возникли проблемы с CUDA, то есть я не смог запустить дипфейк на GPU. Для этого дипфейка нужно использовать CUDA версии 11.8, а у меня уже был установлен CUDA 12.6 для другого окружения. И по каким то причинам в окружении под дипфейк у меня работал CUDA 12.6. Так как у меня уже был установлен CUDA11.8 нужной версии, то я попробовал скачать cuDNN 8.9.7, который работает под CUDA 11.X. И о чудо, после этого в окружении под дипфейк у меня встал CUDA11.8 и я смог его запустить на GPU.

Поэтому чтобы не тратить время на какое то говно используйте venv!!!

На всякий случай прикрепляю архив со всеми версиями cuDNN.

Установка RVC для обучения.
Я решил разделить установку RVC на две главы. Потому что под обучение и инференс в реальном времени используются 2 разных окружения. Как оказалось невозможно запустить реалтайм в окружении под обучение.

Весь репозиторий на китайском, через любую нейронку нормально переводится. Будем следовать инструкциям разработчиков.

Сперва заходим в директорию, куда будем ставить RVC.

Далее создаем окружение voice с версией python 3.8.
Код:
conda create -n voice python=3.8

Клонируем репозиторий.
Код:
git clone https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git

После этого сразу меняем версию pip, чтобы все зависимости смогли нормально встать.
Код:
python -m pip install pip==23.3.1

Установка зависимостей под инференс на GPU.
Код:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
По идеи CUDA скачивать не нужно. После команды выше в окружении должен быть CUDA 11.7, который нужен для запуска RVC.

Так как эта часть только про установку под обучение, то загружаем зависимости из "requirements.txt".
Код:
pip install -r requirements.txt

После этого запускаем infer-web
Код:
python infer-web.py

Тем временем в логах будет...
2025-05-24 00:36:10 | WARNING | main | assets/pretrained_v2/f0G48k.pth not exist, will not use pretrained model
2025-05-24 00:36:10 | WARNING | main | assets/pretrained_v2/f0D48k.pth not exist, will not use pretrained model
2025-05-24 00:36:12 | WARNING | main | assets/pretrained_v2/G48k.pth not exist, will not use pretrained model
2025-05-24 00:36:12 | WARNING | main | assets/pretrained_v2/D48k.pth not exist, will not use pretrained model
...

Больше никаких инструкций по установке в репозитории нет.

В браузере откроется вкладка с интерфейсом для инференса под уже заранее записанные аудио и обучение. Выглядит так будто этим уже можно пользоваться, но... ничего не заработает. Во время попытки обучить модель из логов я увидел, что требуется загрузить предобученые модели, к ним даже ссылки прилагаются на huggingface. Я подумал, отлично, загрузил модели, которые требуются, закинул в соответствующие папки для моделей. Запускаю эту помойку по новой, указал путь к аудио, на котором хочу учить нейронку, запускаю обучение и в логах я вижу, что модель успешно обучается, 1 эпоха в среднем училась по минуте, думаю ахуенно, сейчас должно заработать. Но когда я запустил нейроонку для инференса уже заранее подготовленного аудио я услышал какой то набор шумов вместо речи таргета. Проверил логи, вроде больше ничего не требует устанавливать и несколько ошибок, к которым нет толкового пояснения. И тут я трачу где то около 3 часов на исследование всех папок, всех исходников.

Все оказалось просто. В папке tools лежит python код с названием download_models. Прочитав код я понял, что на самом деле я установил не все модели, а только часть.

Установка необходимых моделей. Переходим в директорию tools и запускаем код.
Код:
cd ...\voice\Retrieval-based-Voice-Conversion-WebUI\tools
Код:
python download_models.py

После этих манипуляций можно запустить infer-web заново и приступить к обучению.

Обучение RVC.
Запускаем интерфейс для обучения.
Код:
python infer-web.py

Снимок экрана 2025-05-24 002649.png

Раздел который открылся будет использован только для проверки модели после обучения. Нам нужна вкладка "Обучение модели".

Снимок экрана 2025-05-24 003019.png

На первый взгляд какой то пиздец, но тут все предельно просто. Первое на что нужно обратить внимание, это видит ли прога видеокарту. В разделе "Шаг 2Б" должна отображаться ваша видеокарта, это видно еще на этапе запуска в логах, будет отображаться либо CPU либо GPU, очевидно должен быть GPU. Если вы все сделали как я описал выше и по каким то причинам CUDA не видит видюху, то земля пухом и счастливой ебки с CUDA, не знаю что могло пойти не так. Даже не пробуйте на CPU обучать, это займет ни один час на 20 эпох.

В логах видимость GPU для CUDA выглядит так:
2025-05-24 00:26:18 | INFO | configs.config | Found GPU NVIDIA GeForce RTX 4060
2025-05-24 00:26:18 | INFO | configs.config | Half-precision floating-point: True, device: cuda:0

А теперь по порядку.
Шаг 1.
Снимок экрана 2025-05-24 003830.png

В целом из описаний параметров все очень ясно. Наверное единственное что тут имеет вес это поддержка изменения высоты звука и версия архитектуры. Очевидно пение не интересно, меня интересует только речь, поэтому ставлю false. Версию архитектуры я ставлю V2, интуиция подсказывает, что она получше чем V1, больше я ничем тут не руководствуюсь.
Последний параметр "число процессов ЦП" имеет весь только на 2 шаге, чем больше число, тем быстрее анализируется аудио с речью таргета(возможно ошибаюсь). Я ставлю 4-6.

Шаг 2А.
Снимок экрана 2025-05-24 010717.png

Тут просто указываем путь к папке с аудио. Из документации можно узнать что аудио должно быть от 10 минут до 50 минут с речью. Номер говорящего оставляйте 0, скорее всего этот параметр нужен чтобы подтянуть речь 1 из 2 спикеров, но я пробовал обучать только на речи, где есть только 1 спикер, соответственно оставляю 0. Нужно нажать на "Обработать данные". На этом этапе аудио с таргетом обрезается на чанки по 1-5 секунд примерно. По какому принципу нарезаются фрагменты я не знаю, скорее всего вырезаются моменты где таргет молчит, на этих кусках обучается модель.
Я так понял это связано с тем что во время инференса в реальном времени в нейронку наша речь будет подавать чанками от 0.1 секунды до 2 секунд (настраиваемый параметр).

И тут оказывает влияние число процессов ЦП из 1 шага.
При числе процессов 7.
Снимок экрана 2025-05-24 005726.png


При числе процессов 2.
Снимок экрана 2025-05-24 005746.png

Выводы делайте сами.

Шаг 2Б.
Снимок экрана 2025-05-24 023108.png

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

Если на 1 шаге указать "Поддержка изменения высоты звука=true", то появится еще одно окно, в нем можно выбрать способ анализа аудио для обучения, на сколько я понял.
Снимок экрана 2025-05-24 023944.png

Шаг 3.
Снимок экрана 2025-05-24 024509.png

Тут тоже все изи. Самые важные параметры это "Полное количество эпох" и "Размер пачки для GPU" это единственное, что влияет на скорость и качество обучения.

  • "Полное количество эпох" или сколько эпох выбирать ?
Во вкладке "часто задаваемые вопросы" Очень доходчиво написано.
Если качество звука обучающего набора данных плохое, а уровень шума высокий, достаточно 20-30 эпох. Установка слишком высокого значения не улучшит качество звука вашего обучающего набора низкого качества.
Если качество звука обучающего набора высокое, уровень шума низкий, а продолжительность достаточная, вы можете увеличить его. Допустимо значение 200 (поскольку обучение происходит быстро, и если вы можете подготовить высококачественный обучающий набор, ваш графический процессор, скорее всего, сможет без проблем справиться с более длительным обучением).

Ходят слухи, что учить нужно на 1000-2000 эпох, может быть при условии, что вы сами записываете свою речь на какой нибудь студии и собираете датасет на несколько часов. Но к "боевым" условиям это не имеет никакого отношения, не сможете вы собрать датасет, который нужно учить 1000-2000 эпох. Не насилуйте лишний раз карточку.

  • "Размер пачки для GPU" или batch_size.
Задача сводится к тому чтобы загрузить VRAM как можно сильнее. Обучение должно пройти как можно быстрее чтобы не было перегрева GPU. Если вы укажете batch_size такой чтобы VRAM загрузился на половину вы не решите проблему перегрева, а только усугубите ситуацию с температурой, обучение будет длиться тупо дольше, а нагреваться все будет точно так же как при заполненном VRAM если не сильнее. Я при первом обучении/инференсе всегда указываю batch_size=2, чтобы просто глянуть как ведет себя GPU, а только потом подбираю подходящий batch_size, это к любым нейронкам относится.

  • Частота сохранения.
С такой частотой будут сохранятся модели. Это должно иметь вес только для обучения с большим количеством эпох, чтобы после обучения можно было проверить каждую модель и найти получше. Вообще для этого каждые 5 эпох выводится loss, и чем он меньше тем лучше, потери должны падать, но возможно для RVC это не очень информативно. Не всегда после обучения последняя эпоха лучшая.

В остальных окнах указываю везде нет, это вроде никак не влияет на обучение, да и мне не до конца ясно что и зачем нужно. Разве что "Кэшировать все рабочие сети в видеопамять" может быть полезно если датасет маленький, но опять же на качество не влияет, поэтому похуй. Важно качественно обучить а не сэкономить 5-10 минут, иначе смысла от обучения нет.

Слева в окошке должны быть указаны пути к заранее предобученным моделям. Если там ничего не указано нужно проверить есть модели в папке assets/pretrained_v2. И если есть то просто руками пути пропишите как на скрине, если нет то вы забыли запустить python код, который скачивает модели.

Как только вы указали все параметры, убедились что модели существуют, нужно нажать кнопку "обучить модель" и сразу после этого можно перемещаться в консоль, откуда был запущен infer-web.py.
Логи во время запуска должны выглядеть следующим образом:
Снимок экрана 2025-05-24 033107.png


2-3 минуты обучения. Дальше температура GPU не поднималась, так и оставалась в районе 60-65 градусов до конца обучения.
Снимок экрана 2025-05-24 033223.png


В конце обучения в логах отобразится.
INFO:XSS-test:training is done. The program is closed.
INFO:XSS-test:saving final ckpt:Success.

После обучения нужно нажать кнопку "Обучить индекс черт". Он создаст файл в формате INDEX. Разработчики заявляют, что он нужен чтобы во время инференса качество было лучше, но что с ним, что без, одна х#йня как будто. Но скорее всего у меня датасет сомнительного качества, поэтому мне уже ничего не поможет.

Теперь протестируем обученную модель. Для этого нужно перейти во вкладку "Изменение голоса" и нажать кнопку "Обновить список голосов"
Снимок экрана 2025-05-24 041244.png


После этого в графе "Желаемый голос" появится модель, которую мы обучили. Нужно ее выбрать + подтянется файл INDEX в "Автоматически найденные файлы индексов черт".

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

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

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

После преобразования ниже появится аудио, которое можно прослушать.
Снимок экрана 2025-05-24 042349.png

Да я обучал нейронку на вердитке ))) Это оказался единственный ютубер, который просто спокойно говорит на протяжении всех своих видео и он же является единственным спикером. Поэтому на нем можно удобно проводить тесты. Меня результат устроил, за 20 эпох я получил порядочный результат, порядочнее только супруга вердитка.

Модель сохраняется в папке "...\Retrieval-based-Voice-Conversion-WebUI\assets\weights"
Индекс файл сохраняется в логах модели "...\Retrieval-based-Voice-Conversion-WebUI\logs\XSS-test\trained_IVF703_Flat_nprobe_1_XSS-test_v2.index"

Установка RVC для инференса в реальном времени.
Так как в репозитории кроме названия батника и скриншота интерфейса для инференса в реал тайм нет ничего. То все нижеописанное не нужно воспринимать за чистую монету. Единственное подтверждение того, что это работает я нашел на каком то китайском видеохостинге, где я увидел тот же интерфейс, что на скриншоте в репозитории. А значит все должно работать.

Сперва заходим в директорию, куда будем ставить RVC.

Далее создаем окружение voiceRT с версией python 3.8.
Код:
conda create -n RTvoice python=3.8

Клонируем репозиторий.
Код:
git clone https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git

После этого сразу меняем версию pip, чтобы все зависимости смогли нормально встать.
Код:
python -m pip install pip==23.3.1

Установка зависимостей под инференс на GPU.
Код:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

Установка зависимостей под инференс в реальном времени.
Код:
pip install -r requirements-win-for-realtime_vc_gui.txt

Установка необходимых моделей. Переходим в директорию tools и запускаем код.
Код:
cd ...\voice\Retrieval-based-Voice-Conversion-WebUI\tools
Код:
python download_models.py

При запуске батника получится узнать что python файл называется gui_v1.
(voiceRT) C:\***\voiceRT\Retrieval-based-Voice-Conversion-WebUI>go-realtime-gui.bat
(voiceRT) C:\***\voiceRT\Retrieval-based-Voice-Conversion-WebUI>runtime\python.exe gui_v1.pyСистеме не удается найти указанный путь.
(voiceRT) C:\***\voiceRT\Retrieval-based-Voice-Conversion-WebUI>pauseДля продолжения нажмите любую клавишу . . .

Запускаем gui_v1 и видим нихуя.
(voiceRT) C:\***\voiceRT\Retrieval-based-Voice-Conversion-WebUI>python gui_v1.py
(voiceRT) C:\***\voiceRT\Retrieval-based-Voice-Conversion-WebUI>

Покопавшись в текстовике requirements-win-for-realtime_vc_gui и в коде gui_v1 я нашел несоответствие.
PySimpleGUI

Python:
import FreeSimpleGUI as sg

Значит нужно исправить либо текстовик под python код, либо в коде заменить на либу, которую подтянули из текстовика. Я оставил PySimpleGUI. Делайте как хотите разницы нет. Но этого не достаточно, при запуске gui_v1 вы опять увидите ничего.

Ситуация становится яснее.
Код:
python gui_v1.py > log.txt 2>&1

2025-05-23 01:55:27 | INFO | fairseq.tasks.text_to_speech | Please install tensorboardX: pip install tensorboardX
Traceback (most recent call last):
File "gui_v1.py", line 93, in <module> from infer.lib import rtrvc as rvc_for_realtime
File "C:\***\voiceRT\Retrieval-based-Voice-Conversion-WebUI\infer\lib\rtrvc.py", line 9, in
<module>
import faiss
ModuleNotFoundError: No module named 'faiss'

Установка недостающих библиотек.
Код:
pip install faiss-gpu
Код:
pip install tensorboardX

Далее по такому же принципу запускаю gui_v1 с логами. Получаю следующее.
2025-05-23 01:59:12 | INFO | faiss.loader | Loading faiss with AVX2 support.
2025-05-23 01:59:12 | INFO | faiss.loader | Successfully loaded faiss with AVX2 support.
Traceback (most recent call last):
File "gui_v1.py", line 93, in <module>
from infer.lib import rtrvc as rvc_for_realtime
File "C:\***\voiceRT\Retrieval-based-Voice-Conversion-WebUI\infer\lib\rtrvc.py", line 17, in <module>
import torchcrepe
ModuleNotFoundError: No module named 'torchcrepe'

Установка еще одной недостающей библиотеки.
Код:
pip install torchcrepe

Теперь смело запускаем gui_v1 и готовимся переводить иероглифы в интерфейсе.
Код:
python gui_v1.py

Снимок экрана 2025-05-24 065051.png


Надеюсь у вас тоже все заработало ну или почти все. В процессе установки мы потеряли "Темп индекса", если выкрутить его, то во время конвертации аудио прога крашнется с ошибкой. Остальные ползунки работают нормально.
OMP: Error #15: Initializing libomp140.x86_64.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://openmp.llvm.org/
Фиксить уже впадлу и так сойдет.

Специально для вас перевел на русский.
IMG_8353.jpg


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

  • Алгоритм оценки высоты звука: rmvpe. Он вроде не плохо себя показал, с ним явно лучше.
  • Длинна семпла. Наверное ключевой параметр, если указать слишком маленькое значение, то будет ощущение что у вас дрожит голос и вы сейчас заплачите. 0,4-0,6 мне показалось нормально. Если указать слишком большое значение, то конвертированное аудио будет с задержкой большой, для боевых условия подходит не очень хорошо, да и голос странный какой то.
  • Уменьшение выходного шума. Делает качество лучше.
С остальными параметрами не знаю как работать, тут просто пробовать и выкручивать самому нужно на протяжении какого то времени на разных моделях, тогда все будет ясно. Эта статья скорее про установку.

Deepfake+RVC realtime.
Я просто опишу на своем примере, он достаточно конченный потому что у меня нет вэбкамеры, но есть ноут с вэбкамерой и есть пк с видеокартой.

Сперва через VLC по RTCP я передаю изображение с вэбки на свой пк.
Полученное изображение я отображаю через захват окна в OBS и делаю так чтобы изображение с моим лицом было в левой части.
Запускаю виртуальную камеру.

Далее через команду python run.py --execution-provider cuda запускаю сам дипфейк
Выбираю лицо таргета и запускаю через кнопку live, предварительно виртуальная камера должна быть включена.

Снимок экрана 2025-05-24 081919.png


Как только у меня отобразилось окно с дипфейком "preview", в OBS я делаю еще один захват окна с дипфейком. И окно с дипфейком перекидываю в правую часть чтобы не перегородить свое лицо, иначе дипфейк перестанет работать.
Снимок экрана 2025-05-24 082056.png


Теперь нужно подключить вывод с RVC.

Пока дипфейк работает, запускаем RVC и врубаем конвертацию аудио.
По дфолту выводится звук в наушники, поэтому в OBS я выкручиваю звук микрофона до 0(чтобы не было слышно мою речь) и делаю захват выходного аудиопотока, в который выводится конвертированная речь чтобы было слышно только ее.

Я это делаю просто чтобы посмотреть как нейронки работают в реальном времени, я передаю изображение с дипфейка и аудио из RVC только в OBS, дальше это никуда не уходит. Я просто запускаю это в реальном времени и все, просто чтобы увидеть наглядно результат и чтобы можно было его записать например. Чтобы передать дипфейк и конвертированное аудио в какой нибудь майкрософт тимс условно нужно как то иначе изъебнуться с OBS. Думаю кому надо, тот осилит сам.

Самое крутое, это то что данная связка требует ~2,5 гб VRAM и почти не греет мою видеокарту, всего 50-55 градусов максимум. Это можно запускать спокойно на любом ноуте и с температурой должно быть все норм.

Для чего это можно использовать ? В целом если никого не смущает ублюдское качество вашей вэбкамеры, то может быть дипфейк сгодится в боевых условиях. Насчет RVC это может быть интересно только если модель реально хорошо обучена, а для этого нужен очень хороший и большой датасет, что в боевых условиях не всегда возможно. И очень важно, чтобы ваша речь была нормально поставлена, если вы будете че то себе под нос мямлить, то конвертация пройдет плохо. В идеале подошло бы для тех кто хочет снимать какие то видосы на ютаб или стримить, не торгуя своим лицом и голосом, главное чтобы маска не слетела.
 
Последнее редактирование:
поставил через анаконда
не рекомендую, какая-то переусложнённая фигня, похожая на спайварь - она прописывается в ~/.bashrc и отстукивает разрабам при каждом запуске баша (логине на сервер, запуске screen/tmux/mc, и т.п.)

Поэтому чтобы не тратить время на какое то говно используйте venv!!!
💯

C:\Users\ebosh\
не везде замазал :D
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх