Skip to content

設定ファイル説明

SATOH Kiyoshi edited this page Jan 8, 2023 · 6 revisions

Trainer設定

v1.3.2.0 対応

configs/train_config.json ファイルの設定内容

学習データ保存設定

学習回数や学習結果に応じて学習データを保存する設定。

"train": {
  "eval_interval": 1000,
  "best": true,
  "backup": {
    "interval": 10000,
    "g_only": true,
    "mean_of_num_eval": 10
  },
}
  • eval_interval : 学習テスト(eval)を「eval_interval」回毎に行う。
  • best : 「true」で学習テストで一番良かった結果が出た時だけ学習データの保存を行う。「false」でeval毎に学習データの保存を行う。
  • backup.interval : 学習データのバックアップを 「interval」回毎に行う。
  • backup.g_only : 「true」でクライアントで必要になる「G_【学習回数】.pth」というファイルのみ保存する。
  • mean_of_num_eval : 「mean_of_num_eval」回だけevalを行い、その平均値を最終的なテスト結果の値とする。

学習結果による音声変換テスト設定

学習テスト(eval)時に、指定した音声ファイルを使ってボイスチェンジを行う設定。
ボイスチェンジした結果は、学習結果と同じ logs の指定フォルダ内に「vc_【変換先話者ID】_【学習回数】.wav」で保存される。

"others": {
  "input_filename": "dataset/test_sample.wav",
  "soruce_id": 107,
  "target_id": 101
}
  • input_filename : 変換したいサンプル音声ファイル
  • source_id : サンプル音声ファイルの変換元話者ID
  • target_id : 変換先話者ID

また複数の変換先話者IDを指定したい場合は、下記のように話者IDをリストにして指定する。

  "target_id": [10, 101, 105]

データオーギュメンテーション(DA)設定

学習時に学習データの音の強さや音程を変更して水増しするデータオーギュメンテーションという手法の設定。

"augmentation": {
  "enable"               : true,
  "gain_p"               : 0.5,
  "min_gain_in_db"       : -6,
  "max_gain_in_db"       :  6,
  "time_stretch_p"       : 0.5,
  "min_rate"             : 0.8,
  "max_rate"             : 1.2,
  "pitch_shift_p"        : 0.5,
  "min_semitones"        : -2.0,
  "max_semitones"        :  2.0,
  "add_gaussian_noise_p" : 0.0,
  "min_amplitude"        : 0.001,
  "max_amplitude"        : 0.04,
  "frequency_mask_p"     : 0.0
}
  • enable : 「true」の場合はデータオーギュメンテーション(DA)を行う。「false」の場合は他の設定をしてもDAを行わない。
  • gain_p : 音量のDAを行う確率。1で100%の確率で音量のDAを行う。
  • min_gain_in_db : 音量を最大何デシベル小さくするか指定する。-6で0.5倍の音量になる。
  • max_gain_in_db : 音量を最大何デシベル大きくするか指定する。6で2倍の音量になる。
  • time_stretch_p : 話速のDAを行う確率。1で100%の確率で話速のDAを行う。
  • min_rate : 話速を最大どれだけの短さにするか指定する。0.8だと20%速くなる。
  • max_rate : 話速を最大どれだけの長さにするか指定する。1.2だと20%遅くなる。
  • pitch_shift_p : 音程のDAを行う確率。1で100%の確率で音程のDAを行う。
  • min_semitones : 音程を最大どれだけ下げるか指定する。-2.0だと半音2つ分下がる。
  • max_semitones : 音程を最大どれだけ上げるか指定する。2.0だと半音2つ分上がる。
  • add_gaussian_noise_p : ホワイトノイズを入れるDAを行う確率。1で100%の確率でホワイトノイズを入れるDAを行う。
  • min_amplitude : ノイズを載せる最小値
  • max_amplitude : ノイズを載せる最大値
  • frequency_mask_p : 周波数帯で音を消すのDAを行う確率。1で100%の確率で周波数帯で音を消すのDAを行う。どこの周波数帯が消されるかはランダム。

min/maxの指定があるものは、その間でランダムに値が設定される。
DAを掛けたほうが、音量や音程への追従性が良くなるが、学習時間は増大する。
ノイズを載せる系のDAはノイズを減らすように学習するよう設計されているが、実験であまりよい結果がでなかったためデフォルトでは確率0に設定されている。

動作環境設定

動作環境のOSを指定する。

"others": {
  "os_type": "windows",
}
  • Colab上での学習の場合は「linux」を指定する。
    WindowsのローカルPC上で学習させる場合には「windows」を指定する。

学習モデル設定

学習モデルの指定を行う。通常は設定を変更しない。
ここでは1.3以降で追加されたもののみ説明する。

"model": {
  "n_flow": 8,
  "use_mel_train": true
}
  • n_flow : 話者特徴を学習するflow部分の層数を指定する。
  • use_mel_train : 「true」でメルスペクトログラムでの学習を行う。

Client設定

conf/myconfig.conf ファイルの設定内容

v0.3.1 対応

ONNX使用設定

ONNXを利用する場合、ONNXを利用するための設定を追加して、学習モデルをONNXファイルを指定する。

"vc_conf": {
  "onnx": {
    "use_onnx": true,
    "onnx_providers": ["DmlExecutionProvider", "CPUExecutionProvider"]
  }
}

"path": {
    "model":".\\G\\20221201_example\\G_10000.onnx",
}
  • use_onnx : trueでONNXでの変換を行う。ONNXでの変換を行う「use_onnx: true」の場合、「device: gpu_id」の指定は効かないことに注意。
  • onnx_providers : ONNXをどの実行エンジン優先で使うか指定する。DirectMLモデルの場合は "DmlExecutionProvider" か "CPUExecutionProvider" のどちらか一方か、優先する順番でどちらも記述する。v0.3.1時点ではCUDA対応とDirectML対応の同居が出来なかったため、DirectMLのみ対応にしている。

v0.3.0 対応

マイクとスピーカーの設定

リアルタイム変換のマイクとスピーカーを指定する設定。

"device": {
  "input_device1": "マイク (Realtek(R) Audio), MME",
  "input_device2": false,
  "output_device": "スピーカー (Realtek(R) Audio), MME",
}

デバイスの指定には「output_audio_device_list.exe」を実行して出力される「audio_device_list.txt」に書かれているデバイス名またはデバイス番号を利用する。

  • input_device1 : マイクのデバイス名またはデバイス番号を指定する。
  • input_device2 : BGMを入れたい場合など、変換を行わない入力デバイス名またはデバイス番号を指定する。BGM等を入れない場合は「false」を指定する。
  • output_device : スピーカーのデバイス名またはデバイス番号を指定する。

変換用GPUの設定

変換に利用するGPUまたはCPUでの変換を指定する。

"device": {
  "gpu_id": 1
}
  • GPUのIDは「nvidia_smi」コマンドで表示されるIDを指定する。
    GPUが無い場合やCPUでの変換をしたい場合は「-1」などマイナス値を指定する。

学習データファイルの指定

学習済み学習データファイルを指定する。

"path": {
  "json": "..\\train_configs\\train_config.json",
  "model": "..\\G\\G_50000.pth",
}
  • json : 学習時に使ったネットワークの設定ファイルを指定する。
  • model : 学習済みの「G_【学習回数】.pth」ファイルを指定する。

リアルタイム変換時のフレームの設定

リアルタイム変換時に負荷や音質に応じた設定。
リアルタイム変換時の遅延時間や音質に影響する。

"vc_conf": {
  "frame_length":8192,
  "delay_flames":4096,
  "overlap":1024,
  "dispose_stft_specs":2,
  "dispose_conv1d_specs":10,
}
  • delay_flames : どれだけ遅延して変換するか指定する。4096の場合、理論上は4096/24000≒0.18秒程度。短くするほど変換の負荷が上がり精度は少し下がる。
  • overlap : フレーム間の繋ぎでプチノイズが出るのを目立たなくするためグラデーション的に重ねる長さ。長くするほど目立たなくなるがエコーの感じが増える。
  • dispose_stft_specs : フーリエ変換での劣化部分を捨てるスペクトルの長さ。最大で2。
  • dispose_conv1d_specs : conv1dのパディングで劣化する部分を捨てるスペクトルの長さ。
    リアルタイム変換では短い時間(delay frames:8192で0.3秒ほど)で区切って、その塊で変換しています。変換を行うCNNの構造的に、塊の始まりと終わりのところはpaddingによるデータの劣化があり品質が少し下がります。その劣化部分をどれだけ捨てるかを指定しているのがdispose_conv1d_specsです。
    計算上ほとんどpaddingの影響ないくらいまで削る設定が10です。stftのほうは同様の問題がstftの変換でも起こるのでそれの削る設定で、これは2あれば十分です。どちらも品質寄りに設定されてると考えて、速度的に間に合わない場合、削っていって気にならないとこまで削る、という運用がいいと思います。

ファイルでの音声変換設定

ファイルでの変換テストを行うための設定。リアルタイム時と同じ処理を行うため、リアルタイム変換での音質の劣化も確認できる。

"others": {
  "input_filename": ".\\test_sample.wav",
  "output_filename": ".\\output_sample.wav",
}

"vc_conf": {
  "source_id":1,
  "target_id":2
}
  • others.input_filename : 変換したいサンプル音声ファイル。この設定項目がなかった場合はマイクからのリアルタイム変換を行う。
  • others.output_filename : 出力する音声ファイル。この設定項目がなかった場合はスピーカーへの出力を行う。
  • vc_conf.source_id : サンプル音声ファイルの変換元話者ID
  • vc_conf.target_id : 変換先話者ID

リアルタイム音声変更の設定

複数話者で学習している場合などにセレクトボタンからリアルタイムに話者を変更する設定。

"others": {
  "voice_selector": true,
  "voice_list": [101, 102, 103, 0],
  "voice_label": ["ずんだもん", "そら", "めたん", "自分"],
}
  • voice_selector : 「true」で音声選択を行えるようにする。「false」の場合音声選択ウィンドウは表示されず、source_idからtarget_idへのVCが行われる。
  • voice_list : 切り替えたい変換先話者IDのリスト
  • voice_label : ボタン表示上の変換先話者のリスト

ノイズリダクションの設定

ノイズリダクション機能を利用する設定。

"others": {
  "use_nr": true
}
"path": {
  "noise":"..\\noise.wav"
}
  • others.use_nr : ノイズリダクション機能を使う場合は「true」を指定する。
  • path.noise : 無音時のマイク入力を録音したファイルを指定する。