openvino踩坑记录——onnx模型转换成IR中间模型

安装openvino
linux系统下按照官网教程安装openvino并进行配置:
https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html#install-openvino

ONNX模型转换
对于pytorch、tensorflow等框架训练到模型都可以转换成ONNX模型,然后再转换成IR中间模型。
onnx模型转换成IR模型:
1.进入相关目录

cd ~/deployment_tools/model_optimizer

2.转换

python3 mo_onnx.py --input_model <输入模型路经> --output_dir <输出模型路经>

上面的方法能够对onnx model zoo里的模型进行转换。但是如果是自己训练的模型(openvino支持的),则会报错:

 RuntimeWarning: divide by zero encountered in long_scalars
  undefined_dim = num_of_input_elements // num_of_output_elements
[ ERROR ]  Cannot infer shapes or values for node "output/WithoutBiases".
[ ERROR ]  MatMul input shapes are incorrect. COL_INDEX_DIMs are not equal. Node: output/WithoutBiases. Shapes: [array([0, 0]), array([512,  10])]
[ ERROR ]  
[ ERROR ]  It can happen due to bug in custom shape infer function <function MatMul.infer at 0x7f62059e9200>.
[ ERROR ]  Or because the node inputs have incorrect values/shapes.
[ ERROR ]  Or because input shapes are incorrect (embedded to the model or passed via --input_shape).
[ ERROR ]  Run Model Optimizer with --log_level=DEBUG for more information.
[ ERROR ]  Exception occurred during running replacer "REPLACEMENT_ID" (<class 'extensions.middle.PartialInfer.PartialInfer'>): Stopped shape/value propagation at "output/WithoutBiases" node. 

可能是因为input shape未知(所有模型都这样,但只有onnx model zoo能够成功转换),因此将2中代码修改如下:

python3 mo_onnx.py --input_model <输入模型路经> --output_dir <输出模型路经> --input_shape [1,3,32,32](可修改)

最后转换成功。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
OpenVINO可以将动态batchsize的ONNX模型转换为其支持的静态batchsize的模型。下面是一种实现方式: 首先,安装OpenVINO工具包,并将模型优化器(Model Optimizer)集成到环境中。该工具用于将ONNX模型转换为OpenVINO可以加载和推理的IR模型。 在转换ONNX模型之前,我们需要了解该模型的动态输入形状。通常,动态batchsize的模型在网络的输入节点上会标记为-1或None。我们可以使用ONNX Runtime库来动态推理模型并获取输入形状。 下一步是使用Model Optimizer将ONNX模型转换为IR模型。为了支持静态batchsize,我们需要在转换过程中指定batch参数。命令行示例如下: ``` python mo.py --input_model model.onnx --output_dir output --input_shape [B,C,H,W] --mean_values [mean_values] --scale_values [scale_values] --batch B ``` 在命令行中,我们需要提供转换的ONNX模型,输出目录,输入形状,均值和缩放值。重要的是,在输入形状中指定batch维度并将其设置为所需的静态batchsize。 完成转换后,我们可以使用OpenVINO进行推理,输入静态batchsize的数据进行推理。 需要注意的是,在转换和推理过程中,我们需要确保模型和数据的形状匹配,以避免错误发生。如果需要批量推理,可以使用循环迭代每个批量进行推理。 这就是使用OpenVINO将动态batchsize的ONNX模型转换为静态batchsize模型的简要步骤。通过这种方式,我们可以使用OpenVINO对不同大小的批量进行高效推理。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值