初めに
昨日に CosyVoice3をonnxにして pytorchに依存せずに動かしてみました
今回はここで変換をしたonnxをUnityで動かして、UnityだけでCosyVoiceのモデルから推論をしてみたいと思います
以下でRepositoryを公開しています
記事では動かす際に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点です。
- モデルが実際に使用している演算子がUnity AI Interfaceでサポートされているか
- opsetバージョンの数字そのものではない