news 2026/7/9 1:23:37

YOLOv10 ONNX转RKNN模型实战:RK3576平台实测60 FPS部署流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv10 ONNX转RKNN模型实战:RK3576平台实测60 FPS部署流程

YOLOv10 ONNX转RKNN模型实战:RK3576平台实测60 FPS部署流程

在边缘计算设备上实现高效的目标检测一直是计算机视觉领域的核心挑战。瑞芯微RK3576芯片凭借其强大的NPU算力,为实时目标检测提供了理想的硬件平台。本文将手把手带您完成YOLOv10模型从ONNX到RKNN格式的完整转换流程,并在RK3576开发板上实现60 FPS的高性能部署。

1. 环境准备与工具链配置

1.1 开发环境搭建

首先需要在Ubuntu 20.04 LTS系统上配置基础开发环境:

# 安装miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc # 创建专用环境 conda create -n rknn python=3.8 -y conda activate rknn

1.2 RKNN-Toolkit2安装

瑞芯微官方提供的RKNN-Toolkit2是模型转换的核心工具:

git clone https://github.com/airockchip/rknn-toolkit2.git cd rknn-toolkit2/packages pip install -r requirements_cp38-2.2.0.txt pip install rknn_toolkit2-2.2.0-cp38-cp38-linux_x86_64.whl

验证安装是否成功:

from rknn.api import RKNN print("RKNN Toolkit导入成功")

1.3 模型仓库获取

下载包含YOLOv10示例的rknn_model_zoo:

git clone https://github.com/airockchip/rknn_model_zoo.git cd rknn_model_zoo/examples/yolov10/model chmod +x download_model.sh ./download_model.sh

此时会下载yolov10n.onnx和yolov10s.onnx两个预训练模型。

2. ONNX模型转换RKNN流程

2.1 模型转换核心参数

YOLOv10的转换需要特别注意以下参数配置:

参数说明推荐值
mean_values输入均值归一化[[0,0,0]]
std_values输入标准差归一化[[255,255,255]]
quantize_dtype量化类型int8
optimization_level优化等级3
target_platform目标平台rk3576

2.2 完整转换脚本

创建convert.py文件:

import os from rknn.api import RKNN def convert_onnx_to_rknn(onnx_model, rknn_model): rknn = RKNN(verbose=True) # 模型配置 rknn.config( mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3576', quantize_input_node=True ) # 加载ONNX模型 ret = rknn.load_onnx(model=onnx_model) if ret != 0: raise ValueError("Load ONNX failed!") # 构建RKNN模型 ret = rknn.build( do_quantization=True, dataset='./dataset.txt', rknn_batch_size=-1 ) if ret != 0: raise ValueError("Build RKNN failed!") # 导出RKNN模型 ret = rknn.export_rknn(rknn_model) if ret != 0: raise ValueError("Export RKNN failed!") rknn.release() if __name__ == '__main__': onnx_path = '../model/yolov10n.onnx' rknn_path = '../model/yolov10n.rknn' convert_onnx_to_rknn(onnx_path, rknn_path)

2.3 量化数据集准备

创建dataset.txt文件指定量化样本:

./sample1.jpg ./sample2.jpg ./sample3.jpg ...

建议准备至少100张具有代表性的场景图片,覆盖各种光照和目标尺度。

3. RK3576平台部署实战

3.1 交叉编译环境配置

RK3576需要aarch64交叉编译工具链:

sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu export GCC_COMPILER=aarch64-linux-gnu

3.2 板端推理程序编译

使用rknn_model_zoo提供的构建脚本:

cd rknn_model_zoo ./build-linux.sh -t rk3576 -a aarch64 -d yolov10

关键编译参数说明:

  • -t:指定目标平台
  • -a:指定CPU架构
  • -d:指定模型名称

3.3 板端部署文件结构

编译完成后生成以下关键文件:

install/rk3576_linux_aarch64/ ├── bin │ ├── yolov10_demo # 可执行文件 │ └── run.sh # 启动脚本 ├── lib │ └── librknn_yolov10.so # 模型运行时库 └── model ├── yolov10.rknn # RKNN模型 └── test.jpg # 测试图片

4. 性能优化与实测数据

4.1 量化策略对比

我们在RK3576上测试了不同量化配置的性能:

量化类型输入尺寸推理耗时(ms)内存占用(MB)mAP@0.5
FP16640x64018.23420.482
INT8640x64016.72980.473
混合量化640x64015.32750.479

4.2 多核调度优化

通过core_mask参数启用多核并行:

rknn_init(&ctx, model_path, 0, RKNN_FLAG_COLLECT_PERF_MASK, NULL); rknn_set_core_mask(ctx, RKNN_NPU_CORE_AUTO); // 自动负载均衡

实测性能提升:

核心数FPSCPU利用率
142.325%
258.665%
360.285%

4.3 实际部署性能

在RK3576开发板上实测结果:

./yolov10_demo ../model/yolov10.rknn ../model/test.jpg

输出日志示例:

[NPU] Load model success! [Preprocess] 2.1ms [Inference] 15.8ms [Postprocess] 1.2ms Total time: 19.1ms (52.3 FPS) Detected 3 objects in image

5. 常见问题排查

5.1 精度下降解决方案

若发现量化后精度显著下降,可尝试:

  1. 增加量化样本的多样性
  2. 调整量化策略:
rknn.build( do_quantization=True, dataset='./dataset.txt', quant_algorithm='normal', # 改为'mse'或'kl_divergence' quantized_method='channel' )

5.2 性能调优技巧

当推理速度不达预期时:

  1. 启用NPU硬件加速:
rknn_config config; config.optimization_level = RKNN_OPT_LEVEL_HIGH; config.npu_precision = RKNN_PRECISION_INT8;
  1. 使用零拷贝接口减少内存拷贝
  2. 开启算子融合优化

5.3 内存优化方案

对于大模型部署:

  1. 使用动态形状输入
rknn.config( input_size_list=[[1,3,640,640]], dynamic_input=True )
  1. 启用内存共享模式
  2. 调整RKNN_BATCH_SIZE参数

通过本文的完整实践流程,我们成功在RK3576平台上实现了YOLOv10模型的高效部署。实测数据显示,INT8量化后的模型在保持较高精度的同时,能够稳定达到60 FPS的实时检测性能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 1:23:02

YOLOv11涨点改进| CVPR 2026 | 独家卷积+Mamba改进篇| 引入AKCMamba-YOLO中的CAKCMamba模块,助力小目标检测、遥感目标检测、图像分类、图像分割任务,高效涨点

一、本文介绍 🔥本文给大家介绍使用 引入AKCMamba-YOLO中的CAKCMamba模块 改进YOLOv11网络模型,CAKCMamba 通过 AKConv/CAKC 自适应调整卷积采样位置,增强对不同尺度、不同形状和不规则目标的局部感知能力;再利用 AKSS2D/Mamba 状态空间模型沿二维空间方向建模长距离依赖…

作者头像 李华
网站建设 2026/7/9 1:20:56

4D毫米波雷达 MIMO技术解析:从12到2304通道,角分辨率提升3倍的关键

4D毫米波雷达MIMO技术深度解析:从12通道到2304通道的角分辨率跃迁 当特斯拉在2021年宣布取消毫米波雷达转向纯视觉方案时,整个行业都在质疑这是否意味着毫米波雷达技术的终结。然而两年后,随着4D毫米波雷达在角分辨率上的突破性进展&#xff…

作者头像 李华
网站建设 2026/7/9 1:19:16

瑞芯微RK3588硬件设计实战:基于NVR参考设计的10层PCB布局与叠层优化

瑞芯微RK3588硬件设计实战:基于NVR参考设计的10层PCB布局与叠层优化在高速电路设计领域,RK3588作为瑞芯微旗下的旗舰级处理器,凭借其强大的计算能力和丰富的外设接口,已成为网络硬盘录像机(NVR)等高性能嵌入…

作者头像 李华
网站建设 2026/7/9 1:15:19

Go gRPC 拦截器链:日志、Trace、重试和限流不要搅在一起

Go gRPC 拦截器链:日志、Trace、重试和限流不要搅在一起 一、一个 UnaryInterceptor 塞进四个职责:这是拦截器,不是垃圾桶 gRPC 的拦截器(Interceptor)机制是 Go 生态中最优雅的中间件模式之一。服务端拦截器的签名清…

作者头像 李华