初めに
Style-Bert-VITS2は、日本語におけるアクセントなどの改善によりTTSでは感情表現を含めてかなり使えます。 しかし、事前学習モデルを独自のデータセットで使用したい場合一から作る必要があります。
今回は、Style-Bert-VITS2における事前学習モデルの作成方法についてまとめました
わかっている人向け
Data/{model_name}/modes内にあるモデルファイルを消してから学習ボタンを押してください
デモ
以下のように つくよみちゃんコーパスを使用した事前学習モデルを公開しました!
クリーンなデータセット(学習データが明確)であるため、安心してご使用いただけます
24/04/09 追記
事前学習データを増やしたクリーンな事前学習モデル ver2を公開しました!
開発環境
環境の準備
まずは Style-Bert-VITS2が使える環境を準備します
pip install -r requirements.txt python initialize.py
以下のコマンドを実行して、GradioのWeb画面が立ち上がれば問題ありません
python webui_train.py
データセットの準備
学習をするためには音声ファイルおよびその音声の文字おこしされた音声ファイルが必要です。 今回は、つくよみちゃんコーパス│声優統計コーパス(JVSコーパス準拠)を使用するため、文字起こしはされているものとします。
esd.list
というファイル名で、ReadMeに沿って以下のフォーマットで音声ファイルの情報を作成します。
****.wav|{話者名}|{言語ID、ZHかJPかEN}|{書き起こしテキスト}
つくよみちゃんコーパスの場合は、以下のような書き方になります
(今回は 話者名を 事前学習としてわかりやすいように名前を変えています)
VOICEACTRESS100_001.wav|pretraing|JP|また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。 VOICEACTRESS100_002.wav|pretraing|JP|ニューイングランド風は、牛乳をベースとした、白いクリームスープであり、ボストンクラムチャウダーとも呼ばれる。 VOICEACTRESS100_003.wav|pretraing|JP|コンピュータゲームのメーカーや、業界団体などに関連する人物のカテゴリ。
独自の場合は、Whisperやreazon-research/reazonspeech-nemo-v2を使うといいでしょう
フォルダ内の音声をreazonspeech-nemo-v2を使って文字起こしする際には、以下の記事もご覧ください
(後から記事を追加する)
データの配置
準備をしたデータを以下のようにおいていきます
├── Data │ ├── {モデルの名前} │ │ ├── esd.list │ │ ├── raw │ │ │ ├── ****.wav │ │ │ ├── ****.wav │ │ │ ├── ...
前処理の実行
データ配置が終わったら、Web画面を立ち上げて以下のように設定をします。 各種パラメータは各自変更してください
学習ステップ量はデータセットにも依存しますが、だいたい200k ~ 300k stepあたりまでは行ったほうがいいと感じています
CLIで実行する場合は以下のようなコマンドになります
python preprocess_all.py -m pretraing --use_jp_extra -b 8 -e 10 -s 10000 --num_processes 50 --normalize
追加でオプションを追加する場合は以下を参考にしてください
-m pretraing: モデル名を "pretraing" に設定 --use_jp_extra: 日本語の追加処理を使用 -b 32: バッチサイズを32に設定 -e 100: エポック数を100に設定 -s 1000: 1000ステップごとにモデルを保存 --num_processes 4: 4つのプロセスを使用して並列処理 --normalize: オーディオを正規化 --trim: オーディオをトリミング --val_per_lang 100: 各言語で100サンプルを検証用に使用 --log_interval 100: 100ステップごとにログを出力
事前学習の開始
開始前に Data/models
の中にあるモデルを削除します。こちらを削除しないと事前学習ではなく追加学習扱いになります
事前学習開始がされた場合は、以下のログが学習開始時に表示されるためこちらでも確認できます
02-24 04:33:29 | INFO | data_utils.py:66 | Init dataset... 0it [00:00, ?it/s] 02-24 04:33:29 | INFO | data_utils.py:81 | skipped: 0, total: 0 02-24 04:33:29 | INFO | train_ms_jp_extra.py:221 | Using noise scaled MAS for VITS2 02-24 04:33:30 |WARNING | train_ms_jp_extra.py:427 | No such file or directory: "Data\\test\\models\\G_0.safetensors" 02-24 04:33:30 |WARNING | train_ms_jp_extra.py:428 | It seems that you are not using the pretrained models, so we will train from scratch.
以下の画像のボタンを押せば事前学習開始です。使用しているGPUにもよりますがかなり時間がかかりますので、気長に待ちましょう
pthをsafetensorsに変換する
学習が終わったら、事前学習モデルとして使えるように以下のように safetensors
に変換します。
以下のスクリプトを使って変換をします
import torch model_root = "Data/pretraing/models" step = {学習したstep} g_model = torch.load(f"{model_root}/G_{step}.pth", map_location="cpu") d_model = torch.load(f"{model_root}/D_{step}.pth", map_location="cpu") dur_model = torch.load(f"{model_root}/WD_{step}.pth", map_location="cpu") g_dict = {} for key in g_model["model"].keys(): if key.startswith("emb_g"): print(key) else: g_dict[key] = g_model["model"][key] d_dict = {} for key in d_model["model"].keys(): d_dict[key] = d_model["model"][key] dur_dict = {} for key in dur_model["model"].keys(): dur_dict[key] = dur_model["model"][key] from safetensors.torch import save_file save_file(g_dict, f"G_0.safetensors") save_file (d_dict, f"D_0.safetensors") save_file (dur_dict, f"WD_0.safetensors")
マルチGPUで学習をする場合
今回はノード数が1、ノードあたり2つのGPUが載っているとします
マルチGPUで実行をする場合、torchrunを使用して以下のようにコマンド上で実行します
torchrun --standalone --nnodes=1 --nproc_per_node=2 train_ms_jp_extra.py -c Data/pretraing/config.json -m Data/pretraing
また学習を再開する場合は、--skip_default_style
をつける必要があるので以下になります
torchrun --standalone --nnodes=1 --nproc_per_node=2 train_ms_jp_extra.py -c Data/pretraing/config.json -m Data/pretraing --skip_default_style
もしかしたら以下も必要かも?
CUDA_VISIBLE_DEVICES=0,1