0
点赞
收藏
分享

微信扫一扫

16 OPENVINO intermediate course8 初识推理引擎中的API

初识推理引擎中的API

1 说明

本实验所有代码均在ubuntu 18.04 + OpenVINO 2020R3.LTS installed 环境下验证通过,若需要代码移植,请务必检查环境配置是否与本实验环境相同。

2 实验目的

1、认识推理引擎的优化。
2、认识推理引擎API和其中的IECore类。
3、掌握使用推理引擎API运行分类示例代码的方法。

3 任务内容

1、学习推理引擎的优化。
2、学习推理引擎API和其中的IECore类。
3、使用推理引擎API运行分类示例代码。

4 实验原理

一、推理引擎优化

上一个实验介绍并演示了如何从支持的深度学习训练软件套件中生成IR文件,本实验介绍推理引擎Inference Engine以及如何使用这些模型对应的IR文件在各种英特尔设备上实施推理并实现最佳的性能。转换好的IR文件与硬件关联不大,没有针对特定硬件进行优化。相同模型可以在英特尔CPU、英特尔集成显卡Movidius或fpga上运行。

在这里插入图片描述

推理引擎的第二级优化是针对特定执行设备对模型的优化。这些设备具有完全不同的指令集,有的还有不同的内存布局等,总之这些设备有着不同的设置导致原生环境配置复杂。推理引擎Inference Engine可以使用灵活的插件架构去执行环境配置,每个设备或设备系列都有自己的插件实现方案,例如CPU插件负责在所有英特尔CPU上执行Influence Engine,GPU插件用于英特尔集成显卡。每个插件都有自己的实现库,例如CPU插件使用MKL-DNN库,MKL-DNN库会针对所有英特尔CPU对应的内核层或函数实施神经网络的优化。如果该库不支持现有的层,则可以构建一个自定义层,并将其注册到推理引擎,这部分完整的参考资料可以在OpenVINO文档中查找。

在这里插入图片描述

在推理之前,推理引擎Influence Engine把网络映射到正确的库单元的同时,网络发送至硬件插件,多个级别的硬件特定优化完成,具体如下。

1、网络级优化:一些操作不映射到内核,而是映射到他们之间的关系。例如数据的重组,这可以提高性能,并在推理过程中最大程度的减少数据转换时间。

2、内存级优化:在内存中按照特定设备的要求重组数据。

3、内核级优化:推理引擎将选择最适合架构指令集的正确实施方案,如果CPU支持AVX-512,实施方案将利用该指令集,如果CPU仅支持MMX,MMX将用于实施方案,以此类推。
此外还有两个特殊插件HETERO和MULTI,通过这两个特殊插件可以访问所有设备,稍后将介绍并演示这些插件。在此之前先介绍一下推理引擎API。

二、推理引擎内部API

推理引擎API是在所有英特尔架构的硬件中实施推理的一套简单而且统一的API。特殊插件架构支持优化推理性能和内存使用,该API非常简单和灵活。
推理引擎主要使用C++实施,相比使用同样提供的Python封装接口要快,很多本实验介绍使用C、C++和Python编写的代码示例,Influence Engine可以在各种操作系统(Ubuntu、CentOS、MacOS、Raspbian、Win10)上运行,且有开源版本,可以针对自己喜欢的操作系统对其进行编译,请注意开源代码版本可能未包含所有插件和所有组件。本课程使用英特尔OpenVINO分发版,差异不会很大。

可以在链接: link. 中找到完整的文档,并查看API中的所有类描述。
在这里插入图片描述

下面先介绍使用IECore类定义一个推理引擎对象,这是推理引擎的主要类,然后使用InferRequest进行推理。

三、IECore类

IECore类运行在各种不同插件的上层,并向开发者提供相同的功能。创建一个Core类的对象时,可以不指定任何特定的设备,只有加载网络时指定设备,实际运行才会使用该设备。因此无需专门注册特定插件,Core类会在内部完成这一操作,例如将my_ie定义为IECore对象,然后使用read_network将模型加载到对象中。
在这里插入图片描述

现在使用该类的另一个函数load_network将网络加载到特定的插件中,例如在这里加载到CPU插件中。
在这里插入图片描述

现在将使用推理请求类执行推理,同时为推理指定请求id,这对于异步推理请求至关重要。
在这里插入图片描述

5 操作步骤

步骤1
登录实验平台,进入实验环境并打开命令行执行终端。

步骤2
执行命令su,输入root用户密码root@openlab,切换到root目录。

步骤3
执行命令cd ~/51openlab/04/exercise-1/,进入exercise-1目录。

步骤4
执行ll命令查看当前目录下的文件。
在这里插入图片描述

步骤5
执行如下命令输出实验路径。

# export lab_dir=~/51openlab/04/exercise-1/

步骤6
执行如下命令,初始化OpenVINO环境。

# source /opt/intel/openvino/bin/setupvars.sh

在这里插入图片描述

步骤7
执行命令vi hello_classification.py编辑文件hello_classification.py,在有“your code here”标识的地方添加代码。
(1)读取IR文件进入到net对象:
在这里插入图片描述

说明:你需要使用推理API来完成这个脚本文件,IR将模型读入IECore对象,在api文档中查找IECore中的read_network函数,将使用示例复制并修改到代码里,用来读取IR文件。

(2)将读取的网络加载到CPU插件中:
在这里插入图片描述

说明:在api文档中查找IECore中的load_network函数,参考示例复制并修改到代码里。

(3)得到推理结果的输出:
在这里插入图片描述

说明:当推理结束后,我们将推理结果存入out变量中,在文档中查找InferRequest类的用法,实际上这就是你进行推理的过程,只需要在exec_net对象中确定输入的blob和influence request便可以进行推理。

步骤8
执行命令sudo eog image1.jpg查看实验图片。
在这里插入图片描述

步骤9
执行命令python3 hello_classification.py运行实验分类脚本。
在这里插入图片描述

可以看到把cheeseburger分到了更合适的类别。

本实验介绍了如何使用OpenVINO Influence Engine API来进行推理,在第二项练习中将介绍API的更多功能,先调用API来打印系统中的所有可用设备,然后使用API调用性能计数器来为squeezenet1.1神经网络打印性能数据。

6 实际操作

在这里插入图片描述
编写python代码时注意一点很容易很容易报错

举报

相关推荐

0 条评论