Vocosを用いたリアルタイム特化ボイスチェンジャーを作ろうとした話
はじめに
こんにちは、nadareです。
機械学習エンジニアで、普段はレコメンド・検索関連のお仕事をしています。いろんな競技プログラミングが好きです。
Retrieval-based-Voice-Conversion(以下RVC)という技術に関心を持ち、関連リポジトリにPR投げつつ勉強しています。
約一か月間、Vocosというボコーダーを用いてRVCよりも軽量なボイスチェンジャーを作れないか挑戦していましたが、女性のアニメ風声のような高い音域での性能を改善しきれなかったので、いったん開発を中止し方針転換をします。
本記事では何がうまくいって何がうまくいかなかったのかについて共有します。
ボイスチェンジャーのデモ
リポジトリ
7/2時点
7/21時点
うまくいかなかったこと
高音域の再現
Vocosを用いたボイスチェンジャーはNSF-HiFiGANのモデルに比べ、高い女性の声のような声を再現するのが困難でした。これはおそらくVocosの手法自体の問題で、公式のデモページでも音声の高解像度化以外では低い男性の声が中心に使われていました。高音域の合成では音声がロボットのようになってしまいマスタ。
RVC自体の高速化によるコスパ比の悪化
Vocosベースの手法に挑戦した時に比べ、RVCが高速化したのでコストパフォーマンスで勝負することが難しくなりました。
HuBERTやf0推定機のONNX化や、VCClientv1.5.3.8で導入していただいたRVCのリアルタイム推論用関数、resamplerをresampyからpyaudioに変更したこと等からRVCの推論コストが減少しました。これにより、vocosに求められるパフォーマンスのハードルが高くなり、これを超えることは困難でした。
うまくいったこと
日本語HuBERTを用いた際の声質変換の精度向上+ピッチレスモデルの作成
本家RVCではボイスチェンジャー向けに話者性を除くよう訓練されたContentVecを用いることで話者性を除いていました。しかし、これは英語で学習されているので、日本語の発音に問題がありました。これについてrinna社のjapanese-hubert-baseを用いたうえで適切なデータオーグメンテーションを行うことで、同様に話者性を除いた特徴量を得ることができました。
このデータオーグメンテーションによりピッチを修正しなくても男声→女声のような変換を行うことができ、同時にfaiss indexを用いなくても声質を変換することができました。ピッチの推定はRVCの計算時間で大きな部分を占めており、faiss indexは現状VCClientのwindows配布版でAVX2を活用できていないのでfaiss index使用時にCPU利用率が爆増してしまいます。ここの改善は今後他のモデルを使う上で役に立つと考えています。
学習・推論パイプラインの整備
RVCでは学習前にあらかじめデータセットを前処理して保存するため、大規模なデータセットではストレージを大きく消費していました。そこで、resampleを軽量・高パフォーマンスなpyaudioに変更し、直接保存箇所からリサンプル・トリミングすることで中間の保存データをなくしLibriTTS-Rのような大規模データセットでも学習できるようにしました。また、推論にはwebAPIから推論を呼べるモードを追加することで、voicevoxの音声を変換する定性評価が行いやすくなりました。
今後の方針
一旦はモデルのアーキテクチャをRVCと同様にアップサンプリングを繰り返す手法に戻します。その上で今回得られた知見を元に、各言語のHuBERTで使える、今より軽量なボイスチェンジャーを目指します。事前学習時・学習時にReLoRAを導入することで学習時間を短縮し、一つのモデルで複数の話者に対応できるボイスチェンジャーを作れればと思います。
AIボイス・音楽の技術を専門に研究する、日本最大級のDiscordコミュニティです 下記のリンクから参加できます discord.gg/bmNezxjCq2
Discussion