OpenVINO 2019 R2.0 Custom Layer Implementation for linux(1)

OpenVINO除了支持比较流行的Caffe等深度学习框架,还支持用户自定义网络Custom Layer层。

Custom Layer

OpenVINO的Custom Layer的实施包括Model Optimizer 和 Inference Engine两个部分

Model Optimizer的主要作用是在构建IR之前,会搜寻已知每层网络,该网络中包含输入模型拓扑,并优化该模型,最终生成IR。如果所设计的拓扑结构中包含的Layer不在已知的Layer中,该Layer将会被认为custom

Inference Engine从输入模型的IR文件中加载网络到每个具体执行的设备中。如果网络层中的拓扑结构没有在该设备的已知Layer中,Inference Engine将会报错,设备类型中支持的Layer,可以在 Support Devices

Custom Layer Extensions for the Model Optimizer

Model Optimizer的实施主要包括一下主要流程,其中Custom Layer Extractor and  Custom Layer Operation两个主要部分:

OpenVINO 2019 R2.0 Custom Layer Implementation for linux(1)

Model Optimizer首先从输入的模型中(包括模型拓扑结构及相应的参数,每层的输入和输出格式等)提取出所需要的信息,然后从每层的特点,内部链接,已经每层操作的数据了走向等各个方面进行优化,最后输出IR文件。

Custom Layer Extrator

  ---主要职责是定义custom layer操作 已经提取相应的参数。Layer参数被保存在每个实例中,在生成最终的IR之前需要被Layer使用。

Custom Layer Operation

---主要职责是明确cutom layer所支持的属性,从cutom layer每个实例参数中计算输出形状

Custom Layer Extensions for the Inference Engine

下图显示Inferer Enginer的cutom layer工作流程,其中Custom Layer CPU extension是在CPU上运行, Custom Layer GPU Extension是在GPU上运行:

OpenVINO 2019 R2.0 Custom Layer Implementation for linux(1)

每个设备都包括一个经过优化的lib,用来执行cutom layer的扩展操作。

Custom Layer CPU Extension:

---包括编译的共享库(.so or .dll),CPU执行cutom Layer所需要的

Custom Layer GPU Externsion:

---opencl kernl .cl文件,被GPU编译,以及一个.xml文件(稍后文章在介绍),该.xml为 GPU执行 cutom layer kernel所需要

Model Extension Generator

OpenVINO提供了一系列工具用于Custom Layer开发,其中Model Extension Gernator是重要的工具之一,主要在用在Model Optimize中,主要用于自动生成中间文件,是生成IR文件执行所必须的

工具目录在:

/opt/intel/openvino/deployment_tools/tools/extension_generator/extgen.py

运行该命令help,查看 该结果:

python3 /opt/intel/openvino/deployment_tools/tools/extension_generator/extgen.py new --help

运行结果:

usage: You can use any combination of the following arguments:

Arguments to configure extension generation in the interactive mode

optional arguments:
  -h, --help            show this help message and exit
  --mo-caffe-ext        generate a Model Optimizer Caffe* extractor
  --mo-mxnet-ext        generate a Model Optimizer MXNet* extractor
  --mo-tf-ext           generate a Model Optimizer TensorFlow* extractor
  --mo-op               generate a Model Optimizer operation
  --ie-cpu-ext          generate an Inference Engine CPU extension
  --ie-gpu-ext          generate an Inference Engine GPU extension
  --output_dir OUTPUT_DIR
                        set an output directory. If not specified, the current
                        directory is used by default.

在生成模型中一般需要指明生成哪个框架的扩展模型

Command-line Argument Description
--mo-caffe-ext 生成caffe的扩展模型,生成目录在/front/caffe
--mo-mxnet-ext 生成mxnet扩展模型,生成目录在/front/mxnet
 --mo-tf-ext  生成TensorFlow模型,生成目录在/front/tf
--mo-op 生成Model optimizer操作相关数据。生成目录在/ops
--ie-cpu-ext 生成在cpu执行的相关数据,生成目录在/cpu
--ie-gpu-ext  生成在GPU执行的相关数据,生成目录在/GPU
  --output_dir OUTPUT_DIR 设置输出目录

Extension Workflow

 生产Model Optimizer所需要的custom Layer Extension数据流程如下:

OpenVINO 2019 R2.0 Custom Layer Implementation for linux(1)

Step1 :使用Model Extension Generator生成所需要的Custom Layer临时文件

Step 2: 编辑上步骤生产的Custom Layer临时文件,以适应Cumstom Layer 扩展源码

Step 3: 明确Model Optimizer 或Inference Engine需要用到的Custom layer

 官网有提供custom layer例子下节再介绍

OpenVINO Custom Layer example

上一篇:c – 私人继承是否总是意味着“HAS-A”?


下一篇:Gradle笔记——Android开发常用的Gradle依赖