🎤

SiFiGAN で声質変換のメモ

2023/04/05に公開

https://github.com/chomeyama/SiFiGAN

声質変換では so-vits-svc がアツいです.
でも SiFiGAN も気になる...!

MMVC v1.5(2023/04/04 時点で開発中?)では SiFiGAN 利用の branch がありました.

https://note.com/takahiroanno/n/n75682ae0af90

とりあえず SiFiGAN 単体を試します! ちな結果は微妙でした...
SiFiGAN のコード自体は MIT ライセンスです.

環境

  • Ubuntu 20.04
  • CUDA 12
  • Python 3.10
  • GPU: 3070 (8GB)

SiFiGAN 自体は pytorch 使っています. 頑張れば GPU 無くても動くかとは思いますがひとまずは GPU(CUDA) 使います.

セットアップ

README のスクリプトを参考にします!

$ python -m pip install -e .

これだけです!

「波音リツ」さんの音声コーパスで学習した pretrained model があります(500 MB くらい). ありがとうございます.

https://www.canon-voice.com/index.htmlv

「波音リツ」さんの音声ライブラリの利用規約は

https://www.canon-voice.com/kiyaku.html

を参照ください.

基本商用利用 OK とあります.
ただ, 世界大戦勃発とか宇宙崩壊につながるような用途には利用できません.

「波音リツ」さん音声ライブラリで deep fake AI voice が極まり世界大戦が勃発したり, 波形処理が極まることで世界中の研究者により重力波が解明され, 人類が重力のちからを手にいれ宇宙崩壊(or 人類が高次元の存在へと昇華)される可能性がワンチャンありますので, 軍事利用転用可能(輸出規制にひっかかるようなもの)や重力波解明国家プロジェクトなどには使えないので注意ください.

声質変換(推論)する

あとは README にあるように sifigan-anasyn を実行するだけです.

https://zenn.dev/syoyo/articles/3d40920e466415

にあるように, Common voice の素材を変換してみました.

音声ファイルは .wav 形式のみです. ビットレートなどは任意でもよいかも(必要に応じて内部で librosa でリサンプリングするため)

音声読み込みも librosa で呼んでいるので, wav 判定を消して .mp3 なども読めるようにしてもいいかもしれません.

https://github.com/chomeyama/SiFiGAN/blob/25998d30554882119a11afd506f3480d17bf6548/sifigan/bin/anasyn.py#L110

$ sifigan-anasyn generator=sifigan \
  in_dir=your_own_input_wav_dir \
  out_dir=your_own_output_wav_dir \
  stats=pretrained_sifigan/namine_ritsu_train_no_dev.joblib \
  checkpoint_path=pretrained_sifigan/checkpoint-400000steps.pkl \
  f0_factors=[1.0]

README だと f0_factor とありますが, そのままだと

Could not override 'f0_factor'.
To append to your config use +f0_factor=1.0
Key 'f0_factor' is not in struct
    full_key: f0_factor
    object_type=dict

Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.

と config に f0_factor 無いよエラーが出ますので注意ください.
f0_factors=[1.0] などのようにします(複数記述の場合はスペースを入れず f0_factors=[1.0,1.1] などとする).

もしくは, f0 factor は 1.0 がデフォなので, とりあえずつけなくてもいいかもです.

結果

Common voice データセットでは, 女性声を変換してみましたが, 一応声質は変わっている感はありましたが, 元声質も残っている感がありなんとも微妙な結果でした. したがって結果のアップロードはありません.

男性声は変換失敗する

README にもありますが, 男性声だと変換がうまくいきません.
変換失敗して無声になったりします.
女性声でも, 男性っぽいしっかりした声質(Common Voice 36037897(ケチャップをたっぷりかけてじっくり炒める)など)も変換はうまくいかない感じでした.

メモリ消費が多い

音声の長さに比例してメモリ消費が増えるようで, 15 秒くらいの音声では CUDA out-of-memory になりました(3070 8GB でシステムなどで 2 GB ほど利用しているので空き 6 GB).
より VRAM 積んだ GPU か, 音声データを分割して処理などの対応が必要そうです!

とりあえずのまとめ

voicebox など TTS で女性声で音声生成 + 声質変換,
歌声変換の場合は女性ボーカルのものを使い声質変換がよいでしょうか.

TODO

  • 歌声を声質変換してみる
  • 「つくよみちゃん」コーパスで学習してみてどうなるか試してみる
  • MMVC v1.5 の SiFiGAN でどうなるか試してみる

Discussion