Closed kyakuno closed 5 months ago
vitsモデルがSTFTを使用しているのでailia SDKの更新が必要。
vits = ailia.Net(weight = WEIGHT_PATH_VITS, stream = MODEL_PATH_VITS, memory_mode = memory_mode, env_id = args.env_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/ailia/wrapper.py", line 256, in __init__
self._open_weight(weight)
File "/usr/local/lib/python3.11/site-packages/ailia/wrapper.py", line 287, in _open_weight
core.check_error(code, self.__net)
File "/usr/local/lib/python3.11/site-packages/ailia/core.py", line 909, in check_error
raise e(detail)
ailia.core.AiliaUnsupportNetException: code: -9 (Unsupported network.)
+ error detail : Layer:/STFT(STFT) Error:Unsupported layer: STFT
vitsだけonnx runtimeで動かす。
python3 gpt-sovits.py -e 1 --onnx_vits
STFT導入済みの最新Masterで実行。
ailia.core.AiliaInvalidLayerException: code: -10 (Incorrect layer parameter. [broken or unsupported AI model file])
+ error detail : Layer:/STFT_output_0(STFT) Error:Input signal shape must be [batch_size][signal_length][1 or 2].
モデルが不正。 https://github.com/onnx/onnx/blob/main/docs/Operators.md#stft
signal (non-differentiable) : T1 Input tensor representing a real or complex valued signal. For real input, the following shape is expected: [batch_size][signal_length][1]. For complex input, the following shape is expected: [batch_size][signal_length][2], where [batch_size][signal_length][0] represents the real component and [batch_size][signal_length][1] represents the imaginary component of the signal.
onnxruntimeの実装では[batch_size][signal_length]の入力にも対応していた記憶があるが、onnxの規格外
@kuguma onnxruntimeでは動作しており、torchと公式のonnxパッケージからエクスポートしているため、onnxのドキュメントの方が追いついてないのかもしれません。ailiaもこのモデルが動く範囲まで仕様拡張可能でしょうか?
@kyakuno 対応してみます。
実装を拡張しましたが(テストも追加して確認済み)、別のエラーで停止しました。
ailia.core.AiliaInvalidStateException: code: -7 (The internal state of the ailia is invalid.)
+ error detail : Layer:/vq_model/ref_enc/If_output_0(If) Error:Execute layer failed. layer:/vq_model/ref_enc/If_output_0
OnnxReferenceを利用するようにこのスクリプトを書き換えてみて試してみましたが、仕様通りエラーとなりました。
また、torchのonnx.exporterの実装を確認してみましたが、こちらはruntimeと同様に入力は2次元を想定する形になっています。 https://github.com/pytorch/pytorch/blob/main/torch/onnx/symbolic_opset17.py
torch, onxxruntimeとonnx公式側で差が出ているようで、どっちに寄せるかは公開リポジトリ上での相談が必要なので追々コントリビュートするとして、とりあえずailiaではどちらも対応できるように進めます。
Ifで落ちたのは別に原因がありそう(@mmitti さんが対処中) ということなので、そちらが解消されたら再度試してみる予定です。
もろもろの修正を取り込んだailia本体のmaster最新で、手元での動作を確認しました。
ailia SDK 1.4.0 betaで動作を確認しました。
TODO : モデル名からnahidaを削除、英語での音声合成に対応
英語の音声合成の対応と、モデル名の変更を行なった。
1404