как решить ошибку времени выполнения при прогнозировании с использованием модели onnx?
У меня есть модель глубокого обучения, обученная в Matlab с помощью команды trainNetwork. Я хочу использовать эту модель в Python для прогнозирования, поэтому я экспортировал сеть в формат onnx в Matlab с помощью команды "exportONNXNetwork". Я импортировал модель onnx в Python, используя следующий код:
sess = onnxruntime.InferenceSession("Alma.onnx")
Модель принимает изображение размером (224,224,3). Поэтому я изменил размер изображения с помощью cv2.resize. Когда я пытаюсь запустить модель с помощью команды sessions.run, я получаю сообщение об ошибке RuntimeError: входные "данные" не должны быть пустыми. Где "данные" - это имя_входа. Команда, используемая для прогнозирования, имеет вид res = sess.run([output_name], {input_name: x}) Я не могу понять, где я ошибаюсь. Я делюсь полным кодом.
import numpy
import cv2
import tensorflow as tf
sess = onnxruntime.InferenceSession("Alma.onnx")
im = cv2.imread("1.jpg")
img = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
x = tf.convert_to_tensor(img)
input_name = sess.get_inputs()[0].name
print("input name", input_name)
input_shape = sess.get_inputs()[0].shape
print("input shape", input_shape)
input_type = sess.get_inputs()[0].type
print("input type", input_type)
output_name = sess.get_outputs()[0].name
print("output name", output_name)
output_shape = sess.get_outputs()[0].shape
print("output shape", output_shape)
output_type = sess.get_outputs()[0].type
print("output type", output_type)
res = sess.run([output_name], {input_name: x})
print(res)
Я получаю следующую ошибку:
File "C:/Users/Hanamanth/PycharmProjects/cocoon/onnx.py", line 29, in <module>
res = sess.run([output_name], {input_name: x})
File "C:\Users\Hanamanth\PycharmProjects\cocoon\venv\lib\site-packages\onnxruntime\capi\session.py", line 72, in run
return self._sess.run(output_names, input_feed, run_options)
RuntimeError: Input 'data' must not be empty.
input name data
input shape [1, 3, 224, 224]
input type tensor(float)
output name prob
output shape [1, 2]
output type tensor(float)```
1 ответ
X (входной сигнал в sessions.run) должен быть массивом np. Например:
img = cv2.resize(img, (width, height))
# convert image to numpy
x = numpy.asarray(img).astype(<right_type>).reshape(<right_shape>)
res = sess.run([output_name], {input_name: x})