最近要使用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模型只支持单个输入

这个问题还是比较麻烦的,openvino好像可以使用多个输出。目前我尝试的只能使用单个输入,但是onnx可以确定的是支持多个输入和输出。评论区有老哥尝试成功了openvino的多输入输出,具体可以询问评论区的老哥。

3.openvino并不支持onnx所有的o perator

openvino支持的onnx的operator可在 https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_prepare_model_Supported_Frameworks_Layers.html#onnx_supported_operators 查询,我当时没有用openvino部署成功是因为我的模型中有LSTM,而openvino不支持onnx中使用了peephole的LSTM,虽然我用的是pytorch的LSTM接口而pytorch中并未说明LSTM是否使用了peephole,但是我的onnx模型并未成功转成openvino,因此估计pytorch中的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博客

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坑就这几个,后续有新的坑还会及时补充本文。

最近要使用openvino部署一个深度学习模型,模型主要是使用pytorch进行训练,部署时首先转为onnx模型,然后在将onnx模型转为openvino进行部署,本文就记录一下在onnx模型转openvino时所遇到的坑以及解决办法,未来有遇到新的问题会补充到本文。1:openvino模型不支持动态shape的输入和输出onnx模型转openvino的第一个问题就是openvino不支持输入和输出的shape是动态的,而onnx是支持动态shape的输入和输出,onnx动态shape的设置是tor
YOLOX是旷视科技新近推出的高性能实时目标检测网络,性能超越了YOLOv3/YOLOv4 /YOLOv5。 Open VINO 是针对Intel的CPU等设备的加速工具。本课程在Windows和Ubuntu系统上详细演示使用 Open VINO 对YOLOX进行加速和 部署 。其中对Python和C++的 Open VINO 部署 都进行了讲解。特别是讲述了针对自己数据集上训练出的YOLOX的 Open VINO 加速 部署 方法。相关课程:《YOLOX目标检测实战:训练自己的数据集》https://edu.csdn.net/course/detail/35586 《YOLOX目标检测实战:TensorRT加速 部署 》https://edu.csdn.net/course/detail/35716
YOLOv5-lite主要就是用改进的ShuffleNetv2作为YOLOv5新的Backbone。跟YOLOv5一样分为四个版本,按 模型 大小由低到高的顺序依次为:v5lite-e、v5lite-s、v5lite-c和v5lite-g。之前做课题都是用的YOLOv4,趁这段时间通过v5lite-s源码学习一下YOLOv5相关的知识。 YOLOv5-lite源码地址:https://github.com/ppogg/YOLOv5-Lite YOLOv5-lite结构详解:https://zhuanlan
open Vino :Anaconda3-2020.02-Windows-x86_64.exe tensorflow>=1.2.0,<2.0.0 mxnet>=1.0.0,<=1.3.1 networkx=2.0
深度学习 神经网络的设计、训练与 部署 ,往往会困扰于不同的操作系统,不同的 深度学习 框架,不同的 部署 硬件,以及不同的版本。由于相互之间的不兼容,给开发使用者造成了很大的不便。 联合使用 Open VINO ONNX ,便可以解决从不同框架 模型 到不同硬件之间快速 部署 的问题。 最近参加“英特尔® Open VINO ™领航者联盟 DFRobot行业AI开发者大赛”活动,主办方提供了拿铁熊猫LattePanda和Intel神经计算棒NCS2,本文所列数据都是在该平台上运行得到的。 硬件1:拿铁熊猫LattePanda De
TensorFlow 2.0 onnx _to_keras( onnx _model, input_names, input_shapes=None, name_policy=None, verbose=True, change_ordering=False) -> {Keras model} onnx _model :要 换的 ONNX 模型 input_names :带有图形输入名称的列表 input_shapes :覆盖输入形状(实验性的) name_policy :[' name_policy ','short','default']覆盖图层名称(实验性) verbose :详细输出 change_ordering:将排序更改为HWC(实验性) ONNX 模型 import onnx from onnx 2
onnx 的基本操作一、 onnx 的配置环境二、获取 onnx 模型 的输出层三、获取中节点输出数据四、 onnx 前向InferenceSession的使用1. 创建实例,源码分析2. 模型 推理run,源码分析五、遇到的一些问题 最近在对 模型 进行量化时候, 模型 格式 变为 onnx 模型 了,因此需要对 onnx 进行加载、运行以及量化(权重/输入/输出)。故,对 onnx 模型 的相关操作进行简单的学习,并写下了这边博客,若有错误请指出,谢谢。 一、 onnx 的配置环境 onnx 的环境主要包含两个包 onnx onnx runtime,我们
1. 准备环境:需要安装 ONNX Runtime和Python运行环境。 2. 加载 模型 :使用 ONNX Runtime的InferenceSession()函数加载 ONNX 模型 文件,即将 . onnx 文件读取到运行时环境中。 3. 准备输入:我们需要准备包括图像在内的所有输入数据。具体来说,我们需要为图像指定长度和宽度,并在代码中进行预处理,例如调整图像大小、在像素值上进行归一化。 4. 运行 模型 :将输入数据传递给InferenceSession()函数的run() 方法并获取 模型 的输出结果。此时,我们可以将输出结果处理为最终的预测结果,例如通过设置阈值进行二元分类,或者到位于最高概率值的预测类别。 5. 测试 模型 :可以使用一些测试样本作为输入,以确保 模型 在不同样本上的性能和准确性。 总之,具体的 部署 步骤与代码,需要根据您的 模型 部署 环境进行调整。但是,无论如何,这些步骤都涉及将 模型 加载到运行时环境中、准备输入和运行 模型 pytorch模型转onnx,报错kind_.is_prim() INTERNAL ASSERT FAILED at /pytorch/torch/csrc/jit/ir.cpp:922 weixin_40811643: 碰到了类似的问题,aten:copy,不知道从何入手 表情包 VScode配置隧道连接至集群的某个节点 abc_114: 亲测有效。感谢博主分享 onnxruntime版本和CUDA版本的对应 Anjou_YES!: 大佬知道cuda11.2对应哪个版本的onnxruntime么