初めに
Style-Bert-VITS2は、日本語におけるアクセントなどの改善によりTTSでは感情表現を含めてかなり使えます。
しかし、事前学習モデルを独自のデータセットで使用したい場合一から作る必要があります。
今回は、Style-Bert-VITS2における事前学習モデルの作成方法についてまとめました
わかっている人向け
Data/{model_name}/modes内にあるモデルファイルを消してから学習ボタンを押してください
デモ
以下のように つくよみちゃんコーパスを使用した事前学習モデルを公開しました!
クリーンなデータセット(学習データが明確)であるため、安心してご使用いただけます
StyleBertVITS2 の事前学習モデルを公開しました!
— ようさん (@ayousanz) 2024年2月14日
学習データには以下を使用しています
1. つくよみちゃんコーパス @TYC_Projectさん
2. みんなで作るJSUTコーパスbasic5000 夢前黎担当部分
モデル URL https://t.co/phN4lE1zOC
詳細はReadMeをご確認ください
Illustration by えみゃコーラ pic.twitter.com/34YnAlgmOr
24/04/09 追記
事前学習データを増やしたクリーンな事前学習モデル ver2を公開しました!
Irisia Project の『イリシアちゃん』( @IrisiaProject )で追加学習した場合の音声は動画のようになります!
— ようさん (@ayousanz) 2024年4月9日
かなり高い精度が出るモデルになっています
ライセンス内であれば商用利用も可能になっていますので、是非ご活用ください
Illustration: のほしお https://t.co/Re2AcTqg7N pic.twitter.com/ddfULb75sT
開発環境
環境の準備
まずは 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あたりまでは行ったほうがいいと感じています
事前学習の開始
開始前に 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