RK3588 与 Jetson NX 双端部署:TensorRT、RKNN 与 YUV 接口

2023 年 8 月 1 日 星期二
/ , , , , , ,
3
摘要
TensorRT 和 RKNN 两条部署路线的实战对比。涵盖模型转换、输出层适配、anchor 同步、INT8 量化校准和统一 YUV 接口设计。

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

RK3588 与 Jetson NX 双端部署:TensorRT、RKNN 与 YUV 接口

编写时间:2023-08

这个部署工作有两条线:Jetson NX 上走 TensorRT,RK3588 上走 RKNN。两边的共同目标是一样的:输入 YUV 帧,输出 ROI 框。但模型转换、后处理、量化和运行时完全不同。

双端差异

端侧推理框架模型链路关键问题
Jetson NXTensorRTPyTorch/ONNX -> Engine插件、显存、C++ 接口
RK3588RKNNPyTorch -> ONNX -> RKNN输出层、anchor、量化、RGA

Jetson NX 侧

Jetson 侧重点在 TensorRT C++ 部署。输入分辨率不能裁剪信息,所以要支持多种尺寸。初始化阶段遇到过内存占用过高的问题,换 yolov5s/m 之后差异并不大,说明内存压力不一定只来自模型参数,也可能来自 engine、plugin、中间 tensor 和预处理 buffer。

trtexec --loadEngine=<model.engine> --plugins=<yolo_plugin.so>

命令本身可以保留,路径和设备信息不保留。

RK3588 侧

RKNN 的工具链要分清:完整 toolkit 用于 x86 上模型转换,lite 侧主要在板端推理。不能指望板端完成所有转换。

关键问题主要是:

问题处理方式
YOLO 输出 concat 不适配拆成三个输出,CPU 后处理
anchor 不一致导出时保存 anchor,并同步修改后处理
demo 后处理旧对齐 yolov5 v6.2 或用 onnx 修改工具
量化不稳准备 200+ 张代表性校准图
首层输出不一致打印第一层输出,对比 RKNN 与 ONNXRuntime

统一接口

部署目标不是跑 demo,而是把推理封成业务接口:

INT8 与 FP16

边缘端部署一定会遇到精度和速度的取舍。FP16 通常更稳,INT8 更省资源但依赖校准集质量。对检测任务来说,量化后不能只看总体 mAP,还要看小目标、特殊字体、边缘裁切和低对比度区域的漏检误检。

核心经验是:同一个模型在不同端侧不是“转换一下就完了”。模型输出、预处理格式、后处理 anchor、量化校准、内存生命周期,每一项都会影响最后的可用性。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...