首页 > 解决方案 > 加载 onnx 模型时,ONNX 运行时抛出 TypeError

问题描述

我已将 savedModel 格式转换为 onnx 模型,但是通过 onnxruntime 加载它时

import onnxruntime as rt
sess = rt.InferenceSession('model.onnx')

它向我抛出以下错误:

onnxruntime.capi.onnxruntime_pybind11_state.InvalidGraph: [ONNXRuntimeError] : 10 : INVALID_GRAPH : Load model from /mnt/model/io_files/convert/1606801475/model.onnx failed:This is an invalid model. Type Error: Type 'tensor(float)' of input parameter (const_fold_opt__342) of operator (Slice) in node (StatefulPartitionedCall/mobilenet_1.00_224/reshape_1/strided_slice) is invalid.

我使用的 savedModel 是来自 tensorflow 网站的 Keras 预训练 MobileNet:https ://www.tensorflow.org/guide/saved_model 。

我看到 netron 中的参数是浮动的,但我无法解决和理解这个问题。

以下是netron的片段: 在此处输入图像描述

标签: keraspython-3.6tensorflow2.0onnxonnxruntime

解决方案


看起来像 Keras->ONNX 转换器中的错误。

startsSlice 的输入必须是 int32 或 int64:https ://github.com/onnx/onnx/blob/master/docs/Operators.md#Slice

您可以尝试使用onnxPython 接口对模型进行修补:加载模型、查找节点、更改输入类型。但如果模型有这个问题,Keras->ONNX 转换器可能没有经过很好的测试,可能还有其他问题。

你能找到一个等效的 PyTorch 模型吗?PyTorch->ONNX 转换器应该会好很多。


推荐阅读