前回はAIを利用した音声合成ツールである
Seed-VCでトレーニングする
改めて紹介しておくと
- 事前の学習をせずとも音声変換できること
- GPUを使えばリアルタイムに近い速度で変換できること
- 音声データから直接変換できること
- ローカルで動かせること
- CLIのツールが充実していること
- オープンソースライセンスで提供されていること
Seed-VCの特徴のひとつは事前の学習が不要な、
しかしながらゼロショット変換はそれなりに近い声を出してはくれるものの、より参照音声に近づけたければトレーニング
なお音声ファイルは.wav、.flac、.mp3、.m4a、.opus、.oggを利用できます。ファイルの数の下限はなく、数が増えれば精度はあがります。また音声ファイル以外の情報も不要です。各ファイルの30秒以上のデータは無視されます。
音声ファイルはその人のみの声が入っていることと、可能な限りノイズやBGMなどがないデータでなくてはいけません。
前回は参照音声
Seed-VCにはトレーニング用のスクリプトが用意されています。実行環境として、前回と同じ構成をあらかじめ用意しておいてください。基本的に8GiB以上のVRAMを搭載したGPUが必要です。
トレーニングもV1のリアルタイム変換用・
- V1のリアルタイム変換用の設定スクリプト:
configs/presets/ config_ dit_ mel_ seed_ uvit_ xlsr_ tiny. yml - V1のオフライン変換用の設定スクリプト:
configs/presets/ config_ dit_ mel_ seed_ uvit_ whisper_ small_ wavenet. yml - V1の歌声変換用の設定スクリプト:
configs/presets/ config_ dit_ mel_ seed_ uvit_ whisper_ base_ f0_ 44k. yml - V2のオフライン変換用の設定スクリプト:
configs/v2/ vc_ wrapper. yaml
最初につくよみちゃんコーパスのWAVファイルを任意のディレクトリに展開します。Seed-VCのトレーニングでは、特定のディレクトリ以下にあるすべてのサポートフォーマットのファイルをすべてトレーニング対象とします。よってトレーニング対象としたい音声ファイル一式は、異なるディレクトリに保存しておくと良いでしょう。
$ mkdir -p tsukuyomi/01 tsukuyomi/03 $ unzip ~/tyc-corpus1.zip -d tsukuyomi/ $ mv 'tsukuyomi/つくよみちゃんコーパス Vol.1 声優統計コーパス(JVSコーパス準拠)/01 WAV(収録時の音量のまま)/'*.wav tsukuyomi/01/ $ mv 'tsukuyomi/つくよみちゃんコーパス Vol.1 声優統計コーパス(JVSコーパス準拠)/おまけ:WAV(+12dB増幅&高音域削減)/WAV(+12dB増幅&高音域削減)/'*.wav tsukuyomi/03/
「tsukuyomi/」tsukuyomi/」
$ uv run accelerate launch train_v2.py --dataset-dir tsukuyomi/03 --run-name tsukuyomi03 \ --batch-size 2 --max-steps 1000 --max-epochs 1000 --save-every 500 \ --num-workers 0 --train-cfm --train-ar (snip) Saving checkpoint... Saved AR checkpoint to runs/tsukuyomi03/AR_epoch_00019_step_01000.pth Saved CFM checkpoint to runs/tsukuyomi03/CFM_epoch_00019_step_01000.pth
トレーニングは上記を実行するだけです。--dataset-dir」--run-name」runs/ラベル名?」
--batch-size:GPUメモリに応じて調整するバッチサイズ--max-steps:データセットのサイズやトレーニング時間に合わせて変更する最大ステップ数--max-epochs:上と同じように変更する最大エポック数--save-every:どのステップごとにモデルチェックポイント保存かの間隔--num-workers:データ読み込み用ワーカー数--train-cfm:音声変換用のCFMモデルを作成--train-ar:アクセントや感情のスタイルを変換するARモデルを作成
これらはとりあえず上記と同じ値で実行してみましょう。メモリが足りないようならバッチサイズを減らしてみてください。ちなみに設定ファイルは何も指定しなければconfigs/」
トレーニング結果は次のように保存されます。
$ ls -1sh runs/tsukuyomi03/ total 655M 319M AR_epoch_00019_step_01000.pth 336M CFM_epoch_00019_step_01000.pth 4.0K vc_wrapper.yaml
トレーニング結果を使用するにはWeb UIにオプションを渡す必要があります。前回はapp.」app_を起動しましょう。
$ uv run python app_vc_v2.py \ --cfm-checkpoint-path runs/tsukuyomi03/CFM_epoch_00019_step_01000.pth \ --ar-checkpoint-path runs/tsukuyomi03/AR_epoch_00019_step_01000.pth Loading weights from nvidia/bigvgan_v2_22khz_80band_256x Loading CFM checkpoint from runs/tsukuyomi03/CFM_epoch_00019_step_01000.pth... Loading AR checkpoint from runs/tsukuyomi03/AR_epoch_00019_step_01000.pth... * Running on local URL: http://127.0.0.1:7860 To create a public link, set `share=True` in `launch()`.
音声変換に使われるCFMモデルと、アクセントや可能のスタイルを変換するのに使われるARモデルをそれぞれ異なるオプションで渡しています。ちなみ--ar-checkpoint-path」
1番上でも前回に比べるとだいぶ良くなっていますが、2番目は単語感のつながりがより自然になったように感じます。また、
最初に
ただしスタイル変換についてはうまくいきませんでした。特に
何かよくわからない言葉で喋りだした。こわい
これはARモデルがうまく作れていないことが原因かもしれません。
リアルタイム変換用のトレーニング
前回はリアルタイム変換に対応したGUIアプリケーションも起動しました。これもトレーニング結果を指定して実行してみましょう。このリアルタイム変換のアプリケーションはV1のモデルが必要であるため、V1のリアルタイム変換用のスクリプトを実行します。
$ uv run python train.py --config configs/presets/config_dit_mel_seed_uvit_xlsr_tiny.yml \ --dataset-dir tsukuyomi/03 --run-name tsukuyomi03a --batch-size 2 --max-steps 1000 \ --max-epochs 1000 --save-every 500 --num-workers 0
V2用のトレーニング結果は使えないので注意してください。
トレーニングが成功したら、次のように実行します。
$ uv run real-time-gui.py \ --checkpoint-path runs/tsukuyomi03a/DiT_epoch_00009_step_00500.pth \ --config-path runs/tsukuyomi03a/config_dit_mel_seed_uvit_xlsr_tiny.yml
なお、リアルタイム変換ではARモデルは使いません。また、引き続き参照音声の指定は必要になります。
こちらもより自然な発音になっていることがわかります。
CLIのみで音声変換する
リアルタイムではないオフライン変換は、基本的に変換元と参照用の音声ファイルをアップロードし、それをトレーニング結果を使って変換することになります。これはマイクを使って変換元を録音した場合も同様で、録音した結果は一時的に/tmp/」audio.」
言い方を変えると、元となる音声ファイルがあれば、Web UIを使わなくても直接CLIから変換が可能です。
$ uv run python inference_v2.py --source ~/source.wav --target ~/tsukuyomi01.wav --output ~/output \ --diffusion-steps 50 --length-adjust 1.0 --intelligibility-cfg-rate 0.7 --similarity-cfg-rate 1.0 \ --convert-style false --anonymization-only false --top-p 0.9 --temperature 1.0 \ --repetition-penalty 1.0 --cfm-checkpoint-path runs/tsukuyomi03/CFM_epoch_00019_step_01000.pth \ --ar-checkpoint-path runs/tsukuyomi03/AR_epoch_00019_step_01000.pth Loading weights from nvidia/bigvgan_v2_22khz_80band_256x Loading CFM checkpoint from runs/tsukuyomi03/CFM_epoch_00019_step_01000.pth... Loading AR checkpoint from runs/tsukuyomi03/AR_epoch_00019_step_01000.pth... (snip) Voice conversion completed in 88.49 seconds Output saved to: /home/ubuntu/output/vc_v2_source_tsukuyomi01_1.0_50_1.0.wav
「--output」
ちなみにinference_」--source」--target」librosa.を利用するため、soundfile.やaudioreadのオブジェクトも指定可能です。inference_」
音声合成と言うとどうしても悪用するイメージがつきものではありますが、まっとうな使い方もたくさんあります。世にある他の道具と同じく、きちんとライセンスを含む様々なルールや一般常識を守って運用することに注意すれば良いのです。Seed-VCを使って、自分や世の中にとって便利な