下载 PDF [PDF 728 KB]
修订历史
修订编号 | 描述 | 修订日期 |
---|---|---|
001 | 初始版本 | 2016 年 12 月 |
目录
1 简介
1.1 相关信息
1.2 安装英特尔® 深度学习 SDK 部署工具
1.3 规则和符号
1.4 英特尔® 深度学习 SDK 部署工具简介
2 使用英特尔® 深度学习 SDK 部署工具
2.1 典型使用模式
2.2 模型优化器概述
2.2.1 前提条件
2.2.2 运行模型优化器
2.2.3 已知问题和限制
2.3 界面引擎概述
2.3.1 创建示例应用
2.3.2 运行示例应用
3 端到端用户场景
3.1 利用面向深度神经网络的英特尔® 数学核心函数库插件进行图像推断
1 简介
“英特尔® 深度学习 SDK 部署工具用户指南”指导用户使用部署工具优化经过训练的深度学习模型,以及利用统一 API 将推断集成至应用逻辑。查看“端到端用户场景”章节,以查找更多使用示例。
本指南不提供关于英特尔® 深度学习 SDK 训练工具的信息。如欲获取此类信息,请查看“英特尔® 深度学习 SDK 训练工具用户指南”。
1.1 相关信息
如欲获取关于 SDK 的要求、新特性、已知问题和限制的更多信息,请参考版本说明文档。
1.2 安装英特尔® 深度学习 SDK 部署工具
如欲获取安装步骤,请参考“英特尔® 深度学习 SDK 部署工具安装指南”。
1.3 规则和符号
本文使用了如下规则。
SDK | 软件开发套件 |
API | 应用编程接口 |
IR | 深度学习网络的内部表达 |
CNN | 卷积神经网络 |
1.4 英特尔® 深度学习 SDK 部署工具简介
英特尔® 深度学习 SDK 部署工具是英特尔® 深度学习 SDK 的一种特性,英特尔® 深度学习 SDK 是一套免费工具,支持数据科学家、研究人员和软件开发人员开发、训练和部署深度学习解决方案。
借助英特尔® 深度学习 SDK 部署工具,您能够:
- 通过压缩模型和量化权重,优化经过训练的深度学习网络,该网络基于端点设备特点而定制。
- 提供统一 API,将推断集成至应用逻辑。
部署工具包括两个主要部件:
模型优化器
模型优化器是一款跨平台的命令行工具,支持:
- 以经过训练的网络作为输入,该网络包括特定的网络拓扑、参数和调整后权重及偏差。输入网络通过 Caffe* 框架生成。
- 执行网络层的水平和垂直融合。
- 裁剪网络中未使用的分支。
- 应用权重压缩方法。
- 以网络内部表达 (IR) 作为输出,生成描述整个模型的两个文件:
- 拓扑文件 – 一种描述网络拓扑的 .xml 文件。
- 训练数据文件 – 一种包含权重和偏差二进制数据的 .bin 文件。
- 以生成的 IR 作为推断引擎的输入。
界面引擎
界面引擎是一种运行时,能够:
- 以模型优化器生成的 IR 作为输入
- 优化目标硬件的推断执行
- 交付推断解决方案,节省嵌入式推断平台的空间。
- 支持与应用逻辑的无缝集成,通过在不同平台上使用相同的 API,简化了英特尔® 平台间的迁移。
2 使用英特尔® 深度学习 SDK 部署工具
2.1 典型使用模式
该方案展示了部署工具的典型使用模式,即对经过训练的深度神经网络模型执行推断。您可以通过英特尔® 深度学习 SDK 训练工具或 Caffe* 框架训练模型。
- 为模型优化器提供 Caffe* 格式的模型,根据特定网络拓扑、权重和偏差值以及其它参数生成模型的 IR。
- 利用目标环境中的界面引擎测试 IR 格式模型。部署工具包括界面引擎示例应用。如欲获取更多信息,请参阅“运行示例应用”部分。
- 将界面引擎集成至应用,在目标环境中部署模型。
2.2 模型优化器概述
模型优化器是一款跨平台的命令行工具,有助于训练和部署环境间的迁移。
模型优化器:
- 将经过训练的模型从特定于框架的格式转换为独立于框架的统一格式 (IR)。当前版本只支持转换 Caffe* 格式的模型。
- 通过去除冗余层和融合层来优化经过训练的模型,如批归一化和卷积层。
模型优化器以经过训练的 Caffe* 格式模型(网络拓扑为 .prototxt 文件,网络权重为 .cafemodel 文件)为输入,输出 IR 格式的模型(网络拓扑为 .xml 文件,网络权重为二进制 .bin 文件):
英特尔® 深度学习 SDK 训练工具的分发版也包含模型优化器。
2.2.1 前提条件
- 模型优化器以一系列二进制文件(一个可执行二进制文件和一系列共享对象)的形式分发,仅支持64 位 Ubuntu* 操作系统。通过写入许可设置,可以将这些文件置于任何目录。
- 将安装 Caffe* 框架和全部先决组件。必须配备 libcaffe.so 共享对象。
- 模型优化器兼容 Berkley* 社区版 Caffe* 和 Caffe 的英特尔® 分发版。可能不兼容其他版本的 Caffe*。
2.2.2 运行模型优化器
执行以下步骤,运行模型优化器。
- 将 libCaffe.so 共享对象的路径,和模型优化器可执行二进制文件的路径添加至
LD_LIBRARY_PATH。
- 将当前目录更改为模型优化器 bin 目录。例如:
cd /opt/intel/deep_learning_sdk_2016.1.0.<build_number>/deployment_tools/model_optimizer
- 利用所需的命令行参数运行
./ModelOptimizer
命令: - "-w" - 包含模型权重的二进制文件路径(.caffemodel 文件)
- "-i" - 生成 IR
- "-p" - 所需的精度(截至目前,必须为 FP32,因为 MKLD-NN 插件目前只支持 FP32)
- "-d"– 包含网络拓扑的文件路径(.prototxt 文件)
- “-b” – 批处理尺寸,是一项可选参数,在默认情况下与 CPU 内核数量相同
- "-ms" - 每个通道中的均值图像值
- “-mf” – 包含 binaryproto 格式均值图像的文件
- "-f" - 网络归一化因子(截至目前,必须设置为 1,对应 FP32 精度)。
某些模型需要在训练和部署时从每个图像中减去图像均值。存在两个减法选项:
-ms
- 减去每个通道的均值–mf
- 减去整个均值图像。
均值图像文件应为 binaryproto 格式。对于 ilsvrc12 数据集,可以通过 get_ilsvrc_aux.sh
脚本从 Caffe* 下载均值图像文件:
./data/ilsvrc12/get_ilsvrc_aux.sh
模型优化器创建了一个文本 .xml 文件和一个二进制 .bin 文件,在当前目录中的 Artifacts
目录下生成一个 IR 格式模型。
2.2.3 已知问题和限制
最新版模型优化器存在以下局限性:
- 只面向 64 位 Ubuntu* 操作系统分发。
- 只能处理 Caffe* 格式的模型。
- 可以处理常见的图像分类网络模型,包括 AlexNet、GoogleNet、VGG-16、LeNet 和 ResNet-152,还能处理完全卷积网络模型,如用于图像分割的 FCN8。不支持定制网络。
2.3 界面引擎概述
界面引擎通过统一 API 将推断集成至应用逻辑,有助于深度学习解决方案的部署。
最新版界面引擎支持对常见的图像分类网络(包括 LeNet、AlexNet、GoogleNet、VGG-16、VGG-19 和 ResNet-152)进行推断,也能推断完全卷积网络,如用于图像分割的 FCN8。
界面引擎安装包包括头文件、库和两个示例控制台应用:
- 图像分类示例应用 - 该应用展示了如何使用界面引擎推断常见的图像分类网络,如 AlexNet 和 GoogleNet。
- 图像分割示例应用 - 该应用展示了如何使用界面引擎推断常见的图像分割网络,如 FCN8。
2.3.1 创建示例应用
推荐以下构建环境:
- Ubuntu* x86_64 14.04 或更高版本、GCC* 4.8 或更高版本
- CMake* 2.8 或更高版本。
您可以利用 samples 目录中的 CMake文件构建示例应用。
在 samples目录中创建一个用于构建示例应用的新目录:
$ mkdir build
$ cd build
运行 CMake,并生成 Make文件:
$ cmake <path_to_samples_directory>
运行 Make,并创建应用:
$ make
2.3.2 运行示例应用
运行图像分类示例应用
利用 -h 选项运行应用,将显示以下使用提示:
$ ./classification_sample --help
classification_sample [OPTION]
Options:
-h, --help Print a usage message.
-i "<path1>""<path2>" ..., --images "<path1>""<path2>" ...
Path to a folder with images or path to an image files: a .ubyte file for LeNet and a .bmp file for the other networks.
-m "<path>", --model "<path>" Path to an .xml file with a trained model.
-p "<name>", --plugin "<name>" Plugin name.For example MKLDNNPlugin.
-pp "<path>", --plugin_path Path to a plugin folder.
-ni N, --niter N The number of iterations to do inference; 1 by default.
-l "<path>", --label "<path>" Path to a file with labels for a model.
-nt N, --ntop N Number of top results to output; 10 by default.
-pc, --performance_counts Enables printing of performance counts.
以下示例命令显示了如何通过图像分类示例应用,利用经过训练的 AlexNet 网络和面向深度神经网络的英特尔® 数学核心函数库 (Intel® MKLD-NN) 插件对图像进行推断:
$ ./classification_sample -i <path_to_image>/cat.bmp -m <path_to_model>/alexnet.xml -p MKLDNNPlugin -pp /path/to/plugins/directory
默认情况下,应用输出前 10 个推断结果。将 --ntop or -nt 选项添加至之前的命令,以修改输出的推断结果数量。例如,您可以通过以下命令输出前 5 个结果:
$ ./classification_sample -i <path_to_image>/cat.bmp -m <path_to_model>/alexnet.xml -p MKLDNNPlugin -nt 5 -pp /path/to/plugins/directory
运行图像分割示例应用
利用the -h 选项运行该应用,将显示以下使用信息:
$ ./segmentation_sample -h
segmentation_sample [OPTION]
Options:
-h Print a usage message.
-i "" Path to a .bmp image.
-m "" Path to an .xml file with a trained model.
-p "" Plugin name.For example MKLDNNPlugin.
您可以通过以下命令,利用经过训练的 FCN8 网络对图像进行推断:
$ ./segmentation_sample -i /inputImage.bmp -m /fcn8.xml -p MKLDNNPlugin -pp /path/to/plugins/directory
应用输出一张分割图像 (out.bmp)。
3 端到端用户场景
3.1 利用面向深度神经网络的英特尔® 数学核心函数库插件
对图像进行推断。按照上文的描述配置模型优化器,并转至二进制文件夹:
cd <path_to_DLSDK>/deployment_tools/model_optimizer
将 libCaffe.so 共享对象和模型优化器文件夹路径添加至 LD_LIBRARY_PATH 变量:
export LD_LIBRARY_PATH=${CAFFE_ROOT}/build/lib:
<path_to_DLSDK>
/deployment_tools/model_optimizer
- 利用“运行模型优化器”部分列出的命令行参数,配置面向 MKL-DNN 插件的模型优化器。
运行以下命令:
./ModelOptimizer -w <path_to_network.caffemodel> -i -p FP32 -d
<path_to_deploy.prototxt> -f 1 -b 1 -ms
"104.00698793,116.66876762,122.67891434"
成功启动命令后,输出以 IR 形式显示的模型,位于:
<path_to_DLSDK>/deployment_tools/model_optimizer/bin/Artifacts/<NetworkName>/
- 按照“创建示例应用”部分的描述,编译界面引擎分类示例应用。
转至编译的二进制文件:
cd <path_to_DLSDK>/deployment_tools/inference_engine/bin/intel64/
利用经过训练和优化的模型推断图像:
$ ./classification_sample -i <path_to_image>/cat.bmp -m
<path_to_model>/alexnet.xml -p MKLDNNPlugin -pp /path/to/plugins/directory