I am trying to transfer onnx models (from onnx model zoo) to tensorflow through Tensorflow Session. I meet problems when transferring the tiny_yolov2 model, but the code runs correctly for ResNet-50 model. For details, I use the test samples in the model zoo but the SHAPE of the target output tensor and that of the real output tensor are not equal.
`
import onnx_tf.backend
import onnx
import os
import glob
import tensorflow as tf
import numpy as np
from PIL import Image
from onnx import numpy_helper
#load ONNX model
onnx_model = onnx.load(model_path)
#prepare ONNX model to ONNX-Tensorflow model through ONNX backend API
tf_model = onnx_tf.backend.prepare(onnx_model)
# Load inputs
inputs = []
inputs_num = len(glob.glob(os.path.join(test_data_dir, 'input_*.pb')))
for i in range(inputs_num):
input_file = os.path.join(test_data_dir, 'input_{}.pb'.format(i))
tensor = onnx.TensorProto()
with open(input_file, 'rb') as f:
tensor.ParseFromString(f.read())
inputs.append(numpy_helper.to_array(tensor))
# Load reference outputs
ref_outputs = []
ref_outputs_num = len(glob.glob(os.path.join(test_data_dir, 'output_*.pb')))
for i in range(ref_outputs_num):
output_file = os.path.join(test_data_dir, 'output_{}.pb'.format(i))
tensor = onnx.TensorProto()
with open(output_file, 'rb') as f:
tensor.ParseFromString(f.read())
ref_outputs.append(numpy_helper.to_array(tensor))
#run ONNX-TF model through TF API
with tf.Session() as persisted_sess:
print("load graph")
persisted_sess.graph.as_default()
tf.import_graph_def(tf_model.graph.as_graph_def(), name='')
inp = persisted_sess.graph.get_tensor_by_name(
tf_model.tensor_dict[tf_model.inputs[0]].name
)
out = persisted_sess.graph.get_tensor_by_name(
tf_model.tensor_dict[tf_model.outputs[0]].name
)
for i in range(len(inputs)):
res = persisted_sess.run(out, {inp: inputs[i]})
np.testing.assert_almost_equal(ref_outputs[i],res,6)
Describe the bug
I am trying to transfer onnx models (from onnx model zoo) to tensorflow through Tensorflow Session. I meet problems when transferring the tiny_yolov2 model, but the code runs correctly for ResNet-50 model. For details, I use the test samples in the model zoo but the SHAPE of the target output tensor and that of the real output tensor are not equal.
(shapes (1, 125, 13, 13), (1, 125, 6, 6) mismatch) x: array([[[[ 0.056232, 0.361873, 0.383947, ..., 0.202647, 0.031208, 0.317948], [-0.084167, 0.385165, 0.486804, ..., 0.261477, 0.253464,... y: array([[[[ 3.479987e-01, 2.631071e-01, 5.194952e-01, 6.217273e-01, 5.851656e-01, 3.590763e-01], [ 2.578035e-01, -2.500132e-02, 8.728515e-02, 1.864333e-01,...
To Reproduce
` import onnx_tf.backend import onnx import os import glob import tensorflow as tf import numpy as np from PIL import Image from onnx import numpy_helper
img_path = "tutorials/tutorials/assets/dog.jpg"
test_data_dir = "models/tiny_yolov2/tiny_yolov2/test_data_set_0/"
model_path = "models/tiny_yolov2/tiny_yolov2/model.onnx" def main():
if name == "main": main() `
ONNX model file
https://github.com/onnx/models/tree/master/tiny_yolov2 https://onnxzoo.blob.core.windows.net/models/opset_8/tiny_yolov2/tiny_yolov2.tar.gz
Python, ONNX, ONNX-TF, Tensorflow version
This section can be obtained by running
get_version.py
from util folder.Additional context
Add any other context about the problem here.