🎤

ReFlow-VAE-SVCの使い方

2024/05/06に公開

はじめに

どうも、うんわです🫠

Zennで記事を書くのは初めてなので、間違ってたら教えていただけると助かります。

この記事ではReFlow-VAE-SVCの導入と学習、推論のやり方についてステップバイステップで解説します。

導入

1. インストール

まず、インストールしたい場所をエクスプローラーで開き、右クリックメニューの”ターミナルで開く(T)”を押します。

するとPowerShellが立ち上がるので、

git clone https://github.com/yxlllc/ReFlow-VAE-SVC

と入力しEnterを押します。

コピーが終わるのを待つとReFlow-VAE-SVCというフォルダが作成されているはずです。

2. 環境の構築

まず、

cd ReFlow-VAE-SVC

と入力しカレントディレクトリをインストール場所\ReFlow-VAE-SVCに変更します。

次に、

python -m venv venv

と入力し仮想環境を構築します。

そして、

./venv/scripts/activate

と入力し仮想環境をActivateします。

つづいて、

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

と入力しCUDA 11.8用のPyTorchをインストールします。

最後に、

pip install -r requirements.txt

と入力し必要なパッケージ類をインストールします。

3. 事前学習済みモデルの構成

ContentVecの事前学習モデル
ダウンロードしたcheckpoint_best_legacy_500.ptをpretrain/contentvec内に配置します。

NSF-HiFiGANの事前学習モデル
ダウンロードしたzipファイルの中身をpretrain/nsf_hifigan/model内に配置します。

RMVPEの事前学習モデル
ダウンロードしたzipファイルの中身をpretrain/rmvpe内に配置します。

ReFlow-VAE-SVCの事前学習モデル
ダウンロードしたzipファイルの中身をexp/reflowvae-wavenet-attention内に配置します。

これで導入は完了です。

学習

1. データセットの配置

学習したい話者の音声をdata/train/audio内に配置します。

複数話者学習を行う場合は、話者IDのフォルダを作成し、その中にそれぞれ配置します。

単一話者の場合:
data/train/audio/1.wav
data/train/audio/2.wav
・・・

複数話者の場合:
data/train/audio/1/1.wav
data/train/audio/1/2.wav
・・・
data/train/audio/2/a.wav
data/train/audio/2/b.wav
・・・

というようになります。

2. 前処理(Preprocessing)

まず、

python draw.py

と入力し学習用データ(train)と検証用データ(val)に分けます。

もし検証用データの総数が10個以上であったり、長過ぎる場合は検証に時間が掛かり、学習速度が低下するので減らすことをおすすめします。

また、もし何もなかった場合は学習用データから一つ適当なのをdata/val/audio内に移動してください。

次に、

python preprocess.py -c configs/reflow-vae-wavenet.yaml

と入力し前処理を開始します。

これには少し時間と負荷がかかります。しばらく待ちましょう。

処理が終わったらdata/train内が以下のようになっているはずです。

3. 学習(Training)

学習前にconfigを編集します。

exp/reflowvae-wavenet-attention/config.yamlをメモ帳などで開き、

train:
amp_dtype: bf16
batch_size: 128
cache_all_data: true
cache_device: cpu
cache_fp16: true
decay_step: 200
epochs: 6000
gamma: 0.99
interval_force_save: 5000
interval_log: 2
interval_val: 200
lr: 0.00015
num_workers: 0
save_opt: false
weight_decay: 0
vocoder:
ckpt: pretrain/nsf_hifigan/model/model.ckpt
type: nsf-hifigan

に変更します。

ただしbatch_sizeはVRAM容量に合わせて変更してください。この場合は700MB程度のデータセットで8GB程度使用します。

また、Ampere(GeForce RTX 30xx)より前のGPUを使用している場合はamp_dtypeをfp16にしてください。

終わったら、

python train.py -c exp/reflowvae-wavenet-attention/config.yaml

と入力し学習を開始します。
かなり時間が掛かり、GPU使用率も100%に張り付くので寝ている間などにやると良いでしょう。
あまりに長すぎる!という場合はCtrl+Cで中断できます。
再開する場合も同じように

python train.py -c exp/reflowvae-wavenet-attention/config.yaml

で再開できます。

(Optional) 学習の可視化

もう1ウィンドウ分PowerShellを立ち上げ、カレントディレクトリをReFlow-VAE-SVCに変更し、venvをActivateして、

pip install tensorboard

と入力しtensorboardをインストールします。

次に、

tensorboard --logdir=exp/reflowvae-wavenet-attention

と入力するとtensorboardが起動し、学習を可視化することができます。

また、Audioタブから検証用データと実際に生成された音声を聴き比べることができます。

推論

学習が終わったらいよいよ変換ができます。
まず、変換したい音声をReFlow-VAE-SVC/に配置します。ここではinput.wavとします。
次に、

python main.py -i input.wav  -m exp/reflowvae-wavenet-attention/model_*****.pt -o output.wav -k 0 -f 0 -tid 1 -step 50

と入力します。model_*****.ptは最も大きいものに合わせておいてください。
変換が終わるとoutput.wavが出力されます。

オプションの意味

-kはキー変更 0でそのまま、12で1オクターブ上になります。単位はsemitone
-fはフォルマントシフト 小数で入力できます。 効果は聴いてみたら分かります🫠
-tidは目標話者ID 複数話者学習している場合は話者をここで指定できます。
-stepはステップ数 Stable Diffusionにおけるステップ数に似ています。多いほど時間がかかります。

最後に

問題なく推論まで行けましたか?
高品質で、学習も早く、複数話者学習にも対応しているReFlow-VAE-SVC、日本であまり流行ってないのはやはりCUIのみという点や導入に少し手間がかかる点、ドキュメントが整っていない点のせいでしょうか🥺
この記事が普及の一助になれば幸いです。

Discussion