Retrieval-based-Voice-Conve.../docs/training_tips_ja.md
2023-04-22 11:54:13 +09:00

3.8 KiB

RVCの訓練における説明、およびTIPS

本TIPSではどのようにデータの訓練が行われているかを説明し、訓練の際に気を付けるべき点をまとめます。

処理の流れ

GUIの訓練タブのstepに沿って説明します。

step1

実験名の設定を行います。 ここで実験の名前を設定できます。また、モデルにピッチを考慮させるかもここで設定できます。 各実験のデータは/logs/実験名/ に配置されます。

step2a

音声の読み込みと前処理を行います。 この処理は主にtrainset_preprocess_pipeline_print.pyのpreprocess_trainsetで行われます。

load audio

音声のあるフォルダを指定すると、そのフォルダ内にある音声ファイルを自動で読み込みます。 例えばC:Users\hoge\voicesを指定した場合、C:Users\hoge\voices\voice.mp3は読み込まれますが、C:Users\hoge\voices\dir\voice.mp3は読み込まれません。

音声の読み込みには内部でffmpegを利用しているので、ffmpegで対応している拡張子であれば自動的に読み込まれます。 ffmpegでint16に変換した後、float32に変換し、-1 ~ 1の間に正規化されます。

denoising

入力し、scipyのfiltfiltによる平滑化を行います。

音声の分割

入力した音声はまず、冒頭から音声が出るまでと、一定期間(max_sil_kept=5秒?)より長く無音が続く部分を検知して音声を分割します。無音で音声を分割した後は、0.3秒のoverlapを含む4秒ごとに音声を分割します。こうして4秒以内に区切られた音声に対して音量の正規化を行った後wavファイルを0_gt_wavsに、そこから16kのサンプリングレートに変換したものを1_16k_wavsにwavファイルで保存します。

step2b

ピッチの抽出

wavファイルからピッチ(音の高低)の情報を抽出します。parselmouthやpyworldに内蔵されている手法でピッチ情報(=f0)を抽出し、/logs/実験名/2a_f0に保存します。その後、ピッチ情報を対数で変換して1~255の整数に変換し、/logs/実験名/2b-f0nsfに保存します。これは人間の耳がログスケールで音を認識するのに合わせています。

step3

モデルのトレーニングを行います。

初心者向け用語解説

深層学習ではデータセットを分割し、少しずつ学習を進めていきます。一回のモデルの更新(step)では、batch_size個のデータを取り出し予測と誤差の修正を行います。これをデータセットに対して一通り行うと一epochと数えます。

そのため、学習時間は 1step当たりの学習時間 x (データセット内のデータ数 ÷ バッチサイズ) x epoch数 かかります。一般にバッチサイズを大きくするほど学習は安定し、(1step当たりの学習時間÷バッチサイズ)は小さくなりますが、その分GPUのメモリを使用します。GPUのRAMはnvidia-smiコマンド等で確認できるので、実行環境のマシンに合わせてバッチサイズをできるだけ大きくするとより短時間で学習が可能です。

RVCではモデルの訓練を0からではなく、事前学習済みの重みから開始するため、少ないデータセットで学習を行えます。デフォルトではRVCのある場所/pretrained/f0G40k.pthRVCのある場所/pretrained/f0D40k.pthを読み込みます。学習時はsave_every_epochごとにモデルのパラメータがlogs/実験名/G_{}.pthlogs/実験名/D_{}.pthに保存されますが、このパスを指定することで学習を再開したり、もしくは違う実験で学習したモデルの重みから学習を開始できます。