从YOLOv5到RKNN:零冲突转换YOLOv5模型至RK3588 NPU全指南
从YOLOv5到RKNN:零冲突转换YOLOv5模型至RK3588 NPU全指南
在嵌入式AI领域,将训练好的深度学习模型高效部署到边缘设备的NPU(神经网络处理器)上是提升性能的关键。本文将详细介绍如何在Ubuntu 20.04环境下,将YOLOv5l模型(.pt文件)通过ONNX中间格式,最终转换为适用于RK3588 NPU的RKNN模型(.rknn文件),并全程采用环境隔离技术确保无依赖冲突。
一、准备工作:构建干净的工作环境
环境污染是模型转换过程中最常见的问题之一,因此我们首先创建一个全新的工作区,确保所有操作在干净的环境中进行。
1. 清理与创建工作区
打开终端,执行以下命令清理可能存在的旧工作区并创建新的工作目录:
1 | # 回到主目录 |
2. 准备核心文件
在新工作区内,我们需要准备四个关键组成部分:YOLOv5源代码、预训练模型、校准图片集和图片列表文件。
1 | # 1. 克隆YOLOv5官方仓库 |
完成后,执行ls
命令检查,确保工作区内包含以下内容:
- yolov5(文件夹)
- yolov5l.pt(模型文件)
- images(文件夹)
- dataset.txt(文件)
二、任务一:导出ONNX模型(隔离环境操作)
ONNX(Open Neural Network Exchange)是一种通用的模型中间格式,我们首先将PyTorch模型转换为ONNX格式。为避免依赖冲突,这一步将在独立的虚拟环境中进行。
1. 创建并激活虚拟环境
1 | # 进入YOLOv5目录 |
激活成功后,终端提示符前会显示(onnx_export_venv)
,表示当前处于隔离环境中。
2. 安装依赖库
为加快下载速度并确保版本兼容,我们使用清华源并锁定特定版本的ONNX库:
1 | # 配置清华源 |
3. 导出ONNX模型
将预训练模型复制到当前目录并执行导出命令:
1 | # 复制模型文件到当前目录 |
4. 整理结果并清理环境
导出成功后,会生成yolov5l.onnx
文件。我们将其移至工作区根目录,然后销毁当前虚拟环境(使命已完成):
1 | # 将ONNX模型移至工作区根目录 |
此时,工作区根目录应已出现yolov5l.onnx
文件,第一步转换完成。
三、任务二:转换为RKNN模型(独立隔离环境)
接下来,我们在全新的虚拟环境中使用RKNN-Toolkit2将ONNX模型转换为RK3588可识别的RKNN模型。
1. 创建并激活新虚拟环境
1 | # 确保在rknn_workspace目录下 |
终端提示符前会显示(rknn_convert_venv)
,表示进入新的隔离环境。
2. 安装RKNN-Toolkit2
1 | # 配置清华源 |
该命令会自动安装所有依赖的兼容版本库,无需手动干预。
3. 准备转换脚本
创建convert_rknn.py
脚本,用于执行模型转换:
1 | nano convert_rknn.py |
复制以下代码到文件中:
1 | from rknn.api import RKNN |
保存并退出(按Ctrl+O
,回车,再按Ctrl+X
)。
4. 准备量化校准图片
模型量化是提升NPU运行效率的关键步骤,需要20-30张代表性图片作为校准数据。如果没有现成图片,可以从视频中提取:
(1)安装OpenCV用于视频帧提取
1 | pip install opencv-python |
(2)创建视频帧提取脚本
1 | nano extract_frames.py |
复制以下代码:
1 | import cv2 |
(3)执行帧提取并更新数据集列表
1 | # 修改脚本中的VIDEO_PATH为实际视频路径后执行 |
5. 执行RKNN转换
一切准备就绪后,运行转换脚本:
1 | python3 convert_rknn.py |
转换过程会持续几分钟,成功完成后会显示类似以下的日志:
1 | I rknn-toolkit2 version: 2.3.2 |
此时,工作区根目录会生成yolov5l.rknn
文件,这就是RK3588 NPU可直接使用的模型文件。
四、常见问题与解决方案
错误:Dataset file ./dataset.txt not found!
- 原因:未生成数据集列表文件或文件路径错误
- 解决:确保images文件夹中有图片,并重新执行dataset.txt生成命令
ONNX导出失败
- 原因:YOLOv5版本与依赖库不兼容
- 解决:使用本文指定的YOLOv5仓库和onnx==1.12.0版本
RKNN转换时量化失败
- 原因:校准图片数量不足或与模型场景不匹配
- 解决:确保提供20-30张与模型应用场景相符的图片(如检测交通场景则提供交通图片)
五、总结与后续步骤
通过本文介绍的两步隔离环境转换法,我们成功将YOLOv5l模型转换为RK3588 NPU适用的RKNN模型,全程避免了依赖冲突问题。转换后的yolov5l.rknn
文件可直接部署到RK3588设备。
后续步骤建议:
- 将
yolov5l.rknn
传输到已安装Ubuntu系统的RK3588开发板 - 使用RKNN-Toolkit2或RKNN Runtime API编写推理脚本
- 在RK3588上测试模型性能与精度,必要时进行优化调整
这种隔离环境的转换方法不仅适用于YOLOv5,也可推广到其他深度学习模型的RKNN转换过程,为嵌入式AI部署提供了可靠的技术参考。
- Title: 从YOLOv5到RKNN:零冲突转换YOLOv5模型至RK3588 NPU全指南
- Author: John Doe
- Created at : 2025-08-21 18:34:37
- Updated at : 2025-08-26 10:07:10
- Link: https://redefine.ohevan.com/2025/08/21/从YOLOv5到RKNN:零冲突转换YOLOv5模型至RK3588-NPU全指南/
- License: This work is licensed under CC BY-NC-SA 4.0.