ReFlow-VAE-SVCの使い方
はじめに
どうも、うんわです🫠
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