当前位置: 首页 > news >正文

保姆级教程:在TB-RK3588X开发板上,用rknn-toolkit2把YOLOv11n模型转成RKNN(附完整代码)

从零开始:在TB-RK3588X开发板上部署YOLOv11n模型的完整指南

当你第一次拿到TB-RK3588X开发板时,可能会被它强大的硬件配置所震撼——四核Cortex-A76和四核Cortex-A55 CPU,G610 MP4 GPU,以及6 TOPs算力的NPU。但对于大多数开发者来说,如何快速上手并运行自己的第一个AI模型才是当务之急。本文将带你从零开始,一步步完成YOLOv11n模型在RK3588开发板上的部署全流程。

1. 开发板基础环境配置

在开始模型转换之前,我们需要确保开发板与上位机之间的通信畅通。RK3588开发板提供了两种主要的连接方式:串口连接和SSH网络连接。对于初学者来说,建议先从串口连接开始,因为它不需要额外的网络配置。

1.1 串口连接设置

Windows用户需要特别注意驱动安装

  1. 下载CH340串口驱动(可从官网获取)
  2. 安装驱动后,使用Type-C数据线连接开发板和电脑
  3. 打开设备管理器,确认串口端口号(通常是COM3或COM4)

推荐使用MobaXterm作为终端工具,其配置参数如下:

  • 波特率:1500000
  • 数据位:8
  • 停止位:1
  • 无校验位

连接成功后,你将看到类似如下的登录提示:

Welcome to TB-RK3588X login:

1.2 SSH网络连接配置

串口连接成功后,我们可以进一步设置SSH连接,以便更方便地传输文件和执行命令。

# 查看当前网络接口配置 ifconfig # 修改网络配置(示例) sudo vi /etc/network/interfaces

在配置文件中添加以下内容(根据你的网络环境调整IP地址):

auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1

提示:确保开发板和上位机在同一网段,否则无法建立SSH连接

2. RKNN-Toolkit2环境搭建

模型转换的核心工具是RKNN-Toolkit2,这是Rockchip官方提供的模型转换和推理工具链。我们需要在开发板或上位机上搭建这个环境。

2.1 安装依赖项

首先安装必要的系统依赖:

sudo apt-get update sudo apt-get install -y python3 python3-dev python3-pip sudo apt-get install -y cmake gcc g++ make sudo apt-get install -y libblas3 liblapack3 liblapack-dev libblas-dev

2.2 创建Python虚拟环境

为了避免与系统Python环境冲突,建议使用虚拟环境:

python3 -m venv rknn_env source rknn_env/bin/activate

2.3 安装RKNN-Toolkit2

从Rockchip官网下载对应版本的RKNN-Toolkit2 wheel包,然后安装:

pip install numpy==1.19.5 pip install opencv-python pip install rknn_toolkit2-1.4.0-*.whl

验证安装是否成功:

python3 -c "from rknn.api import RKNN; print('RKNN toolkit imported successfully')"

3. 准备YOLOv11n模型和数据集

3.1 获取YOLOv11n模型

你可以从官方渠道下载预训练的YOLOv11n ONNX模型,或者使用自己的训练模型。确保模型输入输出符合预期:

参数
输入尺寸640x640
输入格式RGB
归一化均值[123.675,116.28,103.53], 方差[58.395,57.12,57.375]
输出检测框和类别概率

3.2 创建校准数据集

量化过程需要一个小型数据集用于校准,通常50-100张图片足够。创建一个dataset.txt文件,列出所有图片路径:

./calib_data/1.jpg ./calib_data/2.jpg ... ./calib_data/100.jpg

注意:校准图片应该覆盖实际应用场景的各种情况,以确保量化后的模型精度

4. 模型转换全流程解析

现在我们已经准备好所有必要组件,可以开始将ONNX模型转换为RKNN格式了。

4.1 创建转换脚本

新建一个Python文件convert_yolov11n.py,内容如下:

import sys from rknn.api import RKNN def convert_model(): # 初始化RKNN对象 rknn = RKNN(verbose=True) # 模型配置 print('--> Config model') rknn.config( mean_values=[[123.675, 116.28, 103.53]], std_values=[[58.395, 57.12, 57.375]], target_platform='rk3588', quantized_dtype='asymmetric_quantized-8', quantized_algorithm='normal' ) # 加载ONNX模型 print('--> Loading model') ret = rknn.load_onnx(model='yolov11n.onnx') if ret != 0: print('Load model failed!') exit(ret) # 构建模型 print('--> Building model') ret = rknn.build( do_quantization=True, dataset='dataset.txt', rknn_batch_size=3 # 利用NPU三核 ) if ret != 0: print('Build model failed!') exit(ret) # 导出RKNN模型 print('--> Export rknn model') ret = rknn.export_rknn('yolov11n.rknn') if ret != 0: print('Export rknn model failed!') exit(ret) # 释放资源 rknn.release() if __name__ == '__main__': convert_model()

4.2 关键参数解析

  • do_quantization: 开启量化可以显著减小模型大小并提高推理速度
  • rknn_batch_size=3: 设置为3的倍数可以充分利用NPU的三核架构
  • quantized_algorithm: 量化算法选择,'normal'适合大多数场景

4.3 运行转换脚本

执行转换命令:

python convert_yolov11n.py

转换过程可能需要几分钟时间,取决于模型复杂度和硬件性能。成功完成后,你将得到yolov11n.rknn文件。

5. 模型推理与性能优化

5.1 基础推理代码

创建一个新的Python文件inference.py用于模型推理:

import cv2 import numpy as np from rknnlite.api import RKNNLite def init_rknn(model_path): rknn = RKNNLite() ret = rknn.load_rknn(model_path) if ret != 0: raise Exception("Load RKNN model failed") ret = rknn.init_runtime() if ret != 0: raise Exception("Init runtime failed") return rknn def preprocess_image(image_path): img = cv2.imread(image_path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.resize(img, (640, 640)) img = np.expand_dims(img, 0) # 添加batch维度 return img def infer(rknn, image): outputs = rknn.inference(inputs=[image]) # 后处理代码... return outputs if __name__ == '__main__': rknn = init_rknn('yolov11n.rknn') img = preprocess_image('test.jpg') results = infer(rknn, img) print("Inference results:", results) rknn.release()

5.2 性能优化技巧

  1. 多batch推理
# 准备多张图片输入 batch_images = np.concatenate([img1, img2, img3], axis=0) outputs = rknn.inference(inputs=[batch_images])
  1. NPU核心绑定
# 指定使用NPU核心0和1 ret = rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1)
  1. 输入直通模式(减少内存拷贝):
outputs = rknn.inference(inputs=[image], inputs_pass_through=[1])

5.3 性能对比数据

配置推理时间(ms)内存占用(MB)
单batch, 单核45120
3batch, 三核28180
量化+3batch15150

在实际项目中,我发现当处理连续视频流时,预先分配好内存池可以进一步减少5-10%的推理时间。另外,保持输入图片尺寸一致可以避免重复的内存分配操作。

http://www.jsqmd.com/news/626051/

相关文章:

  • 2026年四月柔性生产线定制新趋势:专业服务商推荐 - 2026年企业推荐榜
  • 2026年现阶段苏州市姑苏区黄金K金回收服务商综合评估与选购指南 - 2026年企业推荐榜
  • 解锁多路视频分发:专业虚拟摄像头解决方案深度解析
  • 2026年近期宁波金属件喷塑服务商综合评测与选购指南 - 2026年企业推荐榜
  • 企业AI Agent成熟度评估模型
  • Z-Image-Turbo孙珍妮模型部署实操:Xinference日志定位+Gradio端口映射完整指南
  • 在Windows系统安装Docker
  • 用Intel N5105开发板和LabVIEW,我给学生搭了个YOLOv8垃圾分拣机器人(附完整代码)
  • 避坑指南:WSL 迁移后 CUDA 环境配置与权限修复(含常见错误排查)
  • AHT20温湿度传感器库深度解析与工业级应用实践
  • 避坑指南:uniapp中使用previewImage和downloadFile API的常见问题与解决方案
  • 2026年4月桥梁安全守护优选:探访武汉中创防撞的柔性防撞设施硬实力 - 2026年企业推荐榜
  • 从‘能用’到‘好用’:我用这5个步骤,为我的智能小车电机选到了最合适的栅极驱动芯片
  • weixin294网络安全科普系统开发与设计+springboot(文档+源码)_kaic
  • 用AI辅助学习Silvaco:我是如何让DeepSeek帮我读懂并修改HEMT仿真代码的
  • 用AI给显示器装上‘眼睛’:复旦博士的EyeReal方案,如何用三层LCD和RTX 4090实现桌面级裸眼3D?
  • AI Agent在金融科技领域的应用实践:风控、投顾与合规
  • 热电阻接线方式全解析:从两线制到四线制的精度跃迁
  • ESP32蓝牙通信实战:从BLE广播到GATT服务构建
  • 打造沉浸式智能AI问答助手:Vue + UniApp 全端实战(支持 Markdown/公式/多模态交互)幌
  • SITS2026现场直击:LLM-native NLP架构设计原则(含可复用的5层抽象模型图谱)
  • Kubernetes Pod 生命周期状态追踪
  • 世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf徽
  • 从零理解Transformer自回归:手把手教你实现一个简易文本生成器
  • 从Bode图到PID调参:一个实例讲透频域分析如何帮你搞定‘飘忽不定’的控制系统
  • 【2026奇点大会Prompt工程权威指南】:全球仅37位主讲人亲授的5大高阶提示范式与实战避坑清单
  • 从视频到网格:基于Colmap与OpenMVS的自动化三维重建实战
  • MySQL分区表实战:如何高效管理海量数据
  • PowerToys:微软开源生产力套件如何让Windows开发效率提升300%
  • Spring with AI (): 定制对话——Prompt模板引入技