As the title suggests, I have a caffe2 model (model_init.pb and model.pb) and wanted to convert it into onnx via the following code snippet.
import onnx
import caffe2.python.onnx.frontend
from caffe2.proto import caffe2_pb2
from PIL import Image
import numpy as np
# We need to provide type and shape of the model inputs,
# see above Note section for explanation
data_type = onnx.TensorProto.FLOAT
IMAGE_LOCATION = "/home/an1/caffe2_model/input.jpg"
INIT_NET = "/home/an1/caffe2_model/model_init.pb"
PREDICT_NET = "/home/an1/caffe2_model/model.pb"
# Read single image
img = Image.open(IMAGE_LOCATION)
img = np.array(img)
# Convert HWC -> CHW
img = img.swapaxes(1, 2).swapaxes(0, 1)
# Convert CHW -> NCHW
img = np.array([img])
# Im info N x 3 tensor of (height, width, scale)
im_info = np.reshape(np.array([img.shape[2], img.shape[3], 1.0]), (1,-1))
value_info = {
'data': (data_type, img.shape),
'im_info': (data_type, (1,3))
}
predict_net = caffe2_pb2.NetDef()
with open(PREDICT_NET, 'rb') as f:
predict_net.ParseFromString(f.read())
init_net = caffe2_pb2.NetDef()
with open(INIT_NET, 'rb') as f:
init_net.ParseFromString(f.read())
onnx_model = caffe2.python.onnx.frontend.caffe2_net_to_onnx_model(
predict_net,
init_net,
value_info,
)
onnx.checker.check_model(onnx_model)
However, I’m encountering an error with the Batch Permutation op:
RuntimeError: [enforce fail at batch_permutation_op.cc:64] X.dim32(0) > 0. 0 vs 0
Does anyone have an idea what could be causing this?