假设你有一个带自定义检测器和 TensorRT
.engine 的 Jetson 应用。这是大多数 Jetson 团队真正在乎的迁移案例:
最佳实践:恢复源模型并为 Qualcomm 重建部署工件,而不是把 TensorRT 引擎当成可移植的。在本文中,假设我们贯穿的案例研究是:一个用于 Jetson 智能摄像头应用中的自定义 YOLO 人脸检测器。在 Jetson 上,它可能通过 PyTorch、Ultralytics、TensorRT 或 DeepStream 运行。在 Dragonwing 上,我们将通过 ONNX、QAIRT/QNN、量化、上下文二进制文件和应用侧后处理来重建部署路径。 在开始之前:
迁移路径
一次实用的自定义模型迁移是一组关口,而不是一条魔法转换命令:步骤 0:盘点你拥有的东西
先把可移植的源工件与 Jetson 特定的部署工件分开。 有用的工件:步骤 1:恢复并导出源模型
对于 YOLO 检测器,从训练检查点开始:
最短原则:先让 PyTorch 和 ONNX Runtime 匹配。QNN 无法修复一个糟糕的 ONNX 导出。
步骤 2:先检查 AI Hub
在构建自定义转换流水线之前,检查你的模型架构在 AI Hub 中是否已存在。 对于 YOLO 类模型:步骤 3:把 ONNX 转换为 Qualcomm 工件
Qualcomm QAIRT/QNN 转换与trtexec 的形态不同。
Jetson 常常感觉像一步构建:
qnn-onnx-converter 后接 qnn-model-lib-generator。AI Hub 和某些 SDK 流程可能给你的是 DLC。请使用与你 SDK 版本匹配的流程,并用 --help 验证准确的标志。
本地 QNN 模型库流程:
步骤 4:处理不受支持的算子
这是 Qualcomm 上手差距可能变得可见的地方。不要把它藏在一条通用的”调试转换器”指令后面。记录算子、图中位置、受影响的后端和回退成本;然后按以下顺序处理: 如果转换器拒绝了某个算子,请按以下顺序:
对于
Z1_UNCLASSIFIED,最安全的路径是在升级之前保存日志、模型、输入、输出和工具版本。这为真正的修复保留了证据。
步骤 5:使用真实校准数据进行量化
如果你想要高效的 HTP/NPU 执行,量化是核心。 TensorRT 校准缓存在这里没有用。它是 TensorRT 特定的。为 Qualcomm 重新校准。 对于 YOLO 人脸检测器,使用来自目标环境的真实图像:qnn-onnx-converter 传递 --input_list calibration_input_list.txt 来完成,然后用 qnn-model-lib-generator 编译生成的图:
libQnnModelDlc.so 把该 DLC 送入上下文二进制步骤。
来自当前文档的重要陷阱:
如果准确率下降,请使用重试梯度而不是随机改标志:a8w16不是有效的 HTP 模式。请使用a8w8、a16w8、a16w16或fp16。
使用第一个通过你准确率 SLA 的策略。
步骤 6:构建上下文二进制文件
QNN 上下文二进制文件是这条路径的目标部署工件。 先确定目标 SoC:dsp_arch、VTCM 和其他后端选项;未经验证不要跨 SoC 复制调优值。在已发布的命令中,包含经过测试的 context_config.json 或指引读者到该开发板使用的确切 SDK 示例配置。
构建上下文二进制文件:
--model libQnnModelDlc.so --dlc_path out/best_a8w8.dlc,配以相同的后端和配置。
预期输出:
步骤 7:部署运行时包
一次部署不仅仅是模型文件。它还需要兼容的运行时库和配置。 至少期望一个像这样的包:scp。把 adb push 保留给 Android 目标。
步骤 8:在设备上运行推理
在设备上:backend_ext.json 最小化:
backend_extensions 旁边新造同级键。从匹配的 SDK 示例开始,并逐步添加设置。
步骤 9:对照正确的基线进行验证
始终对照 ONNX Runtime FP32 黄金基线,而不是 TensorRT FP16。 为什么?TensorRT 的输出已经包含了 NVIDIA 特定的图变换和精度行为。中立的参考是源模型的导出。 建议的验证关口:
一个小的比较辅助脚本:
步骤 10:把 YOLO 后处理移入应用
Jetson 的 Python 示例常常把 YOLO 解码和 NMS 隐藏在 Ultralytics 之后。一旦你导出和部署,你可能会收到原始张量。 让后处理显式化:步骤 11:只有在功能验证之后再做基准测试
先证明 HTP 工作:
捕获内存变化量而不是仅仅原始峰值:
YOLO 迁移的基准测试计划
在两台设备上使用相同的输入片段、预处理契约、后处理阈值和准确率集。在做出平台声明之前,请捕获这个矩阵:
如果你引用外部基准数字,请把它们标为源文档参考,并与你自己的设备结果分开。基准方法比借用的头条数字更重要。

