骁龙神经处理引擎SDK参考指南(8)
4.4.7使用 UDO 运行模型
使用 UDO 执行神经网络
本节介绍如何向 SNPE 提供表示 UDO 的库集,以执行包含 UDO 的网络模型。执行需要使用 SNPE 转换器工具将包含 UDO 的模型转换为 DLC 格式,如使用UDO 准备模型中所述。执行还需要创建与 UDO API 兼容的注册和实现库,如UDO 概述中所述。
UDO 可以在流程中注册,并由在流程的整个生命周期中使用它们的任何 SNPE 实例使用。它们使用以下 API向zdl::SNPE::SNPEFactory注册:
bool
SNPEFactory::addOpPackage(const std::string& regLibraryPath);
请注意,注册库的绝对路径是使用上述 API 明确提供给 SNPE 的,而实现库可以存在于系统上任何应该被库加载器发现的地方(在 Unix 系统上使用 LD_LIBRARY_PATH)。
除了本机 C++ API 之外,SNPE SDK 还提供了一个用于 Android 应用程序的 Java API。API 是 SNPE 类的一部分:
public static boolean
addOpPackage(final Application application, String regLibraryPath)
使用基于 UDO 的 DLC 运行 snpe-net-run 命令行工具
本节概述了snpe-net-run命令行工具与基于 UDO 的 DLC的使用。snpe-net-run的使用与其典型用法基本没有变化。snpe-net-run 工具通过命令行选项 --udo_package_path 注册一个 UDO 注册库,它接受注册库的绝对路径。
示例用法如下:
snpe-net-run --container <path_to_dlc>
--input_list <path_to_input_list>
--udo_package_path <path_to_registration_lib>
在未签名的进程域上运行基于 UDO 的 DLC
要在未签名的进程域上运行,与上述使用snpe-net-run命令行工具的部分相同的原则适用于一些扩展。首先,未签名的过程域仅适用于 DSP 目标。其次,对于要创建的未签名进程域,必须将参数传递到命令行以请求它。这以 platform_options key:value 参数对的形式出现。要在未签名的进程域上启用模型执行,只需将以下内容添加到命令行:
--use_dsp
--platform_options unsignedPD:ON
示例用法如下:
snpe-net-run --container <path_to_dlc>
--input_list <path_to_input_list>
--udo_package_path <path_to_registration_lib>
--use_dsp
--platform_options unsignedPD:ON
注意: snpe-net-run 要求实现库可以被系统库加载器发
4.5 模型转换
4.5.1 Caffe和Caffe2模型转换
机器学习框架具有用于存储神经网络模型的特定格式。SNPE 通过将它们转换为框架中立的深度学习容器 (DLC)格式来支持这些不同的模型。DLC 文件由 SNPE 运行时用于执行神经网络。
将模型从 Caffe 转换为 DLC
经过训练的 Caffe 模型包括:
- 带有网络定义的 Caffe prototxt 文件 (net_definition.prototxt)
- 具有权重和偏差的 Caffe 二进制原型文件 (trained_model.caffemodel)
snpe -caffe-to-dlc工具将 Caffe 模型转换为等效的 SNPE DLC 文件。以下命令会将 AlexNet Caffe 模型转换为 SNPE DLC 文件。
snpe-caffe-to-dlc --input_network $SNPE_ROOT/models/alexnet/caffe/deploy.prototxt
--caffe_bin $SNPE_ROOT/models/alexnet/caffe/bvlc_alexnet.caffemodel
--output_path alexnet.dlc
可以按照获取AlexNet教程获取 AlexNet 模型文件。
将模型从 Caffe2 转换为 DLC
经过训练的 Caffe2 模型包括:
- 具有网络定义的二进制 protobuf 文件
- 具有权重和偏差的二进制 protobuf 文件
snpe-caffe2-to-dlc 工具将 Caffe2 模型转换为等效的 SNPE DLC 文件。以下命令会将 AlexNet Caffe2 模型转换为 SNPE DLC 文件。
snpe-caffe2-to-dlc --predict_net predict_net.pb
--exec_net exec_net.pb
--input_dim data 1,3,227,227
--dlc alexnet.dlc
AlexNet 模型文件可以从 Github 上的 Caffe2 项目中获取。