OpenVINO是英特尔推出的一款全面的工具套件,用于快速部署应用和解决方案,支持计算机视觉的CNN网络结构超过150余种。
该工具套主要由两部分组成
官方描述:该工具可将在常见框架上训练的模型导入、转换与优化为可供英特尔工具(特别是推理引擎)使用的格式。常见框架包括 Caffe*、TensorFlow*、MXNet* 和ONNX*。
个人理解:将开源框架训练好的模型转化为推理引擎可识别的文件,本人使用的为将tensorflow训练好的pb文件生成模型优化器转换成的IR文件(包含.xml:描述网络拓扑、.bin:包含权重和偏差二进制数据)。
官方描述:这是一款运行深度学习模型的引擎。它包括一组库,可将推理轻松集成至用户的应用。
个人理解:向用户提供C++/Python API函数库。用户通过调用相应方法读入IR文件,设置推理引擎相应的模型输入输出,读入数据,指定AI计算硬件执行推理计算,并获得结果。
实验环境:Ubuntu 16.04
AI计算设备:Intel® Core™ i7-9700K CPU @ 3.60GHz
下载链接
sudo ./install_GUI.sh
默认安装路径/opt/intel,如果不是使用sudo安装,则安装路径是用户目录下
这些组件用于
cd /opt/intel/openvino/install_dependencies
sudo -E ./install_openvino_dependencies.sh
4.配置用户目录的.bashrc,将openvino环境初始化添加进去,实现每次打开终端都会自动配置OpenVINO环境
vi <user_dir>/.bashrc
#将下面命令添加至.bashrc文件的末尾
source /opt/intel/openvino/bin/setupvars.sh
配置有两种配置选项,第一个是配置所有框架,第二是选择一种框架配置。配置过程需要联网。
cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites.sh
cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites_tf.sh
cd /opt/intel/openvino/deployment_tools/demo
./demo_squeezenet_download_convert_run.sh
./demo_security_barrier_camera.sh
这部分是运行OpenVINO的测试demo,运行成功,表示安装完毕。
测试细节见官方安装文档安装面向 Linux* 的英特尔® OpenVINO™ 工具套件分发版
如运行第二步部分报Model Download Failed的错误,解决方法
两步
进入model_optimizer,执行转换的py文件
cd /opt/intel/openvino_<version>/deployment_tools/model_optimizer
python3 mo_tf.py --input_model <INPUT_MODEL>.pb --output_dir <OUTOUT_DIR>
上述步骤,还有两组参数可用于转换模型
Framework-agnostic parameters
TensorFlow-specific parameters
笔者使用了一个较简单的CNN模型,使用了参数Input Shapes,输出IR文件成功。
Inference Engine一般开发流程:
from openvino.inference_engine import IENetwork, IECore
import sys
import cv2
import tensorflow as tf
import time
device = "CPU"
model_xml = "/frozen_model.xml"
model_bin = "/frozen_model.bin"
image_height = 200
image_width = 200
path = "/circle_0_66.jpg"
#step 1
ie = IECore()
#step 2
net = ie.read_network(model=model_xml, weights=model_bin)
supported_layers = ie.query_network(net, device)
not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers]
if len(not_supported_layers) != 0:
print("Following layers are not supported by the plugin for specified device {}:\n {}".
format('cpu', ', '.join(not_supported_layers)))
print("Please try to specify cpu extensions library path in sample's command line parameters using -l "
"or --cpu_extension command line argument")
sys.exit(1)
'''
1 input(s) detected:
Name:input/x, type:float32, shape:(-1,200,200,3)
1 output(s) detected:
fc_2/BiasAdd
'''
#step 3
#准备输入输出张量
print("Preparing input blobs")
input_blob = next(iter(net.inputs))
out_blob = next(iter(net.outputs))
net.batch_size = 1
#step 4
exec_net = ie.load_network(network=net, num_requests=1, device_name=device)
#step 6
#prepar input
print("input")
data = cv2.imread(path)
image = cv2.cvtColor(data, cv2.COLOR_BGR2RGB)
image = tf.image.convert_image_dtype(image,tf.float32)#按照路径读取图片
image = tf.image.resize_image_with_crop_or_pad(image,image_height,image_width)#裁剪
image = tf.image.per_image_standardization(image)# 标准化
with tf.Session() as sess:
image1 = sess.run(image)
image = image1.transpose((2,0,1))
#step 7
#执行推断计算
start = time.time()
res = exec_net.infer(inputs={input_blob: image})
end2 = time.time()
print("openvino time is %0.6f"%((end2-start)))
#step 8
#get result
res = res[out_blob]
print(res)
经过多次测试,OpenVINO加速后处理时间在原处理时间的5-6倍
OpenVINO工具包配置TensorFlow模型(一)
Converting a TensorFlow* Model
安装面向 Linux* 的英特尔® OpenVINO™ 工具套件分发版
openvino加速bert
OpenVINO推理简介