在python输入不兼容问题中使用ONNX模型运行推理?

2024-06-01 05:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一名编程初学者,我正在尝试运行“tinyyolov2-8.onnx”模型,我正在努力进行输入格式化,有人能建议如何格式化此模型的输入吗。代码如下所示:

import numpy as np
from PIL import Image
import tensorflow as tf



sess_ort = ort.InferenceSession("tinyyolov2-8.onnx")
# sess_ort = ort.InferenceSession("mobilenetv2-7 .onnx")

in__1 = sess_ort.get_inputs()[0].name;
print(in__1)

out__1= sess_ort.get_outputs()[0].name;
img= np.array(Image.open('416_416.png'), np.float)
img= img/255;

# img = np.random.random((1,3,416,416)).astype(np.float32)
img= img.reshape(1,3,416,416);
print(np.shape(img))
res =  sess_ort.run(out__1, {in__1 : img})[0]```

ERROR is:

```runfile('D:/ANN/ONNX_files/ONNX_model_RUN.py', wdir='D:/ANN/ONNX_files')
image
tensor(float)
['None', 3, 416, 416]

grid
tensor(float)
['None', 125, 13, 13]

(1, 3, 416, 416)
Traceback (most recent call last):

  File "D:\ANN\ONNX_files\ONNX_model_RUN.py", line 47, in <module>
    res =  sess_ort.run(out__1, {in__1 : img})[0]

  File "D:\ProgramData\Anaconda3\envs\tensor_python3_6\lib\site-packages\onnxruntime\capi\session.py", line 111, in run
    return self._sess.run(output_names, input_feed, run_options)

TypeError: run(): incompatible function arguments. The following argument types are supported:
    1. (self: onnxruntime.capi.onnxruntime_pybind11_state.InferenceSession, arg0: List[str], arg1: Dict[str, object], arg2: onnxruntime.capi.onnxruntime_pybind11_state.RunOptions) -> List[object]

Invoked with: <onnxruntime.capi.onnxruntime_pybind11_state.InferenceSession object at 0x000001F4803CE960>, 'grid', {'image': array([[[[0.38823529, 0.71372549, 0.68235294, ..., 0.79607843,```





Tags: runinimportimgnponnxruntimefloatout
1条回答
网友
1楼 · 发布于 2024-06-01 05:26:20
help(sess_ort)
...
 |  run(self, output_names, input_feed, run_options=None)
 |      Compute the predictions.
 |      
 |      :param output_names: name of the outputs
 |      :param input_feed: dictionary ``{ input_name: input_value }``
 |      :param run_options: See :class:`onnxruntime.RunOptions`.
 |      
 |      ::
 |      
 |          sess.run([output_name], {input_name: x})

“run”接受一组输出名称。更新对此的调用:

res = sess_ort.run([out__1], {in__1 : img})[0]

还请注意,您很可能正在加载HWC格式的图像,而ONNX运行时需要CHW,因此您可能需要对其进行转置(而不仅仅是重塑)

也就是说,如果你检查'img'的形状,它可能是{416416,3},如果是这样,你需要做numpy.transpose(img1,(2,0,1))使它成为{3416416}。在此之后,您可以将形状改为{1,3,416,416}

不知道这一行的目的是什么: img= img/255;

相关问题 更多 >