问一个问题
我成功地将mxnet模型转换为onnx,但当推断.The模型的形状为(1,1,100,100)时,它失败了。
转换代码
sym = 'single-symbol.json'
params = '/single-0090.params'
input_shape = (1, 1, 100, 100)
onnx_file = './model.onnx'
converted_model_path = onnx_mxnet.export_model(sym, params, [input_shape], np.float32, onnx_file,verbose=True)
model= onnx.load_model(converted_model_path)
checker.check_graph(model.graph)
checker.check_model(model)输出
INFO:root:Input shape of the model [(1, 1, 100, 100)]
INFO:root:Exported ONNX file ./model.onnx saved to disk推理代码
sess = ort.InferenceSession("./model.onnx") 输出
onnxruntime.capi.onnxruntime_pybind11_state.RuntimeException:
[ONNXRuntimeError] : 6 : RUNTIME_EXCEPTION :
Exception during initialization:
/onnxruntime/core/providers/cpu/nn/pool_attributes.h:77
onnxruntime::PoolAttributes::PoolAttributes(const OpNodeProtoHelper<onnxruntime::ProtoHelperNodeContext> &,
const std::string &, int) pads[dim] < kernel_shape[dim] &&
pads[dim + kernel_shape.size()] < kernel_shape[dim] was false.
Pad should be smaller than kernel.问题
mxnet池节点json
{
"op": "Pooling",
"name": "pool1_fwd",
"attrs": {
"count_include_pad": "True",
"global_pool": "False",
"kernel": "(4, 4)",
"layout": "NCHW",
"pad": "(4, 4)",
"pool_type": "avg",
"pooling_convention": "valid",
"stride": "(4, 4)"
},
"inputs": [[46, 0, 0]]
}我将"pad":"(4,4)“改为"pad":"(3,3)”小于“内核”:"(4,4),然后再试一次转换。
sess = ort.InferenceSession("./model.onnx")
output = sess.run(None, {"data": data.astype(np.float32)})它起了作用,但它的产值不正确。怎么修呢?顺便说一句:将mxnet模型转换为ncnn是正确的(不改变任何东西,pad=(4,4),kernel=(4,4))
更多信息
python:3.8 onnx:1.10.2 mxnet:1.8.0
发布于 2021-11-11 13:12:38
我修复了它,用py手电筒对模型进行了重新编码,并复制了权值,在avgpooling之前使用了nn.ZeroPad2d(4):
self.pad = nn.ZeroPad2d(4)
self.pool = nn.AvgPool2d(kernel_size=(4,4),stride=(4,4))
X = self.pool(self.pad(self.conv(X)))https://stackoverflow.com/questions/69842263
复制相似问题