admin 管理员组

文章数量: 1184232

目录

最近更新 2025年12月6日

2025年12月2日

1.模型准备

1.1 下载官方工具链

注意:PyTorch 模型(.pt/.pth)需要先转换为ONNX模型(.onnx)才可转换为RKNN模型

1.2 RK3568联网

2025年12月4日

1.3 Linux端配置与模型转换

1.3.1 Linux联网

1.3.2 传输模型和工具链到linux        

1.3.3 RKNN-Toolkot2版本选择与依赖安装

1.3.4 模型转换前置配置 

2025年12月6日

1.3.4 模型转换前置配置 (续)

1.3.5 模型转换

2. RK3568 NPU推理速度测试

2.1 前置准备

2.2模型推理测试

2.3 目前已知可能发生的问题的解决方法

2.3.1 安装在rk3568上的 rknn_Toolkits2 版本与模型转换时的版本不同


最近更新 2025年12月4日

本文章仅作为开发日志,并不具备较高的学习意义与参考价值
最近更新 2025年12月6日

2025年12月2日

1.模型准备

1.1 下载官方工具链

        调用RK3568的NPU需要使用专有的 RKNN 模型,可通过瑞芯微官方工具链RKNN Toolkit2转换主流深度学习框架的模型(CaffeTensorFlowTensorFlow LiteONNXDarkNetPyTorch)得到。

注意:PyTorch 模型(.pt/.pth)需要先转换为ONNX模型(.onnx)才可转换为RKNN模型

瑞芯微官方工具链Github链接 ​​​​​​  airockchip/rknn-toolkit2

        本篇文章以ONNX模型转RKNN模型为例进行介绍

1.2 RK3568联网

        我们需要使用ADB工具与开发板建立连接,方便传输文件与向rk3568发送命令。具体ADB工具安装方法,请看下面这篇博客,本文不再讲述

ADB详细(从下载安装到灵活运用)
https://shuaici.blog.csdn/article/details/142358129?fromshare=blogdetail&sharetype=blogdetail&sharerId=142358129&sharerefer=PC&sharesource=2403_87375314&sharefrom=from_link        

        安装好ADB工具后,使用OTG线将RK3568连接到Windows

在windows终端输入如下指令查看是否连接到开发板

adb devices

        如图所示代表开发板成功连接到电脑,可以使用终端控制开发板

adb shell  //进入RK3568系统

        使用如下的指令连接wifi

connmanctl         //进入WiFi操作终端
enable wifi        //使能WiFi
agent on           //开启代理
scan wifi          //开启WiFi扫描,可以多次扫描
services           //列出扫描到的WiFi列表

        以下是我的执行效果

        连接WiFi

connect XXXX  // XXXX为Wifi名称后面的编码

        终端报错 Not registered,是因为没有启动connman的用户代理(agent),在 connmanctl 中必须先启用 agent,才能连接需要密码的 WiFi 网络

agent on   //开启用户代理

        之后重新连接网络,输入密码并回车,不出意外便可连接到网络(关机重启后可自动联网

        至此,rk3568完成联网,可以进行rk3568的单板开发。

为了开发方便,接下来使用MobaXterm进行接下的工作(使用终端开发也可以

2025年12月4日

1.3 Linux端配置与模型转换

1.3.1 Linux联网

因为我的linux配置存在一些问题,每次重启后需要手动联网,项目比较赶,目前使用应急联网方案(linux网络配置正常可跳过)(闲下来再彻底解决ヾ(≧▽≦*)o)

ip addr   //查看网络状态   若存在 wlan0 且后有IP地址则网络大概率正常

        若与我一样显示esn33 DOWN,可通过以下命令临时恢复网络

sudo ip link set ens33 up     //激活ens33网络接口,使其处于物理连接就绪状态
sudo dhclient ens33           //让ens33接口通过DHCP协议自动获取网络参数

ip addr                       //显示网络信息,不出意外便可看到IP地址

1.3.2 传输模型和工具链到linux        

        复制IP地址,通过FileZilla连接linux,实现Windows与linux的文件互传

FileZilla如何下载请看这篇博客

//linux端输入如下指令搭建FTP服务器

sudo apt-get update              //刷新本地包数据库
sudo apt-get install vsftpd      //安装FTP

sudo apt-get install vim         //已安装vim可跳过
sudo vi /etc/vsftpd.conf         //打开配置文件

        找到如下两行,确保前面没有“#

        修改完成后保存退出

sudo /etc/init.d/vsftpd restart   //重启FTP

ip addr                           //获取IP地址,通过FileZilla连接到windows

        将ONNX模型文件工具链传输到linux

1.3.3 RKNN-Toolkot2版本选择与依赖安装

注意检查自己的linux系统环境与模型是否符合要求

可通过linux命令行查看ONNX模型使用的PyTorch版本

pip install onnx     

python3 -c "import onnx; model = onnx.load('name.onnx'); print('Producer Name:', model.producer_name); print('PyTorch版本:', model.producer_version)"
//将name换成你模型的名字

/*正常会输出
版本:', model.producer_version)"
Producer Name: pytorch
PyTorch版本: x.x.x
*/

我的ONNX模型是使用PyTorch 2.5.1转换而成的,虽然高于RKNN-Toolkit2所支持的最高PyTorch 2.4.0版本,但是RKNN-Toolkit2 的兼容性核心是ONNX 模型的算子集(Opset)和算子类型,不是PyTorch的版本,可以先尝试进行转换(如果时间紧急的话),但是可能会存在精度下降问题

1.3.4 模型转换前置配置 

        这里我尝试直接转换

安装RKNN_Toolkit2时间可能较长,需要下载所需要的依赖,请耐心等待(可以换成国内源加速)

python3.8 -m venv rknn_toolkit2_2.3.2_P38        //创建python3.8虚拟环境
source rknn_toolkit2_2.3.2_P38/bin/activate      //激活虚拟环境

pip install /home/alientek/tools/rknn_toolkit2-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl   //填写工具链所在的绝对路径

pip install numpy opencv-python                  //安装依赖

python -c "from rknn.api import RKNN; print('RKNN-Toolkit2 Success')"   //输出“RKNN-Toolkit2 Success”则安装成功

        全程没有报错即安装成功

2025年12月6日

博主自己的出错保留供回顾部分,可跳过以下部分,直接看1.3.4模型转换前置配置(续)

阅读官方文档与实际检查文件时发现,使用RKNPU需要安装RKNPU运行时库,但是官方提供的RKNPU运行时库对于linux仅有ARM 64位(aarch64)与ARM 32位(armhf,armhf-uclibc)的版本,没有x86版本。这代表我们无法在虚拟机上转换模型,必须在RK3568上进行RKNN模型的转换(其实在12月4日的更新中官方文档已经明确标明仅支持x64的linux,但是博主没看到(┬┬﹏┬┬))  RKNN-Toolkit2(x64 版)本身就包含了 x64 架构的 API

定义明确:

x86 = 32 位 x86 架构,Intel 早期 32 位处理器的架构名称,对应32 位计算

处理器一次最多能处理32 位(4 字节)数据

软件需要编译为 “x86/32 位版本” 才能运行

x64 = 64位x86架构(x86_64/amd64),x64 是x86 架构的 64 位扩展(最初由 AMD 开发,所以也叫 amd64;Intel 后来兼容该架构,叫 Intel 64),是现在 PC 的主流架构

处理器一次最多能处理64 位(8 字节)数据

软件需要编译为 “x64/64 位版本” 运行,但64 位系统能向下兼容 32 位 x86 软件(通过兼容层)

ARM64与x64:

  • ARM64(AArch64):采用精简指令集 (RISC),指令长度固定,每条指令执行单一操作,对内存对齐要求严格
  • x64(x86_64/amd64):基于复杂指令集 (CISC),指令长度可变,支持更灵活的内存访问

所以,程序不兼容的根本原因是arm64与x64的区别,不是x86与x64

将开发板联网,通过MobaXterm连接到开发板(终端操作也可以,但是MobaXterm更加直观方便)

将如下文件先发送到rk3568开发板

rknn_toolkit2-2.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

librknnrt.so(注意:是根目录下rknpu2\runtime\Linux\librknn_api\aarch64中的文件)

python3.8 -m venv rknn_toolkit2_2.3.2_P38        //创建python3.8虚拟环境
source rknn_toolkit2_2.3.2_P38/bin/activate      //激活虚拟环境

pip install /home/tools/rknn_toolkit2-2.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl    //填写工具链所在的绝对路径

//若报错提示缺少工具,可执行以下代码
deactivate        //退出虚拟环境
apt-get update    //更新软件源
apt-get install -y  xxx       //自动确认安装xxx,跳过交互式询问(-y)

source rknn_toolkit2_2.3.2_P38/bin/activate     //重新激活虚拟环境

//继续安装流程
pip install numpy opencv-python                  //安装依赖

python -c "from rknn.api import RKNN; print('RKNN-Toolkit2 Success')"   //输出“RKNN-Toolkit2 Success”则安装成功

1.3.4 模型转换前置配置 (续)

确保rknn_Toolkits2依赖全部成功安装

将以下的代码复制,建立一个脚本文件,将模型名字换位你的模型名称,确保其余参数与你的模型相匹配(可通过Netron查看模型参数),将脚本与模型放置在同一路径下

注意:

        我的模型是图像检测模型,不同的模型对应的脚本可能不同,具体请根据自己的模型写对应的脚本!

        该脚本仅进行最基础的模型转换,并且缺少部分参数,是以模型精度为代价来减少可能发生的错误,旨在快速跑通工作流。

from rknn.api import RKNN
import os

# 配置参数
TARGET_PLATFORM = 'rk3568'     # 根据你的设备修改
QUANTIZE_ON = False            # 保持关闭直到基础转换成功

def convert_onnx_to_rknn():
    # 1. 创建RKNN对象
    rknn = RKNN(verbose=True)
    
    try:
        # 2. 配置模型(简化配置)
        print('--> Config model')
        rknn.config(
            target_platform=TARGET_PLATFORM,
            optimization_level=3,
            mean_values=[[0, 0, 0]],
            std_values=[[255, 255, 255]],
        )
        
        # 3. 加载ONNX模型(不指定inputs/input_size_list)
        print('--> Loading ONNX model')
        ret = rknn.load_onnx(
            model='best.onnx',
            # 注意:v1.4.0对动态轴敏感,不指定裁剪参数
        )   #这里换为你自己的模型文件
        if ret != 0:
            print(f'Load ONNX failed! Error code: {ret}')
            exit(ret)
        
        # 4. 构建RKNN模型
        print('--> Building RKNN model')
        ret = rknn.build(do_quantization=QUANTIZE_ON)
        if ret != 0:
            print(f'Build RKNN failed! Error code: {ret}')
            exit(ret)
        
        # 5. 导出RKNN模型
        print('--> Export RKNN model')
        rknn_file = 'best.rknn'
        ret = rknn.export_rknn(rknn_file)
        if ret != 0:
            print(f'Export RKNN failed! Error code: {ret}')
            exit(ret)
        
        print(f'Conversion successful! Output: {os.path.abspath(rknn_file)}')
        
    finally:
        rknn.release()

if __name__ == '__main__':
    # 验证ONNX版本
    import onnx
    print(f"ONNX version: {onnx.__version__}")
    
    # 验证模型有效性
    try:
        onnx_model = onnx.load('best.onnx')
        onnx.checker.check_model(onnx_model)
        print("ONNX model validation passed!")
    except Exception as e:
        print(f"ONNX validation failed: {e}")
        exit(1)
    
    convert_onnx_to_rknn()

1.3.5 模型转换

执行以下代码,进行模型转换

source rknn_toolkit2_2.3.2_P38/bin/activate     //进入python3.8虚拟环境

cd xxxx        //进入模型文件与模型转换脚本在的目录

python xxx     //执行脚本xxx,转换模型

模型成功转换ヾ(≧▽≦*)o

2. RK3568 NPU推理速度测试

2.1 前置准备

将转换好的RKNN模型与正点原子提供的rk3568的预编译包与适用于rk3568的arm64版本的rknn_Toolkot2传输到开发板

预编译包可以在正点原子提供的RK3568开发板A盘资料中找到

具体路径:【正点原子】RK3568开发板资料(A盘)-基础资料\01、程序源码\01、程序源码\01、AI例程\03、软件及驱动

正点原子提供的rknn_Toolkit2是2.0.0版本的,我们转换RKNN模型使用的是2.3.2的rknn_Toolkits2,不同的版本会导致模型推理失败,所以我们使用瑞芯微官方提供的针对rk3568的预编译包

(具体路径:rknn-toolkit2-2.3.2\rknn-toolkit2-2.3.2\rknn-toolkit-lite2\packages)

(因为我的模型是图像检测模型,所以再传输一张测试图片)

rknn_speed_test.py文件内容如下

注意:

        我的模型是图像检测模型,不同的模型对应的脚本可能不同,具体请根据自己的模型写对应的脚本!

import cv2
import numpy as np
import time
from rknnlite.api import RKNNLite

def test_npu_speed():
    # 1. 初始化 RKNN Lite
    rknn_lite = RKNNLite()
    
    # 2. 加载 RKNN 模型
    print("加载模型...")
    ret = rknn_lite.load_rknn('best.rknn')
    if ret != 0:
        print("加载模型失败!")
        return
    
    # 3. 初始化运行环境
    print("初始化运行环境...")
    ret = rknn_lite.init_runtime()
    if ret != 0:
        print("初始化失败!")
        return
    
    # 4. 准备测试图片
    print("准备测试图片...")
    img = cv2.imread('best.jpg')
    if img is None:
        print("无法读取图片!")
        return
    # 调整为模型输入尺寸(根据你的模型调整)
    img = cv2.resize(img, (640, 640))
    # 预处理(与模型转换时的配置一致)
    img = img.astype(np.float32) / 255.0
    img = np.expand_dims(img, axis=0)  # 添加 batch 维度
    
    # 5. 预热(排除首次推理的初始化开销)
    print("预热 5 次...")
    for _ in range(5):
        rknn_lite.inference(inputs=[img])
    
    # 6. 测试推理速度
    print("测试 100 次推理速度...")
    test_runs = 100
    total_time = 0.0
    
    for i in range(test_runs):
        start_time = time.time()
        rknn_lite.inference(inputs=[img])
        end_time = time.time()
        infer_time = (end_time - start_time) * 1000  # 转换为毫秒
        total_time += infer_time
        
        # 每 10 次打印一次进度
        if (i + 1) % 10 == 0:
            print(f"  第 {i+1}/{test_runs} 次:{infer_time:.2f} ms")
    
    # 7. 计算平均速度
    avg_time = total_time / test_runs
    fps = 1000 / avg_time
    
    print("\n" + "="*50)
    print(f"  测试结果:")
    print(f"  总测试次数:{test_runs}")
    print(f"  平均推理时间:{avg_time:.2f} ms")
    print(f"  推理帧率(FPS):{fps:.2f}")
    print("="*50)
    
    # 8. 释放资源
    rknn_lite.release()
    print("测试完成,资源已释放!")

if __name__ == '__main__':
    test_npu_speed()

安装rknn_Toolkits2

pip3 install rknn_toolkit_lite2-2.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl     //安装预编译包

2.2模型推理测试

        执行以下代码

python3 rknn_speed_test.py     //启动脚本进行测试

        若没有问题便可以正常推理

2.3 目前已知可能发生的问题的解决方法

2.3.1 安装在rk3568上的 rknn_Toolkits2 版本与模型转换时的版本不同

在运行脚本时会有如下的报错

解决方法:安装相同版本rknn_Toolkits2,更新rknn_Toolkits2的librknnrt.so文件为你新安装的文件

具体操作如下:

find / -name "librknnrt.so" 2>/dev/null       // 查找所有 librknnrt.so 文件

strings /xx/xx/librknnrt.so | grep -i version    //查看librknnrt.so文件的版本,确保使用的版本与你预期版本相同

cp /xx/xx/librknnrt.so /zz/zz/     //复制正确版本的库到rknn_Toolkits2的安装路径

ldconfig      //刷新库缓存
strings /usr/lib/librknnrt.so | grep -i "librknnrt version"  //验证新库版本

python3 xx.py    //重新测试脚本

本文标签: 原子 模型 日志 NPU