手把手教你用RK3588的NPU跑通第一个YOLOv5模型(附环境配置避坑点)

张开发
2026/4/7 23:32:45 15 分钟阅读

分享文章

手把手教你用RK3588的NPU跑通第一个YOLOv5模型(附环境配置避坑点)
从零部署YOLOv5到RK3588 NPU完整环境配置与模型转换实战拿到RK3588开发板的第一时间许多开发者最迫不及待想验证的就是其NPU的AI推理性能。作为瑞芯微第四代RKNPU架构的旗舰芯片RK3588的6TOPS算力在边缘计算领域确实令人期待。但在实际部署过程中从Python环境配置、模型转换到最终推理几乎每个环节都可能遇到意想不到的坑。本文将基于Ubuntu 20.04系统带你完整走通YOLOv5s模型从ONNX到RKNN的转换并在开发板上实现高效推理的全流程。1. 开发环境搭建与避坑指南RKNN-Toolkit2是瑞芯微官方提供的模型转换工具链支持将主流框架训练的模型转换为RK3588 NPU可执行的格式。但安装过程对系统环境和依赖版本有严格要求这也是最容易卡住新手的地方。1.1 系统基础环境准备首先确保你的Ubuntu系统已安装以下基础组件sudo apt update sudo apt install -y python3-opencv python3-dev python3-pip \ python3-setuptools git cmake g wget unzip特别注意Python版本官方推荐3.6-3.8实测3.9可能导致后续步骤失败OpenCV必须通过apt安装系统版本pip安装的版本可能缺少关键功能1.2 创建专用Python虚拟环境为避免与系统Python环境冲突建议使用conda创建独立环境conda create -n rknn python3.8 -y conda activate rknn安装关键依赖时需特别注意版本兼容性包名称推荐版本不兼容版本numpy1.19.5≥1.20.0onnx1.10.0≥1.11.0tensorflow2.5.0≥2.6.0torch1.8.0≥1.9.0提示如果已经安装了不兼容版本可使用pip install packageversion --force-reinstall降级1.3 RKNN-Toolkit2的定制化安装从官网下载对应版本的RKNN-Toolkit2 wheel包后执行pip install rknn_toolkit2-1.4.0-cp38-cp38-linux_x86_64.whl常见安装问题解决方案报错libGL.so.1 not foundsudo apt install libgl1-mesa-glx报错libgomp.so.1 not foundsudo apt install libgomp1报错librga.so not found需从SDK中复制到/usr/lib/目录验证安装是否成功from rknn.api import RKNN print(RKNN.__version__) # 应输出1.4.02. YOLOv5模型转换全流程解析2.1 准备原始模型文件从YOLOv5官方仓库获取模型git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt导出ONNX模型时需特别注意python export.py --weights yolov5s.pt --include onnx --imgsz 640 640关键参数说明--imgsz必须设置为640x640RKNN目前仅支持固定尺寸输入导出时添加--dynamic会导致转换失败确保onnxsim已安装用于优化模型结构2.2 ONNX到RKNN的转换技巧创建转换脚本convert.pyfrom rknn.api import RKNN rknn RKNN() rknn.config(target_platformrk3588, mean_values[[0, 0, 0]], std_values[[255, 255, 255]]) ret rknn.load_onnx(modelyolov5s.onnx) ret rknn.build(do_quantizationTrue, dataset./dataset.txt) ret rknn.export_rknn(./yolov5s.rknn)关键配置项解析quantization启用量化可显著提升NPU利用率但需要约100张校准图片dataset.txt格式每行包含图片路径和尺寸如./test.jpg 640 640mean/std值必须与训练时预处理参数一致常见错误处理遇到Unsupported ONNX op type: NonMaxSuppression时需在导出ONNX时添加--grid参数2.3 模型优化进阶参数在config中添加NPU专用优化选项rknn.config( ... optimization_level3, # 最高优化级别 npu_platformRK3588, quantized_dtypeasymmetric_quantized-8, quantized_algorithmnormal )不同优化级别对比级别优化内容转换耗时模型大小推理速度0无优化最短最大最慢1基础算子融合中等减小10%提升15%2中级图优化较长减小25%提升30%3高级量化硬件指令级优化最长减小40%提升50%3. RK3588开发板部署实战3.1 交叉编译环境配置在x86主机上安装工具链sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu编译OpenCV的C推理示例aarch64-linux-gnu-g demo.cpp -o demo \ -I/path/to/opencv/include \ -L/path/to/opencv/lib \ -lopencv_core -lopencv_imgproc -lopencv_highgui3.2 板端运行环境准备将以下文件拷贝到开发板转换好的yolov5s.rknn模型RKNN API的动态库librknnrt.so测试图片或视频流设置环境变量export LD_LIBRARY_PATH./lib:$LD_LIBRARY_PATH3.3 Python推理代码解析完整推理示例核心代码import cv2 from rknnlite.api import RKNNLite rknn RKNNLite() ret rknn.load_rknn(yolov5s.rknn) ret rknn.init_runtime(core_maskRKNNLite.NPU_CORE_0_1_2) img cv2.imread(test.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img cv2.resize(img, (640, 640)) outputs rknn.inference(inputs[img]) boxes, scores, classes post_process(outputs) # 后处理性能优化技巧使用core_mask参数启用多核NPU预处理使用OpenCV的GPU加速需编译带GPL支持的版本开启RKNN的异步推理模式处理视频流4. 性能调优与异常排查4.1 典型性能指标对比测试环境RK3588 2.4GHz, Ubuntu 20.04模型推理分辨率CPU耗时(ms)NPU耗时(ms)加速比YOLOv5s640x640120158xYOLOv5m640x640240288.6xYOLOv5l640x640410527.9x4.2 常见问题解决方案问题1推理结果异常如检测框错位检查模型输入尺寸是否与训练时一致验证预处理归一化参数是否匹配尝试关闭量化重新转换模型问题2NPU利用率低使用npu-top工具观察各核心负载检查是否启用了多核core_mask调整batch size通常4-8最佳问题3内存不足错误减小推理时的batch size关闭其他占用NPU的进程检查RKNN模型是否启用了内存优化选项4.3 高级调试技巧启用RKNN的详细日志rknn RKNN(verboseTrue)获取NPU硬件信息cat /sys/kernel/debug/rknpu/load实时监控NPU频率和温度watch -n 1 cat /sys/class/thermal/thermal_zone*/temp

更多文章