保姆级教程:在Ubuntu 22.04上从零部署RKNN-Toolkit2(含YOLOv8模型转换与推理全流程)

张开发
2026/6/9 12:25:21 15 分钟阅读
保姆级教程:在Ubuntu 22.04上从零部署RKNN-Toolkit2(含YOLOv8模型转换与推理全流程)
保姆级教程在Ubuntu 22.04上从零部署RKNN-Toolkit2含YOLOv8模型转换与推理全流程RKNN-Toolkit2是瑞芯微Rockchip推出的神经网络推理工具链能够帮助开发者将训练好的模型转换为瑞芯微芯片专用的RKNN格式并在设备上高效运行。本教程将手把手带你完成从环境搭建到模型转换、推理测试的全过程特别针对Ubuntu 22.04系统中的常见问题进行详细解答。1. 环境准备与RKNN-Toolkit2安装在开始之前请确保你的Ubuntu 22.04系统已经安装了Python 3.10和pip3。如果尚未安装可以通过以下命令快速完成sudo apt update sudo apt install python3.10 python3-pip1.1 安装依赖项RKNN-Toolkit2依赖于多个Python包官方提供了requirements文件来简化安装过程。首先下载RKNN-Toolkit2的官方安装包解压后进入对应目录cd ~/Downloads/rknn-toolkit2-package pip3 install -r packages/requirements_cp310-1.6.0.txt注意如果遇到tensorboard安装失败可以尝试单独安装指定版本pip3 install tensorboard2.8.01.2 安装RKNN-Toolkit2主包完成依赖安装后使用以下命令安装RKNN-Toolkit2pip3 install packages/rknn_toolkit2-1.6.081f21f4d-cp310-cp310-linux_x86_64.whl常见问题解决如果遇到tf-estimator-nightly下载失败可以尝试使用国内镜像源pip3 install -r requirements_cp310-1.6.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple或者直接跳过该包通常不影响基本功能1.3 验证安装安装完成后可以通过Python交互环境验证是否安装成功python3 from rknn.api import RKNN print(RKNN.__version__)如果没有报错并显示版本号说明安装成功。2. YOLOv8模型转换实战2.1 准备ONNX模型首先需要将YOLOv8模型转换为ONNX格式。如果你已经有训练好的YOLOv8模型可以使用Ultralytics官方工具导出from ultralytics import YOLO model YOLO(yolov8n.pt) # 加载预训练或自定义模型 model.export(formatonnx) # 导出为ONNX格式提示确保使用的YOLOv8版本与RKNN-Toolkit2兼容较新版本可能需要更新RKNN-Toolkit22.2 ONNX转RKNN创建一个Python脚本convert.py内容如下from rknn.api import RKNN def convert_onnx_to_rknn(onnx_model_path, rknn_model_path, target_platformrk3588): # 创建RKNN对象 rknn RKNN() # 模型配置 print(-- Config model) rknn.config(mean_values[[0, 0, 0]], std_values[[255, 255, 255]], target_platformtarget_platform) # 加载ONNX模型 print(-- Loading model) ret rknn.load_onnx(modelonnx_model_path) if ret ! 0: print(Load model failed!) exit(ret) # 构建模型 print(-- Building model) ret rknn.build(do_quantizationTrue, dataset./dataset.txt) if ret ! 0: print(Build model failed!) exit(ret) # 导出RKNN模型 print(-- Export rknn model) ret rknn.export_rknn(rknn_model_path) if ret ! 0: print(Export rknn model failed!) exit(ret) # 释放资源 rknn.release() if __name__ __main__: convert_onnx_to_rknn(../model/yolov8n.onnx, ../model/yolov8n.rknn)关键参数说明mean_values和std_values根据模型训练时的预处理设置target_platform指定目标芯片型号如rk3588、rk3568等do_quantization是否进行量化通常建议开启以获得更好性能2.3 转换常见问题解决问题1算子不支持E Not support op type: xxx解决方案更新RKNN-Toolkit2到最新版本修改模型结构避免使用不支持的算子联系瑞芯微技术支持获取定制版工具链问题2量化失败E Catch exception when building model: Quantize failed!解决方案检查dataset.txt中的图片路径是否正确确保图片数量足够建议至少100张尝试关闭量化do_quantizationFalse3. PC端推理测试3.1 准备测试脚本创建一个简单的推理脚本inference.pyimport numpy as np import cv2 from rknn.api import RKNN def load_model(model_path): rknn RKNN() ret rknn.load_rknn(model_path) if ret ! 0: print(Load RKNN model failed) exit(ret) ret rknn.init_runtime() if ret ! 0: print(Init runtime failed) exit(ret) return rknn def preprocess_image(image_path, input_size(640, 640)): img cv2.imread(image_path) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img cv2.resize(img, input_size) img np.expand_dims(img, 0) img img.astype(np.float32) img / 255.0 return img def postprocess(outputs, image_path, conf_thresh0.5): # 这里简化为显示原始输出实际应根据YOLOv8的输出结构解析 print(Raw outputs:, outputs) img cv2.imread(image_path) cv2.imshow(Result, img) cv2.waitKey(0) cv2.destroyAllWindows() if __name__ __main__: # 初始化 rknn load_model(../model/yolov8n.rknn) # 预处理 img preprocess_image(../model/bus.jpg) # 推理 outputs rknn.inference(inputs[img]) # 后处理 postprocess(outputs, ../model/bus.jpg)3.2 运行测试执行推理脚本python3 inference.py预期结果终端会打印模型的原始输出会弹出窗口显示输入图片无标注框因为后处理部分需要根据YOLOv8结构实现3.3 性能优化技巧启用NPU加速rknn.init_runtime(targetrk3588, device_idnpu0)多线程推理rknn.init_runtime(async_modeTrue)输入输出优化使用固定尺寸输入减少不必要的内存拷贝4. 板端部署进阶指南4.1 交叉编译环境搭建对于需要在开发板上运行的应用需要搭建交叉编译环境下载工具链wget https://github.com/rockchip-linux/rknn-toolkit2/releases/download/v1.6.0/rknn-toolkit2-1.6.0-cross-compile.tar.gz tar -xzvf rknn-toolkit2-1.6.0-cross-compile.tar.gz设置环境变量export CC/path/to/cross-compiler/bin/aarch64-linux-gnu-gcc export CXX/path/to/cross-compiler/bin/aarch64-linux-gnu-g4.2 板端部署流程编译应用程序./build-linux.sh -t rk3568 -a aarch64 -d yolov8推送文件到开发板adb push install/rk3568linux/rknn_yolov8_demo/ /userdata/在开发板上运行adb shell cd /userdata/rknn_yolov8_demo export LD_LIBRARY_PATH./lib ./rknn_yolov8_demo model/yolov8.rknn model/bus.jpg4.3 常见板端问题问题1找不到设备error: no devices/emulators found解决方案检查USB连接确保adb服务已启动可能需要安装特定驱动问题2库文件缺失error while loading shared libraries: librknnrt.so: cannot open shared object file解决方案确保LD_LIBRARY_PATH设置正确检查库文件是否完整推送在实际项目中我发现RKNN-Toolkit2对模型版本的兼容性要求较高建议在模型训练阶段就考虑目标平台的限制。另外量化过程对最终精度影响很大需要仔细调整量化参数和校准数据集。

更多文章