技术笔记|边缘模型部署五大坑:ONNX、INT8、TensorRT、RKNN 与多路视频(含勘误和验收清单)

背景与来源

关键结论

模型部署 ≠ 格式转换。精度分阶段验证、性能分模块测量、兼容性在选型前确认。

五大坑 典型现象 可复用排查策略
ONNX 导出不一致 框偏移、置信度异常 统一预处理、输入形状、输出布局、NMS、坐标还原;固定样本逐层比较
INT8 量化掉点 mAP / 某类别召回明显下降 选择覆盖现场分布的校准集,按类别验证,敏感层混合精度,必要时 QAT
TensorRT 反而更慢 端到端耗时比 ONNX Runtime 高 核对硬件/版本/引擎构建参数,拆分 H2D、推理、D2H、后处理并做同步计时
跨 NPU 算子差异 转换失败、精度下降或 CPU fallback 检查 RKNN/BMRuntime 兼容矩阵、转换日志,先做代表性算子与模型小样测试
多路视频瓶颈 推理单帧很快,整体 FPS 很低 硬件解码 + 批处理 + 预处理/推理流水线 + 减少内存拷贝,测每路实际时延

经验一:ONNX 结果不一致,先分清楚比较层次

  1. 固定一张输入图与输入张量,统一 RGB/BGR、归一化、letterbox、padding、通道顺序和尺寸。
  2. 分别比较模型原始输出张量与最终框结果;YOLO 的 NMS 通常不是模型原始输出本身。
  3. 坐标还原使用真实缩放比例和 pad 偏移,确保映射回原图坐标系。
  4. 对齐 opset 和目标 ONNX Runtime 支持情况;先跑 FP32,确认正确后再开启 FP16/INT8。
  5. 不宜用“最大差异超过 0.05 必须重导出”当通用规则;应结合输出量纲、相对/绝对误差和最终 mAP、漏检率进行判断。

经验二:INT8 量化的校准集重在代表性

经验三:TensorRT 加速不保证端到端更快

经验四:RKNN/算能等 NPU 依赖具体工具链版本

经验五:多路视频要测完整流水线

典型管道:

RTSP/视频输入 → 硬件解码 → 颜色/尺寸处理 → Batch
             → TensorRT/RKNN 推理 → NMS/追踪/业务逻辑 → 输出

标准部署验收清单

与图像/PDF/Mask 项目的直接关联

预处理任何缩放、padding、旋转或 DPI 改变都可能引发检测坐标映射错误;分割/检测输出须明确原图坐标系与变换参数。像素尺寸一致也不代表 Mask 标签值完全一致。

关联:另一个 Issue 归档了用于保持像素坐标网格的 image_pdf_roundtrip_multi_dirs_p2i_mask_safe.py。

可参考的官方文档

备注:本文为工程笔记/验收规范,并非在这些设备上重新复测原文章中所有性能数字。