CosyVoiceのonnxモデルをUnityで動かして音声合成をするときのopset versionについて

初めに

昨日に CosyVoice3をonnxにして pytorchに依存せずに動かしてみました

ayousanz.hatenadiary.jp

今回はここで変換をしたonnxをUnityで動かして、UnityだけでCosyVoiceのモデルから推論をしてみたいと思います

以下でRepositoryを公開しています

github.com

記事では動かす際にopset問題とGPU対応について詳しく書いていきます。ほかの実装等はリポジトリをご確認ください。

開発環境

項目 バージョン
Unity 6000.0.58f2
Unity AI Interface 2.4.1
OS Windows 11
GPU RTX 4070 Ti SUPER

ONNX Opsetバージョン問題

Unity AI Interfaceの公式ドキュメントでは、以下のように記載されています。

サポートされるONNX opset: 7〜15

opset 15より高いモデルをインポートすると、結果が予測不能になる可能性があります。

uCosyVoiceでは14ファイルのONNXモデルを使用しています。各モデルのopsetバージョンと動作結果は以下の通りです。

Opset モデル 動作
14 campplus.onnx ✅ 正常
15 llm_backbone_initial_fp16.onnx ✅ 正常
15 llm_backbone_decode_fp16.onnx ✅ 正常
15 llm_decoder_fp16.onnx ✅ 正常
15 llm_speech_embedding_fp16.onnx ✅ 正常
15 flow_token_embedding_fp16.onnx ✅ 正常
15 flow_pre_lookahead_fp16.onnx ✅ 正常
15 flow_speaker_projection_fp16.onnx ✅ 正常
15 hift_f0_predictor_fp32.onnx ✅ 正常
15 hift_decoder_fp32.onnx ✅ 正常
16 speech_tokenizer_v3.onnx ✅ 正常
17 text_embedding_fp32.onnx ✅ 正常
17 hift_source_generator_fp32.onnx ✅ 正常
18 flow.decoder.estimator.fp16.onnx ✅ 正常

結果: 全120テストが合格し、opset 16〜18のモデルも問題なく動作しました。

そのためopsetバージョンは「そのバージョンで定義された演算子(オペレータ)が使える」ということがわかります

重要なのは以下の2点です。

  1. モデルが実際に使用している演算子がUnity AI Interfaceでサポートされているか
  2. opsetバージョンの数字そのものではない