最近要使用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:
VScode配置隧道连接至集群的某个节点
abc_114:
onnxruntime版本和CUDA版本的对应
Anjou_YES!: