由浅入深了解高通平台UDO(4):使用UDO

使用 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 执行神经网络

本节介绍如何向高通神经处理 SDK 提供代表 UDO 的库集,以执行包含 UDO 的网络模型。执行过程需要使用 高通神经处理 SDK 转换工具将包含 UDO 的模型转换为 DLC 格式,具体说明请参阅“准备使用 UDO 的模型”。此外,执行过程还需要创建与 UDO API 兼容的注册和实现库,具体说明请参阅“UDO 概述”
UDO 可以注册到进程中,并可供任何使用它们的高通神经处理 SDK 实例在进程的整个生命周期内使用。使用 Snpe_Util_AddOpPackage() API 将它们注册到高通神经处理 SDK:
SNPE_API
int Snpe_Util_AddOpPackage(const char* regLibraryPath );

请注意,使用上述 API 向 高通 Neural Processing SDK 明确提供了注册库的绝对路径,而实现库可以存在于系统上应由库加载器发现的任何位置(在 Unix 系统上使用 LD_LIBRARY_PATH)。

除了原生的 C API 之外,高通神经处理 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 键值对的形式提供。要在签名进程域上启用模型执行,只需在命令行中添加以下内容:

--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 需要系统库加载器能够发现实现库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值