使用 UDO 准备模型
本节讨论使用用户定义操作(UDO)转换框架模型所需的步骤。
将具有 UDO 的网络模型转换为 DLC
snpe-<framework>-to-dlc工具通过接受带有选项 –udo_config_paths 的配置文件来支持 UDO 功能。有关输入 UDO 配置文件的规范,请参阅定义 UDO。目前,TensorFlow 和 ONNX 模型支持 UDO 功能。
注意: UDO 配置文件中的任何修改都应重新生成 DLC 以反映更改。
将带有 UDO 的 Tensorflow 模型转换为 DLC
以下语法展示了使用 UDO 转换 TensorFlow 模型的方式:
snpe-tensorflow-to-dlc -i <input-tensorflow-model>
-d <input-name> <input-dim>
--out_node <output-node-name>
--udo_config_paths <input-model.json>
-o <output-model.dlc>
其中选项 –udo_config_paths 允许用户指定转换中要使用的 UDO 配置文件。
有关更多详细信息,请参阅snpe-tensorflow-to-dlc和 TensorFlow 模型转换。
将带有 UDO 的 ONNX 模型转换为 DLC
以下语法展示了使用 UDO 转换 ONNX 模型的方式:
snpe-onnx-to-dlc -i <input-onnx-model>
--udo_config_paths <input-model.json>
-o <output-model.dlc>
其中选项 –udo_config_paths 允许用户指定转换中要使用的 UDO 配置文件。
有关更多详细信息,请参阅snpe-onnx-to-dlc和 ONNX 模型转换。
使用 UDO 量化 DLC
此外,用户可能希望量化转换后的包含 UDO 的模型,以便在定点运行时运行。高通神经处理 SDK 提供了 snpe-dlc-quantize工具来实现此目的。这是一个可在主机 x86 平台上运行的离线工具。由于它使用代表性数据集进行推理,以确定网络中所有层(包括 UDO)的量化范围,因此用户需要向该工具提供包含 CPU 参考实现的 UDO 包。有关为 x86 平台创建此类包的更多说明,请参阅创建 UDO 包和编译 UDO 包。
以下语法展示了使用 snpe-dlc-quantize 对带有 UDO 的 DLC 进行量化的方式:
snpe-dlc-quantize --input_dlc <model.dlc>
--input_list <input-list.txt>
--udo_package_path <udo-registration-lib>
--output_dlc <quantized-model.dlc>
其中,选项 –udo_package_path 允许用户指定 UDO 注册库的绝对路径。LD_LIBRARY_PATH 也必须更新,以包含在x86 主机编译期间软件包编译生成的特定于运行时的工件。
注意:如果您的 UDO 包含静态输入或参数,则需要在 CPU 参考实现中同时处理浮点和定点数据类型。有关详情,请参阅提供的示例 $SNPE_ROOT/examples/SNPE/NativeCpp/UdoExample/Conv2D/src/CPU/Conv.cpp。
使用 UDO 运行模型
使用 UDO 执行神经网络
SNPE_API
int Snpe_Util_AddOpPackage(const char* regLibraryPath );
请注意,使用上述 API 向 高通 Neural Processing SDK 明确提供了注册库的绝对路径,而实现库可以存在于系统上应由库加载器发现的任何位置(在 Unix 系统上使用 LD_LIBRARY_PATH)。
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 键值对的形式提供。要在签名进程域上启用模型执行,只需在命令行中添加以下内容:
--use_dsp --platform_options unsignedPD:OFF
示例用法如下:
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:OFF
注意: snpe-net-run 需要系统库加载器能够发现实现库。