0

我是编程初学者,我正在尝试运行“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,```




4

1 回答 1

0
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”的形状,它可能是 {416, 416, 3},如果是这样,您需要执行 numpy.transpose(img1, (2, 0, 1)) 使其成为 {3, 416, 416 }。之后,您可以重塑为 {1, 3, 416, 416}。

不知道这条线的目的是什么: img= img/255;

于 2020-07-28T10:35:18.070 回答