首页 > 其他分享 >深度学习模型打包动态库给外部调用SOP

深度学习模型打包动态库给外部调用SOP

时间:2022-08-26 09:25:33浏览次数:66  
标签:openvino 调用 4.1 lib onnxruntime SOP 添加 2.1 打包

一、Onnxruntime

1.将DNN模型转换成ONNX格式

1.1pytorch->onnx

  待补充。。。

1.2 tensorflow->onnx

1.2.1搭建环境

1.2.1.1安装tf2onnx
  pip install tf2onnx

1.2.2python示例

2.写c++代码加载onnx文件进行推理

2.1配置环境

2.1.1下载onnxruntime并解压

网址https://github.com/microsoft/onnxruntime/releases/tag/v1.12.0

2.1.2打开vs新建项目——>右击点击属性——>C/C++属性,添加解压后的include文件路径,注意配置平台的选择。

2.1.3点击链接器——>附加库目录,添加解压后的lib文件路径。

2.1.4点击输入——>附加依赖项,将onnxruntime.lib添加进去。

2.1.5将onnxruntime.dll放入到项目的Debug或Release下

2.2c++示例

3.将第2步的c++代码打包动态库

3.1新建DLL项目

3.2添加.h.cpp

3.3修改类的头文件

3.4将预编译头设置为"不使用预编译头"。

3.5配置onnxruntime环境:2.1.2 ---> 2.1.5

3.6生成解决方案

4.外部调用dll

4.1配置环境

4.1.1将onnxruntime.dll,onnxruntime.lib,RposDetectOnnxDll.dll,RposDetectOnnxDll.lib,118-1.7406e-04.onnx(onnx格式文件),DetectRpeak.h(类头文件)拷贝出来,放在一个文件夹内temp

4.1.2打开vs新建项目——>右击点击属性——>C/C++属性,添加第4.1.1步类头文件路径,注意配置平台的选择。

4.1.3点击链接器——>附加库目录,添加第4.1.1步lib文件路径。

4.1.4点击输入——>附加依赖项,将onnxruntime.lib,RposDetectOnnxDll.lib添加进去。

4.1.5将onnxruntime.dll,RposDetectOnnxDll.dll放入到项目的Debug或Release下

4.2include类头文件调用动态库

二、Openvino

1.将DNN模型转换成Openvino格式

1.1pytorch->onnx->Openvino

  待补充。。。

1.2 tensorflow->onnx->Openvino

1.2.1搭建环境

1.2.1.1安装openvino
  pip install openvino   pip install openvino-dev[onnx,tensorflow2]==2022.1.0

1.2.2.tensorflow->onnx

参照1.2步

1.2.3onnx->openvino

2.写c++代码加载openvino文件进行推理

2.1配置环境

2.1.1下载openvino

网址https://www.intel.cn/content/www/cn/zh/developer/tools/openvino-toolkit/download.html

2.1.2安装openvino

双击exe根据指引

2.1.3设置环境变量

找到openvino的安装目录 在系统环境变量 - path添加openvino的安装目录 C:\Program Files (x86)\Intel\openvino_2022.1.0.643\runtime\3rdparty\tbb C:\Program Files (x86)\Intel\openvino_2022.1.0.643\runtime\bin\intel64\Release

2.1.4打开vs新建项目——>右击点击属性——>C/C++属性,添加解压后的include文件路径,注意配置平台的选择。

2.1.5点击链接器——>附加库目录,添加解压后的lib文件路径。

2.1.6点击输入——>附加依赖项,将.lib添加进去(其中openvino.lib必须加入,其它的 lib可以在使用的时候添加,比如使用 ir 文件进行推理,就需要添加openvino_ir_frontend.lib到依赖中)。

2.2c++示例

3.将第2步的c++代码打包动态库

3.1新建DLL项目

3.2添加.h.cpp

3.3修改类的头文件

3.4将预编译头设置为"不使用预编译头"。

3.5配置openvino环境:2.1.4 ---> 2.1.6

3.6生成解决方案

4.外部调用dll

4.1配置环境

4.1.1将openvino_2022.1.0.643(openvino所有文件),RposDetectOnnxDll.dll,RposDetectOnnxDll.lib,IR(openvino格式文件),DetectRpeak.h(类头文件)拷贝出来,放在一个文件夹内temp

4.1.2设置环境变量

找到openvino文件夹的目录 在系统环境变量 - path添加openvino的目录:4.1.1步的openvino_2022.1.0.643文件夹 C:\Program Files (x86)\Intel\openvino_2022.1.0.643\runtime\3rdparty\tbb C:\Program Files (x86)\Intel\openvino_2022.1.0.643\runtime\bin\intel64\Release

4.1.2打开vs新建项目——>右击点击属性——>C/C++属性,添加第4.1.1步类头文件路径,注意配置平台的选择。

4.1.3点击链接器——>附加库目录,添加第4.1.1步lib文件路径。

4.1.4点击输入——>附加依赖项,将RposDetectOnnxDll.lib添加进去。

4.1.5将RposDetectOnnxDll.dll放入到项目的Debug或Release下

4.2include类头文件调用动态库

三、R点检测算法不同框架性能对比

测试数据时长5小时 推理框架库文件大小 算法接口库文件大小 CPU占用率 内存占用 推理时间
onnxruntime 7.87M 263KB 8% 600M 230.938s
openvino 448M 66KB 47% 1400M 208.219s

四、结论

1.Openvino框架在interCPU上推理速度更快 2.OnnxRuntime框架部署更便捷一些,只需要提供onnxruntime.dll;Openvino框架部署需要提供所有文件给调用者设置环境变量 3.用Openvino框架进行推理的代码目前只能打包成X64的动态库 4.综合考虑目前暂定使用onnxruntime

标签:openvino,调用,4.1,lib,onnxruntime,SOP,添加,2.1,打包
From: https://www.cnblogs.com/shuimobanchengyan/p/16626441.html

相关文章

  • 打包jar包,和运行
    如果有MANIFEST.MF这个文件就要删除,第一次没有File>ProjectStructure第一种打包成一个jar包和多个依赖包统一打包在一起: 点击你刚刚生成的jar包运行一下:生......
  • js-IIFE-即使调用的函数表达式
    将函数矮化成表达式,一次性函数varfoo=function(){ console.log(2)}();+function(){ console.log(2)}();-function(){ console.log(2)}();!function(){......
  • vuex 的模块中如何调用 actions 中的方法
     模块vuexTest.js/***模块vuexTest.js*/exportdefault{namespaced:true,actions:{actionsHello(context,val){console.log(context,"context");//与s......
  • 混合编程:如何用pybind11调用C++
    摘要:在实际开发过程中,免不了涉及到混合编程,比如,对于python这种脚本语言,性能还是有限的,在一些对性能要求高的情景下面,还是需要使用c/c++来完成。本文分享自华为云社区《混......
  • vue2 项目也想使用vite打包的便捷?
    首先很多项目正在更新迭代,vue2项目同学也知道vite打包速度开发模式飞快,而且生产模式我给大家贴个图这是vite构建的vue2的初始化项目性能这是未使用webpack构建的初始......
  • 将python打包成exe
    1.PyInstallerpass2.AutoPYtoEXE2.1简单说明简介:使用简单的图形界面将.py转换为.exe。时间:jul9,2018~Aug9,2022python版本:3.6 ~3.102.2安装(1)通过Pypi安......
  • 永嘉微电原厂推出:VK1024B SOP16适用于血氧仪、美容仪、护颈仪、按摩仪等仪器仪表的LC
    概述:VK1024B是一个6×4的LCD驱动器,可软体程式控制使其适用于多样化的LCD应用线路,仅用到3至4条信号线便可控制LCD驱动器,除此之外也可介由指令使其進入省电模式。QT743特点......
  • 微服务之间相互调用的三种最常见方式(含源码)
    相信大家平时开发的时候没少碰见,在微服务架构中需要调用很多服务才能完成一项功能。这时候,如何互相调用就变成微服务架构中的一个关键问题。在这里我介绍三个常用的方法一......
  • SpringBoot利用@Async注解实现异步调用
    前言:异步编程是让程序并发运行的一种手段,使用异步编程可以大大提高我们程序的吞吐量,减少用户的等待时间。在Java并发编程中实现异步功能,一般是需要使用线程或者线程池。而......
  • jenkins打包内存溢出
    现象JavaScriptheapoutofmemory问题分析报错信息翻译过来就是JavaScript堆内存不足。这里说的JavaScript指的是Node。我们都知道Node是基于V8引擎,在一般......