昨日の記事の続き。
前回の記事ではDiff-SVCという手法を使ってみましたが、so-vits-svcってやつが良いらしい(上位互換?)ということでこっちでもやってみました。
↑は自分のforkです。gradioのUIを英語化したりして多少使いやすくしました。
あと、Fish Diffusionってやつもいいらしい。これもDiff-SVCの派生っぽい?
こっちはDiff-SVCのチェックポイントが使い回せるっぽいので時間があったら試したい。
so-vits-svcの訓練について
基本的には以下の通り。
2つめの文献で触れられているスクリプトの修正についてはfork版では対応済み。Windows上で訓練する場合のみ影響があるらしく、Colabなどを使う場合は特に修正しなくても問題にならないはず。
学習データセットは前回のを使いまわしたので、コマンドを叩くだけでした。
Diff-SVCと比較したときのso-vits-svcの利点は、なんといっても全体を通して所要時間が短いこと。
前回は学習データのプリプロセスに1時間くらい、訓練に8時間くらいでしたが、今回は前処理が数分(RTX 3070を使用)、訓練は8400steps(=126エポック)くらいまでやって1時間半程度(ColabでA100を使用)でした。
「いや、前回は60000stepsだったのに8400じゃ足りてなくない?」と思うかもしれませんが、これくらいの反復だけで聴ける品質のものができます。訓練の時間が大幅に短くなったので、前回コンピューティングユニットが88くらい残ってましたがまだ60くらい残ってます。
前回はバッチサイズが45で、それで3500エポックくらいまで回したわけですが、それに比べるとso-vits-svcは学習の収束がかなり速いことが分かります。100エポックくらいでもいい感じになるとかなんとか。
VRAM消費については自分のデータセットと設定(バッチサイズ12)では訓練時に13GBとちょっとくらいだったので別にTesla T4でも動いていたのですが、なんか遅い?って感じだったのでA100を使っちゃいました。金で買うコンピューティング能力、気持ち良すぎだろ。
ただ、訓練を8400stepsで止めてもそんなに問題無いとは言えまだ気になる点はあるので、もうちょい訓練する意味はありそう。でも流石に60kステップも要らないと思います。
罠にハマったところ
Colabで訓練するときにrequirements_short.txt
を使ってパッケージをインストールしたのですが、PyAudioのwheelがビルドできなくてエラーになってました。
以下のパッケージをVMにインストールすることで解決。
apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
あとなんかjediっていうパッケージが無いよって怒られたりtensorflowの依存関係が壊れてるよってエラーが出たりしますが、今回はPyTorchで関係ないので無視。
生成したサンプル
前回やった走れメロスのやつで比較。
入力音声(つくよみちゃん):
Diff-SVC (60k steps):
so-vits-svc (8400 steps):
Diff-SVCとso-vits-svc、そんなに差が無いのではという感じがします。むしろ、この比較だとso-vits-svcの方がいいかも。
あと、普通に他の人の話声でテストしてみたりしたんですが、こっちはちょっとノイズみたいになってしまうところがあってちょっと微妙でした。Demucsでボーカル抽出をしたせいかもしれないし、訓練のステップが足りない説もまああるのでちょっとよく分からないです。そもそも、手法の限界がどれくらいなのか知りたいかも。
歌声でテストしてみたいのでボーカルだけの音源とかあったら欲しいんですけど、そういうのあるんですかね……?
Demucs使っても流石に歌の音源からキレイに声を抽出するのは限界があるので、手軽に試しにくい。
なんかブログ記事だけでもあれなので動画とか作ってみたいですね。
追記: ITAコーパスでテストしてみた
あみたろの声素材工房さんのITAコーパス読み上げ音声をお借りしました。
使用したモデルは8400stepsのやつ。出力しか載せないので、元の音声がほしい方は上記のリンクからどうぞ。
recitation007:
recitation050:
recitation055:
emoNormal003:
emoNormal006:
emoNormal022:
emoNormal042:
かなり良い品質っぽいですが、emoNormal042みたいに一部がノイズっぽくなってしまうときもあります。学習回数と言うより、学習データセットの問題かもしれないな~となんとなく思ってますがどうなんでしょ。
さらに追記
so-vits-svcがアプデされたので新バージョンで訓練してみました。今から始めるならこっちの方が良いと思います。