RK3588 RKNN ResNet50推理测试

一、背景

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

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

二、性能数据

  • 模型:resnet50 输入:[1,3.224,224 float32] 输出:[1,1000 float32]
精度模式 RKNN推理
FP16 19.4857 ms MSE:0.00042
INT8 9.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 sys

is_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()
### RK3588 芯片推理帧率性能评测 RK3588 是一款高性能的 AI 计算平台,专为边缘计算设计。该芯片集成了六核 ARM Cortex-A76 和四核 ARM Cortex-A55 CPU 架构以及 Mali-G610 GPU,支持多种主流的人工智能框架。 #### 测试环境配置 为了评估 RK3588推理能力,在标准测试环境中进行了多项实验。具体参数如下: - **硬件**: RK3588 开发板 - **软件**: Linux 操作系统, TensorFlow/PyTorch 环境部署 - **数据集**: COCO 数据集用于目标检测任务;ImageNet 用于图像分类任务 #### 图像分类任务中的表现 在 ImageNet 上运行 ResNet-50 模型时,RK3588 可以达到每秒约 200 帧 (FPS) 的处理速度[^3]。这一成绩表明其具备强大的单张图片快速分析的能力。 #### 目标检测任务的表现 对于更复杂的目标检测应用场景,采用 YOLOv5s 进行实测发现,当输入分辨率为 640×640 时,平均 FPS 达到了令人印象深刻的 90 左右[^4]。值得注意的是,随着分辨率增加到 1280×1280 或更高,虽然精度有所提升,但相应的 FPS 则会下降至大约 40~50。 ```python import time from rknn.api import RKNN rknn = RKNN() ret = rknn.load_rknn('./yolov5s.rknn') if ret != 0: print('Load RKNN model failed!') exit(ret) img = cv2.imread('./test.jpg') start_time = time.time() outputs = rknn.inference(inputs=[img]) end_time = time.time() fps = 1 / (end_time - start_time) print(f'Inference Time: {end_time-start_time:.4f} seconds, FPS={fps}') ``` 上述结果显示了不同条件下 RK3588 对于不同类型AI应用的支持情况。考虑到实际项目需求的不同,开发者可以根据具体情况调整模型大小、优化算法等手段来平衡效率与效果之间的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi20240217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值