Оглавление
В предыдущем посте я немного попробовал 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 - Только другое.
Выход чистого основного вокала
Записывать в обработанном помещении лучше с помощью конденсаторного микрофона, в противном случае для снижения шума используйте направленный или динамический микрофон.
Впервые я увлекся музыкой еще в старшей школе, когда у меня были синие 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 звук намного чище. И мне очень нравится физическое управление, универсальность и портативность моего старого доброго цифрового диктофона.
Хотя когда мне как дизайнеру платили, я был вполне доволен Audition. Но для личного использования в забавном проекте Audacity — это способ избежать хаотического зла Adobe.
Используйте аудио-слайсер или аудио-слайсер (gui), чтобы разрезать аудиофайл на небольшие части для дальнейшего использования.
Настройка по умолчанию работает отлично.
Удалите те очень короткие и повторно нарежьте те, которые продолжаются более 10 секунд.
В случае большого набора данных удалите все, что меньше 4 секунд. В случае небольшого набора данных удалите те, которые занимают менее 2 секунд.
При необходимости выполните ручную проверку каждого файла.
Снова используйте Audacity с нормализацией громкости ; 0db должен это сделать.
Виртуальная среда необходима для запуска нескольких инструментов 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
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
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
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
Пришло время опробовать обученную модель. Я бы предпочел 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 с поддержкой в реальном времени, модели совместимы. Проще в использовании, но не поддерживает модель 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
для генерации.
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
Это инструмент 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 для вывода.
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/