Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement ReazonSpeech2 #1416

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open

Implement ReazonSpeech2 #1416

wants to merge 15 commits into from

Conversation

ooe1123
Copy link
Contributor

@ooe1123 ooe1123 commented Mar 10, 2024

#1397
のPRです。

@kyakuno
Copy link
Collaborator

kyakuno commented Mar 11, 2024

@kyakuno kyakuno changed the title Implement ReasonSpeech2 Implement ReazonSpeech2 Mar 11, 2024
@kyakuno
Copy link
Collaborator

kyakuno commented Mar 11, 2024

ailia SDKのSTFT対応が必要。

  • error detail : Layer:/preprocessor/featurizer/STFT(STFT) Error:Unsupported layer: STFT

@kuguma
Copy link
Contributor

kuguma commented Apr 17, 2024

STFTマージ済みの最新Masterで実行。

ailia.core.AiliaUnimplementedException: code: -15 (This function is not implemented.)
+ error detail : Layer:Constant_1355(Constant) Error:Tensors with data_location set to other than  DEFAULT is not supported.

@kuguma
Copy link
Contributor

kuguma commented Apr 17, 2024

ConstantLayerが外部データ配置に未対応の模様。

@kuguma
Copy link
Contributor

kuguma commented Apr 25, 2024

もろもろの修正を取り込んだailia本体のmaster最新で、手元での動作を確認しました。

@kyakuno
Copy link
Collaborator

kyakuno commented Apr 27, 2024

短い音声の場合は動作を確認しました。
長い音声の場合は、onnx runtimeでもailiaでも下記のエラーになりますね。
サンプルかonnxの方に何か調整が必要そうですね。

ailia

 INFO model_utils.py (109) : reazonspeech-nemo-v2_encoder_weights.pb is prepared!
 INFO reazon_speech2.py (588) : axell.wav
 INFO reazon_speech2.py (599) : Start inference...
Traceback (most recent call last):
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 683, in <module>
    main()
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 674, in main
    recognize_from_audio(models)
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 616, in recognize_from_audio
    hyp = predict(models, audio)
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 575, in predict
    output = net.predict([audio, input_signal_length])
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/ailia/wrapper.py", line 410, in predict
    self.update()
  File "/usr/local/lib/python3.11/site-packages/ailia/wrapper.py", line 726, in update
    core.check_error(code, self.__net)
  File "/usr/local/lib/python3.11/site-packages/ailia/core.py", line 931, in check_error
    raise e(detail)
ailia.core.AiliaInvalidLayerException: code: -10 (Incorrect layer parameter. [broken or unsupported AI model file])
+ error detail : Layer:/encoder/layers.0/self_attn/Add_21_output_0(Eltwise_DNN) Error:Unacceptable broadcast size pair [output:(1,8,256,128) (stride:(262144,32768,128,1)) vs input /encoder/layers.0/self_attn/Slice_44_output_0:(1,8,5376,128) (stride:(5505024,688128,128,1))].

onnxruntime

kyakuno@mbakk reazon_speech2 % python3 reazon_speech2.py -i axell.wav --onnx
 INFO arg_utils.py (13) : Start!
 INFO arg_utils.py (163) : env_id: 2
 INFO arg_utils.py (166) : MPSDNN-Apple M2
 INFO model_utils.py (89) : ONNX file and Prototxt file are prepared!
 INFO model_utils.py (89) : ONNX file and Prototxt file are prepared!
 INFO model_utils.py (89) : ONNX file and Prototxt file are prepared!
 INFO model_utils.py (109) : reazonspeech-nemo-v2_encoder_weights.pb is prepared!
 INFO reazon_speech2.py (588) : axell.wav
 INFO reazon_speech2.py (599) : Start inference...
2024-04-27 20:16:28.439827 [E:onnxruntime:, sequential_executor.cc:514 ExecuteKernel] Non-zero status code returned while running Add node. Name:'/encoder/layers.0/self_attn/Add_21' Status Message: /Users/runner/work/1/s/onnxruntime/core/providers/cpu/math/element_wise_ops.h:560 void onnxruntime::BroadcastIterator::Append(ptrdiff_t, ptrdiff_t) axis == 1 || axis == largest was false. Attempting to broadcast an axis by a dimension other than 1. 256 by 5376

Traceback (most recent call last):
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 683, in <module>
    main()
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 674, in main
    recognize_from_audio(models)
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 616, in recognize_from_audio
    hyp = predict(models, audio)
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyakuno/Desktop/ailia/ailia-models-ax/audio_processing/reazon_speech2/reazon_speech2.py", line 577, in predict
    output = net.run(None, {'input_signal': audio, 'input_signal_length': input_signal_length})
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 220, in run
    return self._sess.run(output_names, input_feed, run_options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
onnxruntime.capi.onnxruntime_pybind11_state.RuntimeException: [ONNXRuntimeError] : 6 : RUNTIME_EXCEPTION : Non-zero status code returned while running Add node. Name:'/encoder/layers.0/self_attn/Add_21' Status Message: /Users/runner/work/1/s/onnxruntime/core/providers/cpu/math/element_wise_ops.h:560 void onnxruntime::BroadcastIterator::Append(ptrdiff_t, ptrdiff_t) axis == 1 || axis == largest was false. Attempting to broadcast an axis by a dimension other than 1. 256 by 5376

@kyakuno
Copy link
Collaborator

kyakuno commented Apr 30, 2024

@kyakuno
Copy link
Collaborator

kyakuno commented Apr 30, 2024

メモリ消費量は6.31GB。

@kyakuno
Copy link
Collaborator

kyakuno commented Apr 30, 2024

[00:00:00.780 --> 00:00:03.500] 自動運転の未来を加速させる
[00:00:04.139 --> 00:00:11.099] アクセルの取り組みaiをより速くより使いやすくすぐに始められる
[00:00:12.380 --> 00:00:15.900] 豊かな未来を創造する企業のよき理解者になる
[00:00:17.420 --> 00:00:22.779] ai実装に必要な学習から推論までトータルソリューションを提供できる
[00:00:23.980 --> 00:00:27.579] アクセルはテクノロジーで未来を加速させる
[00:00:29.580 --> 00:00:31.419] アクセルではハードウェア
[00:00:31.899 --> 00:00:38.619] ソフトウェアヨウ素技術の3つの開発力をもとに5つの事業領域に展開をしています
[00:00:40.460 --> 00:00:45.500] 現在めざましい発展を遂げているaiや日々重要性が増している
[00:00:45.980 --> 00:00:53.339] 情報セキュリティーなどさまざまな分野でアードウェアからソフトウェアまで一貫したソリューションを提供しています
[00:00:54.620 --> 00:00:58.219] 特にaiおよび自動運転領域では
[00:00:58.700 --> 00:01:01.100] アイデアsdkをコア技術として
[00:01:01.740 --> 00:01:05.980] モデルやアプリケーションなどの快適な開発環境の構築と
[00:01:06.540 --> 00:01:11.980] それを動かす実行基盤としてのハードウェアの開発を進めることで理想的な
[00:01:12.460 --> 00:01:14.939] ai開発環境の構築を目指しています
[00:01:18.460 --> 00:01:21.659] アイデアsdkはあらゆるハードウェアで動き
[00:01:22.540 --> 00:01:27.019] c+charpfysonjavaなど
[00:01:27.500 --> 00:01:30.459] さまざまなプログラミング言語にも対応しているため
[00:01:31.260 --> 00:01:35.500] スマートモビリティファクトリーオートメーション監視カメラなど
[00:01:36.060 --> 00:01:38.060] さまざまな用途でご利用いただけます
[00:01:40.620 --> 00:01:47.099] またアイデアsdkとともにお客様に自由に使っていただけるアイデアモデルズという
[00:01:47.659 --> 00:01:53.500] 240種類を超える最新のaiモデルとサンプルをキットハブで提供しています
[00:01:54.540 --> 00:02:00.939] モデルの種類は今後も順次増えていくためお客様に最適なモデルをご提供することが可能です
[00:02:03.579 --> 00:02:09.420] またiosandroidで気軽にaiを試せるデモアプリも公開しています
[00:02:10.939 --> 00:02:15.500] そしてai用の推論用アクセラレータも開発提供しています
[00:02:17.020 --> 00:02:22.460] ハードウェアアクセラレータのため推論の拘束化省電力化が可能になっています
[00:02:23.819 --> 00:02:27.180] アクセルはaiチップ設計拠点で進めている
[00:02:27.659 --> 00:02:39.900] aiアクセラレータ開発のための評価プラットフォームの構築に協力会社として参加し強化プラットフォームの実証チップであるai1に開発したアクセラレータが搭載されました
[00:02:41.020 --> 00:02:47.020] アクセルではaiチップ設計拠点が開発したai1強化ボードを使用して
[00:02:47.500 --> 00:03:01.580] ai用の評価を行っていますアクセルドットオートはアイデアsdkと連携することでプログラムを変更することなくgpuやcpuと同じように
[00:03:02.060 --> 00:03:04.780] ハードウェアアクセラレータを使用することができます
[00:03:06.379 --> 00:03:12.540] aiの活躍フィールドとして日々研究が進むモビリティの分野でもアイデアsdk
[00:03:13.099 --> 00:03:21.660] そしてアクセルアクセルではai事業の一環としてaiの推論処理用の
[00:03:24.780 --> 00:03:27.740] 自社で新規に設計したハードウェアアクセラレーターでして
[00:03:28.379 --> 00:03:32.220] aiの推論処理を高速かつ省電力に実行することができます
[00:03:39.180 --> 00:03:46.220] 今回aiチップ設計拠点が開発する実証チップのai1というものに協力会社としてアクセルが参加させていただきました
[00:03:52.140 --> 00:04:03.100] 本来aiチップを開発しようと思えるとaiのアクセラレーターのコアの部分開発だけではなくて周辺とのインタフェスの回路であったりさまざまな回路の設計というものが同時に必要になってくるんですけれども
[00:04:03.580 --> 00:04:11.340] ai蓄積拠点の作られたプラットーンを使うことでこういった部分のaiアクセラレーターのコアの部分に注力することができます
[00:04:14.939 --> 00:04:20.939] ai1はアクセルのaiアクセラレーターが搭載した初めてのチップということで現在評価を進めております
[00:04:29.660 --> 00:04:35.819] 自動運転におけるaiの利用の場面というのは一番分かりやすい利用例としてはやはり物体の認識の部分ですね
[00:04:36.620 --> 00:04:39.579] 走行している上での障害物の検出であるとか
[00:04:40.220 --> 00:04:59.099] 対向車歩行者みたいな自動運転で使用される物体認識であるとかaiの処理における特徴としては非常に演算量が多いというところですね自動運転の車両の中でやはりその限られた電力車の中で賄える電力処理をしなければいけない機材はボンネットであるとかトランクルームみたいなところに入っておりますのでそういった点であり
[00:05:02.300 --> 00:05:05.019] 一つアクセルのaiアクセラレーターの特徴的な点として
[00:05:05.500 --> 00:05:10.060] 専用設計にしているというaiの推論という処理に特化した設計
[00:05:10.620 --> 00:05:27.740] その結果と比べて現在自動運転を実現するためのプラットフォーム特にそのハードウェアどういったハードウェアを使うかみたいなところはまだまだ研究開発の段階であると考えておりまして
[00:05:29.019 --> 00:05:40.699] 実際にaiの処理を実現する上でもどういったハードウェア例えばcpuでやるのかgpuでやるのかもしくはaiチップをでやるのかそういったところはまだまだ評価が必要な段階と考えております
[00:05:41.259 --> 00:05:47.819] そういった中でもアイデアを使うことでさまざまなプラットフォーム上でシムレスにaiの
[00:05:48.459 --> 00:05:56.539] 水論処理が可能になりますのでどういったハードウエアを使うべきかそういったような評価研究開発みたいな部分で使用できると考えております
[00:05:57.259 --> 00:06:05.500] まずアクセルとしては現在取り組んでおります自動運転向けのsocuですねこれをベースに自動運転の実証というものを進めていきたいと考えております
[00:06:06.379 --> 00:06:10.139] その先という意味では今アクセルの持っている技術力というものを生かして
[00:06:18.379 --> 00:06:27.579] 世界最高水準の性能を持ちあらゆるデバイスに実装できる独自開発のエッジaiフレームワークアイデアsdk
[00:06:28.379 --> 00:06:34.219] そしてアイデアsdkと連携する自動運転に最適化したハードウェアip
[00:06:35.019 --> 00:07:04.300] c。
 INFO reazon_speech2.py (624) : Script finished successfully.

@kyakuno
Copy link
Collaborator

kyakuno commented Apr 30, 2024

@ooe1123 現在、すべてのデコードが終わった後に、まとめて結果が表示されていると思うのですが、これを、セグメントごとに出力できるようにすることというのは可能なものでしょうか?

@ooe1123
Copy link
Contributor Author

ooe1123 commented Apr 30, 2024

@kyakuno
Whisperの場合、audioデータをチャンクサイズに分けてチャンクごとに推論をしていたかと思うのですが、ReasonSpeechは一気に処理しているようです。なので、audioサイズが大きければ、推論のコストも大きくなります。
セグメントごとに逐次結果を出すには、入力でなにかしらの工夫が必要そうです。

@kyakuno
Copy link
Collaborator

kyakuno commented Apr 30, 2024

@ooe1123 確認、ありがとうございます。入力側でVADをかけて、VADで切った単位で入力する方が現実的かもしれないですね。とりあえず、現状のままでマージさせていただこうと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants