个人使用的是vs2015和openvino2019R3版本,openvino尽量使用2019R3以后的版本,因为API更加简洁,话不多说开始教程。
Openvino是intel公司开发的一款将多种深度学习模型部署于cpu,gpu,fpga等多种平台的软件。它支持tensorflow caffe mxnet等模型的转换,将这些模型的权重与网络结构通过模型优化器转换成 .xml 与 .bin文件,避免了开发人员为了同一个业务需求,在不同平台多次开发,多次部署,使用openvino,只需一次开发,就可以将模型部署在多个平台。
1.Openvino支持的硬件:
1.英特尔CPU,官网推荐理论上i3以上和4代以上的cpu都可以使用。
2.英特尔HD Graphics 集成显卡
3.英特尔vpu计算棒(650元左右)
2.1安装环境:
win10
Visual studio 2015
Cmake 3.6.3
Python3.6
OpenVINO2019R03
通常安装vs2015和cmake3.7以上,python3.6或3.7,
官网要求环境如下:
https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_windows.html
可以让openVINO后续步骤自动帮你安装
点击注册下载,在后续界面中填写好自己的个人信息,进入下在界面
2.2 初始化
安装路径尽量选用默认安装,我安装是在c盘新建intel文件夹,安装在这个目录下面。然后进入该目录完成初始化操作(setupvars.bat)。C:\intel\openvino_2019.3.379\bin
2.3测试demo
在C:\intel\openvino_2019.3.379\deployment_tools\demo 运行demo测试是否安装成功。进入该目录执行bat,首先会download该模型相应的权重和模型。
如果出现“cmake不是内部或外部命令”
检测C:\Program Files\CMake\bin是否填入了环境变量,重新添加并打开cmd再次运行即可。出现相关结果则安装成功。
编译openvino的demo获得cpu拓展模块支持,执行下面步骤:
1.首先进入目录:C:\intel\openvino_2019.3.379\deployment_tools\inference_engine\samples
2.然后运行:build_samples_msvc.bat
3.进入C:\Users\Administrator\Documents\Intel\OpenVINO\inference_engine_samples_build
4.打开Samples.sln分别生成release和debug解决方案。
上述操作之后在目录C:\Users\Administrator\Documents\Intel\OpenVINO\inference_engine_samples_build\intel64\Release会生成cpu_extension.lib和cpu_extension.dll
**需要注意的是在步骤2实际操作过程中执行build_samples_msvc.bat,我测试了两次都出现错误----“vswhere tool is not found”:**如下
解决方法:
微软vs官网下载build_tools并安装,包很小,安装很快;然后在执行语句命令后面加上后缀 VS2015 :build_samples_msvc.bat VS2015 指定安装即可解决;
步骤2完成界面
编译之后openvino的配置和Opencv配置一样基本如下:
4.1包含目录
4.4添加环境变量
C:\intel\openvino_2019.3.379\deployment_tools\inference_engine\bin\intel64\Debug
C:\intel\openvino_2019.3.379\deployment_tools\inference_engine\bin\intel64\Release
C:\Users\Administrator\Documents\Intel\OpenVINO\inference_engine_samples_build\intel64\Release
C:\intel\openvino_2019.3.379\opencv\bin
另外,需要注意的是,openvino下载自带对应版本的opencv,最好配置使用openvino自带版本的opencv。最后重启vs2015即可。
5.1 openvino支持的网络结构
vnet结构和unet类似,主要是有卷积,转置卷积和concat连接几部分组成,输入常规的网络结构,所以openvino是支持这些结构的模型。
对Tensorflow框架openvino2019R3版本具体支持的结构官方文档链接:
https://docs.openvinotoolkit.org/latest/_docs_MO_DG_prepare_model_Supported_Frameworks_Layers.html
5.2Keras模型转化为TF模
这里不在阐述
5.2 TF模型的IR转化
Openvino目的就是为了在边缘设备上Cpu或者vpu等硬件上进行部署深度学习模型并进行加速推理,所以提供了model optimizer模块优化器。通过优化器将AI模型转化为openvino支持的中间模型。
在执行model optimizer时非常重要,该模块是重点,实际存在坑较多。这一步做不好,后面使用inference engine会出现2种情况,第一种 inference无法运行,第二种inference可以运行,但是得出的结果不正确。
官网提供的mo_tf.py负责转换tf模型,mo.py负责转换多种模型。进入目录C:\intel\openvino_2019.3.379\deployment_tools\model_optimizer;对tensorflow的pb模型在执行mo_tf.py模型转化操作如下:
1.因为openvino安装在c盘,使用管理员模式打开cmd运行命令
2.python mo.py --input_model new_tensor_model.pb --input_shape=[1,256,256,3] --scale_values [255,255,255] --mean_values [0,0,0] --data_type FP32 --model_name new_tensor_model
解释下该命令,官网给的IR转化命令如下:
python mo_tf.py --input_model
该命令不含这么多参数,然而现实是残酷的,如果不带–input_shape=[1,256,256,3]等参数测试发现会转化出错,直接运行mo_tf.py转化过程得到的都是各种各样的ERROR。
参考连接:https://www.jianshu.com/p/f4ad7b242d45
https://blog.csdn.net/weixin_40272441/article/details/87875349
通常我们训练时候数据输入会经过预处理,比方说归一化和裁剪resize,然后在输入网络训练。但有些人喜欢把预处理部分写进拓扑结构里了,训练时候直接输入读取原始数据。这种情况下得到的模型 pb文件里会有预处理相关的node,这些node也会直接转化到xml文件中。
另一种情况是pb文件的拓扑结构没有包含预处理部分,由于拓扑结构中没有预处理部分,虽然pb转IR的时候也可以成功,但是无法推理。这个时候就需要用到相关参数–scale、 --scale_values,、–mean_values。当mean value和scale value被同时指定时,数据先减去mean value,再除以scale value。
如果在pb文件中,输入没有明确的尺寸的话,需要加入–input_shape参数指定shape,比如[1,128,128,3]。对于batch size不定的情况,再调用mo_tf.py后面加上-b。这两个参数不能同时使用。一句话不指定input-shape就要指定batch大小,使用参数-b,目前测试了下面第一种。
python mo_tf.py --input_model
python mo_tf.py --input_model
单通道vnet模型转化:
python mo_tf.py --input_model new_tensor_model.pb --input_shape=[1,256,256,1] --scale_values [255.0] --mean_values [0] --data_type FP32 --model_name new_tensor_model
三通道模型转化:
python mo_tf.py --input_model new_tensor_model.pb --input_shape=[1,256,256,3] --scale_values [255.0,255.0,255.0] --mean_values [0,0,0] --data_type FP32 --model_name new_tensor_model
之后就会在指定目录下生成对应的bin和xml文件,然后c++进行具体的解析即可。
解析过程涉及的API:
https://docs.openvinotoolkit.org/latest/_docs_IE_DG_Memory_primitives.html
https://docs.openvinotoolkit.org/latest/_docs_IE_DG_Migration_CoreAPI.html