Converting Keras with TimeDistributed layer to ONNX failed

您好,

目前toolchain似乎還未support LSTM, 或是TimeDistributed, UpSampling3D, Bidirectional相關layers

若model內有包含一些TimeDistributed components, 是否要另外透過C library或是CMSIS-NN來處理?


modelInf_KR.h5轉換成ONNX format時, 遇到如下的錯誤訊息

OP UpSampling3D is an unknown layer. Using CustomOP layer instead.

OP TimeDistributed is an unknown layer. Using CustomOP layer instead.

OP Bidirectional is an unknown layer. Using CustomOP layer instead.

從Document Center/Toolchain Docker/ONNX Converter/Table 1.2 Operators conversion table for every platform, 確實沒有這三個layers


Thanks!

Tagged:

Comments

  • edited August 2022

    @Jack Huang

    Hi Jack,

    目前 Kneron ToolChain 的確尚未 support ONNX 的 LSTM operator,依據您使用的 platform,Kneron ToolChain 可 support 的 onnx operators 也稍微不同,您可以參考 https://doc.kneron.com/docs/#toolchain/manual/ (2.3 Supported operators, Table 1.1、Table 1.2) 。

    看過您的 model,您可能也可以嘗試使用 3rd party tools 試著將您的 model 轉成 onnx,成功轉成 onnx 後,operator 只要都符合 Table 1.1 或 Talbe1.2,您應該就可以順利使用 Kneron ToolChain。

  • Hi Andy,

    使用keras2onnx轉model成ONNX format, 出現如下錯誤訊息, 是否kneron/toolchain Docker環境下, keras2onnx不support Bidirectional?

      onnx_model = keras2onnx.convert_keras( model, model.name )

     File "/workspace/miniconda/lib/python3.7/site-packages/keras2onnx/main.py", line 83, in convert_keras

      return convert_topology(topology, name, doc_string, target_opset, channel_first_inputs)

     File "/workspace/miniconda/lib/python3.7/site-packages/keras2onnx/topology.py", line 322, in convert_topology

      cvt(scope, operator, container)

     File "/workspace/miniconda/lib/python3.7/site-packages/keras2onnx/ke2onnx/bidirectional.py", line 37, in convert_bidirectional

      raise ValueError('Unsupported class for Bidirectional layer: {}'.format(op_type))

    ValueError: Unsupported class for Bidirectional layer: <class 'keras.layers.recurrent.RNN'>

    是否先需要用toolchain cut掉這個layer, 找別的方案來處理Bidirectional?

    Thanks!

  • @Jack Huang

    Hi Jack,

    因為您使用的是 Keras model (.h5),Kneron ToolChain 對於 Keras model 的 layer 是無法處理的,因為這是 onnx 生成出來之前的問題,Kneron ToolChain Model Editor 只能處理 onnx。

    通常遇到這種狀況,可以試試兩種辦法,第一種是把你要的複雜 node (Bidirectional) 手動用其他方式實現,第二種是試試其他平台,Keras 轉 onnx 轉不出來,可以試試 Pytorch 或 TFLite。

The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.