瑞芯微RK3576原厂RKNN模型环境部署与功能验证技巧(下)

科创之家 2026-03-14 7620人围观

本文介绍瑞芯微原厂RKNN端侧模型的测试验证方法,而关于开发环境搭建可以查看先前文章

https://www.elecfans.com/d/7651862.html。基于触觉智能RK3576开发板Purple Pi OH2演示。

RKNN

RKNN(Rockchip Neural Network) 是瑞芯微专为自家 NPU (神经网络处理单元) 开发的端侧神经网络计算框架,提供完整的 "模型转换 - 部署 - 推理" 解决方案。RK官方提供了RKNN软件栈可以帮助用户快速地将AI模型部署到Rockchip芯片,整体的框架如下。

wKgZO2mKxn2AS_YjAACrNKk394491.jpeg

RKNN-Toolkit2是为用户提供在计算机上进行模型转换、推理和性能评估的开发套件,RKNN-Toolkit2的主要框图如下。为了使用RKNPU,用户需要首先在计算机上运行RKNN-Toolkit2工具,将训练好的模型转换为RKNN格式模型,之后使用RKNN C API或Python API在开发板上进行部署。该工具提供的Python接口可以便捷地完成模型转换、量化、模型推理、性能和内存评估、量化精度分析、模型加密等功能。

RKNN Runtime负责加载RKNN模型,并调用NPU驱动实现在NPU上推理RKNN模型。推理RKNN模型时,包括原始数据输入预处理、NPU运行模型、输出后处理三项流程。根据不同模型输入格式和量化方式,RKNN Runtime提供通用API和零拷贝API两种处理流程:

  • 通用API推理流程

提供一套简洁、无门槛的推理API,易于使用,流程如图所示。其中对数据的归一化、量化、数据排布格式转换、反量化等均在CPU上运行,模型本身的推理在NPU上运行。

  • 零拷贝API推理

优化了通用API的数据处理流程,归一化、量化和模型推理都会在NPU上运行,NPU输出的数据排布格式和反量化过程在CPU或者NPU上运行。零拷贝API对于输入数据流程的处理效率会比通用API高。

运行示例程序

开始介绍测试方法之前,对开发环境搭建不了解可以看上集:瑞芯微RK3576原厂RKNN模型环境部署与功能验证技巧(上)

  • RKNN Model Zoo介绍

本次将使用原厂RKNN Model Zoo工具,工具提供了示例代码,可助用户快速在Rockchip瑞芯微的开发板上运行各种常用模型,整个工程的目录结构如下:

  • .

├── 3rdparty # 第三方库 ├── asset ├── build-android.sh ├── build-linux.sh # Linux构建脚本 ├── datasets # 数据集 ├── docs ├── examples # 示例代码 ├── FAQ_CN.md ├── FAQ.md ├── LICENSE ├── py_utils ├── README_CN.md ├── README.md ├── scaling_frequency.sh └── utils #

常用方法,如文件操作,画图等

其中,examples目录包括了一些常用模型的示例,例如MobileNet和 YOLO等。每个模型示例提供了Python 和 C/C++两个版本的示例代码。

wKgZPGmz10uAdacOAAA-bU6tw2c69.jpeg

以yolov5为例:

rknn_model_zoo ├── examples│ └── yolov5│ ├── cpp # C/C++ 版本的示例代码 │ ├── model # 模型、测试图片等文件 │ ├── python # 模型转换脚本和Python版本的示例代码 │ └── README.md └── ...

  • RKNN Python Demo 使用方法

准备模型,执行脚本下载onnx测试模型:

# 进入 rknn_model_zoo/examples/yolov5/model 目录 cd Projects/rknn_model_zoo/examples/yolov5/model chmod a+x download_model.sh # 运行 download_model.sh 脚本,下载 yolov5 onnx 模型 ./download_model.sh

wKgZPGmz10yAL9lnAADyFvXx0Tg55.jpeg

转换模型,执行以下命令将onnx模型转换为rknn模型:

# 进入 rknn_model_zoo/examples/yolov5/python 目录 cd Projects/rknn_model_zoo/examples/yolov5/python # 运行 convert.py 脚本,将原始的 ONNX 模型转成 RKNN 模型 python convert.py ../model/yolov5s_relu.onnx rk3576 i8 ../model/yolov5s_relu.rknn

wKgZO2mz10yAALA8AAEEiGw27-g35.jpeg

连板调试,RKNN-Toolkit2的连板调试功能依赖板端的RKNN Server程序,该程序是一个运行在开发板上的后台代理服务,用于接收PC(测试使用Ubuntu虚拟机)通过USB传输过来的命令和数据,然后调用相应的运行时接口,并返回相应结果给PC。所以在做连板调试前需要确认开发板是否已启动RKNN Server程序。

adb shell ps | grep rknn_server

wKgZO2mz10uAXhLZAAAR2-kVAhM22.jpeg

执行如下命令进行连板在线调试:

# 如果带上 --img_show 参数,则会显示结果图片 python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588 --img_show

wKgZPGmz102AHkE5AAGfc7e9xsw93.jpeg
  • RKNN C Demo 使用方法

完整运行一个 RKNN C Demo,需要先将 C/C++ 源代码编译成可执行文件,然后将可执行文件、模型文件、测试图片等相关文件推送到板端上,最后在板端运行可执行文件。

在rknn_model_zoo工程下的build-linsx.sh脚本中指定前面下载的GCC交叉编译器路径:

GCC_COMPILER=/home/ido/rknn/Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu

wKgZO2mz10yAfAwYAABGRcwTIYA00.jpeg wKgZO2mz102Aeh_3AABz067Nj5M07.jpeg

执行如下命令编译测试Demo,以yolov5为例:

# 运行 build-linux.sh 脚本 # 用法:./build-linux.sh -t -a -d [-b ] [-m] # -t : target (rk356x/rk3588) # 平台类型,rk3568/rk3566 都统一为rk356x # -a : arch (aarch64/armhf) # 板端系统架构 # -d : demo name # 对应 examples 目录下子文件夹的名称,如yolov5、mobilenet # -b : build_type(Debug/Release) # -m : enable address sanitizer, build_type need set to Debug chmod a+x build-linux.sh ./build-linux.sh -t rk3576 -a aarch64 -d yolov5

wKgZPGmz102ATOmpAADjsmXRhIw76.jpeg

编译后的安装目录如下:

wKgZPGmz102Aa4yJAAA3jAYy_Bk11.jpeg

打包安装目录生成的文件部署到开发板系统:

tar -xf rknn_yolov5_demo.tar.gzcd rknn_yolov5_demo/chmod a+x rknn_yolov5_demo# 执行一下命令进行测试./rknn_yolov5_demo model/yolov5s_relu.rknn model/bus.jpg

wKgZO2mz102AJ4vTAAAXS3PRKgE05.jpeg

命令执行完后会生成预测结果图片out.png,从板端拉取到本地查看,在本地电脑的终端中查看效果。

wKgZO2mz102AOBHJAAFAlX0VjQo89.jpeg

瑞芯微原厂RKNN模型推理测试方法攻略就完成了,关注触觉智能电子发烧友。

  • 随机文章
  • 热门文章
  • 热评文章
不容错过
Powered By Z-BlogPHP