ONNX模型转Openvino部署常见“八阿哥”

最近要使用openvino部署一个深度学习模型,模型主要是使用pytorch进行训练,部署时首先转为onnx模型,然后在将onnx模型转为openvino进行部署,本文就记录一下在onnx模型转openvino时所遇到的坑以及解决办法,未来有遇到新的问题会补充到本文。

1:openvino模型不支持动态shape的输入和输出

onnx模型转openvino的第一个问题就是openvino不支持输入和输出的shape是动态的,而onnx是支持动态shape的输入和输出,onnx动态shape的设置是torch.export.onnx()中的dynamic_axes参数,具体使用方法不在多说。

2.openvino模型只支持一个输入

这个问题还是比较麻烦的,onnx模型的支持多个输入而openvino只支持单个输入,openvino好像也只支持单个输出,这个不太清楚也并未验证,但是onnx可以确定的是支持多个输入和输出。

3.openvino并不支持onnx所有的operator

openvino支持的onnx的operator可在Supported Framework Layers — OpenVINO™ documentation查询,我当时没有用openvino部署成功是因为我的模型中有LSTM,而openvino不支持onnx中使用了peephole的LSTM,虽然我用的是pytroch的LSTM接口而pytorch中并未说明LSTM是否使用了peephole,但是我的onnx模型并未成功转成openvino,因此估计pytroch中的LSTM还是使用了peephole。

4.openvino模型不支持onnx模型中的if节点

这个问题着实难为我了好几天,就是因为openvino不支持if语句,然后我吧代码中的所有if语句全部删除了,但是删除了if语句发现转换的onnx模型中依然有if节点,最后发现是pytroch中的squeeze()算子在转换成onnx之后会产生If节点,具体可以看另外的一篇博客onnx模型转openvino报错nGraph does not support the following ONNX operations: If_hyliuisme的博客-CSDN博客_onnx转openvino

5.加载openvino模型报错tensor dynamic shape

这个报错好像还是因为onnx模型中有些变量是动态shape的原因,我代码中有很多变量使用诸如view()方法或者其他需要维度的方法时没有使用固定的数据而是使用tensor.size(),如a.view(b.size(0), b.size(1))这种写法时就报错了,但是当我改成a.view(5, 10)这种固定数据的写法就不报错了,因此我估计是onnx模型转openvino时参数都需要直接固定下来而不是使用其他变量提供参数,openvino只支持静态图结构,所以为了避免出错还是建议参数直接写死。

目前遇到的onnx转openvino坑就这几个,后续有新的坑还会及时补充本文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值