so-vits-svc を Windows ローカルで動かす

本家 innnky/so-vits-svc svc-develop-team/so-vits-svc
(以下は2023年2月ごろの32kブランチを元にした説明です。将来大幅な変更やメインブランチが4.0に移行された場合、この説明は互換性がなくなる可能性があります)

改造版 32kブランチ / 4.0(44.1khz)ブランチ
(設定ファイルなどをモデルごとに分離して管理しやすくし、複数のモデルを並行して学習できるようにした改造版です。ここで説明している方法とは異なりますのでリンク先のREADMEをお読みください)

インストール

3.10 の venv で。まず torch torchaudio torchvision を入れる。1.13.1+cu117。

1
2
3
pip install torch==1.13.1+cu117 --index-url https://download.pytorch.org/whl/cu117
pip install torchaudio==0.13.1+cu117 --index-url https://download.pytorch.org/whl/cu117
pip install torchvision==0.14.1+cu117 --index-url https://download.pytorch.org/whl/cu117

残りを入れる。

pip install SoundFile
pip install sounddevice
pip install requests==2.28.1
pip install onnx onnxsim onnxoptimizer
pip install scipy==1.9.3
pip install Flask==2.1.2 Flask_Cors==3.0.10
pip install playsound==1.3.0 PyAudio==0.2.12
pip install pydub==0.25.1
pip install pyworld
pip install tqdm==4.63.0
pip install scikit-maad
pip install praat-parselmouth
pip install gradio==3.9
pip install starlette==0.20.4

pip install tensorboard
pip install librosa

試行錯誤しつつインストールしたのでこの通りに入れても動かないかもしれない。requirements.txtとは若干バージョンが異なる。下の2つは記載がなかったが必要。numpyは1.23.5になっていた。

(4.0はこれに加えて

pip install fairseq==0.12.2

を入れる)

https://github.com/bshall/hubert/releases/download/v0.1/hubert-soft-0d54a1f4.pt
hubert フォルダに入れる

https://huggingface.co/innnky/sovits_pretrained/resolve/main/G_0.pth
https://huggingface.co/innnky/sovits_pretrained/resolve/main/D_0.pth
logs/32k フォルダに入れる

4.0はダウンロードするファイルが異なる
checkpoint_best_legacy_500.pt
hubert フォルダに入れる

https://huggingface.co/innnky/sovits_pretrained/resolve/main/sovits4/G_0.pth
https://huggingface.co/innnky/sovits_pretrained/resolve/main/sovits4/D_0.pth
logs/44k フォルダに入れる

(現在G_0.pthとD_0.pthは正式に公開されていない。使わなくても学習は可能らしい?)

トレーニング

1.データセット準備

dataset_raw/name にwavを入れる。サブフォルダは認識されないみたい。作者は2~10秒のファイルを使っていて、良い結果を得るには1,000個以上のファイルが必要だと言っている。100個程度でもそれなりの結果は出る。

python resample.py

で、dataset/32k/name 内に変換される。

python preprocess_flist_config.py

で、configs/config.json などが生成される。

python preprocess_hubert_f0.py

これで dataset/32k/name が準備完了となる。dataset_raw に入れたファイルはもう不要になる。

2.実行

python train.py -c configs/config.json -m 32k

VRAM足りない場合 config.jsonbatch_size を減らす(RTX3060 12GBで10が限界)。

logs/32k フォルダ内に D_数字.pthG_数字.pth が生成される。生成間隔はたぶん config.jsoneval_interval
途中でやめてから再開すると最後に生成された中間結果から再開される。

合成

  • checkpoints フォルダを作成
  • checkpoints フォルダ内に任意のプロジェクト名で新規フォルダを作成
  • logs/32kフォルダにある config.json と G_数字.pth を model.pth にリネームしてプロジェクト名フォルダ内に入れる。G と D どっちを使うのかよく分からないが D はノイズまみれだったのでたぶん G で良いのだろう
python sovits_gradio.py

gradioが起動したらブラウザで開く。SelectModel タブでモデルを選択すると VoiceConversion タブが使えるようになる。

初期値が-40(db)の設定は音をスライスする無音判定の基準。変換中にメモリ不足が出たらスライスが大きすぎるということなので、この値を少し増やして-30とかで試してみる。細かく刻まれてメモリ不足を回避できる。

Edit
Pub: 04 Feb 2023 10:53 UTC
Edit: 18 Mar 2023 04:48 UTC
Views: 6860