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 "おはようございます、こんにちは、こんばんは、どうでしょうか"
Cyhton が便利です。
- VOICEVOX COREにあるcore.hをダウンロード
- core.h に合うように C++ コードを書く
- C++ コードから動的ライブラリをビルド
- あとはREADME.mdにあるように
python setup.py install
などを実行 - 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
- 便利関数が多少ある