首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mxnet模型转换为onnx成功,但ort.InferenceSession(模型)失败

mxnet模型转换为onnx成功,但ort.InferenceSession(模型)失败
EN

Stack Overflow用户
提问于 2021-11-04 16:03:44
回答 1查看 61关注 0票数 1

问一个问题

我成功地将mxnet模型转换为onnx,但当推断.The模型的形状为(1,1,100,100)时,它失败了。

转换代码

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
INFO:root:Input shape of the model [(1, 1, 100, 100)] 
INFO:root:Exported ONNX file ./model.onnx saved to disk

推理代码

代码语言:javascript
复制
sess = ort.InferenceSession("./model.onnx") 

输出

代码语言:javascript
复制
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

代码语言:javascript
复制
{
  "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),然后再试一次转换。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2021-11-11 13:12:38

我修复了它,用py手电筒对模型进行了重新编码,并复制了权值,在avgpooling之前使用了nn.ZeroPad2d(4):

代码语言:javascript
复制
self.pad = nn.ZeroPad2d(4)
self.pool = nn.AvgPool2d(kernel_size=(4,4),stride=(4,4))

X = self.pool(self.pad(self.conv(X)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69842263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档