从零部署RKNN模型:在Ubuntu22.04上搭建Python3.8虚拟环境与RKNN Toolkit2-1.5.2全流程
1. 为什么需要一个独立的开发环境如果你和我一样经常在RK3588这类边缘计算设备上折腾AI模型那你肯定遇到过“环境污染”的糟心事。今天跑通了一个模型明天换个项目因为某个依赖库版本冲突整个环境直接崩掉那种感觉真是让人头大。尤其是在Ubuntu这样的系统上系统自带的Python版本比如22.04默认是Python 3.10和项目要求的版本比如很多老项目或特定工具链依赖Python 3.8经常打架。更别提不同项目对numpy、opencv这些库的版本要求千差万别了。所以我的经验是为每一个重要的项目或者工具链创建一个独立的虚拟环境这绝对是提升开发效率、避免“祖传代码”跑不起来的最佳实践。今天我们要部署的RKNN Toolkit2-1.5.2它对Python 3.8有明确要求在Ubuntu 22.04上我们第一步就是把它和系统环境隔离开。这就像给你的模型转换工作准备了一个专属的、干净的“手术室”里面所有的工具和药品也就是库和版本都是为你这台“手术”RKNN模型转换量身定制的绝对不会和外面的东西搞混。这么做的好处太多了。首先环境纯净你安装的每一个包都只服务于当前任务卸载也干净利落。其次可复现性极强你可以把整个虚拟环境的配置清单requirements.txt保存下来下次在任何一台Ubuntu 22.04的机器上都能快速重建一个一模一样的环境。最后它给了你极大的自由度在这个“手术室”里你可以随便折腾升级降级各种包而完全不用担心会搞坏系统里其他正在运行的服务。接下来我们就从零开始搭建这个专属的“手术室”。2. 搭建Python 3.8的专属虚拟环境万事开头难但环境搭建这一步我们把它拆解得足够细你跟着做一定能成。我假设你手头已经有一台安装好Ubuntu 22.04的电脑或虚拟机并且拥有sudo权限。我们所有的操作都在终端里完成如果你对命令行有点发怵别担心我会把每条命令是干什么的都解释清楚。2.1 安装Python 3.8和虚拟环境模块Ubuntu 22.04的默认软件源里已经包含了Python 3.8我们直接安装就行。打开你的终端快捷键CtrlAltT首先更新一下软件包列表这是一个好习惯能确保我们安装的是最新可用的版本。sudo apt update更新完成后安装Python 3.8和创建虚拟环境所必需的venv模块。-y参数是为了让安装过程自动确认省去我们手动输入y的步骤。sudo apt install -y python3.8 python3.8-venv安装完成后可以顺手检查一下Python 3.8是否安装成功python3.8 --version你应该会看到输出类似Python 3.8.10这样的信息。看到这个第一步就稳了。2.2 创建并激活虚拟环境接下来我们要创建一个独立的虚拟环境。我习惯把它放在用户主目录下名字就叫rknn_env一目了然。你可以根据喜好放在其他路径或起其他名字。python3.8 -m venv ~/rknn_env这条命令的意思是调用Python 3.8的venv模块在~也就是你的家目录比如/home/your_username下创建一个名为rknn_env的虚拟环境目录。这个目录里会包含一个独立的Python解释器、pip工具以及后续安装的所有第三方库。创建好了“手术室”我们得走进去才能开始工作。这就是“激活”虚拟环境source ~/rknn_env/bin/activate执行成功后你应该会注意到命令行提示符的最前面发生了变化多了一个(rknn_env)的标识。这个标识非常重要它时刻提醒你你现在正处在这个独立的虚拟环境里。接下来所有pip install的操作安装的包都会乖乖地放进这个环境而不会污染系统全局环境。我们可以再确认一下当前环境下的Python和pip版本python --version pip --version此时python --version应该显示的就是Python 3.8.x而pip也是这个虚拟环境自带的。如果一切正常那么恭喜你一个干净、独立的Python 3.8工作间已经准备就绪。任何时候你想退出这个虚拟环境回到系统全局环境只需要输入deactivate命令即可。但现在我们还得继续在里面干活。3. 安装RKNN Toolkit2核心工具链环境准备好了接下来就要请出我们今天的主角——RKNN Toolkit2。它是瑞芯微官方提供的模型转换、推理和性能评估工具包是我们将训练好的模型如PyTorch、TensorFlow、ONNX模型“翻译”成RK3588芯片能高效执行的RKNN格式的关键桥梁。安装过程稍微绕一点因为我们需要从GitHub下载特定的发布包但跟着步骤走一点也不复杂。3.1 获取正确的安装包首先我们需要去RKNN Toolkit2的官方GitHub仓库下载版本1.5.2的发布包。你可以用浏览器打开也可以直接在终端里使用wget命令。这里我演示用wget的方式更符合我们全程命令行的风格。确保你还在rknn_env虚拟环境中命令行前有(rknn_env)然后找一个你喜欢的目录比如家目录下载压缩包cd ~ wget https://github.com/airockchip/rknn-toolkit2/archive/refs/tags/v1.5.2.tar.gz下载完成后解压这个文件tar -xzf v1.5.2.tar.gz现在你的家目录下会多出一个rknn-toolkit2-1.5.2的文件夹。进入该文件夹的packages子目录这里存放了针对不同Python版本和系统的预编译好的whl安装包。cd ~/rknn-toolkit2-1.5.2/packages ls -l执行ls后你会看到好几个.whl文件。我们的系统是Ubuntu x86_64即64位LinuxPython版本是3.8因此要找到文件名中包含cp38-cp38和linux_x86_64字样的文件。通常它的名字类似rknn_toolkit2-1.5.2xxxxxxx-cp38-cp38-linux_x86_64.whl。请以你实际看到的文件名为准。3.2 安装RKNN Toolkit2找到正确的whl文件后使用pip进行安装。这步操作必须在已激活的虚拟环境中进行。pip install ./rknn_toolkit2-1.5.2b642f30c-cp38-cp38-linux_x86_64.whl请将上面的文件名替换成你实际看到的。安装过程会自动处理所有依赖比如numpy、opencv-python等可能需要一点时间。安装完成后我们可以进行一个简单的验证确保工具包安装成功python -c from rknn.api import RKNN; print(RKNN Toolkit2 导入成功)如果没有任何报错输出了成功信息那么RKNN Toolkit2就已经在你的虚拟环境中安家落户了。至此开发机你的Ubuntu电脑上的模型转换环境全部搭建完成。你已经拥有了将通用模型转换为RKNN格式的能力。接下来我们就要实战演练拿一个具体的模型开刀。4. 实战将PyTorch模型转换为RKNN格式理论说再多不如亲手做一遍。我以一个在PyTorch下训练的MobileNetV3图像分类模型为例演示完整的转换流程。这个流程具有很强的通用性无论你是YOLO、ResNet还是其他什么模型步骤都是大同小异。我们会在虚拟环境中创建一个专门的项目文件夹让一切井井有条。4.1 准备模型与转换脚本首先退出packages目录在家目录下创建一个专门用于转换的工作文件夹比如叫mobilenetv3_convert并进入它。cd ~ mkdir mobilenetv3_convert cd mobilenetv3_convert接下来你需要将训练好的PyTorch模型文件通常是.pth或.pkl文件和模型定义文件model.py里面包含了MobileNetV3_large这个类的定义拷贝到这个文件夹里。这是转换的原材料。假设你的模型文件叫original_best.pkl。第一步我们需要把PyTorch模型导出为ONNX格式。ONNX是一种开放的模型交换格式RKNN Toolkit2对ONNX的支持非常友好通常作为转换的中间桥梁。创建一个Python脚本export_onnx.pynano export_onnx.py在打开的编辑器中输入以下内容。这个脚本做了几件事导入必要的库、加载模型结构和权重、创建一个随机输入张量模拟一张图片、最后调用torch.onnx.export函数导出模型。import torch # 假设你的模型定义在同一个目录下的 model.py 文件中 from model import MobileNetV3_large # 初始化模型这里num_classes根据你的分类任务设定例如2分类 model MobileNetV3_large(num_classes2) # 加载训练好的权重map_locationcpu表示加载到CPU上 model.load_state_dict(torch.load(original_best.pkl, map_locationcpu)) # 将模型设置为评估模式这会影响某些层如Dropout、BatchNorm的行为 model.eval() # 创建一个模拟输入batch_size1, 3通道RGB, 图片尺寸224x224 dummy_input torch.randn(1, 3, 224, 224) # 导出ONNX模型 torch.onnx.export(model, dummy_input, facial_emotion.onnx, # 输出的ONNX文件名 input_names[input], # 输入节点名称 output_names[output], # 输出节点名称 opset_version11) # ONNX算子集版本11是一个常用稳定版本 print(✅ ONNX 模型导出成功)按CtrlX然后按Y再按回车保存并退出nano编辑器。运行这个脚本python export_onnx.py如果一切顺利你会在当前目录下看到新生成的facial_emotion.onnx文件。这一步成功意味着你的模型已经从一个框架特定的格式变成了一个通用的、中间态的格式。4.2 使用RKNN Toolkit2进行最终转换现在重头戏来了。我们要用刚刚安装好的RKNN Toolkit2把ONNX模型“编译”成RK3588芯片能直接高效运行的RKNN格式。创建另一个转换脚本convert_rknn.pynano convert_rknn.py输入以下内容。这个脚本清晰地展示了RKNN转换的标准流程初始化、配置、加载、构建、导出。from rknn.api import RKNN # 1. 初始化RKNN对象 rknn RKNN() # 2. 进行基础配置。这里target_platform必须指定为rk3588告诉工具链目标芯片。 # 其他配置如量化、优化等级也可以在这里设置我们先做最简单的非量化转换。 print(-- Config model) ret rknn.config(target_platformrk3588) if ret ! 0: print(Config model failed!) exit(ret) # 3. 加载ONNX模型 print(-- Loading model) ret rknn.load_onnx(modelfacial_emotion.onnx) if ret ! 0: print(Load model failed!) exit(ret) # 4. 构建RKNN模型。do_quantizationFalse表示不进行量化量化可以减小模型体积、提升速度但可能损失少许精度初次转换建议关闭。 print(-- Building model) ret rknn.build(do_quantizationFalse) if ret ! 0: print(Build model failed!) exit(ret) # 5. 导出RKNN模型文件 print(-- Export rknn model) ret rknn.export_rknn(facial_emotion.rknn) if ret ! 0: print(Export rknn model failed!) exit(ret) # 6. 释放RKNN对象占用的资源 rknn.release() print(✅ RKNN 模型导出成功)保存并退出编辑器运行转换脚本python convert_rknn.py屏幕上会打印出详细的转换日志。如果最终看到“✅ RKNN 模型导出成功”和“Build model done”之类的信息那么恭喜你转换成功了当前目录下会生成一个facial_emotion.rknn文件。这个文件就是最终可以在RK3588设备上加载和运行的模型文件。你可以把整个mobilenetv3_convert文件夹打包准备传到RK3588开发板上进行测试了。5. 在RK3588设备上部署与测试模型在开发机上转换完成只是成功了上半场。下半场是要让它在真正的RK3588设备上跑起来。这需要在设备端安装运行时的支持库。整个过程和在开发机上的思路类似也是准备环境、安装包但具体的安装包和依赖有所不同。5.1 准备RK3588的Python环境首先通过SSH或者直接接上屏幕键盘登录到你的RK3588开发板。RK3588通常运行基于Linux的系统如Debian、Ubuntu Core或Buildroot。很多官方提供的系统镜像已经自带了Python 3.10。为了环境隔离我同样强烈建议在板子上创建一个虚拟环境。这里我们创建一个基于Python 3.10的虚拟环境命名为tf2_env名字随意。# 安装Python3.10的venv模块如果未安装 sudo apt update sudo apt install -y python3.10-venv # 创建虚拟环境 python3.10 -m venv ~/tf2_env # 激活虚拟环境 source ~/tf2_env/bin/activate激活后你的命令行提示符前应该会出现(tf2_env)。5.2 安装RKNN Toolkit Lite2RK3588设备上需要安装的不是完整的RKNN Toolkit2那是转换工具而是其运行时版本——RKNN Toolkit Lite2。它是一个轻量级的库只负责加载和运行RKNN模型进行推理。我们需要回到之前从GitHub下载的rknn-toolkit2-1.5.2文件夹。在packages目录里找到针对ARM架构aarch64和Python 3.10的whl文件。它的名字通常类似rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl。将这个文件通过U盘、SCP或者任何你喜欢的方式传输到RK3588开发板的某个目录下例如家目录~。在RK3588的虚拟环境中导航到该文件所在目录使用pip安装# 假设whl文件在家目录 cd ~ pip install ./rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl5.3 安装核心运行时库librknnrt.so这是非常关键且容易遗漏的一步。rknn_toolkit_lite2只是一个Python接口包实际的模型加载和硬件加速执行依赖于一个名为librknnrt.so的动态链接库。这是Rockchip NPU的底层驱动接口库。你需要从Rockchip的另一个GitHub仓库获取这个库。地址通常是https://github.com/rockchip-linux/rknpu2。在这个仓库里找到路径rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/。下载其中的librknnrt.so文件。将下载好的librknnrt.so文件拷贝到RK3588系统的库搜索路径下例如/usr/lib/。这需要sudo权限。# 假设librknnrt.so文件在当前目录 sudo cp librknnrt.so /usr/lib/ # 为了让系统立即识别可以更新一下动态链接库缓存 sudo ldconfig5.4 运行推理测试现在环境终于齐备了。将之前在开发机上生成的facial_emotion.rknn模型文件以及你写的测试图片和推理脚本一起传到RK3588板上。一个最简单的推理测试脚本test_rknn.py可能长这样from rknnlite.api import RKNNLite import numpy as np # 初始化RKNN Lite对象 rknn_lite RKNNLite() # 加载RKNN模型 print(-- Load RKNN model) ret rknn_lite.load_rknn(facial_emotion.rknn) if ret ! 0: print(Load RKNN model failed) exit(ret) # 初始化运行时环境这里指定核心类型为NPU核心RK3588 print(-- Init runtime environment) ret rknn_lite.init_runtime(core_maskRKNNLite.NPU_CORE_0) if ret ! 0: print(Init runtime environment failed) exit(ret) # 准备模拟输入数据需要根据你的模型预处理要求来这里只是个例子 inputs np.random.random((1, 3, 224, 224)).astype(np.float32) # 执行推理 print(-- Running model) outputs rknn_lite.inference(inputs[inputs]) # 处理输出 print(Inference result:, outputs) # 这里添加你的后处理代码比如argmax得到分类结果 # 释放资源 rknn_lite.release()在RK3588的虚拟环境中运行这个脚本如果能看到推理结果输出那么恭喜你一个完整的“从开发机到边缘设备”的RKNN模型部署流程你已经全部走通了这个过程虽然步骤不少但每一步都有其明确的目的。多操作几次你就会对整个AI模型边缘部署的链路有非常扎实的理解。遇到问题别慌多看看终端打印的日志信息大部分错误都有明确的提示。

相关新闻

STM32外设级安全机制:MDIO/SPDIFRX/RNG等故障检测与冗余设计

STM32外设级安全机制:MDIO/SPDIFRX/RNG等故障检测与冗余设计

STM32安全机制深度解析:外设级故障检测与冗余设计实践指南在功能安全关键型嵌入式系统(如工业控制、汽车电子、医疗设备)中,MCU外设模块的可靠性直接决定系统整体ASIL等级或SIL等级能否达标。本章内容并非泛泛而谈“安全很重要”&…

2026/5/17 12:49:52 阅读更多 →
BiliBiliCCSubtitle:B站字幕提取与转换的全平台解决方案

BiliBiliCCSubtitle:B站字幕提取与转换的全平台解决方案

BiliBiliCCSubtitle:B站字幕提取与转换的全平台解决方案 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 价值定位:为什么这款字幕工具能重…

2026/5/17 12:49:50 阅读更多 →
零配置部署DeepSeek-R1-Distill-Qwen-1.5B:CSDN镜像快速使用教程

零配置部署DeepSeek-R1-Distill-Qwen-1.5B:CSDN镜像快速使用教程

零配置部署DeepSeek-R1-Distill-Qwen-1.5B:CSDN镜像快速使用教程 1. 引言:为什么选择这个轻量级模型? 如果你正在寻找一个既能在本地快速运行,又具备不错推理能力的AI模型,DeepSeek-R1-Distill-Qwen-1.5B绝对值得一试…

2026/5/17 12:49:50 阅读更多 →

最新新闻

Umi-OCR终极指南:免费离线文字识别软件的完整配置与优化教程

Umi-OCR终极指南:免费离线文字识别软件的完整配置与优化教程

Umi-OCR终极指南:免费离线文字识别软件的完整配置与优化教程 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多…

2026/7/4 22:12:22 阅读更多 →
postcss-write-svg:革命性CSS SVG编写工具,让图形开发效率提升10倍!

postcss-write-svg:革命性CSS SVG编写工具,让图形开发效率提升10倍!

postcss-write-svg:革命性CSS SVG编写工具,让图形开发效率提升10倍! 【免费下载链接】postcss-write-svg Write SVGs directly in CSS 项目地址: https://gitcode.com/gh_mirrors/po/postcss-write-svg 你是否厌倦了在CSS和SVG文件之间…

2026/7/4 22:12:21 阅读更多 →
3大架构优化策略:如何构建高可用AI网关服务

3大架构优化策略:如何构建高可用AI网关服务

3大架构优化策略:如何构建高可用AI网关服务 【免费下载链接】new-api A unified AI model hub for aggregation & distribution. It supports cross-converting various LLMs into OpenAI-compatible, Claude-compatible, or Gemini-compatible formats. A cent…

2026/7/4 22:12:21 阅读更多 →
Agent Skills技能发现机制:如何让AI助手智能匹配任务与技能

Agent Skills技能发现机制:如何让AI助手智能匹配任务与技能

Agent Skills技能发现机制:如何让AI助手智能匹配任务与技能 【免费下载链接】agentskills Specification and documentation for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/ag/agentskills Agent Skills是GitHub推荐项目精选(…

2026/7/4 22:10:20 阅读更多 →
RestFB实战教程:10个常见Facebook API操作示例

RestFB实战教程:10个常见Facebook API操作示例

RestFB实战教程:10个常见Facebook API操作示例 【免费下载链接】restfb RestFB is a simple and flexible Facebook Graph API client written in Java. 项目地址: https://gitcode.com/gh_mirrors/re/restfb 想要在Java应用中快速集成Facebook功能&#xff…

2026/7/4 22:10:20 阅读更多 →
如何搭建Leela Chess Zero环境?5分钟快速启动你的AI象棋之旅

如何搭建Leela Chess Zero环境?5分钟快速启动你的AI象棋之旅

如何搭建Leela Chess Zero环境?5分钟快速启动你的AI象棋之旅 【免费下载链接】leela-chess **MOVED TO https://github.com/LeelaChessZero/leela-chess ** A chess adaption of GCPs Leela Zero 项目地址: https://gitcode.com/gh_mirrors/le/leela-chess L…

2026/7/4 22:08:18 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻