RKNN Toolkit 生产落地案例
五、生产落地案例
案例一:工地安全帽检测,RK3588 边缘盒子
背景:客户要在工地部署一台边缘盒子,接入若干路 RTSP 摄像头,识别未戴安全帽的人员并上报。原方案在服务器上跑,带宽与成本都不可接受。
怎么做:训练侧用 YOLO 系列小模型导出 ONNX;在 Ubuntu x86 机器上用 RKNN-Toolkit2 做 INT8 量化;量化数据集从现场摄像头抽帧,覆盖白天、夜间、逆光等分布。
关键配置:target_platform 设为 rk3588,量化方法用 per-channel,先跑一版不量化(FP16)作为精度基线,再对比 INT8 的 mAP 掉点;板端用 core_mask 把多路视频分核绑定。
效果:单台盒子承载多路分析,端到端延迟控制在可接受范围,具体路数与延迟随分辨率、模型大小变化很大,需以实测为准。
踩的坑与解决:
- 掉点严重:根因是量化数据集全是白天画面,夜间分布缺失。补夜间抽帧后精度恢复。教训:量化数据集要覆盖真实场景分布,而不是随便拿几百张干净图。
- 板端结果与 PC 不一致:根因是板端预处理用了不同的归一化系数。解决方式是把预处理参数固化在代码常量里,转换与推理共用同一份配置。
- 跑久了掉帧:根因是散热不足导致降频。加散热片、限制并发路数后稳定。
案例二:RK3576 上做工业质检多路推理
背景:产线要做表面缺陷检测,要求本地推理、不上云,单机跑多路相机。
怎么做:先用 optimization_level 较低的一档排查是否有算子融合引发的精度异常,再逐级提升;对掉点敏感的几个层改用混合量化。
关键配置:混合量化时只保留少数层为高精度,其余仍走 INT8,兼顾速度与精度;板端做零拷贝,把相机采集缓冲直接与输入张量内存对齐,省掉一次拷贝。
踩的坑:初始版本用 per-tensor 量化,某些通道动态范围差异大,掉点明显;改为 per-channel 后恢复。另外,相机输出的颜色顺序与训练时不一致(BGR 与 RGB 混用)导致全错,这类问题一律先用单张已知图片做端到端比对。

