pt / onnx 转 RKNN 上板:一份可照做的检查清单
转换成功不等于部署成功。这篇给出从 PyTorch / ONNX 到 RKNN 的完整检查顺序:模型结构选择、INT8 量化的校准集准备、逐层误差定位,以及上板后精度对不上的常见原因,适用于 RK3562 到 RK3588。
「转出来了,但板子上结果不对」是这条链路最常见的失败。多数问题不在转换器,而在转换前后的几个决定:输入布局、量化方式、校准数据。
一、先确认模型结构能不能转
pt2rknn 支持 YOLOv8 全系列等 6 种网络类型,覆盖 RK3562 到 RK3588。碰到不支持的算子,通常的解法是改模型而不是改工具:把自定义算子换成等价的标准算子,或者拆成两段推理。
二、量化方式选哪个
- FP16:精度几乎不掉,体积减半,适合先跑通链路。
- INT8:速度和内存收益最大,但需要校准集。
建议永远先跑一遍 FP16,把结果当基准。后面量化出问题,至少能区分是「量化导致的」还是「部署代码导致的」。
三、校准集怎么准备
INT8 量化的精度取决于校准数据是否代表实际输入分布。几条经验:
- 100–300 张即可,重点是覆盖不同光照、不同场景;
- 必须是真实推理时会出现的图像,不要用训练集里的极端样本充数;
- 预处理要和推理时完全一致(归一化方式、通道顺序)。
四、用逐层误差定位问题
转换后精度下降,先看逐层误差,而不是整体精度。误差从某一层突然跳起来,通常指向该层的量化敏感性问题——常见做法是把这一层留在 FP16,其余走 INT8 的混合量化。
五、上板后还对不上
按这个顺序排查:
- 预处理是否一致(BGR / RGB、归一化、是否 letterbox);
- 输出解码方式是否与导出时一致;
- 输入尺寸是否与模型定义匹配;
- 后处理阈值是否与 PC 端对比时相同。
九成问题落在 1 和 2。
六、为什么用 Web 界面
这套流程要反复试:换量化方式、换校准集、换芯片。Web 界面省掉的是每次改脚本的时间,转换历史也能留着对比——下次遇到同类模型,直接照上次的参数来。
工具地址:pt2rknn 产品页。