Openvino RuntimeError: get_shape was called on a descriptor::Tensor with dynamic shape问题解决

由于Openvino在2020 4月份,以及之前的版本中,对pytorch框架下的上采样操作,即F.interploate(或Upsample)的bilinear采样支持不是很好。

具体而言,模型转化前和转化后,输出数据不一致程度高达99%。而这根本原因在于torch在转onnx模型时,采用op9  op10的转化方法,onnx模型与原torch模型的输出不一致(99%不一致)。而采用op11, op12才能保证,模型转化前后,精度一致,数据输出一致度高于99%。

而之前的版本,openvino仅支持op9  op10的onnx模型,转化为IR模型,从而在openvino框架下进行前向推理。对于op11 op12转化方法得到的onnx模型,openvino不支持。

 

很开心,Intel于10月份更新的Openvino v2021版本增加了对onnx模型的采样支持(op11  op12),详见链接:https://software.intel.com/content/www/us/en/develop/articles/openvino-relnotes.html

关于onnx模型的上采样问题,已支持op11、op12,以及模型输出节点的关键字定义:

自己很快更新了版本,并进行了测试,遇到一个问题:

    exec_net = ie.load_network(network=net, device_name=args.device)
  File "ie_api.pyx", line 311, in openvino.inference_engine.ie_api.IECore.load_network
  File "ie_api.pyx", line 320, in openvino.inference_engine.ie_api.IECore.load_network
RuntimeError: get_shape was called on a descriptor::Tensor with dynamic shape

遇到的问题在于,加载模型时出错。此时,我测试,device设置为CPU时,是没有问题的。device设置为:HETERO:GPU,CPU时会报上述错误。

查找了网上关于该问题几乎没有解答方法,经过自己的研究后,终于解决:

ie = IECore()
net = ie.read_network(model=model_xml, weights=model_bin)

# ***************  加入此段代码可解决问题 start  **************************
for output_key in net.outputs:
    print(net.layers[output_key].type)
    if net.layers[output_key].type == "Convolution":
        output_name, output_info = output_key, net.outputs[output_key]
# ***************  加入此段代码可解决问题 end **************************

exec_net = ie.load_network(network=net, device_name=args.device)

出现该问题的部分原因是,我的网络中使用到了上采样操作。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值