so-vits-svc で声質変換を試すメモ
so-vits-svc で声質変換しゅごいね...
私も試したい!
so-vits-svc, VITS ベースの Voice conversion と思われますが, 何をベースにしているのかは不明です.
2023/03/31 時点では, v4.0 と v4.0-v2 がありますが, ここでは v4.0 版を試します.
情報
ありがとうございます.
環境
- 32 GB mem Ryzen9 3950X
- CPU もそこそこ学習に使うので, 最低 6 cores CPU は必要そう
- 3080 10 GB
- GPU なくても CPU でも学習できると思われるが, コードが CUDA 前提でかかているため, とりあえずは GPU 必要
- Python 3.9(3.10 のがいいかも)
repo
2023/03/31 時点ではこちらです.
setup
pip
requirements.txt
がありますが, pyworld
のコンパイルで, requirements.txt
にある numpy のバージョンによってはコケます.
numpy は pip で最新のをいれるとよさそうです.
pretrained model
- ContentVec
- G_0,D_0(Optional, but highly recommended)
が必要です.
G_0.pth
D_0.pth
は直ダウンロードできないです.
ライセンス的には公開しても問題は少ないようなので, いろいろ確認されたのち, 開発者がそのうち huggingface にアップロードされるかもです.
(2023/03/31 時点では, 野良? モデルがいくつか huggingface などにアップロードされているようです)
とりあえずは無くても動くので, 今回は無しで進めます.
ただ, いい感じに結果を得たい場合は epoch 10,000 くらいまで学習(3080 で 2 日程度)する必要がありますので, G_0 D_0 取得できる場合は利用するほうがよいでしょう.
(so-vits-svc 開発者が, なんかいい感じの音声コーパスで学習させたものが G_0.pth
, D_0.pth
なのですかね)
ContentVec は普通に落とせます.
ContentVec の Pretrained model のライセンスは不明ですが, 論文によると HuBert
をベースにしているとあるので, fairseq は MIT ライセンスですから, HuBert および ContentVec も permissive なライセンスと思われます(TODO: 要ライセンス確認)
音声データ
音声データについては↑の解説 URL にあるように,「つくよみちゃんコーパス」を利用させていただきました. ありがとうございます.
音声合成(「声質の学習」など、より具体的に説明しても可)には、フリー素材キャラクター「つくよみちゃん」が無料公開している音声データを使用しています。
■つくよみちゃんコーパス(CV.夢前黎)
処理
あとは↑の紹介 URL, REDAME や Colab ノートブック参考に処理していけばいけます!
batch size 8 で, powerlimit 120W で 1 epoch 15 秒くらいでした.
INFO:44k:====> Epoch: 4, cost 15.34 s
INFO:44k:====> Epoch: 5, cost 15.45 s
INFO:44k:====> Epoch: 6, cost 15.46 s
INFO:44k:====> Epoch: 7, cost 15.40 s
INFO:44k:====> Epoch: 8, cost 15.45 s
INFO:44k:====> Epoch: 9, cost 15.28 s
INFO:44k:====> Epoch: 10, cost 15.14 s
INFO:44k:====> Epoch: 11, cost 15.09 s
INFO:44k:====> Epoch: 12, cost 15.22 s
INFO:44k:====> Epoch: 13, cost 15.35 s
今回の設定では 17 epoch くらいで 200 step になりました. 何かしら結果が得られる 1000 epoch(~= 10,000 steps) だと学習に 4 時間というところですかね.
推論
まず, 10,000 steps 程度(epoch 867)進んだところの weight を使いました.
今回は普通の発話(not 歌声)で試しました.
元音声は Common Voice 36037897(ケチャップをたっぷりかけてじっくり炒める
)です.
変換後(-t 0 -a
)はこちら
Voila!
でも, ちょっと機械的なノイズが入っている感じでしょうか.
2 WAV(+12dB増幅)版を使い, また 10,000 epoch(120,000 steps くらい) まで学習させました!
Super coool! ノイズもすくなくいい感じです!
考察
ただ, Common Voice のほかのデータでも試しましたが, あまりうまくいかないケースもありました.
元音声が男性とか. あと Common Voice は, 元データが音声はあんまりきれいな感じではない(ぶつ切りになっていたり, なんかよくわからない台本の日本語音声だったりするのもある(聞き取れん... 音声処理にはいい台本なのかもしれんが)ので, 変換が難しいのもあるかもです.
元音声は TTS とかで生成した音声がいいかも.
-
G_0.pth
D_0.pth
が得られればそれを使う - より学習用の音声を増やす
とより安定 + 音質改善するかもです!
歌声に適用するとどうなるかも試してみたいですね.
その他の音声合成の話題
音声系は毎年のように流行り廃りがあってついていくのがめんどい.
so-vits-svc もいつの間にか repo 消えたり開発止まったりする可能性ありますので, あとでいろいろ手法切り替えられるように, so-vits-svc の仕組みを理解しておいてコード流用などできるようにしておくとよいでしょう.
日本勢(?)だと ESPNet ベースでいろいろ作られていますが, とはいえ ESPNet もなんか動かすのめんどいね...
最近だと SiFiGAN がいいのかしらん?
Vall-E など, 汎用(?) neural codec から, 固有の音声データ与えて voice conversion できるのも出てきているので, この方向性にも期待でしょうか.
Vall-e (の実装)がベースにしている EnCodec は CC-BY-NC 4.0 で商用利用ができないので注意です!
スマホとかで動かしたい...
モデルサイズは hubert で 1.3G, G_*.pth
で 500 MB くらいです. so-vits-svc には onnx export して quantize すれば 500MB ~ 1GB くらいでしょうか.
音声の生成は, 多少時間かかるかもですが, すごいかかるわけではないでしょう.
librosa 周りとか, nanosnap
にいろいろ足りない部分実装して頑張れば
スマホでも声質変換うごかせるやも?
TODO
- 【丁寧解説】SO-VITS-SVC-v4をWindowsに導入しローカルで音声学習&合成する方法 https://economylife.net/so-vits-svc-windows/ を参考に, 2 WAV(+12dB増幅)を使ってみる
- 10000 epoch まで学習させてみる(1.5 日くらい)
- DiffGan とか SiFiGAN とか他のも試す
- 元音声は TTS だったり, 素の(標準的な声質での)歌声生成で得られたものを使ってみる
- スマホで声質変換動かす
Discussion