この記事のさらに続きです。
モデルを作って普通に放置してたのですが、気がついたらひと月の間にリポジトリが消えたりバージョン4.0が出たりなんだりしてたみたいです。
今のリポジトリはここらしいです。(03/14時点)
そういうわけで、バージョン4.0で訓練し直して簡単な動画にしてみました。
訓練の時間をより長く(126epoch→236epoch)してみたのもあるかもしれませんが、3.0のときよりかなり品質が良い感じがします。
学習の方法自体は3.0のときから大きく変わってないと思いますが、一応解説ということで書き残しておきます。
例のごとく、基本は公式のREADMEに従えばいいだけなので、学習の際に困ったポイントについてのみ書いていきます。
学習データの量は?
公式からどれくらいの量の音声データがあればいいのか提示されていないので、これいまいちよく分かりません。
Diff-SVCのときから学習データセットを使いまわしてるので私は200分くらいの長さ(15秒x804個)のデータセットを訓練に利用しています。
動画にも書きましたが、最低30分とかでもいいとか?
学習済みモデルがリンク切れしてる
so-vits-svcは学習の際、事前に学習済みのG_0.pth
とD_0.pth
*1を利用することが推奨されています。が、昔あったhuggingfaceのリポジトリが今は消えていてダウンロードできない状況です。
なので、ここにこっそりインターネットの海から拾ってきたバックアップを置いておきます。44.1kHz用のモデルなので注意。
特に再配布は問題なさそう?なんですが、まあなんかあったら消します。
configの値について
log_interval
: 損失関数の値を何stepごと(epochじゃないので注意)に出力するか。上の画像におけるLossesから始まる行。eval_interval
: 何stepごとにチェックポイントを保存するか。800だと長いな~という場合は400とかにすればいいです。epochs
: 多分ここに設定した値の分だけ学習したら自動で終了する。寝てる間などに訓練を回したい場合は500とか1000とかにしておくといいかも。(1000は過学習になるかも?要検証)keep_ckpts
: 学習したチェックポイントはそこそこサイズが大きい(500MBとかになる)ので、デフォルトだと新しい3つのみ保持され古いチェックポイントは順次削除されるようになっています。もっとたくさん保持しておきたい場合は数値を大きくしておく。いくつか保持しておくと過学習したときなどにロールバックできます。
バッチサイズ(batch_size
)についてですが、24だと学習中のVRAM使用量は20GBくらいでした。線形に増減するんでしょうか?誰か試してほしい。
確かデフォルト値が6とかだったと思うので、そのままの場合VRAM8GB(RTX 3070など)でも学習できると思います。
これ以外のパラメータは門外漢なのでよく分かりません…。特に触る必要も無いと思います。
Pythonのパッケージの準備
まず、requirements.txt
からPyTorch関係とバージョン指定を除いたものを用意します。これをrequirements_slim.txt
とします。
venvで仮想環境を作ったら、まずPyTorchを個別にインストールして、そのあとpip install -r requirements_slim.txt
するとよいです。
あとColabで学習するときの注意点ですが、pipのバージョンが古くてfairseqのwheelのビルドに失敗するのでパッケージのインストールの前にpipのアップデートが必要です。
4.0-v2について
so-vits-svcの最終バージョンとして、4.0-v2というのが既にリリースされています。
モデルのアーキテクチャが変わっているらしく、その点で4.0と互換性がなさそうです。4.0の訓練に使用した学習済みモデルもおそらく使えないような気がするので、現時点では学習済みモデル無しで試すしかないと思います。
ただ、ちょうど都合よく公式ドキュメントに配信を学習データに使ってるとあんまり良くならないよと記載されているので、自分は特に試す予定はないです。
*1:それぞれGeneratorとDiscriminatorのようです