嘉立创泰山派部署yolo ai 实例教程:泰山派嵌入式AI开发实战教程,嘉立创泰山派(RK3566)RKNN 模型部署实战教程
嘉立创泰山派搭载瑞芯微RK3566 处理器,内置 0.8TOPS 算力的嵌入式神经网络处理器(NPU),支持低功耗、高并行的神经网络运算,非常适合边缘端 AI 推理场景。RKNPU2:NPU 运行库与编程接口,负责板端模型推理;(安装在泰山派上):PC 端开发工具,支持模型转换(TensorFlow/PyTorch/ONNX 等→RKNN)、量化、性能评估;(安装在虚拟机上):板端轻量工具,用于部
参考文章:
MrHarsh10/tspi_-RKNN_MobileNetV3: 将mobliebetv3转换成RKNN部署到泰山派上
3. RKNN Toolkit2介绍 — [野火]嵌入式AI应用开发实战指南—基于LubanCat-RK系列板卡 文档
首先:我用的所有配置,一台虚拟机Ubuntu部署RKNN转换 一台泰山派
一、前言:泰山派与 RKNN 生态介绍
嘉立创泰山派搭载瑞芯微RK3566 处理器,内置 0.8TOPS 算力的嵌入式神经网络处理器(NPU),支持低功耗、高并行的神经网络运算,非常适合边缘端 AI 推理场景。瑞芯微提供完整的 RKNN 工具链支持:
- RKNPU2:NPU 运行库与编程接口,负责板端模型推理;(安装在泰山派上)
- RKNN Toolkit2:PC 端开发工具,支持模型转换(TensorFlow/PyTorch/ONNX 等→RKNN)、量化、性能评估;(安装在虚拟机上)
- RKNN Toolkit Lite2:板端轻量工具,用于部署 RKNN 模型并执行推理。
本教程以MobileNetV3 图像分类模型(猫 / 牛 / 狗 / 马 / 猪 5 分类) 为例,完整覆盖 “模型训练→RKNN 转换→泰山派部署” 全流程。
(这个是他给的例子:这里面的image有MrHarsh10/tspi_-RKNN_MobileNetV3: 将mobliebetv3转换成RKNN部署到泰山派上z
这里面的image有)
二、第一步:Ubuntu端基础环境搭建(训练 + 模型转换)
Ubuntu端需满足:Linux 系统(推荐 Ubuntu 20.04,模型转换仅支持 Linux)、高性能 CPU/GPU(训练加速)、已安装 Miniconda。
2.1 Miniconda 安装与换源
Miniconda 用于创建隔离的 Python 环境,避免依赖冲突。
-
下载安装 Miniconda从Miniconda 官网下载 Linux-x86_64 版本,或用命令直接下载:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh # 按提示安装,默认路径即可 source ~/.bashrc # 激活conda(仅Linux生效,Windows用Anaconda Prompt) -
conda 与 pip 换源(国内加速)避免下载依赖超时,配置清华 / 阿里云镜像:
# conda换清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes # pip换阿里云源(临时生效,也可配置永久文件) pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
2.2 模型训练环境搭建(MobileNetV3)
-
创建并激活训练环境基于 Python 3.10 创建环境(兼容多数 AI 库):
conda create -n mobilenet python=3.10 -y conda activate mobilenet # 激活环境 -
安装 PyTorch 与依赖库前往PyTorch 官网,根据 PC 是否有 GPU 选择命令(示例为 GPU 版本,无 GPU 则选 CPU 版本):
-
教程:(已安装可忽略)
-
# GPU版本(需提前安装NVIDIA CUDA 11.8) pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # CPU版本 # pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu # 安装其他依赖(数据集处理、模型保存等) pip install opencv-python numpy pandas tqdm -
准备 5 分类数据集数据集结构如下(需自行收集或下载公开动物数据集):
作者提供的文件夹内image已经有了MrHarsh10/tspi_-RKNN_MobileNetV3: 将mobliebetv3转换成RKNN部署到泰山派上
dataset/ ├─ cat/ # 猫的图片(至少50张,越多训练效果越好) │ ├─ 001.jpg │ └─ ... ├─ cattle/ # 牛的图片 ├─ dog/ # 狗的图片 ├─ horse/ # 马的图片(注意原文档笔误为house,需修正) └─ pig/ # 猪的图片 -
执行文件里面的模型训练的
train.py(核心逻辑:加载 MobileNetV3、定义损失函数 / 优化器、迭代训练),示例核心代码:
# conversion/convert_to_rknn.py import os import numpy as np from rknn.api import RKNN import json class ModelConverter: def __init__(self, target_platform='rk3566'): self.target_platform = target_platform def convert_mobilenetv3(self, pt_model_path, output_rknn_path, input_size=224): """ 转换MobileNetV3模型为RKNN格式 """ print("=== 开始模型转换 ===") # 初始化RKNN rknn = RKNN(verbose=True) try: # 配置模型 print('--> Config model') ret = rknn.config( mean_values=[[123.675, 116.28, 103.53]], std_values=[[58.395, 58.395, 58.395]], target_platform=self.target_platform, quantized_dtype='asymmetric_quantized-8' ) if ret != 0: print('Config model failed!') return False print('Config done') # 加载PyTorch模型 print('--> Loading model') ret = rknn.load_pytorch( model=pt_model_path, input_size_list=[[1, 3, input_size, input_size]] ) if ret != 0: print('Load model failed!') return False print('Load model done') # 构建模型 print('--> Building model') ret = rknn.build(do_quantization=True, dataset='./dataset.txt') if ret != 0: print('Build model failed!') # 尝试不使用量化 print('尝试不使用量化...') ret = rknn.build(do_quantization=False) if ret != 0: return False print('Build model done') # 导出RKNN模型 print('--> Export rknn model') ret = rknn.export_rknn(output_rknn_path) if ret != 0: print('Export rknn model failed!') return False print('Export model done') print(f"转换成功!模型已保存为: {output_rknn_path}") return True except Exception as e: print(f"转换过程中出错: {e}") return False finally: rknn.release() def create_dataset_file(self, image_dir, output_file='dataset.txt', num_images=100): """ 创建量化数据集文件 """ import cv2 from pathlib import Path image_paths = list(Path(image_dir).rglob('*.jpg')) + \ list(Path(image_dir).rglob('*.png')) + \ list(Path(image_dir).rglob('*.jpeg')) with open(output_file, 'w') as f: for img_path in image_paths[:num_images]: f.write(f"{img_path}\n") print(f"创建数据集文件: {output_file}, 包含 {min(len(image_paths), num_images)} 张图片") if __name__ == '__main__': converter = ModelConverter(target_platform='rk3566') # 创建量化数据集 converter.create_dataset_file('../dataset/train', 'dataset.txt') # 转换模型 success = converter.convert_mobilenetv3( pt_model_path='../training/MobileNetV3.pt', output_rknn_path='mobilenetv3.rknn', input_size=224 ) if success: print("🎉 模型转换成功!") else: print("❌ 模型转换失败!")运行训练脚本:
python train.py训练完成后,会生成
mobilenetv3.pth模型权重文件。
2.3 RKNN 模型转换(PC 端 Ubuntu)
需将 PyTorch 模型转换为 RKNN 格式(泰山派 NPU 支持的唯一格式),依赖RKNN Toolkit2,且必须在 Linux 环境执行。
-
创建 RKNN 转换环境
conda create -n rknn python=3.10 -y conda activate rknn # 激活转换环境 -
克隆 RKNN Toolkit2 仓库
git clone https://github.com/rockchip-linux/rknn-toolkit2.git cd rknn-toolkit2 (也可以直接浏览器下载解压,终端指令太麻烦) 也可以这个链接:git clone https://gitee.com/LubanCat/lubancat_ai_manual_code.git 里面是一样的 我用的就这个你再改名rknn-toolkit2 -
安装依赖与 Toolkit2根据 Python 版本选择依赖文件(此处为 Python 3.10,对应
requirements_cp310-1.6.0.txt,如果是python 3.8就选择requirements_cp38-1.6.0.txt):# 安装依赖(换阿里云源加速) pip install -r rknn-toolkit2/packages/requirements_cp310-1.6.0.txt -i https://mirrors.aliyun.com/pypi/simple/ # 安装Toolkit2 wheel包(x86_64架构,Ubuntu系统) cd rknn-toolkit2/packages/ pip install rknn_toolkit2-1.6.0+81f21f4d-cp310-cp310-linux_x86_64.whl -
编写 PT 转 RKNN 脚本(pt2rknn.py)核心逻辑:加载 PyTorch 模型、配置转换参数、构建 RKNN 模型、导出文件。注意关闭整型量化(实验表明精度损失严重):
import numpy as np import numpy as np import cv2 from rknn.api import RKNN import os import torch import os def show_outputs(output): index = sorted(range(len(output)), key=lambda k : output[k], reverse=True) fp = open('./labels.txt', 'r') labels = fp.readlines() top5_str = 'mobilenetv3\n-----TOP 5-----\n' for i in range(5): value = output[index[i]] if value > 0: topi = '[{:>3d}] score:{:.6f} class:"{}"\n'.format(index[i], value, labels[index[i]].strip().split(':')[-1]) else: topi = '[ -1]: 0.0\n' top5_str += topi print(top5_str.strip()) def show_perfs(perfs): perfs = 'perfs: {}\n'.format(perfs) print(perfs) def softmax(x): return np.exp(x)/sum(np.exp(x)) if __name__ == '__main__': rknn = RKNN(verbose=True) # Pre-process config input_size_list = [[1, 3, 224, 224]] print('--> Config model') rknn.config(mean_values=[123.675, 116.28, 103.53], std_values=[58.395, 58.395, 58.395], target_platform='rk3566') print('done') # Load model print('--> Loading model') ret = rknn.load_pytorch(model="./MobileNetV3.pt", input_size_list=input_size_list) if ret != 0: print('Load model failed!') exit(ret) print('done') # Build model print('--> Building model') ret = rknn.build(do_quantization=False, dataset='./dataset.txt') if ret != 0: print('Build model failed!') print('done') # Export rknn model print('--> Export rknn model') ret = rknn.export_rknn('./tspi_moblienetv3_demo.rknn') if ret != 0: print('Export rknn model failed!') exit(ret) print('done') img = cv2.imread('./demo_pig.jpg') # 调整图片大小为模型所需大小 img = cv2.resize(img, (224, 224)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = np.expand_dims(img, 0) # Init runtime environment print('--> Init runtime environment') ret = rknn.init_runtime() if ret != 0: print('Init runtime environment failed!') exit(ret) print('done') # Inference print('--> Running model') outputs = rknn.inference(inputs=[img], data_format=['nhwc']) print(outputs) show_outputs(softmax(np.array(outputs[0][0]))) print('done') rknn.release()说明:
dataset.txt为量化校正数据集路径文件,每行对应一张图片路径(关闭量化时可省略,但若开启需准备)。 -
执行模型转换将
mobilenetv3.pth复制到当前目录,运行脚本:python pt2rknn.py转换成功后,会生成
mobilenetv3.rknn文件(后续部署到泰山派的核心文件)。
三、第二步:泰山派板端部署环境搭建
泰山派需安装官方 Debian10 镜像(Ubuntu 镜像存在兼容性问题),流程分为:镜像烧录→远程连接→环境配置→驱动安装。
3.1 准备工作:烧录 Debian10 镜像
- 下载镜像从嘉立创泰山派官网下载官方 Debian10 镜像(如
TaishanPi_Debian10_202405.img)。 - 烧录工具使用BalenaEtcher(跨平台),选择镜像、SD 卡(建议 16GB 以上),点击 “Flash” 烧录。
- 启动板卡将 SD 卡插入泰山派,连接电源、网线(或 WiFi),启动板卡。
3.2 远程连接泰山派(PC 端 MobaXterm)
- 查询泰山派 IP若板卡连接显示器,可通过
ifconfig查看 IP(如eth0网卡的inet地址,通常为192.168.x.x);若无显示器,可通过路由器管理页查看设备 IP。 - 远程连接打开 MobaXterm,点击 “Session”→“SSH”,输入泰山派 IP(如
192.168.1.100),用户名默认debian,密码默认taishanpi,点击 “OK” 连接。
3.3 板端基础环境配置
-
更新系统软件
sudo apt update && sudo apt upgrade -y -
安装 Miniconda(ARM 架构)泰山派为 ARM64 架构,需下载对应版本的 Miniconda:
# 创建目录并下载Miniconda mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O ~/miniconda3/miniconda.sh # 安装Miniconda bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh # 删除安装包 # 激活conda ~/miniconda3/bin/conda init bash source ~/.bashrc # 生效配置 -
conda 换源(ARM 架构适配)配置清华源,避免下载依赖超时:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes
3.4 安装 NPU 驱动与 RKNN Lite2
-
下载 RKNPU2(NPU 运行库)由于板端 git 下载较慢,建议先在 PC 端下载RKNPU2 仓库,再通过 MobaXterm 的 “SFTP” 功能上传到泰山派
~/目录。 -
复制驱动文件到系统目录RK3566 对应
RK356X目录,执行以下命令:cd ~/rknnpu2 # 进入上传的RKNPU2目录 # 复制rknn_server(NPU服务进程) sudo cp runtime/RK356X/Linux/rknn_server/aarch64/usr/bin/rknn_server /usr/bin/ # 复制NPU运行库(librknnrt.so、librknn_api.so) sudo cp runtime/RK356X/Linux/librknn_api/aarch64/librknnrt.so /usr/lib/ sudo cp runtime/RK356X/Linux/librknn_api/aarch64/librknn_api.so /usr/lib/ # 启动rknn_server服务 bash runtime/RK356X/Linux/rknn_server/aarch64/usr/bin/start_rknn.sh -
创建板端推理环境并安装 RKNN Lite2
# 创建并激活环境 conda create -n rknn_lite python=3.10 -y conda activate rknn_lite # 安装依赖(编译工具与OpenCV) sudo apt install gcc -y pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/ # 安装RKNN Toolkit Lite2(ARM64版本) # 从PC端下载Lite2的wheel包:https://github.com/rockchip-linux/rknn-toolkit2/tree/master/rknn_toolkit_lite2/packages # 选择对应Python 3.10的ARM64包(如rknn_toolkit_lite2-1.6.0-cp310-cp310-linux_aarch64.whl) # 通过SFTP上传到泰山派,然后安装: pip install rknn_toolkit_lite2-1.6.0-cp310-cp310-linux_aarch64.whl -i https://mirrors.aliyun.com/pypi/simple/
四、第三步:泰山派模型推理测试
将 PC 端转换好的mobilenetv3.rknn通过 SFTP 上传到泰山派~/目录,编写推理脚本test.py。
4.1 推理脚本编写(test.py)
核心逻辑:加载 RKNN 模型、读取测试图片、预处理、推理、输出分类结果。
import cv2
import numpy as np
from rknnlite.api import RKNNLite
INPUT_SIZE = 224
RK3566_MODEL = 'tspi_moblienetv3_demo.rknn'
labels=["cat","cattle","dog","house","pig"]
def show_top5(result):
output = result[0].reshape(-1)
labels=["cat","cattle","dog","house","pig"]
# Softmax
output = np.exp(output) / np.sum(np.exp(output))
# Get the indices of the top 5 largest values
output_sorted_indices = np.argsort(output)[::-1][:5]
top5_str = '-----TOP 5-----\n'
for i, index in enumerate(output_sorted_indices):
value = output[index]
if value > 0:
topi = '[{:>3d}] score:{:.6f} class:"{}"\n'.format(index, value, labels[index])
else:
topi = '-1: 0.0\n'
top5_str += topi
print(top5_str)
if __name__ == '__main__':
rknn_lite = RKNNLite()
# Load RKNN model
print('--> Load RKNN model')
ret = rknn_lite.load_rknn(RK3566_MODEL)
if ret != 0:
print('Load RKNN model failed')
exit(ret)
print('done')
ori_img = cv2.imread('./demo_cat.jpg')
img = cv2.cvtColor(ori_img, cv2.COLOR_BGR2RGB)
img = np.expand_dims(img, 0)
# Init runtime environment
print('--> Init runtime environment')
ret = rknn_lite.init_runtime()
if ret != 0:
print('Init runtime environment failed')
exit(ret)
print('done')
# Inference
print('--> Running model')
outputs = rknn_lite.inference(inputs=[img])
# Show the classification results
show_top5(outputs)
print('done')
rknn_lite.release()
4.2 运行推理脚本
-
准备测试图片从网上下载一张动物图片(如狗的图片),命名为
test_dog.jpg,通过 SFTP 上传到泰山派~/目录。 -
执行推理
conda activate rknn_lite # 激活推理环境 python test.py -
查看结果若推理成功,会输出类似以下内容:
--> 加载RKNN模型 加载模型完成 --> 初始化NPU环境 初始化NPU环境完成 --> 预处理图片 预处理图片完成 --> 执行推理 推理完成 --> 解析结果 预测结果:dog,置信度:0.9876
五、进阶:模型性能评估
若需评估模型在泰山派 NPU 上的推理速度、内存占用,可通过 RKNN Toolkit2 的eval_perf和eval_memory接口实现(需 PC 与板卡通过 ADB 连接)。
5.1 板端启动 ADB 服务
# 安装ADB(若未安装)
sudo apt install adb -y
# 启动ADB服务
adb start-server
# 查看ADB设备(确保PC与板卡同局域网)
adb devices
5.2 PC 端执行性能评估
在 PC 的 RKNN Toolkit2 环境中,编写评估脚本eval_perf.py:
from rknn.api import RKNN
# 1. 初始化RKNN
rknn = RKNN(verbose=True)
# 2. 加载RKNN模型
ret = rknn.load_rknn("mobilenetv3.rknn")
if ret != 0:
exit(ret)
# 3. 连接泰山派(device_id为ADB设备ID,如192.168.1.100:5555)
ret = rknn.init_runtime(target="rk3566", device_id="192.168.1.100:5555", perf_debug=True, eval_mem=True)
if ret != 0:
exit(ret)
# 4. 评估推理性能(耗时)
print("--> 评估推理性能")
rknn.eval_perf()
# 5. 评估内存占用
print("--> 评估内存占用")
rknn.eval_memory()
# 6. 释放资源
rknn.release()
运行脚本后,会输出模型的推理耗时(如单张图片推理时间)、NPU 内存占用(如权重内存、张量内存)等信息。
六、常见问题与解决方法
- 模型转换失败:检查 PyTorch 模型结构与权重是否匹配,ONNX 导出的 opset 版本是否为 11 或 12,Toolkit2 依赖是否安装完整。
- 板端 NPU 初始化失败:确认
rknn_server已启动,驱动文件(librknnrt.so)路径正确,Debian10 镜像版本是否为官方最新。 - 推理结果错误:检查图片预处理是否与训练时一致(尺寸、归一化、通道顺序),标签顺序是否与数据集一致。
- 远程连接失败:确认泰山派 IP 正确,网线 / WiFi 连接正常,防火墙未拦截 SSH 端口(22 端口)。
七、总结
本教程完整覆盖了嘉立创泰山派 RKNN 模型部署的全流程:从 PC 端的模型训练、RKNN 转换,到板端的环境配置、NPU 驱动安装、推理测试。核心关键点在于:
- 模型转换时关闭整型量化,避免精度损失;
- 板端必须使用官方 Debian10 镜像,确保 NPU 驱动兼容性;
- 图片预处理需与训练时严格一致,否则推理结果会偏差。
通过本教程,你可以快速掌握泰山派 NPU 的使用方法,并将其扩展到目标检测(如 YOLOv5)、语义分割等更复杂的 AI 任务。
更多推荐
所有评论(0)