RKNN-Toolkit2 是为用户提供在 PC 平台上进行模型转换、推理和性能评估的开发套件,本文记录 Demo 运行过程。
RKNN
RKNN(Rockchip Neural Network)是由瑞芯微(Rockchip)推出的神经网络加速器和推理引擎。它是一种硬件加速器,专门用于在瑞芯微的处理器上执行神经网络推理任务,提高神经网络模型在嵌入式设备上的性能。
主要特点和功能:
- 硬件加速: RKNN 专注于为瑞芯微处理器提供硬件级别的神经网络加速。这有助于在嵌入式设备上更高效地执行深度学习模型的推理任务。
- 支持的框架: RKNN 支持多种深度学习框架,包括 TensorFlow、Caffe、ONNX 等。这使得用户可以使用不同的框架训练模型,并将其转换为 RKNN 支持的格式进行部署。
- 模型转换工具: RKNN 提供了模型转换工具,允许用户将训练好的深度学习模型转换为 RKNN 支持的格式。这通常涉及将模型转换为一个中间表示,然后再将其编译成适用于 RKNN 加速器的格式。
- 支持的设备: RKNN 主要设计用于瑞芯微的处理器。这些处理器广泛应用于嵌入式设备,如智能摄像头、边缘计算设备等。
- 优化和定制: RKNN 允许用户对模型进行优化,以在瑞芯微处理器上取得更好的性能。用户可以根据应用的需求进行不同程度的优化和定制。
RKNN-Toolkit2
RKNN-Toolkit2 是一个软件开发工具包,用户可以在 PC 和 Rockchip NPU 平台(RK3566,RK3568,RK3588,RK3588S,RV1103,RV1106,RK3562)上进行模型转换、推理和性能评估。用户通过该工具提供的 Python 接口可以便捷地完成以下功能:
- 模型转换:支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用。
- 量化功能: 支 持 将 浮 点 模 型 量 化 为 定 点 模 型 , 目 前 支 持 的 量 化 方 法 为 非 对 称 量 化(asymmetric_quantized-8),并支持混合量化功能。
- 模型推理:能够在 PC(Linux x86 平台)上模拟 Rockchip NPU 运行 RKNN 模型并获取推理结果;或将 RKNN 模型分发到指定的NPU 设备上进行推理并获取推理结果。
- 性能和内存评估:将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能和内存占用情况。
- 量化精度分析:该功能将给出模型量化后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路。
- 模型加密功能:使用指定的加密等级将 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 |
---|
- 检查是否安装成功
123 | $ 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
命令即可
123456789 | -----TOP 5-----812: 0.9997438192367554404: 0.00019667591550387442657: 1.2877936569566373e-05833: 8.015852472453844e-06466 744 895: 6.324138212221442e-06done |
---|
其中核心过程如下:
过程 | 代码 |
---|---|
生成 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://github.com/rockchip-linux/rknn-toolkit2
- https://blog.csdn.net/qq_39691492/article/details/130688233
文章链接: https://cloud.tencent.com/developer/article/2369193