paint-brush
Как озвучить клон с помощью SoftVC VITS и Bert-VITS2: глубокое погружениек@techshinobi
970 чтения
970 чтения

Как озвучить клон с помощью SoftVC VITS и Bert-VITS2: глубокое погружение

к Tech Shinobi12m2024/03/06
Read on Terminal Reader

Слишком долго; Читать

В предыдущем посте я немного попробовал веб-интерфейс TTS Generation и нашел его интересным. Итак, я решил обучить полезную модель своему собственному голосу. В этом проекте клонирования голоса рассматриваются как SVC для изменения голоса, так и VITS для преобразования текста в речь. Не существует одного инструмента, который выполнял бы все задачи. Я протестировал несколько инструментов для этого проекта. Многие хорошие руководства, такие как этот, этот и этот, написаны на китайском языке. Поэтому я подумал, что было бы полезно опубликовать мои заметки на английском языке.
featured image - Как озвучить клон с помощью SoftVC VITS и Bert-VITS2: глубокое погружение
Tech Shinobi HackerNoon profile picture
0-item

Оглавление

  • Глубокое погружение в клонирование голоса с помощью SoftVC VITS и Bert-VITS2
    • Подготовьте набор данных
      • Отрывок из песни
        • Рабочие процессы УФР
      • Подготовка к записи вокала
        • Аудиооборудование Скряги
        • Рабочие процессы Audacity
      • аудио-слайсер
        • Очистка набора данных
        • Громкость совпадения
    • so-vits-svc
      • Настройка среды
      • Инициализация
        • Загрузите предварительно обученные модели
        • Подготовка набора данных
        • Редактировать конфигурации
      • Обучение
      • Вывод
      • Редактирование аудио
    • so-vits-svc-fork
      • Монтаж
      • Подготовка
      • Обучение
      • Вывод
    • ДДСП-SVC
      • Подготовка
      • Обучение
      • Вывод
    • Берт-витс2-В2.3
      • Инициализация
      • Подготовка
        • Транскрипция
      • Обучение и вывод
    • Витс-простой-API
      • Твики
      • Поделиться моделями


В предыдущем посте я немного попробовал TTS Generation WebUI и нашел его интересным. Итак, я решил обучить полезную модель своему собственному голосу.


В этом проекте клонирования голоса рассматриваются как SVC для изменения голоса, так и VITS для преобразования текста в речь. Не существует одного инструмента, который выполнял бы все задачи.


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


Хотя so-vits-svc был заархивирован несколько месяцев, вероятно, из-за притеснений, он по-прежнему остается инструментом для достижения наилучшего результата.


Другие связанные инструменты, такие как so-vits-svc-fork , so-vits-svc-5.0 , DDSP-SVC и RVC , обеспечивают либо более быструю оптимизацию, либо больше функций, либо лучшие интерфейсы.


Но при наличии достаточного количества времени и ресурсов ни одна из этих альтернатив не сможет конкурировать с превосходным результатом, полученным исходным so-vits-svc.


Для TTS новый инструмент под названием Bert-VITS2 работает фантастически и уже вышел на рынок в прошлом месяце. У него есть совершенно разные варианты использования, например, создание аудиоконтента.

Подготовьте набор данных

Аудиофайлы набора данных должны быть в формате WAV, 44100 Гц, 16 бит, моно, в идеале 1-2 часа.

Отрывок из песни

Ultimate Vocal Remover — самый простой инструмент для этой работы. Есть тема , где все подробно описано.

Рабочие процессы УФР

  • Удалить и извлечь Инструментальную
    • Модель: VR-UVR(4_HP-Vocal-UVR)

    • Настройки: 512 - 10 - графический процессор

    • Выход Инструментальный и нечистый вокал


  • Удалите и извлеките бэк-вокал.
    • Модель: VR-UVR(5_HP-Караоке-UVR)

    • Настройки: 512 - 10 - графический процессор

    • Выходной бэк-вокал и нечистый основной вокал


  • Уберите реверберацию и шум.
    • Модель: VR-UVR-DeEcho-DeReverb и UVR-DeNoise

    • Настройки: 512 - 10 - GPU - Только другое.

    • Выход чистого основного вокала


  • (Необязательно) Использование RipX (платного) для ручной тонкой очистки.

Подготовка к записи вокала

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

Аудиооборудование Скряги

Впервые я увлекся музыкой еще в старшей школе, когда у меня были синие Sennheiser MX500 и Koss Porta Pro. Я до сих пор помню, как впервые записывал песню на Sony VAIO с помощью Cool Edit Pro.


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


Тем не менее, я очень ценю надежность этого дешевого производственного оборудования.


Основной частью моей установки является Behringer UCA202, и он идеально подходит для моих случаев использования. Я купил его за 10 долларов во время падения цен.


Это так называемый «аудиоинтерфейс», но по сути это просто звуковая карта с несколькими портами. Для наушников я использовал кабели RCA-3,5 мм TRS, полуоткрытый K240 для обычного выхода и закрытый HD669/MDR7506 для выхода на монитор.


Все три упомянутых наушника стоят менее 100 долларов за обычную цену. И есть клоны от Samson, Tascam, Knox Gear и других производителей менее чем за 50 долларов.


В качестве устройства ввода я использую динамический микрофон, чтобы избежать шума окружающей среды. Это копия SM58 (Pyle) + магнитола Tascam DR-05 (в качестве усилителя). Другие клоны, такие как SL84c или wm58, тоже подойдут.


Я использую кабель TRS XLR-3,5 мм для подключения микрофона к микрофонному/внешнему входу рекордера, а затем использую кабель AUX для подключения линейного выхода рекордера к входу UCA202.


Не рекомендуется покупать «аудиоинтерфейс» и специальный усилитель, чтобы повторить мою настройку. Звуковая карта c-media USB стоимостью 10 долларов должна подойти. Модель Syba, которая у меня была, способна напрямую «предусиливать» динамические микрофоны и даже некоторые более дешевые микрофоны с фантомным питанием.


Установка может стоить очень дешево (40–60 долларов), но с UCA202 и DR-05 звук намного чище. И мне очень нравится физическое управление, универсальность и портативность моего старого доброго цифрового диктофона.

Рабочие процессы Audacity

Хотя когда мне как дизайнеру платили, я был вполне доволен Audition. Но для личного использования в забавном проекте Audacity — это способ избежать хаотического зла Adobe.

аудио-слайсер

Используйте аудио-слайсер или аудио-слайсер (gui), чтобы разрезать аудиофайл на небольшие части для дальнейшего использования.

Настройка по умолчанию работает отлично.

Очистка набора данных

Удалите те очень короткие и повторно нарежьте те, которые продолжаются более 10 секунд.


В случае большого набора данных удалите все, что меньше 4 секунд. В случае небольшого набора данных удалите те, которые занимают менее 2 секунд.


При необходимости выполните ручную проверку каждого файла.

Громкость совпадения

Снова используйте Audacity с нормализацией громкости ; 0db должен это сделать.

so-vits-svc

Настройте среду

Виртуальная среда необходима для запуска нескольких инструментов Python в одной системе. Раньше я использовал виртуальные машины и Docker, но теперь обнаружил, что anaconda намного быстрее и удобнее остальных.


Создайте новую среду для so-vits-svc и активируйте ее.

 conda create -n so-vits-svc python=3.8 conda activate so-vits-svc


Затем установите требования.

 git clone https://github.com/svc-develop-team/so-vits-svc cd so-vits-svc pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 #for linux pip install -r requirements.txt #for windows pip install -r requirements_win.txt pip install --upgrade fastapi==0.84.0 pip install --upgrade gradio==3.41.2 pip install --upgrade pydantic==1.10.12 pip install fastapi uvicorn

Инициализация

Загрузите предварительно обученные модели

  • предварительная тренировка
    • wget https://huggingface.co/WitchHuntTV/checkpoint_best_legacy_500.pt/resolve/main/checkpoint_best_legacy_500.pt

    • wget https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt


  • журналы/44 тыс.
    • wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_D_320000.pth

    • wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_G_320000.pth


  • журналы/44k/диффузия
    • wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/resolve/main/fix_pitch_add_vctk_600k/model_0.pt

    • (Альтернатива) wget https://huggingface.co/datasets/ms903/DDSP-SVC-4.0/resolve/main/pre-trained-model/model_0.pt

    • (Альтернатива) wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/blob/main/hubertsoft_fix_pitch_add_vctk_500k/model_0.pt


  • предварительный поезд/nsf_hifigan
    • wget -P pretrain/ https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip
    • unzip -od pretrain/nsf_hifigan pretrain/nsf_hifigan_20221211.zip

Подготовка набора данных

Поместите все подготовленные файлы audio.wav в dataset_raw/character

 cd so-vits-svc python resample.py --skip_loudnorm python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug python preprocess_hubert_f0.py --use_diff

Редактировать конфигурации

Файл находится по адресу configs/config.json

log interval : частота печати журнала eval interval : частота сохранения контрольных точек. epochs : общее количество шагов. keep ckpts : количество сохраненных контрольных точек, 0 для неограниченного количества. half_type : fp32 В моем случае batch_size : чем меньше, тем быстрее (грубее), чем больше, тем медленнее (лучше).


Рекомендуемый размер пакета на видеопамять: 4 = 6 ГБ; 6 = 8 ГБ; 10 = 12 ГБ; 14 = 16 ГБ; 20 = 24 ГБ.


Оставьте значение по умолчанию для configs/diffusion.yaml

Обучение

 python cluster/train_cluster.py --gpu python train_index.py -c configs/config.json python train.py -c configs/config.json -m 44k python train_diff.py -c configs/diffusion.yaml


По этапам обучения:

Используйте train.py для обучения основной модели; обычно можно использовать 20-30 тысяч, а 50 тысяч и выше будет достаточно. Это может занять несколько дней в зависимости от скорости графического процессора.


Не стесняйтесь остановить его, нажав ctrl+c , и обучение будет продолжено путем повторного запуска python train.py -c configs/config.json -m 44k в любое время.


Используйте train_diff.py для обучения модели диффузии; шаги обучения рекомендуется составлять 1/3 от основной модели.


Помните о перетренированности. Используйте tensorboard --logdir=./logs/44k , чтобы отслеживать графики, чтобы убедиться, что они не совпадают.


При необходимости измените learning rate с 0,0001 на 0,00005.


Когда закончите, поделитесь/перенесите эти файлы для анализа.


  • конфигурация/
    • config.json

    • диффузия.yaml


  • журналы/44 тыс.
    • Feature_and_index.pkl
    • kmeans_10000.pt
    • model_0.pt
    • G_xxxxx.pt

Вывод

Пришло время опробовать обученную модель. Я бы предпочел Webui из-за удобства настройки параметров.


Но прежде чем запустить его, отредактируйте следующие строки в webUI.py для доступа к локальной сети:

 os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)


Запустите python webUI.py ; затем получите доступ к его ipaddress:7860 из веб-браузера.


Веб-интерфейс не имеет английской локализации, но Immersive Translate будет полезен.


Большинство параметров будут хорошо работать со значениями по умолчанию. Обратитесь к этому и этому , чтобы внести изменения.


Загрузите эти 5 файлов:

main model.pt и его config.json


diffusion model.pt и ее diffusion.yaml


Либо модель кластера kmeans_10000.pt для речи, либо функция поиска feature_and_index.pkl для пения.


F0 predictor предназначен только для разговора, а не для пения. Рекомендовать RMVPE при использовании.


Pitch change полезно при пении женской песни с использованием модели мужским голосом или наоборот.


Clustering model/feature retrieval mixing ratio — это способ управления тоном. Используйте 0.1 , чтобы получить наиболее четкую речь, и используйте 0.9 чтобы получить тон, наиболее близкий к модели.


shallow diffusion steps следует установить в районе 50 , это улучшает результат на 30-100 шагах.

Редактирование аудио

Эта процедура не является обязательной. Просто ради создания лучшей песни.


Я не буду вдаваться в подробности, поскольку программное обеспечение для редактирования звука, или так называемая DAW (рабочая станция цифрового звука), которое я использую, не является бесплатным. Я не собираюсь защищать несвободное программное обеспечение, даже несмотря на то, что вся индустрия является платной и имеет закрытый исходный код.


Audacity поддерживает многодорожечное воспроизведение, эффекты и многое другое. Он также загружает некоторые продвинутые плагины VST.


Нетрудно найти учебные пособия по мастерингу песен с помощью Audacity.


Обычно процесс мастеринга включает в себя микширование/балансировку, эквализацию/компрессию, реверберацию и создание образов. Чем более продвинутым является инструмент, тем проще будет процесс.


В будущем я определенно потрачу больше времени на использование Audacity в процессе мастеринга и рекомендую всем это сделать.

so-vits-svc-fork

Это форк so-vits-svc с поддержкой в реальном времени, модели совместимы. Проще в использовании, но не поддерживает модель Diffusion. Для специального изменения голоса в режиме реального времени рекомендуется использовать устройство смены голоса .

Монтаж

 conda create -n so-vits-svc-fork python=3.10 pip conda activate so-vits-svc-fork git clone https://github.com/voicepaw/so-vits-svc-fork cd so-vits-svc-fork python -m pip install -U pip setuptools wheel pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -U so-vits-svc-fork pip install click sudo apt-get install libportaudio2

Подготовка

Поместите файлы набора данных .wav в so-vits-svc-fork/dataset_raw

 svc pre-resample svc pre-config


Отредактируйте batch_size в configs/44k/config.json . Эта вилка большего размера, чем оригинал.

Обучение

 svc pre-hubert svc train -t svc train-cluster

Вывод

Используйте графический интерфейс с svcg . Для этого требуется локальная среда рабочего стола.


Или используйте CLI с svc vc для реального времени и svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav для генерации.

ДДСП-SVC

DDSP-SVC требует меньше аппаратных ресурсов и работает быстрее, чем so-vits-svc. Он поддерживает как модели реального времени, так и диффузионные модели (Diff-SVC).

 conda create -n DDSP-SVC python=3.8 conda activate DDSP-SVC git clone https://github.com/yxlllc/DDSP-SVC cd DDSP-SVC pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt


Обратитесь к разделу «Инициализация» для двух файлов:

 pretrain/rmvpe/model.pt pretrain/contentvec/checkpoint_best_legacy_500.pt

Подготовка

 python draw.py python preprocess.py -c configs/combsub.yaml python preprocess.py -c configs/diffusion-new.yaml


Редактировать configs/

 batch_size: 32 (16 for diffusion) cache_all_data: false cache_device: 'cuda' cache_fp16: false

Обучение

 conda activate DDSP-SVC python train.py -c configs/combsub.yaml python train_diff.py -c configs/diffusion-new.yaml tensorboard --logdir=exp

Вывод

Рекомендуется использовать main_diff.py поскольку он включает в себя как DDSP, так и модель диффузии.

python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav"


Графический интерфейс в реальном времени для клонирования голоса:

 python gui_diff.py

Берт-витс2-В2.3

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


Вместо использования оригинального файла я использовал форк от v3u для упрощения настройки.

Инициализация

 conda create -n bert-vits2 python=3.9 conda activate bert-vits2 git clone https://github.com/v3ucn/Bert-vits2-V2.3.git cd Bert-vits2-V2.3 pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt


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

 wget -P slm/wavlm-base-plus/ https://huggingface.co/microsoft/wavlm-base-plus/resolve/main/pytorch_model.bin wget -P emotional/clap-htsat-fused/ https://huggingface.co/laion/clap-htsat-fused/resolve/main/pytorch_model.bin wget -P emotional/wav2vec2-large-robust-12-ft-emotion-msp-dim/ https://huggingface.co/audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim/resolve/main/pytorch_model.bin wget -P bert/chinese-roberta-wwm-ext-large/ https://huggingface.co/hfl/chinese-roberta-wwm-ext-large/resolve/main/pytorch_model.bin wget -P bert/bert-base-japanese-v3/ https://huggingface.co/cl-tohoku/bert-base-japanese-v3/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.generator.bin wget -P bert/deberta-v2-large-japanese/ https://huggingface.co/ku-nlp/deberta-v2-large-japanese/resolve/main/pytorch_model.bin

Создайте папку модели персонажа mkdir -p Data/xxx/models/


Скачать базовые модели:

 !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/DUR_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/D_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/G_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/WD_0.pth #More options https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/model_filelist_tmpl?name=Bert-VITS2_2.3%E5%BA%95%E6%A8%A1 https://huggingface.co/Erythrocyte/bert-vits2_base_model/tree/main https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/tree/main

Отредактируйте train_ms.py , заменив все bfloat16 на float16


Отредактируйте webui.py для доступа к локальной сети:

 webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)


Отредактируйте Data/xxx/config.json для batch_size и spk2id

Подготовка

Последовательность действий аналогична описанной в предыдущем разделе .


Удалите шум и тишину, нормализацию, затем поместите неразрезанный WAV-файл в Data/xxx/raw .


Отредактируйте config.yml для dataset_path , num_workers и keep_ckpts .


Запустите python3 audio_slicer.py , чтобы нарезать WAV-файл.


Очистите набор данных ( Data/xxx/raw ), удалив небольшие файлы длительностью менее 2 секунд.

Транскрипция

Установите шепот pip install git+https://github.com/openai/whisper.git


Чтобы отключить автоматическое определение языка, установите только английский и используйте large модель; отредактируйте short_audio_transcribe.py , как показано ниже:

 # set the spoken language to english print('language: en') lang = 'en' options = whisper.DecodingOptions(language='en') result = whisper.decode(model, mel, options) # set to use large model parser.add_argument("--whisper_size", default="large") #Solve error "Given groups=1, weight of size [1280, 128, 3], expected input[1, 80, 3000] to have 128 channels, but got 80 channels instead" while using large model mel = whisper.log_mel_spectrogram(audio,n_mels = 128).to(model.device)

Запустите python3 short_audio_transcribe.py , чтобы начать транскрипцию.


Повторно выполните выборку срезанного набора данных: python3 resample.py --sr 44100 --in_dir ./Data/zizek/raw/ --out_dir ./Data/zizek/wavs/


Транскрипция предварительной обработки: python3 preprocess_text.py --transcription-path ./Data/zizek/esd.list


Создайте конфигурацию функции BERT: python3 bert_gen.py --config-path ./Data/zizek/configs/config.json

Обучение и вывод

Запустите python3 train_ms.py , чтобы начать обучение.


Отредактируйте config.yml для пути к модели:

 model: "models/G_20900.pth"

Запустите python3 webui.py , чтобы запустить webui для вывода.

Витс-простой-API

vits-simple-api — это веб-интерфейс для использования обученных моделей. Я использую это в основном из-за поддержки длинного текста, которой нет в исходном проекте.

 git clone https://github.com/Artrajz/vits-simple-api git pull https://github.com/Artrajz/vits-simple-api cd vits-simple-api conda create -n vits-simple-api python=3.10 pip conda activate vits-simple-api && pip install -r requirements.txt

(Необязательно) Скопируйте файлы предварительно обученной модели из Bert-vits2-V2.3/ в vits-simple-api/bert_vits2/


Скопируйте Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth и Bert-vits2-V2.3/Data/xxx/config.json в vits-simple-api/Model/xxx/


Отредактируйте config.py для MODEL_LIST и Default parameter по своему усмотрению.


Отредактируйте Model/xxx/config.json как показано ниже:

 "data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3"

Проверьте/измените model_list в config.yml как [xxx/G_xxxxx.pth, xxx/config.json]


Запустите python app.py

Твики

SDP Ratio для тона, Noise для случайности, Noise_W для произношения и Length для скорости. emotion и style говорят сами за себя

Поделиться моделями

В репозитории Hugging Face есть множество моделей VITS, которыми поделились другие. Вы можете сначала опробовать его, а затем скачать нужные модели из Files .


Модель Genshin широко используется в некоторых сообществах по созданию контента из-за ее высокого качества. Он содержит сотни символов, хотя поддерживаются только китайский и японский языки.

В другом репое много моделей Берт-витс2, сделанных из популярных китайских стримеров и VTuberов.


Уже есть проекты , создающие таких Втуберов с искусственным интеллектом. Я с нетерпением жду того, как эта технология может изменить отрасль в ближайшем будущем.


https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/