paint-brush
SoftVC VITS および Bert-VITS2 を使用して音声クローンを作成する方法: 詳細by@techshinobi
765
765

SoftVC VITS および Bert-VITS2 を使用して音声クローンを作成する方法: 詳細

Tech Shinobi12m2024/03/06
Read on Terminal Reader

前回の投稿では、TTS Generation WebUI を少し試してみましたが、興味深いことがわかりました。そこで、私は自分の声で使えるモデルをトレーニングすることにしました。 この音声クローン プロジェクトでは、音声変更用の SVC とテキスト読み上げ用の VITS の両方を検討します。すべての仕事を行う単一のツールはありません。 このプロジェクトのためにいくつかのツールをテストしました。これ、これ、これなどの優れたガイドの多くは中国語で書かれています。そこで、メモを英語で投稿できれば便利だと考えました。
featured image - SoftVC VITS および Bert-VITS2 を使用して音声クローンを作成する方法: 詳細
Tech Shinobi HackerNoon profile picture
0-item

目次

  • SoftVC VITS および Bert-VITS2 を使用した音声クローン作成の詳細
    • データセットの準備
      • 曲からの抜粋
        • UVR ワークフロー
      • ボーカル録音の準備
        • チープスケートのオーディオ機器
        • Audacity ワークフロー
      • オーディオスライサー
        • データセットのクリーニング
        • ラウドネスを一致させる
    • so-vits-SVC
      • 環境をセットアップする
      • 初期化
        • 事前トレーニングされたモデルをダウンロードする
        • データセットの準備
        • 構成の編集
      • トレーニング
      • 推論
      • 音声編集
    • so-vits-svc-fork
      • インストール
      • 準備
      • トレーニング
      • 推論
    • DDSP-SVC
      • 準備
      • トレーニング
      • 推論
    • Bert-vits2-V2.3
      • 初期化
      • 準備
        • 転写
      • トレーニングと推論
    • vits-simple-api
      • 微調整
      • モデルを共有する


前回の投稿では、 TTS Generation WebUIを少し試してみましたが、興味深いことがわかりました。そこで、私は自分の声で使えるモデルをトレーニングすることにしました。


この音声クローン プロジェクトでは、音声変更用の SVC とテキスト読み上げ用のVITSの両方を検討します。すべての仕事を行う単一のツールはありません。


このプロジェクトのためにいくつかのツールをテストしました。 this 、 this 、 thisなどの優れガイドの多くは中国語で書かれています。そこで、メモを英語で投稿できれば便利だと考えました。


おそらく抑圧のため、 so-vits-svc は数か月間アーカイブされていますが、依然として最良の結果をもたらすツールです。


so-vits-svc-forkso-vits-svc-5.0DDSP-SVC 、およびRVCなどの他の関連ツールは、より高速な/リットル最適化、より多くの機能、またはより優れたインターフェイスを提供します。


しかし、十分な時間とリソースがあれば、これらの代替案のどれも、元の so-vits-svc によって生成される優れた結果と競合することはできません。


TTS の場合、 Bert-VITS2と呼ばれる新しいツールが素晴らしく機能し、先月の最終リリースですでに完成しています。オーディオ コンテンツの作成など、非常に異なる使用例がいくつかあります。

データセットの準備

データセットのオーディオ ファイルは、WAV 形式、44100 Hz、16 ビット、モノラル、理想的には 1 ~ 2 時間である必要があります。

曲から抜粋

Ultimate Vocal Remover は、この作業に最も簡単なツールです。すべてを詳細に説明するスレッドがあります。

UVR ワークフロー

  • インストゥルメンタルを削除して抽出します
    • モデル: VR - UVR(4_HP-ボーカル-UVR)

    • 設定: 512 - 10 - GPU

    • 出力インストゥルメンタルと汚れたボーカル


  • バックグラウンドボーカルを削除して抽出します。
    • モデル: VR - UVR(5_HP-カラオケ-UVR)

    • 設定: 512 - 10 - GPU

    • バックグラウンドボーカルとクリーンメインボーカルを出力


  • 残響やノイズを除去します。
    • モデル: VR - UVR-DeEcho-DeReverb および UVR-DeNoise

    • 設定: 512 - 10 - GPU - なし その他のみ

    • クリーンなメインボーカルを出力


  • (オプション) RipX (無料) を使用して、手動による精密クリーニングを実行します。

ボーカル録音の準備

処理された部屋でコンデンサーマイクを使用して録音することをお勧めします。それ以外の場合は、ノイズを減らすために指向性マイクまたはダイナミックマイクを使用してください。

チープスケートのオーディオ機器

私が初めて音楽に興味を持ったのは高校生の時で、青いゼンハイザー MX500 とコス ポルタ プロを使っていました。 Sony VAIO にある曲を Cool Edit Pro を使って初めて録音したときのことを今でも覚えています。


今でもアマチュアとしてオーディオハードウェアに多額のお金をかけることに抵抗があります。それは文字通りお金を吸い取るブラックホールだからです。


それにもかかわらず、私はこれらの安価な製造装置の信頼性を本当に高く評価しています。


私のセットアップの中核となる部分は Behringer UCA202 であり、私のユースケースに最適です。値下げ中に10ドルで購入しました。


いわゆる「オーディオインターフェイス」ですが、基本的には複数のポートを備えた単なるサウンドカードです。ヘッドフォンには RCA - 3.5 mm TRS ケーブルを使用し、通常の出力にはセミオープンの K240 を、モニター出力にはクローズバックの HD669/MDR7506 を使用しました。


前述の 3 つのヘッドフォンはすべて、通常価格で 100 ドル未満です。また、Samson、Tascam、Knox Gear などのクローンが 50 ドル未満で販売されています。


入力デバイスは環境騒音対策のためダイナミックマイクを使用しています。 SM58コピー(Pyle)+Tascam DR-05レコーダー(アンプとして)です。 SL84c や wm58 などの他のクローンも同様に機能します。


XLR - 3.5mm TRS ケーブルを使用してマイクをレコーダーの MIC/外部入力に接続し、AUX ケーブルを使用してレコーダーのライン出力と UCA202 の入力を接続します。


私のセットアップを再現するために「オーディオ インターフェイス」や専用アンプを購入することはお勧めできません。 10 ドルの c-media USB サウンド カードで十分です。私が所有していた Syba モデルは、ダイナミック マイクを直接「プリアンプ」することができ、一部のローエンドのファンタム電源付きマイクも使用できます。


セットアップは非常に安価 ($40 ~ 60) で行うことができますが、UCA202 と DR-05 を使用すると、サウンドがはるかにクリーンになります。そして私は、昔ながらのデジタルレコーダーの物理的なコントロール、多機能性、携帯性がとても気に入っています。

Audacity ワークフロー

とはいえ、デザイナーとして給料をもらっていた頃は、Audition にかなり満足していました。しかし、楽しいプロジェクトで個人的に使用する場合、Audacity は Adobe の混沌とした悪を回避する方法です。

オーディオスライサー

audio-slicerまたはaudio-slicer (gui)を使用して、後で使用できるようにオーディオ ファイルを小さな部分にスライスします。

デフォルト設定はうまく機能します。

データセットのクリーニング

非常に短いものを削除し、まだ 10 秒を超えているものを再度スライスします。


データセットが大きい場合は、4 秒未満のものをすべて削除します。小さなデータセットの場合は、2 秒未満のみを削除します。


必要に応じて、すべての単一ファイルに対して手動検査を実行します。

ラウドネスの一致

ラウドネス正規化を使用して Audacity を再度使用します。 0dbでやるべきです。

so-vits-SVC

環境をセットアップする

1 つのシステム内で複数の Python ツールを実行するには、仮想環境が不可欠です。以前は VM と 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


  • ログ/44k
    • 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 : 小さいほど速く(粗く)、大きいほど遅く(良くなります)。


VRAM あたりの推奨バッチサイズ: 4=6G、6=8G、10=12G、14=16G、20=24G


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を使用してメイン モデルをトレーニングします。通常は 20k ~ 30k が使用可能で、50k 以上あれば十分です。 GPU の速度によっては、これに数日かかる場合があります。


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

    • diffusion.yaml


  • ログ/44k
    • feature_and_index.pkl
    • kmeans_10000.pt
    • モデル_0.pt
    • G_xxxxx.pt

推論

トレーニングされたモデルを試してみましょう。パラメーターを調整するのに便利なため、Webui の方が良いと思います。


ただし、起動する前に、LAN アクセス用にwebUI.py内の次の行を編集します。

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


python webUI.pyを実行します。次に、Web ブラウザからそのipaddress:7860にアクセスします。


WebUI には英語ローカライズがありませんが、 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 steps50に設定する必要があり、 30-100ステップで結果が向上します。

音声編集

この手順はオプションです。より良い曲を生み出すためだけに。


私が使用しているオーディオ編集ソフトウェア、いわゆる DAW (デジタル オーディオ ワークステーション) はフリーではないので、これについては詳しく説明しません。業界全体がペイウォールに囲まれ、クローズドソースになっているにもかかわらず、私はプロプライエタリなソフトウェアを擁護するつもりはありません。


Audacity はマルチトラック、エフェクトなどをサポートしています。いくつかの高度な VST プラグインもロードされます。


Audacity で曲をマスタリングするためのチュートリアルを見つけるのは難しくありません。


通常、マスタリング プロセスには、ミキシング/バランス、EQ/圧縮、リバーブ、イメージングが含まれます。ツールが高度であればあるほど、プロセスは簡単になります。


私は今後、マスタリングプロセスに Audacity を導入することにもっと時間を費やすつもりですし、皆さんにもそうすることをお勧めします。

so-vits-svc-fork

これはリアルタイム サポートを備えた so-vits-svcフォークであり、モデルには互換性があります。使いやすくなりましたが、拡散モデルはサポートされていません。リアルタイム音声変更専用の場合は、ボイスチェンジャーを推奨します。

インストール

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


configs/44k/config.jsonbatch_sizeを編集します。このフォークはオリジナルよりも大きなサイズです。

トレーニング

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

推論

svcgで GUI を使用します。これにはローカルのデスクトップ環境が必要です。


または、リアルタイムにはsvc vcを指定した CLI を使用し、生成にはsvc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav使用します。

DDSP-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


2 つのファイルについては、 「初期化」セクションを参照してください。

 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 と拡散モデルの両方が含まれているため、 main_diff.pyを使用することをお勧めします。

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


音声クローン作成用のリアルタイム GUI:

 python gui_diff.py

Bert-vits2-V2.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を編集して、すべてのbfloat16float16に置き換えます。


LAN アクセス用に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_sizespk2idを設定します。

準備

前のセクションと同様のワークフロー。


ノイズと無音部分を除去し、正規化してから、スライスされていない WAV ファイルをData/xxx/rawに置きます。


dataset_pathnum_workers 、およびkeep_ckptsconfig.ymlを編集します。


python3 audio_slicer.pyを実行して、WAV ファイルをスライスします。


2 秒未満の小さなファイルを削除して、データセット ( Data/xxx/raw ) をクリーンアップします。

転写

ウィスパー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

vits-simple-api は、トレーニングされたモデルを使用するための Web フロントエンドです。私は主に、元のプロジェクトにはない長いテキストのサポートのためにこれを使用しています。

 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.jsonvits-simple-api/Model/xxx/にコピーします。


必要に応じてMODEL_LISTおよびDefault parameterconfig.pyを編集します


Model/xxx/config.jsonを次のように編集します。

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

config.ymlmodel_list [xxx/G_xxxxx.pth, xxx/config.json]として確認/編集します。


python app.pyを実行します

微調整

SDP Ratioはトーン、 Noiseランダム性、 Noise_Wは発音、 Lengthは速度を表します。 emotionstyle説明不要です

モデルを共有する

そのHugging Face リポジトリには、他の人が共有している VITS モデルが多数あります。まず試してから、ファイルから必要なモデルをダウンロードできます。


Genshin モデルは、その高品質のため、一部のコンテンツ作成コミュニティで広く使用されています。中国語と日本語のみがサポートされていますが、数百の文字が含まれています。

別のリポジトリには、人気の中国のストリーマーや VTuber から作られた Bert-vits2 モデルが多数あります。


すでにこのような AI Vtuber を作成するプロジェクトが存在します。この技術が近い将来、業界をどう変えるのか楽しみです。


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