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

RK3588 RKNN ResNet50推理测试

RK3588 RKNN ResNet50推理测试

    • 一、背景
    • 二、性能数据
    • 三、操作步骤
      • 3.1 安装依赖
      • 3.2 安装rknn-toolkit,更新librknnrt.so
      • 3.3 下载推理图片
      • 3.4 生成`onnx`模型转换脚本
      • 3.5 生成rknn模型
      • 3.6 运行rknn模型

一、背景

在嵌入式设备上进行AI推理时,我们面临着算力有限、功耗敏感等挑战。RK3588芯片搭载的NPU(神经网络处理单元)专为加速AI运算设计,而RKNN是Rockchip专为NPU定制的推理框架。通过将通用模型(如ONNX)转换为RKNN格式,可以充分发挥硬件加速能力,实现:

  • 性能提升:相比CPU运算可提速数十倍
  • 能效优化:相同任务功耗降低约80%
  • 模型压缩:通过量化技术减小模型体积

二、性能数据

  • 模型:resnet50 输入:[1,3.224,224 float32] 输出:[1,1000 float32]
精度模式RKNN推理
FP1619.4857 ms MSE:0.00042
INT89.3501 ms MSE:0.00417

三、操作步骤

3.1 安装依赖

apt install software-properties-common -y
add-apt-repository ppa:deadsnakes/ppa   #添加Python软件源
apt install python3.10
apt install python3.10-dev
wget https://bootstrap.pypa.io/get-pip.py
python3.10 get-pip.py
pip3.10 install numpy
/usr/bin/python3.10 -m pip install onnx
pip3.10 install torch
pip3.10 install torchvision
apt install python3.10-setuptools

为什么需要这些依赖?

  • numpy:处理张量数据的基础数学库
  • torch:PyTorch框架用于加载预训练模型
  • onnx:模型转换的中间格式标准

3.2 安装rknn-toolkit,更新librknnrt.so

# 下载RKNN Toolkit(版本需与NPU驱动匹配)
wget https://github.com/airockchip/rknn-toolkit2/archive/refs/tags/v2.3.0.tar.gz
tar -xf v2.3.0.tar.gz
cd rknn-toolkit2-2.3.0/# 安装Python接口
pip3.10 install -r rknn-toolkit2/packages/arm64/arm64_requirements_cp310.txt
pip3.10 install rknn-toolkit2/packages/arm64/rknn_toolkit2-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip3.10 install rknn-toolkit-lite2/packages/rknn_toolkit_lite2-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
cp rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so /usr/lib/librknnrt.so

工具链组成说明

  • rknn-toolkit:模型转换工具
  • librknnrt.so:NPU运行时加速库
  • rknnlite:轻量级推理接口

3.3 下载推理图片

wget https://raw.githubusercontent.com/hi20240217/csdn_images/refs/heads/main/YellowLabradorLooking_new.jpg

3.4 生成onnx模型转换脚本

cat> resnet50.py<<-'EOF' 
import requests
from PIL import Image
from io import BytesIO
import torchvision.transforms as transforms
import torch
import numpy as np
import torchvision.models as models
import sysis_half=int(sys.argv[1])# 读取图片
image = Image.open("YellowLabradorLooking_new.jpg")# 定义预处理流程
preprocess = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])# 应用预处理
img_t = preprocess(image)
input_tensor = torch.unsqueeze(img_t, 0).float()
http://www.lryc.cn/news/2386331.html

相关文章:

  • SQLMesh 宏操作符详解:提升 SQL 查询的灵活性与效率
  • leetcode513.找树左下角的值:递归深度优先搜索中的最左节点追踪之道
  • 基于Flink的数据中台管理平台
  • AI-Ready TapData:如何基于 MCP 协构建企业级 AI 实时数据中枢?(含教程)
  • Spring Boot 登录实现:JWT 与 Session 全面对比与实战讲解
  • 【HTML-5】HTML 实体:完整指南与最佳实践
  • SpringBoot 项目实现操作日志的记录(使用 AOP 注解模式)
  • AI|Java开发 IntelliJ IDEA中接入本地部署的deepseek方法
  • 【疑难杂症】Vue前端下载文件无法打开 已解决
  • 【1——Android端添加隐私协议(unity)1/3】
  • Linux之概述和安装vm虚拟机
  • 深入理解 Linux 的 set、env 和 printenv 命令
  • LeetCode热题100--19.删除链表的倒数第N个结点--中等
  • 开发AR导航助手:ARKit+Unity+Mapbox全流程实战教程
  • git学习与使用(远程仓库、分支、工作流)
  • 嵌入式预处理链接脚本lds和map文件
  • 9. Spring AI 各版本的详细功能与发布时间整理
  • 《Android 应用开发基础教程》——第十四章:Android 多线程编程与异步任务机制(Handler、AsyncTask、线程池等)
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 开源 OIDC(OpenID Connect)身份提供方(IdP)、iam选型
  • Android OkHttp控制链:深入理解网络请求的流程管理
  • 【JVM 01-引言入门篇】
  • Pandas数据规整
  • ThreadLocal线程本地变量在dubbo服务使用时候遇到的一个坑
  • pga 作用
  • setup.py Pip wheel
  • GO 语言进阶之 时间处理和Json 处理
  • 对WireShark 中的UDP抓包数据进行解析
  • Flannel后端为UDP模式下,分析数据包的发送方式(二)
  • 从 0 到 1:Spring Boot 与 Spring AI 深度实战(基于深度求索 DeepSeek)