我们正在尝试将caffe模型转换为onnx格式。最初,我们使用CaffetoCaffe2转换工具将caffe模型转换为caffe2。为此,我们使用python 2.7安装了caffe和caffe2(conda)。从caffe成功转换为caffe2之后,我们得到了三个文件。 Forecast_net.pb,predict_net.pbtxt和inet_net.pb。然后,我们尝试使用Caffe2toONNX转换器将这些文件转换为'onnx'格式。我们在此页面中尝试了shell命令和python脚本将模型转换为onnx格式。但是,我们收到以下错误:-
RuntimeError:[在net.cc:69强制执行失败]。 op Concat:网络上下文编码器的输入掩码的来源未知,操作员输入:“ data”输入:“ mask”输出:“ data_all”输出:“ _data_all_dims”类型:“ Concat” arg {名称:“ order” s: “ NCHW”}
该模型似乎无法正确识别其两个输入。如何正确处理(或指定)两个输入(或多个)并将caffe2模型正确转换为onnx格式?
以下是转换脚本:-
import onnx
import caffe2.python.onnx.frontend
from caffe2.proto import caffe2_pb2
# We need to provide type and shape of the model inputs,
# see above Note section for explanation
data_type = onnx.TensorProto.FLOAT
data_shape1 = (1, 3, 512, 512)
data_shape2 = (1, 1, 512, 512)
value_info = {
'data': (data_type, data_shape1),
'mask': (data_type, data_shape2),
}
predict_net = caffe2_pb2.NetDef()
with open('predict_net.pb', 'rb') as f:
predict_net.ParseFromString(f.read())
init_net = caffe2_pb2.NetDef()
with open('init_net.pb', '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)
onnx.save(onnx_model, 'model.onnx')
这是链接caffe2 pbtxt文件:predict_net.pbtxt
更新:我们还尝试了caffe_to_tf工具;但遇到另一个错误:-
遇到错误:不支持多个顶级节点。