Seed-VCでファインチューニングを試してみる
はじめに
少々流行は過ぎましたが、Seed-VCのファインチューニングを試してみました。
軽く調べた感じ、触れている記事等々が少なかったので備忘録も兼ねて。
だいぶアドホックな対処も含まれますが、あくまでお試しということで…
環境
- MacBook Air M1(2020) 16GB
- リアルタイムでないオフライン変換ぐらいなら十分な速度で試せました
- Pythonバージョンは>=3.10を推奨
- 後述の理由で3.11で動作確認しました
- uv 0.5.18
動かすまでのつまづきポイント
基本的にはREADMEのとおりにやれば動かせるので、引っかかったポイントを抜粋します。
requirements.txtについて
uvを利用している場合、preおよびextra-index-urlはpyproject.tomlに記述するべき?
面倒なので指定を全部外しましたが一応セーフでした。
- デフォルトの
requirements-mac.txt
--extra-index-url https://download.pytorch.org/whl/cu121
torch --pre --extra-index-url https://download.pytorch.org/whl/nightly/cpu
torchvision --pre --extra-index-url https://download.pytorch.org/whl/nightly/cpu
torchaudio --pre --extra-index-url https://download.pytorch.org/whl/nightly/cpu
accelerate
...
- 動作確認済み
"torch>=2.8.0",
"torchaudio>=2.8.0",
"torchvision>=0.23.0",
ModuleNotFoundError: No module named '_lzma'
ちょくちょく現れる_lzma関係のエラーですが、とりあえず
- xzのインストール
- ↑の後pythonのインストール
という順番でやればやり過ごせるようです。
$ brew install xz
brewでインストールした後、Pythonの再インストール or バージョンを指定して新規インストールで解決しそう?
実際に試したときは3.11のインストールで通りました。
変換を試してみた所感
成果物はここでは示しませんが、RVCと比較してもお手軽かつ高性能に感じます。
ただし、素の変換では参照に使える音源ファイルは1つに限られ、また長さの上限も30秒と、表現できる幅に限界も感じます。
そこで、カスタムデータを用いたファインチューニングを行ってみます。
Colab上で動かしたい場合は公式のexampleがありますので、そちらで。
ファインチューニング
Seed-VCでは、データセットの要件として以下のような制約があります。(READMEより抜粋)
- 各オーディオファイルは1〜30秒の範囲である必要があり、それ以外の場合は無視される
- 文字通り無視されるので、最大でも29秒ぐらいにしておくのが良さそうです
- オーディオファイルの形式は
.wav.flac.mp3.m4a.opus.ogg - データが多いほどモデルの性能は上がる
- exampleでは一話者あたり200~600個ほどの音源でファインチューニングされています
- トレーニングデータはできるだけクリーンであるべきであり、BGMやノイズは望ましくない
- 一般に環境音だけでなくBGMも避けるべきであるようです
- ちなみに変換したい音声データでも同様
- ノイズがあると突然叫ぶような変換になってしまう
また、トレーニング用のコンフィグファイル(yml)も指定します。
自作もできるようですが、デフォルトで用意されているオフライン変換用の./configs/presets/config_dit_mel_seed_uvit_whisper_small_wavenet.ymlを用いました。
最終的にはこんな感じになるかと思います。
(各種設定はM1程度だともう少し控えめのほうがいいです)
uv run train.py \
--config ./configs/presets/config_dit_mel_seed_uvit_whisper_small_wavenet.yml \
--dataset-dir ../dataset \
--run-name 'hoge' \
--batch-size 4 \
--max-steps 200 \
--max-epochs 1000 \
--save-every 100 \
--num-workers 2
学習が完了したら./runs/run-name/に.pthファイルができているので、推論やWeb UI起動の際に指定します。
このとき、コンフィグファイルも同様に指定するのを忘れずに。
- 実行例
uv run app_vc.py --checkpoint './runs/run-name/ft_model.pth' --config './runs/run-name/config_dit_mel_seed_uvit_whisper_small_wavenet.yml' --fp16 True
ファインチューニング後の所感
まだお試しということで合計1分程度のデータセットしか用意していなかったのですが、やはり単品オーディオファイルを参考にして変換するよりも性能が良かった感じがあります。
RVCも含めていろいろ可能性を模索したいところ。
本記事は以上です。
Discussion