【RVC v1モデル対応版】RVC WebUIの設定解説
【更新状況】
2024年12月24日(火)
記事ページを公開しました。
これからRVC WebUIを始めてみたい方向けのチュートリアルです。
【対応ノートブック】
ダウンロード:RVC v1モデル – オリジナル版RVC WebUIチュートリアル用のノートブック
このチュートリアルは、RunPodでRVC WebUI起動後のRVC WebUIの各種設定に焦点を当てています。
RunPodの仕組みや使い方がわからない方は、以下の移行ガイドのチュートリアル
:【RVC v1モデル対応版】移行ガイド:RunPodでRVC WebUIを使う方法(要点解説)
を事前に把握していただくと、RunPodでRVC WebUIを使う方法の理解が深まるのではないかと思います。
【動画で解説】RunPod編:RVC v1モデル – オリジナル版RVC WebUIの使い方(設定詳解)
動画でも解説予定です。
文字情報だけでは理解しにくい場合などにご活用ください。
一度動画を視聴いただき、手順の全体像のイメージを作ってから、記事を活用いただくと理解しやすいかもしれません。
【RVC v1モデル対応版】
RVC WebUIの使い方:ボーカルリムーバー
– Accompaniment and vocal separation
* 画像をクリックすると拡大表示されます
「Accompaniment and vocal separation」(ボーカル/伴奏の分離)の機能は、ボーカルリムーバー(音源から楽器音と人の声を分離する処理)のことです。
データセットを作成する際や、音声変換したい楽曲からボーカルの音源を抽出したい場合に役に立つ機能です。
この機能を使う際には、処理を行いたい音源を配置した「フォルダ」のパスを指定する必要があるので注意してください。
「Vocals/Accompaniment Separation & Reverberation Removal」(ボーカルリムーバー・リバーブ除去)のタブをクリックし、以下のように設定します。
(一例です)
Input audio folder path:
(処理する音声ファイルの入った「フォルダ」へのパスを入力します)
/workspace/Retrieval-based-Voice-Conversion-WebUI/music
*「music」フォルダ内に処理したい音源を配置した場合の例
ここの設定で、ファイルへのパスを入力するとエラーになります。
ダメな設定例:
/workspace/Retrieval-based-Voice-Conversion-WebUI/music/vocalremovertest.wav
*「vocalremovertest.wav」という名前の音源を処理する場合の例
RVC WebUI上に以下のエラーが表示されます。
エラー出力例:
Traceback (most recent call last):
File "/workspace/Retrieval-based-Voice-Conversion-WebUI/infer-web.py", line 259, in uvr
paths = [os.path.join(inp_root, name) for name in os.listdir(inp_root)]
FileNotFoundError: [Errno 2] No such file or directory: 'workspace/Retrieval-based-Voice-Conversion-WebUI/music/vocalremovertest.wav'
(ファイルが見つからないエラー:「/workspace/Retrieval-based-Voice-Conversion-WebUI/music/vocalremovertest.wav」というファイルまたはディレクトリがありません)
Model
(ボーカルリムーバーのモデルを選択)
HP2-人声vocals+非人声instrumentals
【ボーカルリムーバー】
・HP2-人声vocals+非人声instrumentals
(音楽の楽器演奏+ボーカル ハモリなし)
:ハーモニー(ハモリ)のない場合に利用。
・HP5-主旋律人声vocals+其他instrumentals
(音楽の楽器演奏+ボーカル ハモリあり)
:ハーモニー(ハモリ)のある場合に利用。ただし、主旋律のボーカルの音声を弱める可能性があります。
Specify vocals output folder:
(ボーカルリムーバー後のボーカル音声の出力フォルダを指定)
opt
* 初期設定
初期設定では処理を実行すると「Retrieval-based-Voice-Conversion-WebUI」フォルダ内に「opt」フォルダが作成され、「opt」フォルダ内に処理後の音源が出力されます。
必要に応じて名前を変更(半角英数)してください。
Specify instrumentals output folder:
opt
(ボーカルリムーバー後の伴奏の出力フォルダを指定)
* 初期設定
初期設定では処理を実行すると「Retrieval-based-Voice-Conversion-WebUI」フォルダ内に「opt」フォルダが作成され、「opt」フォルダ内に処理後の音源が出力されます。
必要に応じて名前を変更(半角英数)してください。
設定が完了したら「Convert」(変換:ボーカルリムーバーを実行)をクリックします。
Output information:
(アウトプット情報)
成功すれば
〜.mp3->Success
〜.wav->Success
などと出力されます。
チュートリアルの設定では「opt」フォルダ内に
・instrument_〜.wav(伴奏の音声ファイル)
・vocal_〜.wav(ボーカルの音声ファイル)
が出力されます。
【RVC v1モデル対応版】RVC WebUIの使い方:学習編
(データセットで学習モデル作成)- Train
* 画像をクリックすると拡大表示されます
「Train」(学習)のタブをクリックし、以下のように設定します。
(一例です)
【Step:1】
Fill in the experimental configuration. Experimental data is stored in the ‘logs’ folder, with each experiment having a separate folder. Manually enter the experiment name path, which contains the experimental configuration, logs, and trained model files.
(実験の設定をします。実験データは「logs」フォルダに保存され、各実験フォルダが作成されます。実験設定、ログ、学習済みモデルファイルを含む実験名パスを手動で入力します)
Input experiment name:
(出力される学習モデルの名前)
amitaro
チュートリアルでは分かりやすいように「amitaro」という名前にしています。
RunPodでは「Volume Disk」(ボリュームディスク領域:ポッド契約中の永続保存領域)にファイルが保存され続けます。RunPodの仕様を考慮すると「amitaro48kid0」などと後述する設定内容を忘れないようにしておくと、「Please specify the speaker/singer ID:」(識別IDの設定)にまつわる音質の低下を予防できるのではないかと思います。
また、学習モデル同士を融合させる場合に、違う「Target sample rate:」(サンプリングレート・サンプル周波数)ではエラーとなるようでしたので、作成した学習モデルを融合させる予定の方は、周波数も名前に記載しておくといいかもしれません。
Target sample rate:
(サンプリングレート・サンプル周波数)
48k
(48000Hz)
基本的には音声ファイルのサンプリングレートに近い数値に合わせますが、お好みに応じて「32k」(32000Hz)「40k」(40000Hz)「48k」(48000Hz)から選択してみてください。
Does the model have pitch guidance (singing must, voice can not.):
(ピッチガイダンスの設定 – ピッチガイダンスの有無:歌唱時は必須、話し声時は任意)
yes
*注:リアルタイムボイスチェンジを試みる際の注意点
ここの設定を「no」に設定すると「ピッチレス」(音高ガイドなし)モデルとなり、リアルタイム音声変換をする際に、音声変換精度がやや劣るようです。音声変換精度を向上させたい場合には、「True」を選択してみてください。ただし、VC Clientを利用する際に、お使いのパソコンの負荷を減らしたい場合には、「ピッチレス」モデルが候補の1つとなるようです。お使いのパソコンのスペックに応じて調整してみてください。
尚、「ピッチレス」モデルへの対応は、VC Client v.1.5.2.5(2023年4月26日アップデート以降)からのようです。VC Clientでリアルタイム音声変換をしたい方は、リアルタイムボイスチェンジを試す時点の最新版のVC Clientをダウンロードするようにしてみてください。
【Step:2a】
Automatically traverse all files that can be decoded into audio in the training folder and perform slice normalization, and generate 2 wav folders in the experiment directory; only single-person training is supported for the time being.
(オーディオにデコードできるデータセットフォルダ内のすべてのファイルを自動的にスキャンし、スライスの正規化を実行します。実験ディレクトリに2つのwavフォルダを生成します。現在、単一の歌手/話者のトレーニングのみがサポートされています。)
Input training folder path:
(学習させるデータセットフォルダのパスを指定)
/workspace/Retrieval-based-Voice-Conversion-WebUI/datasets/dataset
*「Retrieval-based-Voice-Conversion-WebUI」フォルダ内にある「datasets」フォルダの中に「dataset」というデータセットフォルダを配置した場合の例
Please specify speaker ID:
(識別IDの設定)
0
*2回目に学習させる場合には、1回目とは違うIDに設定します。
(例:1回目の学習 – ID 0。2回目の学習 – ID 1)
識別IDの番号は「Model Inference」(モデル推論)の際の音質に影響しますので、「Input experiment name:」(出力される学習モデルの名前)の設定で「amitaro48kid0」などと識別ID番号を入れておくといいかもしれません。
識別IDは、RunPodで使う際の利便性を考慮し「0〜1000」の範囲で指定できるようにコードを改変しておきました。
【Step:2b】
Use CPU to extract pitch (if the model has pitch), use GPU to extract features (select card number)
(CPUでピッチを抽出 – ピッチあり学習モデルの場合・GPUで特徴を抽出 – GPUを選択します)
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2:
(GPUのインデックスを「-」で区切って入力します。例:「0-1-2」でカード「0、1、2」が選択)
0
ピッチ抽出アルゴリズムの処理の際のGPU数を指定できます。
GPUの数が「1つ」の場合には、RVC WebUI上の設定で
【Train】(学習 – ピッチ抽出アルゴリズムの処理)
Step2b:
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2
(ピッチ抽出アルゴリズムの処理:ハイフン[-]で区切って使用するカード番号を入力してください 例:0-1-2はカード0、カード1とカード2を使用)
0
になっています。
GPUの数を「2つ」にした場合には、説明に書かれているように、RVC WebUI上の設定で
【Train】(学習 – ピッチ抽出アルゴリズムの処理)
Step2b:
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2
(ピッチ抽出アルゴリズムの処理:ハイフン[-]で区切って使用するカード番号を入力してください 例:0-1-2はカード0、カード1とカード2を使用
0-1
と半角英数で「–」「1」を付け足します。
GPUの数を「3つ」にした場合には、同じように
【Train】(学習 – ピッチ抽出アルゴリズムの処理)
Step2b:
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2
(ハイフン[-]で区切って使用するカード番号を入力してください 例:0-1-2はカード0、カード1とカード2を使用)
0-1-2
と半角英数で「–」「1」「–」「2」を付け足します。
GPU information:
(GPUの情報)
0 NVIDIA RTX A4000
RunPodで「RTX A4000」(16 GB VRAM)を設定した場合の例です。
Number of CPU threads to use for pitch extraction:
(ピッチ抽出とデータセット処理に使用するCPUスレッド数)
32
(一例です)
初期設定は「32」です。
RunPod上で試した範囲では、数を増やしても減らしてもどちらでも大差はないかと思われました。
Select pitch extraction algorithm: Use ‘pm’ for faster processing of singing voice, ‘dio’ for high-quality speech but slower processing, and ‘harvest’ for the best quality but slowest processing.
(ピッチ抽出アルゴリズムの設定:歌声の処理を高速化するには「pm」を使用します。入力した音声が高音質でCPUが貧弱な場合には「dio」で高速化できます。「harvest」の方が「pm」と「dio」に比べて品質は良いですが処理が完了するのに時間がかかります)
harvest
(一例です)
【Step:3】
Fill in the training settings and start training the model and index
(学習の設定をして、モデルの学習を開始し、学習モデルと特徴インデックスファイルを作成する)
Save frequency (save_every_epoch):
(学習の状況の保存頻度)
5
チェックポイントファイル(「D_〜.pth「G_〜.pth」)の保存頻度を設定します。
「Train」(学習)後に出力される「logs」フォルダ内の学習ログフォルダにあるチェックポイントファイルがディスク容量を圧迫す原因になります。
「Volume Disk」(ボリュームディスク領域:ポッド契約中の永続保存領域)の残りの容量に応じて保存頻度を調整してください。
試した範囲では、チェックポイントファイルを1回保存すると「1GB」程のディスク容量が必要です。
再学習させたい場合には一番数字の大きな「D_〜.pth「G_〜.pth」ファイルを残しておくだけで大丈夫ですので、必要に応じて不要なチェックポイントファイルを削除してください。
Total training epochs (total_epoch):
(学習回数 – エポック数)
10
2024年10月時点のRVC公式のQ&Aでは、推奨される学習回数としては
・低品質の音声ファイルによるデータセット
:20〜30回
* 低品質の音声ファイル:データセットの音声の品質が低く、ノイズフロアが高い場合
* ノイズフロア:音声ファイル全体に含まれるノイズ
とのことで、設定を高くしすぎると低品質の音声ファイルによるデータセットによる学習では、これ以上学習しても音質の改善は見込めないようです。
一方で
・高品質の音声ファイルによるデータセット
:200回(学習回数の許容範囲)
* 高品質の音声ファイル:データセットの音声の品質が高く、ノイズフロアが低い、十分な合計再生時間(5分〜10分)のある場合
とのことです。
また、データセットの合計再生時間の推奨時間は
・10分〜50分程度
とのことです。
音声変換の質を向上させたい場合には
・「5〜10分」の高品質のデータセットを用意
・学習回数の許容範囲「200回」
がとりあえずの目安かもしれません。
ただ、これまでに報告をいただいた情報では
・学習回数を減らすことで音声変換の質が向上
された事例の報告もいただいていますので、試行錯誤してみてください。
【再学習に関して】
再学習させる場合にはチェックポイントファイル(「D_〜.pth「G_〜.pth」)が保存されている必要があります。
チェックポイントファイル(「D_〜.pth「G_〜.pth」)が保存されている場合には
Input experiment name:
(出力される学習モデルの名前)
amitaro
Please specify the speaker/singer ID:
(識別IDの設定)
0
* 識別IDを合わせるのは必須ではありませんが、合わせるのが無難かと思います
を同じにした状態にします。
前回の学習回数が「10」回の場合には
Total training epochs (total_epoch):
(学習回数 – エポック数)
20
と設定すると追加の「10」回分の学習ができます。
batch_size for every GPU:
(各グラフィックスカード・GPUに対してのバッチサイズ)
* 学習するデータセットをどの程度の一回あたりの処理量にするか
3
学習するデータセットをどの程度の1回あたりの処理量にするかを指定します。
GPUメモリが多い場合には、ここの数値を大きくすると、過学習が予防できるようです。
注意点としては、膨大な量のデータセットで学習させる際などに、あまり大きな数値にすると、メモリが足りなくなりエラーとなるリスクも考えられますので、RunPodの管理画面のGPUメモリ使用率の状況を見つつ、途中でエラーとなる方などはここの数値を試行錯誤してみてください。
参考情報として、1〜3秒の音声ファイル200個(25MB:16ビット・モノラル・44.1kHz)を使って100回学習(48k・ピッチガイダンスあり・harvest・Batch size:20)させた際に、ここの値を「20」にすると
Step 3a: Model training started(学習)
:GPU Utilization 28%〜90%推移
:GPU Memory Used 46%〜53%推移
の結果でした。
何回か試した範囲では「GPU Memory Used」の割合が100%以下であれば学習を完了できるようでした。
その後、さらにバッチサイズの値を上げてみました。
上述の200ファイルのデータセットを使いここの設定を「40」にしてみても、学習ができそうでした。
さらにデータセットの規模を大きくし600ファイル(合計60MB)にして、ここの設定を「40」にしてみても
Step 3a: Model training started(学習)
:GPU Utilization 7%〜75%推移
:GPU Memory Used 71%〜98%推移
になり、ぎりぎり学習ができそうでした。
メモリオーバーエラーとなる場合には、一例として
・Step 3a: Model training started(学習)
の途中でJupyterLab上の出力で以下のエラー
エラー出力例:(メモリオーバー)
〜
torch.cuda.OutOfMemoryError: CUDA out of memory.
(メモリ容量超えのエラー)
Tried to allocate 〜 MiB
(GPU 0; 15.72 GiB total capacity; 〜 GiB already allocated; 〜 MiB free; 〜 GiB reserved in total by PyTorch)
(〜MiBを割り当てようとしました。GPU 0; 総容量15.72GiB; 既に〜GiBが割り当てられている; 〜MiBが解放されている; PyTorchによって合計 〜GiBが予約されています。)
If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
(もしも「予約メモリ」が「割り当てメモリ」を大きく超えてしまう場合には、断片化を避けるために「max_split_size_mb」を設定してみてください。
詳しくは、「メモリ管理とPYTORCH_CUDA_ALLOC_CONF」のドキュメントを参照してください。)
が出力され、学習の処理が完了しません。
RVC WebUI上の学習の「Output Information」(出力情報)の表示では「All processes have been completed!」(全ての処理が完了しました!)と出力される現象もあるようですが、最終的に学習モデルが出力されなかったり、RVC WebUI上で「Error」(エラー表示)などがある場合には、JupyterLab上の出力結果で、エラーの原因を確認してみてください。
Whether to save only the latest ckpt file to save disk space:
(ディスク容量を節約するために、最新のckptファイルのみを保存する)
No
ここの機能を使うためには
Save frequency (save_every_epoch):
(学習の状況の保存頻度)
5
* チュートリアルでは「5」回ごとにチェックポイントファイルを保存。全「10」回の学習では「2」回チェックポイントファイルが保存されます
などと、1回以上、チェックポイントファイルを保存する設定にする必要があります。
ここの設定を「Yes」にした場合には、最終のチェックポイントファイル(「D_〜.pth「G_〜.pth」)がのみ保存されます。
ディスク容量節約のために、ここの設定を「0」にできないか?プログラムを改変して試してみたところ、オリジナル版のRVC WebUIでは「0」にすると学習ができないようでしたので1回以上に設定する必要がありそうでした。
Whether to cache all training sets to video memory. Small data under 10 minutes can be cached to speed up training, and large data cache will blow up video memory and not increase the speed much:
(すべてのデータセットをGPUメモリにキャッシュします。小さなデータセット(10分未満)はキャッシュすると学習を高速化できますが、大規模なデータセットをキャッシュするとGPUメモリが消費され、速度があまり向上しない可能性があります)
No
Load pre-trained base model G path.:
(事前学習モデルGのファイルのパスを指定)
pretrained/f0G48k.pth
*「48kHz」を指定した場合の設定例
設定に応じて、自動的にファイルが反映されます。
Load pre-trained base model D path.:
(事前学習モデルDのファイルのパスをパス)
pretrained/f0D48k.pth
*「48kHz」を指定した場合の設定例
設定に応じて、自動的にファイルが反映されます。
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2:
(GPUのインデックスを「-」で区切って入力します。例:「0-1-2」でカード「0、1、2」が選択されます)
0
学習の処理の際のGPU数を指定できます。
GPUの数が「1つ」の場合には、RVC WebUI上の設定で
【Train】(学習 – 学習の処理)
Step3:
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2
(ハイフン[-]で区切って使用するカード番号を入力してください 例:0-1-2はカード0、カード1とカード2を使用)
0
になっています。
GPUの数を「2つ」にした場合には、説明に書かれているように、RVC WebUI上の設定で
【Train】(学習 – 学習の処理)
Step3:
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2
(ハイフン[-]で区切って使用するカード番号を入力してください 例:0-1-2はカード0、カード1とカード2を使用
0-1
と半角英数で「–」「1」を付け足します。
GPUの数を「3つ」にした場合には、同じように
【Train】(学習 – 学習の処理)
Step3:
Enter the card numbers used separated by -, for example 0-1-2 use card 0 and card 1 and card 2
(ハイフン[-]で区切って使用するカード番号を入力してください 例:0-1-2はカード0、カード1とカード2を使用)
0-1-2
と半角英数で「–」「1」「–」「2」を付け足します。
設定ができたら
・One-click training.
(ワンクリックでトレーニング開始)
のボタンをクリックします。
しばらくすると以下のような表示になります。
RCV WebUI上の出力結果
*「Train」内の「Output message」(出力メッセージ)の出力
step 1: processing data
python trainset_preprocess_pipeline_print.py /workspace/Retrieval-based-Voice-Conversion-WebUI/datasets/dataset 48000 32 /workspace/Retrieval-based-Voice-Conversion-WebUI/logs/amitaro False
step2a:正在提取音高
python extract_f0_print.py /workspace/Retrieval-based-Voice-Conversion-WebUI/logs/amitaro 32 harvest
step 2b: extracting features
python extract_feature_print.py cuda:0 1 0 0 /workspace/Retrieval-based-Voice-Conversion-WebUI/logs/amitaro
step 3a: training the model
write filelist done
python train_nsf_sim_cache_sid_load_pretrain.py -e amitaro -sr 48k -f0 1 -bs 3 -g 0 -te 10 -se 5 -pg pretrained/f0G48k.pth -pd pretrained/f0D48k.pth -l 0 -c 0
Training completed, you can view the training logs in the console or the train.log within the experiement folder
(878, 256),22
training index
adding index
成功构建索引, added_IVF22_Flat_nprobe_1.index
all processes have been completed!
(すべての処理が完了しました!)
RunPod-v1-RVC-WebUI-Historical-Legacy-for-Japanese-AI-beginners.ipynb上の出力結果
*【手順5:RVC WebUIの起動】の出力
clean_empty_cache
start preprocess
['trainset_preprocess_pipeline_print.py', '/workspace/Retrieval-based-Voice-Conversion-WebUI/datasets/dataset', '48000', '32', '/workspace/Retrieval-based-Voice-Conversion-WebUI/logs/amitaro', 'False']
〜
INFO:torch.nn.parallel.distributed:Reducer buckets have been rebuilt in this iteration.
INFO:amitaro:====> Epoch: 1
/workspace/Retrieval-based-Voice-Conversion-WebUI/venv/lib/python3.10/site-packages/torch/optim/lr_scheduler.py:139: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`. Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
warnings.warn("Detected call of `lr_scheduler.step()` before `optimizer.step()`. "
INFO:amitaro:====> Epoch: 2
INFO:amitaro:====> Epoch: 3
INFO:amitaro:====> Epoch: 4
INFO:amitaro:Saving model and optimizer state at epoch 5 to ./logs/amitaro/G_30.pth
INFO:amitaro:Saving model and optimizer state at epoch 5 to ./logs/amitaro/D_30.pth
INFO:amitaro:====> Epoch: 5
INFO:amitaro:====> Epoch: 6
INFO:amitaro:====> Epoch: 7
INFO:amitaro:====> Epoch: 8
INFO:amitaro:====> Epoch: 9
INFO:amitaro:Saving model and optimizer state at epoch 10 to ./logs/amitaro/G_60.pth
INFO:amitaro:Saving model and optimizer state at epoch 10 to ./logs/amitaro/D_60.pth
INFO:amitaro:====> Epoch: 10
INFO:amitaro:Training is done. The program is closed.
(学習が実行されました。プログラムを終了します)
INFO:amitaro:saving final ckpt:Success.
Traceback (most recent call last):
File "/workspace/Retrieval-based-Voice-Conversion-WebUI/train_nsf_sim_cache_sid_load_pretrain.py", line 534, in
main()
File "/workspace/Retrieval-based-Voice-Conversion-WebUI/train_nsf_sim_cache_sid_load_pretrain.py", line 50, in main
mp.spawn(
File "/workspace/Retrieval-based-Voice-Conversion-WebUI/venv/lib/python3.10/site-packages/torch/multiprocessing/spawn.py", line 239, in spawn
return start_processes(fn, args, nprocs, join, daemon, start_method='spawn')
File "/workspace/Retrieval-based-Voice-Conversion-WebUI/venv/lib/python3.10/site-packages/torch/multiprocessing/spawn.py", line 197, in start_processes
while not context.join():
File "/workspace/Retrieval-based-Voice-Conversion-WebUI/venv/lib/python3.10/site-packages/torch/multiprocessing/spawn.py", line 149, in join
raise ProcessExitedException(
torch.multiprocessing.spawn.ProcessExitedException: process 0 terminated with exit code 149
/usr/lib/python3.10/multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be 20 leaked semaphore objects to clean up at shutdown
warnings.warn('resource_tracker: There appear to be %d '
出力された学習モデルは、RunPodのJupyterLab上でダウンロードできます。
「weights」フォルダ内に
・「amitaro.pth」
*「Input experiment name:」(出力される学習モデルの名前)で「amitaro」という名前に設定した場合の例
という学習モデルが出力されています。
また、indexファイル・npyファイルなどは「logs」フォルダ内に出力される該当フォルダ内にあります。
JupyterLabの画面上で該当ファイルを右クリック後に表示される「ダウンロード」をクリックするとファイルをダウンロードできます。
必要に応じてローカル環境(自分のパソコン)にダウンロードして、リアルタイムボイスチェンジなどに挑戦してみてください。
AIを利用したリアルタイムボイスチェンジャーのクライアントソフトウェアVC Client:
w-okada/voice-changer(The MIT License)| GitHub
【RVC v1モデル対応版】
RVC WebUIの使い方:モデル推論編(音声変換)- Model Inference
* 画像をクリックすると拡大表示されます
「Model Inference」(モデルの推論)のタブをクリックし、以下のように設定します。
(一例です)
「Refresh timbre list」(音色リストを更新する)のボタンをクリック後に
Inferencing timbre:
(音色の推論)
amitaro.pth
* 音色:おんしょく・ねいろ
* 学習の際に「Input experiment name:」(出力される学習モデルの名前)を「amitaro」にした場合の例
が設定できるようになります。
Please select a speaker id:
(識別ID)
0
*学習の際に「Please specify speaker ID:」(識別IDの設定)を「0」にした場合の例
【Single Inference】(1つの音声ファイルのモデル推論の場合)
It is recommended +12key for male to female conversion, and -12key for female to male conversion. If the sound range explodes and the timbre is distorted, you can also adjust it to the appropriate range by yourself.
(男性から女性への推奨は+12key、女性から男性への推奨は-12key、もしレンジ爆発で歪みが発生する場合は、自分で正しいレンジに音色を調整することもできます)
transpose(integer, number of semitones, octave sharp 12 octave flat -12):
(ピッチ・音階の設定 – 整数の値を変更すると半音変化します。設定例 1オクターブ上げる場合: 12 ・ 1オクターブ下げる場合: -12)
+12
男性から女性への変換は+12key、女性から男性への変換は-12keyを推奨。音域が行き過ぎて声が歪んでしまう場合は、適切な音域に調整してみてください。
チュートリアルでは男性の声→女性の声に変換のため+12にしています。
Enter the path of the audio file to be processed (default is the correct format example):
(処理するオーディオファイルのパスを入力します – デフォルトは正しいフォーマットの例です)
/workspace/Retrieval-based-Voice-Conversion-WebUI/voice/originalvoice.wav
*「Retrieval-based-Voice-Conversion-WebUI」内の「voice」フォルダの中に「originalvoice.wav」という音声ファイルを配置した場合の例
Select the algorithm for pitch extraction. Use ‘pm’ to speed up for singing voices, or use ‘harvest’ for better low-pitched voices, but it is extremely slow.
(ピッチ抽出のアルゴリズムを選択する -「pm」: 歌声の音声変換が最速だが音声の品質は低い。「harvest」: 低音で利用。品質は向上するが、音声変換速度は遅い)
harvest
Feature search database file path:
(特徴量検索データベースファイルのパスを設定)
/workspace/Retrieval-based-Voice-Conversion-WebUI/logs/amitaro/added_IVF22_Flat_nprobe_1.index
(一例です)
* 学習の際に「Input experiment name:」(出力される学習モデルの名前)を「amitaro」にした場合の例
「Retrieval-based-Voice-Conversion-WebUI」のフォルダの「logs」内の学習モデル名の該当フォルダにある「added〜.index」のファイルのパスをコピー後に入力欄に貼り付けてください。
Search feature ratio (controls accent strength, too high has artifacting)
(検索特徴率:サーチ・検索機能の割合)
0.5
* アーチファクト:ノイズ(雑音)
アクセントの強さをコントロールします。高すぎるとアーチファクトが発生します。
初期設定は「0.76」に設定されているようです。
数値を変えて音声がどうなるか?色々と試してみてください。
チュートリアルの音声で試した範囲では、ここの設定を「1」にすると、途中で雑音が入ることもあるようでした…
「0.5」あたりまで下げると、徐々に軽減してくるようでした。
検索特徴率を「1」に近づけるほど、今回学習させた「学習モデル」の特徴に偏らせるようです。
参考情報として、1〜3秒の音声ファイル200個(25MB:16ビット・モノラル・44.1kHz)を使って100回学習(48k・ピッチガイダンスあり・harvest・Batch size:20)させた学習モデルを使うと、ここの値を「1」に近づけてもアーチファクトがそれほど気にならなくなりました。音声ファイルを増やし、学習回数を増やすと音質が向上するようでした。
学習の際にJupyterLab上に出力された学習の指標の1つである損失関数の値の経過を見てみると
・「epoch=1 loss_disc=2.341 loss_gen=2.339」
(学習1回目・dの損失関数=2.341・gの損失関数=2.339)
* d:discriminator(弁別器・識別器)
* g:generator(生成器)
* 損失関数:0に近づくほど性能が良い
↓
・「epoch=84 loss_disc=1.600 loss_gen=5.549」
(学習84回目・dの損失関数=1.600・gの損失関数=5.549)
* 16回〜17回ごとに損失関数の値が記録されるようでしたが、100回目は記録されていないようでしたので最終結果は不明です…
ということで「dの損失関数」の値が良くなっているようでした。
追加で学習回数を増やした際には、損失関数の値がどうなっているのかをチェックするといいかもしれません。
損失関数の値が頭打ちになった際には、それ以上学習しても性能が上がらない可能性が考えられます。
F0 curve file, optional, one pitch per line, instead of the default F0 and ups and downs:
(ピッチ曲線ファイル – オプション、1行に1ピッチ、デフォルトのピッチ曲線ファイルのエレベーションを置き換えます)
未設定
* F0(最低共振周波数:エフゼロ・エフォー):ピッチ(音高)の低域の最下限のこと。単位はHz
* F0 curve:f0曲線・ピッチ曲線
* エレベーション:高さ
ピッチ曲線ファイル(F0曲線ファイル)を設定することができるようです。
おそらくですが、ピッチ(音高)の低域の最下限を指定したい場合などに活用できるのではないかと思われます。
個人で調べられた範囲の情報では、ピッチ曲線ファイルは、学習を実行後に「logs」フォルダ内に出力される学習モデル名の該当フォルダ内にある
・「2a_f0」フォルダ
の中にあるnpyファイルのことのようです。
チュートリアルの設定では、データセットで10個の音声ファイルを使っているので
・0_1.wav.npy
・0_2.wav.npy
〜
・9_1.wav.npy
などと、10個以上のnpyファイルが出力されています。
npyファイルは
・「dataset」フォルダを表示させた際の音声ファイルの順番
に左端の数字が「0」から順番に割り当てられています。
「_ 」(アンダーバー)の右にある数字は、基本的に「1」になりますが、データセットの音声を処理の過程で分割した場合に、「2」などの1以降の数字が割り当てられます。
例:
1番目のデータセットの音声ファイル2つに分割した2つ目の音声ファイルのピッチ曲線ファイル
→ 0_2.wav.npy
10番目のデータセットの音声ファイルのピッチ曲線ファイル
→ 9_1.wav.npy
上記の規則を理解すれば、概ね該当の音声ファイルの見当がつくのではないかと思います。
また、数字が割り当てられた音声ファイルを確認することもできます。
数字が割り当てられた音声ファイルは、「logs」フォルダ内に出力される学習モデル名の該当フォルダ内にある
・「1_16k_wavs」フォルダ(「2a_f0」フォルダと同じ階層)
の中にあります。
RunPodで実行中のJupyterLabから、ローカル環境(自分のパソコン)に音声ファイルをダウンロードして音声を確認し、ここの設定で指定したいピッチ曲線ファイルを決めます。
指定したいピッチ曲線ファイル(npyファイル)が決まったら、ローカル環境から
・「f0 curve file」をドラッグ&ドロップ
します。
ただ、試した範囲では推論はできるが、JupyterLabの出力上に以下のエラー
エラー出力例:(フォルダの参照エラー)
Traceback (most recent call last):
File "/workspace/Retrieval-based-Voice-Conversion-WebUI/vc_infer_pipeline.py", line 236, in pipeline
lines = f.read().strip("\n").split("\n")
File "/usr/lib/python3.10/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 0: ordinal not in range(128)
(ユニコードのデコードエラー: 'ascii'コーデックは位置 0 のバイト0x93をデコードできません。序数が128の範囲にありません。)
が出るようでした。
また、文字のエンコーディングを指定してみても新たなエラーとなるようでしたので、ここの機能は使えないのかもしれません。
設定が完了したら
・Convert
(変換)
のボタンをクリックします。
数秒〜10秒ほどで推論完了。
1〜3秒ほどのファイル10個で学習させただけでしたが、聞いてみると女性っぽい声に変換されていました。
今回の使い方を参考にしつつ、試行錯誤しながらオリジナルのボイスチェンジャーを作成してみてください。
尚、出力された音声ファイルは
「Export audio (Click on the three dots in the bottom right corner to download)」
(出力オーディオ – 右下隅の3つのドット、クリックしてダウンロード)
のところでダウンロードできます。
ブラウザの種類によってはRVC WebUI上にダウンロードできる機能が反映されないようでしたので
のブラウザを使うようにしてください。
上記以外のプラウザでRVC WebUIを起動後も、一度割り当てられた以下のようなRVC WebUIのURL
・https://〜-7860.proxy.runpod.net/
* 現在のポッドと契約中は、同じURLが割り当てられます。
* 現在のポッドを削除すると、新規作成したポッドのURLは変更されます。
を、他のブラウザで閲覧すると、【手順5:RVC WebUIの起動】のコードを実行中の状態であれば、起動中のRVC WebUIを操作できます。
必要に応じて、上記のブラウザに切り替えて「Model Inference」(モデル推論)を実行してみてください。
* 注:オリジナル版のRVC WebUIの場合にはFireFoxでも、表示がわかりにくいですがダウンロードできるようになっていました。
【Batch Inference】(複数の音声ファイルを一括でモデル推論する場合)
* 画像をクリックすると拡大表示されます
For batch conversion, input the audio folder to be converted, or upload multiple audio files, and output the converted audio in the specified folder (opt by default).
(一括変換、変換する音声フォルダを入力、または複数の音声ファイルをアップロードし、指定したフォルダに変換した音声を出力します)
It is recommended +12key for male to female conversion, and -12key for female to male conversion. If the sound range explodes and the timbre is distorted, you can also adjust it to the appropriate range by yourself.
(男性から女性への推奨は+12key、女性から男性への推奨は-12key、もしレンジ爆発で歪みが発生する場合は、自分で正しいレンジに音色を調整することもできます)
transpose(integer, number of semitones, octave sharp 12 octave flat -12):
(ピッチ・音階の設定 – 整数の値を変更すると半音変化します。設定例 1オクターブ上げる場合: 12 ・ 1オクターブ下げる場合: -12)
+12
男性から女性への変換は+12key、女性から男性への変換は-12keyを推奨。音域が行き過ぎて声が歪んでしまう場合は、適切な音域に調整してみてください。
チュートリアルでは男性の声→女性の声に変換のため+12にしています。
Specify output folder
(モデル推論後の音声ファイルの出力先フォルダを指定)
opt
* 初期設定は「opt」
「Retrieval-based-Voice-Conversion-WebUI」フォルダ内にここの欄で指定したフォルダが作成され、モデル推論後の音声ファイルが出力されます。
Select the algorithm for pitch extraction. Use ‘pm’ to speed up for singing voices, or use ‘harvest’ for better low-pitched voices, but it is extremely slow.
(ピッチ抽出のアルゴリズムを選択する -「pm」: 歌声の音声変換が最速だが音声の品質は低い。「harvest」: 低音で利用。品質は向上するが、音声変換速度は遅い)
harvest
Feature search database file path:
(特徴量検索データベースファイルのパスを設定)
/workspace/Retrieval-based-Voice-Conversion-WebUI/logs/amitaro/added_IVF22_Flat_nprobe_1.index
(一例です)
* 学習の際に「Input experiment name:」(出力される学習モデルの名前)を「amitaro」にした場合の例
「Retrieval-based-Voice-Conversion-WebUI」のフォルダの「logs」内の学習モデル名の該当フォルダにある「added〜.index」のファイルのパスをコピー後に入力欄に貼り付けてください。
Search feature ratio
(検索特徴率:サーチ・検索機能の割合)
0.5
* アーチファクト:ノイズ(雑音)
アクセントの強さをコントロールします。高すぎるとアーチファクトが発生します。
初期設定は「0.76」に設定されているようです。
数値を変えて音声がどうなるか?色々と試してみてください。
ただ、チュートリアルの設定(データセットの音声ファイル10個・学習10回)で試した範囲では、「Retrieval Feature Ratio:」(検索特徴率)を「1」にすると、途中で雑音が入ることもあるようでした…
ここの設定を「0.5」あたりまで下げると、気になりませんでした。
検索特徴率を「1」に近づけるほど、今回学習させた「学習モデル」の特徴に偏らせるようです。
Enter the path of the audio folder to be processed (just go to the address bar of the file manager and copy it):
(処理するオーディオが入ったフォルダのパスを入力します – ファイル・マネージャーのアドレス・バーからコピーしてください)
/workspace/Retrieval-based-Voice-Conversion-WebUI/voice
*「Retrieval-based-Voice-Conversion-WebUI」内の「voice」フォルダの中に「originalvoice.wav」などの音声ファイルを配置した場合の例
設定が完了したら
・Convert
(変換)
のボタンをクリックします。
チュートリアルの設定の場合には「opt」フォルダ内に変換後の音声ファイルが出力されます。
(変換前の音声ファイルが入っている「voice」フォルダ内に「originalvoice.wav」を入れていた場合、「opt」フォルダ内に音声変換後の「originalvoice.wav」の音声ファイルが出力されます)
【RVC v1モデル対応版】
RVC WebUIの使い方:学習モデルの融合 – ckpt Processing
* 画像をクリックすると拡大表示されます
「ckpt Processing」(チェックポイント処理)では、RVC WebUIで作成したPyTorchの学習モデルであるpth形式ファイル同士を融合することができます。
「ckpt Processing」(チェックポイント処理)のタブをクリックし、以下のように設定します。
(一例です)
【Model Fusion, which can be used to test sound fusion】
(学習モデルの融合、音源のマージテストに使用できます)
A model path:
(RVC WebUIで作成したpth形式の学習モデルのファイルのパスA)
/workspace/Retrieval-based-Voice-Conversion-WebUI/weights/amitaroA.pth
融合したい学習モデルを指定します。
B model path:
(RVC WebUIで作成したpth形式の学習モデルのファイルのパスB)
/workspace/Retrieval-based-Voice-Conversion-WebUI/weights/amitaroB.pth
「A model path:(RVC WebUIで作成したpth形式の学習モデルのファイルのパスA)で指定した学習モデルと同じサンプリングレートの学習モデルを指定します。
融合する学習モデルは「Train」(学習)の際に設定した「Target sample rate:」(サンプリングレート・サンプル周波数)が同じものにしないとエラーとなりますので注意してください。
その他にもDoes the model have pitch guidance (singing must, voice can not.):(ピッチガイダンスの設定 – ピッチガイダンスの有無:歌唱時は必須、話し声時は任意)も同じでないとエラーとなるようでした。
RVC WebUI上のエラー表示
Fail to merge the models. The model architectures are not the same.
(学習モデルの融合に失敗しました。2つのモデルのアーキテクチャに違いがあります)
A model weight for model A:
(Aモデルの占める割合)
0.5
融合後の学習モデルにおける「学習モデルA」の比率を設定します。
Target sample rate:
(サンプリングレート・サンプル周波数)
48k
基本的に「Train」(学習)の際に設定した「Target sample rate:」(サンプリングレート・サンプル周波数)が同じにしますが、お好みに応じて「32k」(32000Hz)「40k」(40000Hz)「48k」(48000Hz)から選択してみてください。
Whether the model has pitch guidance:
(ピッチガイダンスの設定 – ピッチガイダンスの有無:歌唱時は必須、話し声時は任意)
yes
融合後の学習モデルにピッチガイダンス(音高ガイド)を付けるかどうかどうかを設定します。
Model information to be placed:
(挿入するモデル情報)
未入力
モデル情報を追加したい場合に設定します。
試した感じでは、例として以下の学習モデル情報の
出力例:
模型信息:
采样率:〜k
模型是否输入音高引导:0
* 日本語訳は後述
「模型信息」(モデル情報)のところの情報を書き換えられるようでした。
「采样率」(サンプリングレート)は学習モデル融合時の設定が反映されるようでしたが、「模型是否输入音高引导」(ピッチガイダンスの有無)は「0」のままで設定が反映されないようでした。
Saved model name without extension:
(融合後の学習モデル名 – 拡張子「.pth」なしの名前)
fusion-amitaro
半角英数で名前を入力します。ここで設定した名前に「.pth」(拡張子)が付いた学習モデル(例:「fusion-amitaro.pth」)が作成されます。
設定ができたら「Fusion」ボタンをクリックします。
処理が完了後に「weight」フォルダ内に融合された学習モデル「fusion-amitaro.pth」が出力されます。
【Modify model information (only small model files extracted from the weights folder are supported)】
(モデル情報の修正 -「weights」フォルダに出力される小さな学習モデルのファイルのみ対応)
Model path:
(RVC WebUIで作成したpth形式の学習モデルのファイルのパス)
/workspace/Retrieval-based-Voice-Conversion-WebUI/weights/amitaro.pth
学習モデルの情報を修正したい学習モデルのファイルのパスを設定します。
Model information to be modified:
(変更するモデル情報)
10data-10epoch-batch3-harvest
モデル情報を追加したい場合に設定します。
試した感じでは、例として以下の学習モデル情報の
出力例:
模型信息:
采样率:〜k
模型是否输入音高引导:〜
「模型信息」(モデル情報)のところの情報を書き換えられるようでした。
保存すると以下のようになる予定です。
出力例:
模型信息:10data-10epoch-batch3-harvest
采样率:48k
模型是否输入音高引导:1
The saved file name, the default is empty and the same name as the source file:
(保存するファイル名 – 拡張子「.pth」ありの名前:空欄にすると元のファイル名と同じ名前になります)
amitarotest.pth
学習モデル名を変更したい場合に、学習モデル名を半角英数で入力します。
名前を変更したい場合には「amitarotest.pth」などと拡張子「.pth」ありの名前を指定します。
設定ができたら「Modify」(変更)ボタンをクリックします。
処理が完了後に、指定した学習モデルのモデル情報が変更されます。
【View model information (only small model files extracted from the weights folder are supported)】
(モデル情報を表示する:「weights」フォルダにある小さい学習モデルファイルのみ対応)
Model path:
(RVC WebUIで作成したpth形式の学習モデルのファイルのパス)
/workspace/Retrieval-based-Voice-Conversion-WebUI/weights/amitaro.pth
* チュートリアルで作成した学習モデル「amitaro.pth」の例
学習モデルの情報を表示させたい学習モデルのファイルのパスを設定します。
設定ができたら「View」(表示)ボタンをクリックします。
指定した学習モデルのモデル情報が「Export message」(メッセージの出力)に表示されます。
出力例:
模型信息:10epoch
采样率:48k
模型是否输入音高引导:1
日本語訳すると
出力例(日本語訳):
学習回数:10回
サンプリングレート:48k
ピッチガイダンス:1(あり)
注:「ピッチガイダンス(音高ガイド):0」はピッチガイダンスなしの設定
ということで、学習回数・サンプル周波数・ピッチガイダンスの有無の情報が記録されているようです。
【Model extraction(enter the path of the large file model under the logs folder), which is suitable for half of the training and does not want to train the model without automatically extracting and saving the small file model, or if you want to test the intermediate model】
(モデル抽出:「logs」フォルダ内に出力される大きなファイル「D_〜.pth「G_〜.pth」のモデルパスを入力します。モデルを半分までトレーニングし、自動的に小さいファイルモデルを保存しなかったり、中間モデルをテストしたい場合に適用)
Model path:
(RVC WebUIで作成したpth形式の学習モデルのファイルのパス)
/workspace/Retrieval-based-Voice-Conversion-WebUI/logs/amitaro/G_60.pth
「logs」フォルダ内に出力される該当学習モデルフォルダに出力されるチェックポイントファイル(中間モデル)のパスを設定します。
チュートリアルの設定は「Input experiment name:」(出力される学習モデルの名前)を「amitaro」にし、学習の10回目で出力されたチェックポイントファイル「G_60.pth」を指定する場合の例です。
「Train」(学習)の際に
Save frequency (save_every_epoch):(学習の状況の保存頻度)
0
にした場合には、「D_〜.pth「G_〜.pth」などのチェックポイントファイルは保存されませんので、ここの機能を使う予定の方は注意してください。
Save Name:
(保存するファイル名を設定 – 拡張子「.pth」なしの名前)
f0G48k-amitaro
保存するファイルのファイル名を半角英数で設定します。
今回の設定では「f0G48k-amitaro.pth」というファイルが出力されます。
* f0:ピッチガイダンス(音高ガイド)ありの意味
* 48k:サンプリングレート48000Hzの意味
Target sample rate:
(サンプリングレート・サンプル周波数)
48k
基本的には学習した際のサンプリングレートに合わせますが、お好みに応じて「32k」(32000Hz)「40k」(40000Hz)「48k」(48000Hz)から選択してみてください。
Whether the model has pitch guidance, 1 for yes, 0 for no:
(ピッチガイダンスの設定 – ピッチガイダンスの有無:歌唱時は必須、話し声時は任意)
0
保存するファイルにピッチガイダンス(音高ガイド)を付けるかどうかどうかを設定します。
ピッチガイダンスを有効化する場合には「1」(yes)を設定します。ピッチガイダンスを付けない場合には「0」(no)にします。
ここの機能は、モデル情報の「模型是否输入音高引导:」(ピッチガイダンス)の設定に反映されるようでした。
Model information to be placed:
(挿入するモデル情報)
未入力
モデル情報を追加したい場合に設定します。
ここを空欄にすると「Extracted model.」(出力されたモデル)とモデル情報が追加されます。
設定ができたら「Extract」(出力)ボタンをクリックします。
指定したファイル名で「weights」フォルダ内にファイルが出力されます。
ただ、「Model Inference」(モデル推論)で推論をしようとすると「Please specify the speaker/singer ID:」(識別IDの設定)がエラー表示となり、RVC WebUI上でモデル推論はできないようでした。
【RVC v1モデル対応版】
RVC WebUIの使い方:学習モデルのONNX化 – Export Onnx
* 画像をクリックすると拡大表示されます
「Export Onnx」(ONNX形式ファイルを出力)では、RVC WebUIで作成したPyTorchの学習モデルであるpth形式ファイルを、ONNX(Open Neural Network eXchange:オニキス)形式の学習モデルに変換できます。
「Export Onnx」(ONNX形式ファイルを出力)のタブをクリックし、以下のように設定します。
(一例です)
・RVC Model Path:
(RVC WebUIで作成したpth形式の学習モデルのファイルのパス)
/workspace/Retrieval-based-Voice-Conversion-WebUI/weights/amitaro.pth
*「Input experiment name:」(出力される学習モデルの名前)で「amitaro」という名前に設定した場合の例
・Onnx Export Path:
(ONNX形式に変換後の学習モデルのファイルのパス:ONNX形式にしたファイル名まで入力)
/workspace/Retrieval-based-Voice-Conversion-WebUI/weights/amitaro.onnx
*「amitaro.onnx」という名前でONNX形式のファイルを「weights」フォルダに出力する設定した場合の例
・MoeVS Model:
チェックを入れる
*一例
ここの設定はよくわかりませんでしたが、チェックを外してもファイルは出力できるようでした。
日本語訳を見てみると「MoeVS」は「MoeSS?」と翻訳されているようでしたので 「Moe Speech Synthesis」(萌え音声合成:「Miuzarte/MoeSS | GitHub」)のプログラムのことかもしれません。
設定ができたら「Export Onnx Model」(ONNX形式の学習モデルのファイルを出力)をクリックすると「Onnx Export Path:」(ONNX形式に変換後の学習モデルのファイルのパス)で指定した場所にファイルが出力されます。
【オリジナル版RVC v1モデル】RunPod編:RVC WebUIの設定の解説動画へのコメントと対応例など
視聴者の方から動画へのコメントをいただけるようでしたら、回答などを、ここにまとめていく予定です。
by 子供プログラマー
:【RunPod編】RVC WebUIをはじめよう – AIボイスチェンジャー(一覧)