骁龙神经处理引擎SDK参考指南(7)
4.4.6使用 UDO 准备模型
本节讨论使用用户定义操作 (UDO) 转换框架模型所需的步骤。
将带有 UDO 的网络模型转换为 DLC
snpe- -to-dlc工具通过接受带有选项 --udo_config_paths 的配置文件来支持 UDO 功能。有关输入 UDO 配置文件规范,请参阅定义 UDO。
目前,TensorFlow、Caffe 和 ONNX 模型支持 UDO 功能。它也受以 ONNX 格式表示的使用 Caffe2 训练的模型的支持。
注意: 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 配置文件。
使用 UDO 量化 DLC
此外,用户可能希望量化具有 UDO 的转换模型以在定点运行时上运行。SNPE 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 注册库的绝对路径。
注意:如果您的 UDO 包含静态输入或参数,您需要在 CPU 参考实现中处理浮点和定点数据类型。有关详细信息,请参阅提供的示例 $SNPE_ROOT/examples/NativeCpp/UdoExample/Conv2D/src/CPU/ConvolutionImplLibCpu.cpp。