ZhangGe6 / onnx-modifier

A tool to modify ONNX models in a visualization fashion, based on Netron and Flask.
MIT License
1.28k stars 157 forks source link

添加input后,onnxruntime出错 “'/input_0' is not a graph input” #108

Closed charllll closed 2 months ago

charllll commented 2 months ago

one_greater onnx

这是我从其他model上截取的,但是缺少了input,所以我在greater 之前添加了一个input。但是onnxruntime 运行显示

onnxruntime.capi.onnxruntime_pybind11_state.InvalidArgument: [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Load model from modified_onnx/modified_one_greater.onnx failed:Invalid model. Node input '/input_0' is not a graph input, initializer, or output of a previous node.

非常感谢做出了这么棒的工具

ZhangGe6 commented 2 months ago

@charllll 谢谢反馈。可否提供一下demo模型(在greater前增加input前的状态),以及运行onnxruntime所用的脚本,方便用来debug.

charllll commented 2 months ago

one_greater.onnx.zip

run:

polygraphy run one_greater.onnx --onnxrt

dump python 文件,可以看到input=[]

python -m onnxconverter_common.onnx2py one_greater.onnx one_greater.py
ZhangGe6 commented 2 months ago

@charllll 你好,问题无法复现。我这边add input可以正常推理得到输出。操作步骤为:

  1. 点击“Greater”节点,在弹出的侧边栏中点击“Add Input”;
  2. 在弹出的对话框中的shape一栏,输入“[4, 1, 6, 2500, 1]”,点击“Confirm”;
  3. 点击“Download”,得到“modified_one_greater.onnx”

加载和执行:

import numpy as np
import onnxruntime as ort

model_path = "./modified_one_greater.onnx"
session = ort.InferenceSession(model_path)

input_shape = (4, 1, 6, 2500, 1)
x = np.random.randn(*input_shape).astype(np.float32)

input_name = session.get_inputs()[0].name
outs = session.run(None, {input_name: x})
print(outs[0].shape) # (4, 1, 6, 2500, 1)

注意到初次comment提供的截图中,编辑后的模型输入名是“/input_0”。但如果只执行了Add Input操作的话,模型输入名应该是默认的”/Slice_7_output_0“。请问是否还进行了其他操作?可能是其他操作引入了问题。

charllll commented 2 months ago

先修改了greater input name (/Slice_7_output_0 -> /input_0),然后点击add input

ZhangGe6 commented 2 months ago

@charllll 我提交了一个patch修复了该问题,可更新至最新代码看一下是否可以正常工作。谢谢反馈。

charllll commented 2 months ago

已经fix了,感谢!