2022
点击蓝字 关注我们
关注并星标
从此不迷路
计算机视觉研究院
学习群|扫码在主页获取加入方式
获取代码|关注并回复“onnx部署”
01
概述
ONNXRuntime是微软推出的一款推理框架,用户可以非常便利的用其运行一个onnx模型。ONNXRuntime支持多种运行后端包括CPU,GPU,TensorRT,DML等。可以说ONNXRuntime是对ONNX模型最原生的支持。
虽然大家用ONNX时更多的是作为一个中间表示,从pytorch转到onnx后直接喂到TensorRT或MNN等各种后端框架了= =,但这并不能否认ONNXRuntime是一款非常优秀的推理框架(微软出品,必属精品)。而且由于其自身只包含推理功能(1.2版本,最新的ONNXRuntime甚至已经可以训练,可见微软在其上面的野心还是有的),对比主流框架源码看起来没有那么复杂难懂,通过阅读其源码可以非常清晰的理解深度学习框架的一些核心功能原理(op注册,内存管理,运行逻辑等)。接下来的一系列文章尝试对ONNXRuntime的源码进行阅读学习,对理解深度学习框架的工作原理还是很有帮助的。
下面是使用ONNXRuntime的一个简单例子:
import numpy as np
import onnx
import onnxruntime as ort
image = cv2.imread("image.jpg")
image = np.expand_dims(image, axis=0)
onnx_model = onnx.load_model("resnet18.onnx")
sess = ort.InferenceSession(onnx_model.SerializeToString())
sess.set_providers(['CPUExecutionProvider'])
input_name = sess.get_inputs()[0].name
output_name = sess.get_outputs()[0].name
output = sess.run([output_name], {input_name : image_data})
prob = np.squeeze(output[0])
print("predicting label:", np.argmax(prob))
总体来看,整个ONNXRuntime的运行可以分为三个阶段,Session构造,模型加载与初始化和运行。和其他所有主流框架相同,ONNXRuntime最常用的语言是python,而实际负责执行框架运行的则是C++。
——转自知乎-黑羽
现在我们基于“hpcboka”贡献的onnxweight,我们一起来学习实践部署的能力。
使用ONNXRuntime部署DAMO-YOLO目标检测,包含C++和Python两个版本的程序。起初,我想使用opencv做部署的,但是opencv的dnn模块读取onnx文件出错, 无赖只能使用onnxruntime做部署了。
本套程序一共提供了27个onnx模型, onnx文件需要从百度云盘下载。
链接:https://pan.baidu.com/s/10-5ke_fs2omqUMSgKTJV0Q 提取码:w9kp
其中在百度云盘里一共有30个onnx模型文件,但是逐个读取onnx文件做推理时, 发现有3个onnx文件在onnxruntime读取时出错了,在程序里的choices参数里声明了 27个模型文件的名称。
相应代码请关注“计算机视觉研究院”,回复“onnx部署”即可获取!
END
转载请联系本公众号获得授权
计算机视觉研究院学习群等你加入!
ABOUT
计算机视觉研究院
计算机视觉研究院主要涉及深度学习领域,主要致力于目标检测、图像分割、模型量化、模型部署等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!
VX:2311123606
往
期
推
荐
YoloV:目标实时检测效果依然很棒(附源代码下载)
细粒度特征提取和定位用于目标检测(附论文下载)
深度框架训练 | 不是所有数据增强都可以提升最终精度
Yolo系列的高效更精确的目标检测框架(附源代码)
版权归原作者 计算机视觉研究院 所有, 如有侵权,请联系我们删除。