惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
MyScale Blog
MyScale Blog
A
About on SuperTechFans
博客园_首页
B
Blog RSS Feed
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
I
InfoQ
罗磊的独立博客

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
RKNN-Toolkit2 Quick Start
Yiwei Zhang · 2023-12-06 · via 又见苍岚

RKNN-Toolkit2 是为用户提供在 PC 平台上进行模型转换、推理和性能评估的开发套件,本文记录 Demo 运行过程。

RKNN

RKNN(Rockchip Neural Network)是由瑞芯微(Rockchip)推出的神经网络加速器和推理引擎。它是一种硬件加速器,专门用于在瑞芯微的处理器上执行神经网络推理任务,提高神经网络模型在嵌入式设备上的性能。

主要特点和功能:

  1. 硬件加速: RKNN 专注于为瑞芯微处理器提供硬件级别的神经网络加速。这有助于在嵌入式设备上更高效地执行深度学习模型的推理任务。
  2. 支持的框架: RKNN 支持多种深度学习框架,包括 TensorFlow、Caffe、ONNX 等。这使得用户可以使用不同的框架训练模型,并将其转换为 RKNN 支持的格式进行部署。
  3. 模型转换工具: RKNN 提供了模型转换工具,允许用户将训练好的深度学习模型转换为 RKNN 支持的格式。这通常涉及将模型转换为一个中间表示,然后再将其编译成适用于 RKNN 加速器的格式。
  4. 支持的设备: RKNN 主要设计用于瑞芯微的处理器。这些处理器广泛应用于嵌入式设备,如智能摄像头、边缘计算设备等。
  5. 优化和定制: RKNN 允许用户对模型进行优化,以在瑞芯微处理器上取得更好的性能。用户可以根据应用的需求进行不同程度的优化和定制。

RKNN-Toolkit2

RKNN-Toolkit2 是一个软件开发工具包,用户可以在 PC 和 Rockchip NPU 平台(RK3566,RK3568,RK3588,RK3588S,RV1103,RV1106,RK3562)上进行模型转换、推理和性能评估。用户通过该工具提供的 Python 接口可以便捷地完成以下功能:

  1. 模型转换:支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用。
  2. 量化功能: 支 持 将 浮 点 模 型 量 化 为 定 点 模 型 , 目 前 支 持 的 量 化 方 法 为 非 对 称 量 化(asymmetric_quantized-8),并支持混合量化功能。
  3. 模型推理:能够在 PC(Linux x86 平台)上模拟 Rockchip NPU 运行 RKNN 模型并获取推理结果;或将 RKNN 模型分发到指定的NPU 设备上进行推理并获取推理结果。
  4. 性能和内存评估:将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能和内存占用情况。
  5. 量化精度分析:该功能将给出模型量化后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路。
  6. 模型加密功能:使用指定的加密等级将 RKNN 模型整体加密。因为 RKNN 模型的解密是在NPU 驱动中完成的,使用加密模型时,与普通 RKNN 模型一样加载即可,NPU 驱动会自动对其进行解密。

依赖说明

目前仅支持 Ubuntu 操作系统。需要满足以下运行环境要求:

  • 操作系统 Ubuntu18.04(x64)及以上
  • Python 版本 3.6 / 3.8 / 3.10

安装 RKNN-Toolkit2

该工具位于开源库 rknn-toolkit2 中,需要将仓库克隆到本地

  • 仓库中 doc/requirements* 等 txt 文件为 python 依赖包,根据自己的 Python 版本安装对应的依赖
1
pip install -r doc/requirements_cp36-1.x.x.txt
  • 安装仓库 packages 文件夹中的 rknn_toolkit2
1
sudo pip install rknn_toolkit2-1.x.x+xxxxxxxx-cp36-cp36m-linux_x86_64.whl
  • 检查是否安装成功
1
2
3
$ python
>>> from rknn.api import RKNN
>>>

错误解决

我在检查是否安装成功过程中遇到了报错:

1
mportError: libGL.so.1: cannot open shared object file: No such file or dir

出现这种情况的原因主要是因为使用Docker构建应用时缺少cv2的依赖。可以通过安装所需的附加依赖项来解决此错误。

1
apt-get update && apt-get install libgl1

运行示例

此处以 examples/pytorch/resnet18 为例

进入仓库的该文件夹,执行 python test.py 命令即可

1
2
3
4
5
6
7
8
9

-----TOP 5-----
[812]: 0.9997438192367554
[404]: 0.00019667591550387442
[657]: 1.2877936569566373e-05
[833]: 8.015852472453844e-06
[466 744 895]: 6.324138212221442e-06

done

其中核心过程如下:

过程 代码
生成 pytorch 的 pt 模型 export_pytorch_model()
创建 RKNN 对象 rknn = RKNN(verbose=True)
配置 RKNN 对象 rknn.config(mean_values=[123.675, 116.28, 103.53], std_values=[58.395, 58.395, 58.395], target_platform=‘rk3586’)
RKNN 对象加载 Pytorch 模型 rknn.load_pytorch(model=model, input_size_list=input_size_list)
构建 RKNN 模型 rknn.build(do_quantization=True, dataset=‘./dataset.txt’)
输出 RKNN 模型 rknn.export_rknn(‘./resnet_18.rknn’)
初始化 RKNN 运行环境 rknn.init_runtime()
RKNN 推断得到结果 outputs = rknn.inference(inputs=[img])

参考资料

文章链接:
https://www.zywvvd.com/notes/study/deep-learning/rknn/quickstart/rknn-quickstart/