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两个主要部分:
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上运行:
每个设备都包括一个经过优化的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数据流程如下:
Step1 :使用Model Extension Generator生成所需要的Custom Layer临时文件
Step 2: 编辑上步骤生产的Custom Layer临时文件,以适应Cumstom Layer 扩展源码
Step 3: 明确Model Optimizer 或Inference Engine需要用到的Custom layer
官网有提供custom layer例子下节再介绍