瑞芯微RK3588 RKNN模型推理环境部署与功能测试技巧(下)

触觉智能RK3588核心板/开发板SDK即将迎来更新,其中内核将更新至全新Linux6.1,并增加数十项软硬件资料更新与bug优化。本文将介绍瑞芯微RK3588原厂RKNN端侧模型的测试验证方法,而关于开发环境搭建可以查看先前文章。

【测试环境说明】

开发板系统:Ubuntu22.04

开发环境:Ubuntu22.04虚拟机

演示设备:触觉智能RK3588开发板EVB3588,开发板基于核心板+底板设计,用户可通过核心板二次开发设计底板,用于量产。

RKNN

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

RKNN-Toolkit2是用户模型转换、推理与性能评估的开发套件。使用 RKNPU 时,需先通过该工具将训练好的模型转为 RKNN 格式,再借助 RKNN C API 或 Python API 在开发板上部署。其 Python 接口可快速实现模型转换、量化、推理、性能与内存评估、量化精度分析、模型加密等功能。。

RKNN Runtime 负责加载 RKNN 模型并调用 NPU 驱动完成推理,推理流程包含输入预处理、NPU运算、输出后处理,并根据模型输入格式与量化方式,提供通用 API 和零拷贝 API 两种处理流程。:

  • 通用API推理

提供一套简洁易用的推理 API,流程如图所示。数据归一化、量化、格式转换、反量化等在 CPU 上运行,模型推理在 NPU 上执行。

  • 零拷贝API推理

优化了通用 API 数据处理流程,归一化、量化与模型推理均在 NPU 上执行,数据排布与反量化可在CPU或NPU完成;零拷贝 API 的输入处理效率高于通用 API。

示例测试

开始介绍测试方法之前,对开发环境搭建不了解可以看上集:瑞芯微RK3588 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++ 两个版本的示例代码。

以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

转换模型,执行以下命令将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 rk3588 i8 ../model/yolov5s_relu.rknn

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

复制代码
adb shell
ps | grep rknn_server
复制代码
# 如果带上 --img_show 参数,则会显示结果图片
python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588 --img_show

效果如图:

  • 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

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

复制代码
# 运行 build-linux.sh 脚本
# 用法:./build-linux.sh -t <target> -a <arch> -d <build_demo_name> [-b <build_type>] [-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 rk3588 -a aarch64 -d yolov5

编译后的安装目录如下:

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

复制代码
tar -xf rknn_yolov5_demo.tar.gz
cd rknn_yolov5_demo/
chmod a+x rknn_yolov5_demo

# 执行一下命令进行测试
./rknn_yolov5_demo model/yolov5s_relu.rknn model/bus.jpg

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

  • 常见问题规避

在线调试报错:

解决方法-更新板端系统的adb工具:

https://github.com/airockchip/rknn-toolkit2/blob/master/doc/rknn_server_proxy.md

复制代码
wget -O adbd.zip https://ftzr.zbox.filez.com/v2/delivery/data/7f0ac30dfa474892841fcb2cd29ad924/adbd.zip
unzip adbd.zip
adb push adbd/linux-aarch64/adbd /usr/bin/adbd

瑞芯微RK3588原厂RKNN模型详细测试方法与常见问题已讲解完毕。本文相关资料请关注深圳触觉智能CSDN。

触觉智能RK3588开发板EVB3588 ,配套核心板SOM3588(板对板连接器封装)。

4核A76+4核A55 8核处理器、Mali-G610 GPU,以及6Tops算力NPU、48MP ISP

AI视觉性能奠定坚实硬件基础,国产Arm高阶应用!

相关推荐
beyond阿亮2 小时前
OpenClaw接入企业微信
人工智能·ai·企业微信·openclaw
小真zzz2 小时前
AI信息迷雾:当智能推荐遭遇“数据投毒”与“幻觉陷阱”
人工智能·搜索引擎·ai
chools2 小时前
Java后端拥抱AI开发之个人学习路线 - - Spring AI【第三期】(向量数据库 + RAG检索增强生成)
java·人工智能·学习·spring·ai
老师用之于民2 小时前
【DAY36】基于 I²C 总线的通信协议分析与 ADC 转换原理研
单片机·嵌入式硬件
tianbaolc2 小时前
Claude Code 源码剖析 模块一 · 第一节:Claude Code 宏观架构
人工智能·ai·架构·claude code
AI360labs_atyun2 小时前
我在命令行里养了只电子宠物,还顺便学会了Claude Code
人工智能·科技·学习·ai·宠物
CanCanCanedFish3 小时前
快速解决OpenCode配置第三方API
人工智能·ai
花千树-0103 小时前
Java 实现 ReAct Agent:工具调用与推理循环
java·spring boot·ai·chatgpt·langchain·aigc·ai编程
kanhao1003 小时前
从 Vectorless 到 SAIF 再到板级实测:HLS Kernel 功耗估计全流程实战
嵌入式硬件·fpga开发