使用瑞芯微RK3588的NPU进行模型转换和推理
使用边缘设备进行算法落地时,通常要考虑模型推理速度,NVIDA系列平台可以使用TensorRT和CUDA加速,瑞芯微RK3588的板子上都是Arm的手机GPU,虽然没有类似CUDA的加速计算方式,但是提供了NPU进行加速推理,本文说明了如何使用瑞芯微RK3588的NPU进行模型转换和推理
一、简介
RK3588内置NPU模块, 处理性能最高可达6TOPS。使用该NPU需要下载RKNN SDK,RKNN SDK为带有 NPU 的RK3588S/RK3588 芯片平台提供编程接口,能够帮助用户部署使用 RKNN-Toolkit2导出RKNN模型,加速AI应用的落地。

RKNN-Toolkit2是为用户提供在 PC、 Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的Python接口可以便捷地完成以下功能:
🏆模型转换:支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 模型能够在Rockchip NPU 平台上加载使用。
🎽量化功能:支持将浮点模型量化为定点模型,目前支持的量化方法为非对称量化,并支持 混合量化功能 。
🎯模型推理:能够在 PC上模拟Rockchip NPU运行RKNN模型并获取推理结果;或将RKNN模型分发到指定的NPU设备上进行推理并获取推理结果。
🏋性能和内存评估:将 RKNN 模型分发到指定NPU设备上运行,以评估模型在实际设备上运行时的性能和内存占用情况。
🎼量化精度分析:该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路。
二、准备工作
2.1 适用芯片
RKNN-Toolkit2当前版本所支持芯片的型号如下:
- RV1103
- RV1103B
- RV1106
- RV1106B
- RK2118
- RK3562
- RK3566系列
- RK3568系列
- RK3576系列
RK3588系列
2.2 系统依赖说明
使用RKNN-Toolkit2时需要满足以下运行环境要求:

ARM64版本运行环境要求,ARM64版本仅支持PyTorch和ONNX框架,其他框架暂时不支持:

RKNN-Toolkit2和各深度学习框架的版本对应关系如下:

三、创建环境
因为尝试将yolo11的onnx模型转成RKNN-Toolkit2的rknn模型,根据版本对应关系,ONNX版本越高支持的算子种类越多,所以选择onnx==1.17.0对应的RKNN-Tollkit2==2.3.0版本。
3.1 下载RKNN相关库
建议新建一个目录用来存放RKNN仓库,例如新建一个名称为rknn的文件夹,并将RKNN-Toolkit2和RKNN Model Zoo仓库存放至该目录下,参考命令如下:
# 新建 Projects 文件夹
mkdir rknn# 进入该目录
cd rknn# 下载 RKNN-Toolkit2 仓库
git clone https://github.com/airockchip/rknn-toolkit2.git --depth 1# 下载 RKNN Model Zoo 仓库
git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1
# 注意:
# 1.参数 --depth 1 表示只克隆最近一次 commit
# 2.如果遇到 git clone 失败的情况,也可以直接在 github 中下载压缩包到本地,然后解压至该目录
整体目录结构如下:
Projects├── rknn-toolkit2│ ├── doc│ ├── rknn-toolkit2│ │ ├── packages│ │ ├── docker│ │ └── ...│ ├── rknpu2│ │ ├── runtime│ │ └── ...│ └── ...└── rknn_model_zoo├── datasets├── examples└── ...
3.2 安装RKNN-Toolkit2环境
使用conda创建虚拟python环境,通过pip源安装:
# 创建名称为rknn的python环境
conda create -n rknn python=3.10
# 激活环境
conda activate rknnpip install rknn-toolkit2 -i https://pypi.org/simple
# 如果已安装 RKNN-Toolkit2,可通过以下命令升级 RKNN-Toolkit2
pip install rknn-toolkit2 -i https://pypi.org/simple --upgrade# 验证是否安装成功,若没有报错,则代表 RKNN-Toolkit2 环境安装成功
# 进入 Python 交互模式
python
# 导入 RKNN 类
from rknn.api import RKNN
注:WSL中使用RKNN-ToolKit2注意事项
- 推荐安装 WSL2,Ubuntu版本号为22.04 已验证可行(其余版本未验证,理论可行)
- 在WSL使用RKNN-ToolKit2中若出现 “ImportError: libGL.so.1: cannot open shared object file: No such file or directory”,请执行以下代码解决
1. 安装对应库
sudo apt update
sudo apt install libgl1-mesa-glx2. 设置环境变量
echo 'export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa' >> ~/.bashrc
source ~/.bashrc
四、模型转换
4.1. 准备模型
下载链接:
./yolo11n.onnx
./yolo11s.onnx
./yolo11m.onnx
或者从bash脚本下载:
cd cd rknn/rknn_model_zoo/examples/yolo11/model
./download_model.sh
4.2 转换到RKNN
cd rknn/rknn_model_zoo/examples/yolo11/python
# python convert.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)>
# such as:
python convert.py ../model/yolo11n.onnx rk3588
# output model will be saved as ../model/yolo11.rknn
参数说明:
<onnx_model>: 指定ONNX模型路径。<TARGET_PLATFORM>: 指定NPU平台名称。如“rk3588”。<dtype>(optional): 指定为i8,u8或fp。i8/u8表示进行量化,fp表示不进行量化。默认为i8/u8。<output_rknn_path>(optional): 指定RKNN模型的保存路径,默认保存在与ONNX模型相同的目录中,名称为yolo11.rknn。


五、模型推理
5.1 使用ONNX模型推理
cd rknn/rknn_model_zoo/examples/yolo11/python
python yolo11.py --model_path ../model/yolo11n.onnx --img_show
# 输出:
Model-../model/yolo11n.onnx is onnx model, starting val
infer 1/1IMG: bus.jpg
person @ (108 236 223 535) 0.896
person @ (212 240 284 509) 0.844
person @ (477 230 559 521) 0.838
person @ (79 358 116 516) 0.485
bus @ (90 135 552 435) 0.939# 使用 PyTorch or ONNX 推理
# python yolo11.py --model_path <pt_model/onnx_model> --img_show
# 使用 RKNN model 推理
# python yolo11.py --model_path <rknn_model> --target <TARGET_PLATFORM> --img_show

参数说明:
-
<TARGET_PLATFORM>: 指定NPU平台名称。如“rk3588”。 -
<pt_model / onnx_model / rknn_model>: 指定模型路径。
5.2 使用RKNN模型推理(yolo5、模拟仿真)
RKNN-Toolkit2自带了一个模拟器,可以用来仿真模型在NPU上运行时的行为。就相当于Android Studio自带模拟器一样。那么真机就相当于开发板。RK3588目前只支持模拟仿真,还不支持连板调试,在真机上会报错显示rknn server版本过低,等后面官方更新好就可以连板推理了。
在路径rknn/rknn-toolkit2/rknn-toolkit2/examples/onnx/yolov5下,有yolov5的完整案例:创建RKNN对象、模型配置、加载onnx模型、构建RKNN模型、导出RKNN模型、加载图片并推理、得到推理结果、释放 RKNN 对象。
cd rknn/rknn-toolkit2/rknn-toolkit2/examples/onnx/yolov5
python test.py# 模型转换推理结果在当前路径下: yolov5s_relu.rknn、result.jpg
ls
README.md check0_base_optimize.onnx dataset.txt onnx_yolov5_0.npy onnx_yolov5_2.npy result_truth.jpg yolov5s_relu.onnx
bus.jpg check2_correct_ops.onnx model_config.yml onnx_yolov5_1.npy result.jpg test.py yolov5s_relu.rknn

5.3 使用RKNN模型推理(yolo11、模拟仿真)
参考yolo5的RKNN模型推理实现rknn/rknn-toolkit2/rknn-toolkit2/examples/onnx/yolov5/test.py,将该python文件复制到rknn/rknn_model_zoo/examples/yolo11/python/test.py,并结合rknn/rknn_model_zoo/examples/yolo11/python/yolo11.py文件,经过修改代码中超参数、模型加载、后处理等部分的代码,实现RKNN-Toolkit2模拟仿真环境下的yolo11的RKNN模型推理。
cd rknn/rknn_model_zoo/examples/yolo11/python
python test.py

需要注意的是,如果不做前后处理,只需用修改模型加载的参数即可,RKNN模型可以推理成功,只不过会提示后处理部分报错等,参考代码:
#...超参数
ONNX_MODEL = '../model/yolo11n.onnx'
RKNN_MODEL = '../model/yolo11n.rknn'
IMG_PATH = '../model/bus.jpg'
DATASET = '../model/dataset.txt'
#...
IMG_SIZE_YOLO11 = (640, 640) # (width, height), such as (1280, 736)
#...#...
#前处理
import yolo11
co_helper = yolo11.COCO_test_helper(enable_letter_box=True)
pad_color = (0,0,0)
img = co_helper.letter_box(im= img.copy(), new_shape=(IMG_SIZE_YOLO11[1], IMG_SIZE_YOLO11[0]), pad_color=(0,0,0))
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#...
#后处理
boxes, classes, scores = yolo11.post_process(outputs)
img_p = img.copy()
if boxes is not None:yolo11.draw(img_p, co_helper.get_real_box(boxes), scores, classes)
cv2.imshow("full post process result", img_p)
cv2.waitKeyEx(0)
相关文章:
使用瑞芯微RK3588的NPU进行模型转换和推理
使用边缘设备进行算法落地时,通常要考虑模型推理速度,NVIDA系列平台可以使用TensorRT和CUDA加速,瑞芯微RK3588的板子上都是Arm的手机GPU,虽然没有类似CUDA的加速计算方式,但是提供了NPU进行加速推理,本文说…...
Flutter项目试水
1基本介绍 本文章在构建您的第一个 Flutter 应用指导下进行实践 可作为项目实践的辅助参考资料 Flutter 是 Google 的界面工具包,用于通过单一代码库针对移动设备、Web 和桌面设备构建应用。在此 Codelab 中,您将构建以下 Flutter 应用。 该应用可以…...
【算法学习】DFS与BFS
目录 一,深度优先搜索 1,DFS 2,图的DFS遍历 (1),递归实现(隐士栈) (2),显示栈实现(非递归) 二,广度优先搜索 1,BFS 2,图的BF…...
100.16 AI量化面试题:监督学习技术在量化金融中的应用方案
目录 0. 承前1. 解题思路1.1 应用场景维度1.2 技术实现维度1.3 实践应用维度 2. 市场预测模型2.1 趋势预测2.2 模型训练与评估 3. 风险评估模型3.1 信用风险评估 4. 投资组合优化4.1 资产配置模型 5. 回答话术 0. 承前 本文通过通俗易懂的方式介绍监督学习在量化金融中的应用&a…...
基于deepseek api和openweather 天气API实现Function Calling技术讲解
以下是一个结合DeepSeek API和OpenWeather API的完整Function Calling示例,包含意图识别、API调用和结果整合: import requests import json import os# 配置API密钥(从环境变量获取) DEEPSEEK_API_KEY os.getenv("DEEPSEE…...
线性数据结构解密:数组的定义、操作与实际应用
系列文章目录 01-从零开始掌握Python数据结构:提升代码效率的必备技能! 02-算法复杂度全解析:时间与空间复杂度优化秘籍 03-线性数据结构解密:数组的定义、操作与实际应用 文章目录 系列文章目录前言一、数组的定义与特点1.1 数组…...
CentOS搭建PPPOE服务器
一、安装软件包 yum -y install rp-pppoe 二、配置服务器 1.修改配置文件 打开/etc/ppp/pppoe-server-options文件 nano /etc/ppp/pppoe-server-options 编辑为以下内容: # PPP options for the PPPoE server # LIC: GPL require-pap require-chap login …...
【报错】解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题
解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题 写在最前面问题描述可能的原因分析解决方案该命令的作用 结论 写在最前面 在多用户使用的服务器上,导致的环境变量的冲突和不匹配问题, 代码没有问题,但程序运行异常。…...
【C语言】C语言 文具店商品库存管理系统(源码+数据文件)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 系列文章目录 目录 系列文章目录一、设计要求1. 项…...
LangChain系列: 使用工具和工具包构建代理实战教程
让我们在LangChain中构建简单代理示例,以帮助我们理解代理的基本概念和构建块。通过保持简单,我们可以更好地掌握这些代理背后的基本思想,使我们能够在未来构建更复杂的代理。 什么是代理 LangChain官方文档有非常好的章节来介绍其代理的高级…...
布隆过滤器(简单介绍)
布隆过滤器(Bloom Filter) 是一种高效的概率型数据结构,用于快速判断一个元素是否可能存在于某个集合中。它的核心特点是空间效率极高,但存在一定的误判率(可能误报存在,但不会漏报)。 核心原理…...
C++ 利器:inline 与 nullptr
探秘 C 利器:inline 与 nullptr 引言 在 C 的浩瀚海洋中,有着许多实用且强大的特性,它们如同夜空中闪烁的繁星,照亮了开发者前行的道路。今天,我们要深入探索其中两颗耀眼的星星:inline 关键字和 nullptr …...
给一个单体项目加装Feign
1.导入pom坐标 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>4.1.2</version> </dependency> 2.主函数注解 EnableFeignClients public cl…...
可以使用Deepseek R1模型的平台集锦
最近Deepseek掀起了AI浪潮,就在今天百度文心一言和ChatGPT宣布要在近期实施免费开放,日渐减少的用户。Deepseek这么火爆,其官网却一直遭受攻击,访问速度很慢。自己本地部署,又负担不起硬件费用,相比之下&am…...
“探索1688平台:高效获取店铺商品信息的实用指南“
在电商领域,获取店铺所有商品信息对于商家进行数据分析、库存管理、竞品分析等方面具有重要意义。1688平台作为中国领先的B2B电商平台,提供了丰富的API接口供开发者使用,其中就包括获取店铺所有商品信息的接口。本文将详细介绍如何使用该接口…...
在fedora41中安装钉钉dingtalk_7.6.25.4122001_amd64
在Fedora-Workstation-Live-x86_64-41-1.4中安装钉钉dingtalk_7.6.25.4122001_amd64.deb 到官网下载钉钉Linux客户端com.alibabainc.dingtalk_7.6.25.4122001_amd64.deb https://page.dingtalk.com/wow/z/dingtalk/simple/ddhomedownload#/ 一、直接使用dpkg命令安装deb包报错…...
数据结构:图论入门
图论起源于欧拉对哥尼斯堡七桥问题的解决. 他构建的图模型将陆地用点来表示, 桥梁则用线表示, 如此一来, 该问题便转化为在图中能否不重复地遍历每条边的问题. 图论的应用 地图着色 在地图着色问题中, 我们用顶点代表国家, 将相邻国家之间用边相连. 这样, 问题就转化为用最少…...
有限状态系统的抽象定义及CEGAR分析解析理论篇
文章目录 一、有限状态系统的抽象定义及相关阐述1、有限状态系统定义2、 有限状态系统间的抽象关系(Abstract)2.1 基于函数的抽象定义2.2 基于等价关系的抽象定义 二、 基于上面的定义出发,提出的思考1. 为什么我们想要/需要进行抽象2. 抽象是…...
Apache Hive用PySpark统计指定表中各字段的空值、空字符串或零值比例
from pyspark.sql import SparkSession from pyspark.sql.functions import col, coalesce, trim, when, lit, sum from pyspark.sql.types import StringType, NumericType# 初始化SparkSession spark SparkSession.builder \.appName("Hive Data Quality Analysis"…...
高校元宇宙实训室解决方案:以技术驱动教育,用数字人链接未来
在AIGC技术的浪潮下,AI数字人正成为数字营销、文化传播等领域的核心工具。为助力高校培养适应未来需求的新型人才,广州虚拟动力推出高校元宇宙实训室解决方案,通过动作捕捉设备与虚拟数字人技术,构建沉浸式教学场景,赋…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
