/vv_core_inference

VOICEVOXのコア内で用いられているディープラーニングモデルの推論コード

Primary LanguagePythonMIT LicenseMIT

vv_core_inference

VOICEVOX のコア内で用いられているディープラーニングモデルの推論コード。

サンプルとして配布しているモデルは実際の VOICEVOX のものではなく、ほとんどノイズと変わらない音が生成されます。 含まれている config の値(層の数など)は仮の値で、VOICEVOX で使用されるモデルとは異なることがあります。

公開している意図

VOICEVOXのコアの軽量版を作りたいためです。

VOICEVOXのディスク容量の軽量化をしたいのですが、時間が取れずにいます。VOICEVOXのディスク容量が大きいのは、コア内のディープラーニングモデルの推論にlibtorchを用いているためです。そこで該当箇所のpythonコードを公開し、libtorchの代替となる軽量な手法の議論や提案を受けられるようにしました。

技術的なこと以外の要件としては、諸事情により「第三者が簡単にモデルの内容を得られない」ようにする必要があります。pythonコードは容易にコードを推測できるので使えません。とりあえず推論コードが全部C++であれば大丈夫です。(こちら側で暗号化などを足します。)

環境構築

Python 3.7.2 で開発しました。 3.7 台なら動くと思います。

# 5分くらいかかります
pip install -r requirements.txt

モデルのダウンロード

wget https://github.com/Hiroshiba/vv_core_inference/releases/download/0.0.1/model.zip
unzip model.zip

実行

# 生成される音声はほぼノイズで、かろうじて母音がわかる程度だと思います
python run.py \
  --yukarin_s_model_dir "model/yukarin_s" \
  --yukarin_sa_model_dir "model/yukarin_sa" \
  --yukarin_sosoa_model_dir "model/yukarin_sosoa" \
  --hifigan_model_dir "model/hifigan" \
  --speaker_ids 5 \
  --texts "おはようございます、こんにちは、こんばんは、どうでしょうか"

C++のコードを python 側に持ってくる場合

Cyhton が便利です。

  1. VOICEVOX COREにあるcore.hをダウンロード
  2. core.h に合うように C++ コードを書く
  3. C++ コードから動的ライブラリをビルド
  4. あとはREADME.mdにあるようにpython setup.py installなどを実行
  5. import してこのようにつなぎこむ

ファイル構造

  • run.py ・・・ エントリーポイント
  • vv_core_inference ・・・ いろいろな処理
    • forwarder.py
      • VOICEVOX と同じインターフェースと処理。
      • このクラスを一切変更することなく、3 つのforwarderを与えられると完璧
    • make_yukarin_s_forwarder.py
      • 音素ごとの長さを求めるモデルyukarin_s用のforwarderを作る
    • make_yukarin_sa_forwarder.py
      • モーラごとの音高を求めるモデルyukarin_sa用のforwarderを作る
    • make_yukarin_sosoa_forwarder.py
      • make_decode_forwarderに必要なyukarin_sosoa用のforwarderを作る
    • make_decode_forwarder.py
      • 音声波形生成用のforwarderを作る
    • acoustic_feature_extractor.py
      • 音素情報やリサンプリング手法などが入っている。ディープラーニングとは関係ない。
    • full_context_label.py
      • フルコンテキストラベルの処理が入っている。ディープラーニングとは関係ない。
    • utility.py
      • 便利関数が多少ある