Skip to content
pipo edited this page May 10, 2023 · 29 revisions

MMVC_Trainerについて

「4 MMVCの学習に必要なconfig系Fileを作成する」でエラーが発生する

テキストファイルがUTF-8形式でない場合

下記は学習データのテキストファイルがUTF-8形式でない場合に生じるエラーログになります。

   Traceback (most recent call last):
   File "create_dataset_jtalk.py", line 103, in <module>
      main()
   File "create_dataset_jtalk.py", line 99, in main
      n_spk = create_dataset(filename)
   File "create_dataset_jtalk.py", line 49, in create_dataset
      mozi = f.read().split("\n")
   File "/usr/lib/python3.7/codecs.py", line 322, in decode
      (result, consumed) = self._buffer_decode(data, self.errors, final)
   UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte

このエラーはテキストファイルがUTF-8形式でない場合に出ると思われます。
以下の方法で学習に使用するテキストファイルの形式をご確認ください。

  1. テキストファイルをメモ帳で開く
  2. ファイル(F) -> 名前を付けて保存(A)を選択
  3. ファイル名、ファイルの種類の下にある文字コード(E)が「UTF-8」になっているか確認する

「6 学習を実行します」でエラーが発生する

ファインチューニング用のモデルを読み込みの失敗場合

読み込み失敗例「assert os.path.isfile(checkpoint_path)」

下記はファインチューニング用のモデルを読み込みに失敗したときのエラーログになります。

   File "train_ms.py", line 303, in <module>
      main()
   File "train_ms.py", line 53, in main
      mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 200, in spawn
      return start_processes(fn, args, nprocs, join, daemon, start_method='spawn')
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 158, in start_processes
      while not context.join():
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 119, in join
      raise Exception(msg)
   Exception: 

   -- Process 0 terminated with the following error:
   Traceback (most recent call last):
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 20, in _wrap
      fn(i, *args)
   File "/content/drive/MyDrive/MMVC_Trainer-main/train_ms.py", line 108, in run
      _, _, _, epoch_str = utils.load_checkpoint(hps.fine_model_g, net_g, optim_g)
   File "/content/drive/MyDrive/MMVC_Trainer-main/utils.py", line 19, in load_checkpoint
      assert os.path.isfile(checkpoint_path)
   AssertionError

ファインチューニング用のモデルの読み込みに失敗しています。
/finemodel 配下に finemodel用のモデルファイル(.pth)がありますか?
(v1.1.0 では G_232000.pthとD_232000.pth)

読み込み失敗例「EOFError: Ran out of input」

下記はファインチューニング用のモデルを読み込みに失敗したときのエラーログになります。

-- Process 0 terminated with the following error:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 59, in _wrap
    fn(i, *args)
  File "{GoogleドライブにMMVCを置いたパス}/train_ms.py", line 131, in run
    _, _, _, epoch_str = utils.load_checkpoint(hps.fine_model_g, net_g, optim_g)
  File "{GoogleドライブにMMVCを置いたパス}/utils.py", line 20, in load_checkpoint
    checkpoint_dict = torch.load(checkpoint_path, map_location='cpu')
  File "/usr/local/lib/python3.7/dist-packages/torch/serialization.py", line 593, in load
    return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
  File "/usr/local/lib/python3.7/dist-packages/torch/serialization.py", line 762, in _legacy_load
    magic_number = pickle_module.load(f, **pickle_load_args)
EOFError: Ran out of input

ファインチューニング用のファイルは存在しますが、通信の失敗などが理由で中身が壊れているようです。
01_Create_Configfile.ipynbの「3 事前学習済みモデルのダウンロード」までを実行することで、正しいファイルを取得できます。
「3 事前学習済みモデルのダウンロード」が終わった後で、再度02_Train_MMVC.ipynbを実行すると学習が開始されます。

読み込み失敗例「ValueError: loaded state dict …」

ValueError: loaded state dict contains a parameter group that doesn't match the size of optimizer's group

このエラーは、最初に読み込んでる学習済みデータG,Dがバージョン違いで読み込めない場合に出ます。
学習済みデータがバージョン毎に互換性がない場合があるため、バージョンに合った学習済みデータをダウンロードして利用してください。

読み込み失敗例「RuntimeError: CUDA out of memory.」

RuntimeError: CUDA out of memory.

メモリが足りない場合に発生します。
{MMVCを置いた場所}/config/train_config.jsonか{MMVCを置いた場所}/config/train_config_zundamon.jsonにある"batch_size"の数値を下げると実行できるようになります。

detasetにデータが正しく配置されていない場合

下記はdetasetにデータが正しく配置されていないときのエラーログになります。

size mismatch for emb_g.weight:とエラーが出た場合、ほぼ確実にdetasetの配置ミスです。

   -- Process 0 terminated with the following error:
   Traceback (most recent call last):
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 20, in _wrap
      fn(i, *args)
   File "/content/drive/MyDrive/MMVC_Trainer-main/train_ms.py", line 108, in run
      _, _, _, epoch_str = utils.load_checkpoint(hps.fine_model_g, net_g, optim_g)
   File "/content/drive/MyDrive/MMVC_Trainer-main/utils.py", line 38, in load_checkpoint
      model.module.load_state_dict(new_state_dict)
   File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py", line 1045, in load_state_dict
      self.__class__.__name__, "\n\t".join(error_msgs)))
   RuntimeError: Error(s) in loading state_dict for SynthesizerTrn:
      size mismatch for emb_g.weight: copying a param with shape torch.Size([106, 256]) from checkpoint, the shape in current model is torch.Size([104, 256]).

datasetに正しくデータが配置されていません。

データのビットレートがあっていない場合

下記は学習データのビットレートがあっていない場合に生じるエラーログになります。

      Exception ignored in: <function _MultiProcessingDataLoaderIter.del at 0x7f799c9945f0>
   Traceback (most recent call last):
   File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1101, in del
      self._shutdown_workers()
   File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1050, in _shutdown_workers
      if not self._shutdown:
   AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute '_shutdown'
   Traceback (most recent call last):
   File "train_ms.py", line 303, in <module>
      main()
   File "train_ms.py", line 53, in main
      mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 200, in spawn
      return start_processes(fn, args, nprocs, join, daemon, start_method='spawn')
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 158, in start_processes
      while not context.join():
   File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 113, in join
      (error_index, exitcode)
      Exception: process 0 terminated with exit code 1

現在の学習元データは384Kbps(24000Hz 16bit 1ch)で行われています。
そのため、自分の声の音声データと変換したい声の音声データがこの条件に合っていない場合、このエラーが発生します。
録音ツールは24000Hzで録音できるものが少なく、近い周波数の22050Hzで録音した場合もエラーになるので注意してください。またchを1ch(モノラル)にするよう注意してください。
Audacityという録音ツールでは録音周波数を任意に指定できるため直接24000Hzで録音することができるのでおすすめです。
変換したい声の音声データに「ITAコーパス」や「つくよみちゃんコーパス」を利用する場合もこの条件に合わないため変換する必要があります。
変換には yatoyun 氏作成の https://colab.research.google.com/drive/1CXc7B_mZE3mZLm3MPXMNm_NB56mpBPZS などを利用してみてください。

GPUが使えないと言われて学習できない

下記のようなエラーが表示されて学習できません。

   AssertionError: CPU training is not allowed.

Train_MMVC.ipynbの下にある
ランタイム→ランタイムのタイプの変更→ハードウェアアクセラレータ
のところを「GPU」に変更して再度実行します。

TPUを使って学習できますか

現在はTPUに対応していません。

問題点を修正したのに同じエラーが出ます

データ修正後 config ファイルを作り直ししないとダメな場合があるので、作り直して再度試してください。

学習中に「WavFileWarning: Chunk (non-data) not understood, skipping it.」が出る

学習で使用するファイルによっては出ますが、問題なく学習できています。
安心して学習を継続してください。

02_Train_MMVC.ipynbのグラフ(TensorBoard)とデータ出力先のtrain.logで、loss/g/mel値が異なります。どちらが正しいですか?

train.logで記録されている値の方が正確です。

train.logの簡単な見かたを教えて

train.logをブラウザで開き、検索(Ctrl + F)で「loss/g/mel : tensor(」で検索します。
「(」の後の数字がloss/g/melです。
次の行に書いてあるG_0000.pthが対応しています。

以下はログの一例です。
太字になっているところがloss/g/melの値と対応するファイル名です。

2022-09-07 02:03:19,424 20220306_24000 INFO loss/g/mel : tensor(19.8860, device='cuda:0') lloss/g/kl : tensor(1.3589, device='cuda:0') lloss/g/note_kl : tensor(6.2868, device='cuda:0')
2022-09-07 02:03:19,426 20220306_24000 INFO Saving model and optimizer state at iteration 41 to ./logs/20220306_24000/G_4000.pth

β版はどこからダウンロードできますか?

スクリーンショット 2022-10-12 222956
こちらのページにある「main」ボタンを押すと開発中のバージョン一覧が出てきます。
β版のバージョンを選択してください。
(スクリーンショットはv1.3.1.3の時のものです。どのバージョンがβ版になるかは開発状況によって変わります。詳しくはDiscordをご確認ください)

スクリーンショット 2022-10-12 223023
選択すると「main」ボタンの表記がバージョン名になります。
その状態で画面右の緑色のボタン「Code」を押して、「Download ZIP」を押すとダウンロードができます。

MMVC_Clientについて

ファイルの指定方法が間違ってる場合(ローカル版)

以下がrt-mmvc-client-GPU.exeでmyprofile.jsonのパスを入力したときに生じるエラーログです

   Traceback (most recent call last):
      File "{あなたのパス}/rt-mmvc-client-GPU.py",line 424,in <module>
      File "{あなたのパス}/rt-mmvc-client-GPU.py",line 402, in config_get
   OSError:[Error 22] Invalid argument: "{あなたのパス}/myprofile.json"

パスを指定する際はなにもつけずに指定してください。

jsonファイルの記法が間違ってる場合(ローカル版)

以下はrt-mmvc-client-GPU.exeで、myprofile.jsonに記述されているパス指定が間違っているときに生じるエラーログです。

   Traceback (most recent call last):
      File "{あなたのパス}/rt-mmvc-client-GPU.py",line 424,in <module>
      File "{あなたのパス}/rt-mmvc-client-GPU.py",line 402, in config_get
      File "{あなたのパス}/json/__init__.py",line 346, in loads
      File "{あなたのパス}/json/decoder.py",line 357, in decode
      File "{あなたのパス}/json/decoder.py",line 353, in raw_decode
   json.decoder.JSONDecodeError:Invalid \escape: line 14 column 15 (char 255)

jsonファイル内ではパスの「\」を「\\」と表記する必要があります。

path指定の区切り子は下記例のように記述してください。

   "path": {
     "json":"C:\\Users\\example_user\\Programs\\rt-mmvc_client\\config.json",
     "model":"C:\\Users\\example_user\\Programs\\rt-mmvc_client\\G_2000.pth",
     "noise":"C:\\Users\\example_user\\Programs\\rt-mmvc_client\\noise.wav"
   }

CPU版で音声が途切れ途切れになる

現在のバージョンではかなりCPU負荷がかかるため途切れ途切れになってしまいます。
GPU版でもCPUの負荷が結構高く逆にGPUの負荷がほとんどかからないためGPU版を利用してください。

クライアント起動時にmyprofile.confを自動で読み込ませたいです

myprofile.confのpathはコマンドライン引数でも指定することが可能です。
一例としてwindowsにおける設定方法を記載します。

  1. mmvc_client_GPU.exeのショートカットを作成する。
  2. 作成したmmvc_client_GPU.exeのショートカットのプロパティを開く。
  3. リンク先(T):の項目でmmvc_client_GPU.exeのpathの後ろに半角スペースを一つ開けmyprofile.confのpathを追記する。
    (例)D:\mmvc_client_GPU\mmvc_client_GPU.exe D:\mmvc_client_GPU\myprofile.conf
  4. OKボタンを押して設定を保存する。
  5. 作成したショートカットから起動すればmyprofile.confが自動で読み込まれます。

VoiceMeeterやOBSを通すと負荷が低いのにプツプツ途切れる

使用するCPUを1つだけに指定すると改善します。

タスクマネージャー → 詳細 → audiodg.exe右クリック → 関係の設定(win11) → 「すべてのプロセッサ」のチェックを外す → CPU1つのみ選択 → OK

MMVC_Clientを起動すると動作開始せずPCも不安定になる

mmvc_client_GPU_v0.3.0.0起動した際、VC開始しますと表示されてからも一向に動作せずCPU使用率が100%になり、PCも不安定になる。
再起動すれば正常な状態に戻るが、再度起動すると同じ状況になる。

CUDAとCUDNN入れ直したらGPU使用に切り替わったとの報告があります。
NVIDIAのディスプレイドライバの入れ直しで直るのかもしれません。

リアルタイム変換の質を向上させるにはどうすればよいでしょうか。

クライアントのコンフィグファイルをいじることになります。 こちらを参照してください。 https://discord.com/channels/957230290487619665/969040025469722664/1061789781983494184

学習データセットについて

学習データの自分の声と変換先のテキスト内容は一致させる必要はありますか

一致しなくても大丈夫ですが、声優統計コーパスやATR503文(内100文程度で可)などの所謂音素分を読み上げることを推奨します。

どのぐらいの量の自分の声が必要ですか

文章量にもよりますが100文程度でも十分な精度がでます。

テキスト内容の記述方法はどうしたらよいですか

漢字さえ使わなければよいです。
基本はひらがなかカナに統一したほうがよいです。句読点はあったほうがよいです。

推奨されるデータ、ボイスチェンジャーを使用する際のマイクの諸設定を教えてください

現在の推奨は384Kbps(24000Hz 16bit 1ch)です。
学習目標の声の音声ファイルと自分の声の音声ファイルはすべて同じサンプリングレート、bit、チャンネル数(すべてをかけ合わせて算出されるビットレート)にする必要があります。
ボイスチェンジャーを使用する際の設定は学習時に使用した音声のサンプリングレート、bit、チャンネル数と合わせてください。

自分の録音した音声と、ターゲットの音声は文章内容を同じにしないと駄目ですか?

自分の音声とターゲットの音声は同じ内容である必要はありません。 が、 音声とテキストの内容は、それぞれで揃える必要があります。 同様に、自分の音声ファイル名とターゲットの音声ファイル名は合わせる必要はありませんが、 それぞれで、wavとtxtファイルの名前は合わせる必要があります。 https://discord.com/channels/957230290487619665/958135053802676244/1073996076304048212 https://discord.com/channels/957230290487619665/1066526970696962138/1066526970696962138

自分で録音する音声は、可能な限りノイズを除去したほうが良いのでしょうか、それとも実際に使用する環境と同じようなノイズが乗っていたほうがいいのでしょうか。

ノイズは無いに越したことはないですが、 ある程度は入っていても問題ないようです。 https://discord.com/channels/957230290487619665/958135053802676244/1016338973704077393 https://discord.com/channels/957230290487619665/958135053802676244/1016345921128243296 https://discord.com/channels/957230290487619665/969040025469722664/1061809650925830174

VOICEROID等の出力をターゲットとする場合はしっかり抑揚をつけさせたほうが良いのでしょうか。

抑揚をつけた音声を学習させると、変換後の音声も抑揚のついたものとなるようです。 https://discord.com/channels/957230290487619665/958135053802676244/972498515659989012

録音音声に無音部分が多めに入ってしまいました。 問題ないですか?

無音が多い場合、品質劣化する傾向があります。 https://discord.com/channels/957230290487619665/969040025469722664/1061809650925830174 https://twitter.com/pipo_lll/status/1606158151761293312

追加の324文を録音したいです。 ITAコーパス100文のような録音するGoogleColabのファイルはありますか?

こちらにあります。一部 RECITATION324_041 の文が間違っているので適宜修正して使用してください。 https://discord.com/channels/957230290487619665/1066337577499623434/1066356489746399242

自分で録音する音声は、ターゲットの音声に抑揚を寄せたほうが良いのでしょうか。

リアルタイム変換時にどのようにしゃべる予定か、に寄せるのが良いと考えられます。 例えばターゲット音声を真似て同じように抑揚をつけてしゃべる予定なら、学習用の録音音声も抑揚をつけて録音したほうがよいでしょう。

100文の中で、長い文章が分割されていますが、長い文章は学習に向かないのでしょうか。

学習音声長がだいたいそろっていたほうが少しだけ学習速度に有利なのでそうしていますが、音質には影響ないです。

MMVC_Trainer学習実行時の疑問について

学習を一度中断して、 batch_sizeを変えて学習を再開しても大丈夫ですか?

特に問題ありません。

batch_sizeを変えたらg/melが下がった(または上がった)のですが、batch_sizeは性能に影響あるのでしょうか。

g/melの計算のアルゴリズム上、そのように見えるだけで実際の性能には影響ないようです。 https://discord.com/channels/957230290487619665/958135053802676244/1075390873182933072

logsフォルダの容量が大きくなってしまい空き容量が足りなくなりそうです。学習の再開に必要なファイル以外を消したいのですが、 消しても大丈夫なGファイル、 Dファイルはどれでしょうか。

latest、best、数字の最も大きいモデルを残しておくと良いでしょう。 https://discord.com/channels/957230290487619665/969040025469722664/1074691047982112859 https://discord.com/channels/957230290487619665/969040025469722664/1055282963870400613 また、こちらを参考にバックアップを取る頻度を減らすのも良いでしょう。 https://discord.com/channels/957230290487619665/969040025469722664/1059265670849757294

g/melの値が大きいファイルのほうが小さい値のファイルより品質が良いように聞こえます。

g/melの値は目安のようで、そこまで当てにならないようです。 https://discord.com/channels/957230290487619665/958135053802676244/1074731132089802773 https://discord.com/channels/957230290487619665/969040025469722664/1061809650925830174

g/melの値が同じだったら変換後の聞きやすさは同等ですか?

g/melは比較できません。 g/melが同数値でも変換結果に差は現れます。 https://discord.com/channels/957230290487619665/969040025469722664/1061809650925830174

ステップ28000まで来ましたが、g/melが未だに21前半~20をうろうろしています。これは元々の録音が良くないと考えて撮りなおした方が良いでしょうか?

g/melはあくまで指標なので、g/melが20を切らなくても精度が良い場合はあります。 一度変換してみて確認してみましょう。 https://discord.com/channels/957230290487619665/969040025469722664/1046783047657324617

ITAの100文を使って学習させています。この途中で324文の音声とテキストを追加し、create configを行って学習を再開しても良いものなのでしょうか。

おそらく大丈夫です。 ただし、データを追加した場合はファインチューニングで最初から学習をしたほうが学習がよく進む可能性があります。 https://discord.com/channels/957230290487619665/1058741301056643092/1063770968415273061 https://discord.com/channels/957230290487619665/959477423458639972/964063989866848307 https://discord.com/channels/957230290487619665/1058741301056643092/1058741301056643092

その他

私のコーパスをMMVC公式サポート音源にしたいです

原作者のTwitterか、MMVCコミュニティサーバのIsleTennos#5740にDMにてお問合せください。

MMVCで使っている技術や動作原理について知りたいです。

MMVCはVITSと呼ばれる技術、およびソースコードを元に作られています。

が概念を理解する上で大変参考になります。

バージョンの数値が上がると何が起きますか?

バージョンは「v1.x.y.z」のような形で表記されます。
1、x、y、zの数値は以下の規則で変わります。

  • 1
    • MMVCの処理方法が根本的に変わった場合に数値が上がります。
    • 滅多におきないので1固定です。
  • x
    • MMVCのアップデートで数値が上がります。
    • この数値が違うバージョンで作られたファイルは、続きから学習したり、ボイチェンとして使用できません。
  • y
    • MMVCのアップデートで数値が上がります。
    • この数値が変わっても、続きから学習したり、ボイチェンとして使用できます。
  • z
    • バグ修正で数値が上がります
    • この数値が変わっても、続きから学習したり、ボイチェンとして使用できます。
Clone this wiki locally