RKNN SDK User Guide学习要点及环境配置

1、RKNN-Toolkit2 《RKNN SDK User Guide V1.60

1.1 RKNN 工具链

RKNN 软件栈可以帮助用户快速的将 AI 模型部署到 Rockchip 芯片。整体的框架如下:
RKNN-Toolkit2 是为用户提供在计算机上进行 模型转换 推理 性能评估 的开发套件。
RKNN Runtime 负责加载 RKNN 模型,并调用 NPU 驱动实现在 NPU 上推理 RKNN 模型。

1.2 RKNN 使用说明

1.2.1 模型转换

模型转换是 RKNN-Toolkit2 的核心功能之一,它允许用户将各种深度学习模型从不同的框架转换为 RKNN 格式以在 RKNPU 上运行,用户可以参考模型转换流程图以帮助理解如何进行模型转换。模型转换流程如下:
在模型转换之前,用户需要进行一些配置以确保模型转换的正确性和性能。配置参数可以通过 rknn.config() 接口进行设置,包括设置输入均值、归一化值、是否量化等。

1.2.2 RKNN-Toolkit2 模型量化功能

RKNN-Toolkit2 提供三种量化算法和两种量化方法,用户可以通过 rknn.config()中的 quantized_algorithm 和 quantized_method 参数来选择。
  • 三种量化算法(quantized_algorithm):

1. Normal 量化算法:通过计算模型中特征(feature)的浮点数最大值和最小值来确定量 化范围的最大值和最小值。算法的特点是速度较快,但是遇到特征分布不均衡时效果较差,推荐量化数据量一般为 20-100 张左右。

2. MMSE 量化算法:通过最小化浮点数与量化反量化后浮点数的均方误差损失确定量化范围的最大值和最小值,能够一定程度的缓解大异常值带来的量化精度丢失问题。由于采用暴力迭代的方式,速度较慢,但通常会比 normal 具有更高的精度,推荐量化数据量一般 为 20-50 张左右,用户也可以根据量化时间长短对量化数据量进行适当增减。
说明:MMSE 量化算法运行速度较慢,内存消耗大,相比 KL_Divergence 量化算法能够更好的缓解异常值造成的量化精度丢失问题。对于量化友好的模型可尝试使用 MMSE 量化算法来提高量化精度, 因为在多数场景下 MMSE 量化精度要高于 Normal 和 KL-Divergence 量化算法
3. KL-Divergence 量化算法:将模型中特征( feature )中浮点数和定点数抽象成两个分布,通过调整不同的阈值来更新浮点数和定点数的分布,并根据 KL 散度衡量两个分布的相似性来确定量化范围的最大值和最小值。所用时间会比 normal 多一些,但比 mmse 会少很多, 在某些场景下(feature 分布不均匀时)可以得到较好的改善效果,推荐量化数据量一般为
20-100 张左右。
  • 两种量化方法(quantized_method):
1. Layer 量化方式: Layer 量化方式将同一层网络的所有通道作为一个整体进行量化,所有通道共享相同的量化参数。
2. Channel 量化方式: Channel 量化方式将同一层网络的各个通道独立进行量化,每个通道有自己的量化参数。通常情况下,Channel 量化方式比 Layer 量化方式具有更高的精度。

1.3 模型量化

1.3.1 量化概念

模型量化是指将深度学习模型中的浮点参数和操作转换为定点表示,如 FLOAT32 转换为 INT8 等。量化能够降低内存占用,实现模型压缩和推理加速,但会造成一定程度的精度损失。

1.3.2 Per-Layer 量化和 Per-Channel 量化

Per-Layer 量化将网络层的所有通道作为一个整体进行量化,所有通道共享相同的量化参数。Per-Channel 量化将网络层的各个通道独立进行量化,每个通道有自己的量化参数。 Per-Channel 量化更好的保留各通道的信息,能够更好的适应不同通道之间的差异,提供更好的量化效果。区别如下图所示。
2.3 量化方法优缺点对比
量化感知训练(英文名称 Quantization-aware Training ,简称 QAT )是一种量化训练方 式,该方式旨在解决低比特量化的精度损失问题。与后训练量化(英文名称 Post Training Quantization,简
PTQ )对比,两种量化方法的特点如下 :
量化说明:
量化校正集用于计算激活值的量化范围,在选择量化校正集时 应覆盖模型实际应用场 景的不同数据分布 ,例如对于分类模型,量化校正集应包含实际应用场景中不同类别的图片。一般推荐量化校正集数量为 20-200 张,可根据量化算法的运行时间适当增减。需要注 意的是,增加量化校正集数量会增加量化算法的运行时间但不一定能提高量化精度。

2、RKNN SDK 快速上手指南RKNN Toolkit V1.75

2.1 RKNN-Toolkit 

2.1.1功能及环境

RKNN-Toolkit 是为用户提供在 PCRockchip NPU 平台上进行模型转换推理性能评估的开发套件,RKNN Toolkit各平台功能支持详情

2.1.2 环境配置及测试

1)首先安装minconda:

版本为Miniconda3-4.5.4-Windows-x86_64(python36).exe,因为此版本默认的python为3.6.5

2)创建虚拟环境并激活

创建虚拟环境:conda create --name=rknn python=3.6.8

激活虚拟环境:conda activate rknn

3)安装深度学习框架

注意涉及网速问题添加镜像源 

如:pip install tensorflow==1.14.0  -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install tensorflow==1.14.0 实际证明安装1.14.0版本是有问题的,见后面处理方法
pip install torch==1.10.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
pip install torchvision==0.11.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
pip install mxnet==1.5.0
pip install opencv-python==4.3.0.38
pip install gluoncv
4)安装VS编译器

直接进入第5)步会安装失败,根据错误提示需要安装VS的编译器。

去官网下载VS2022免费版安装包,并运行,如下图所示。

安装并启动后,可执行步骤5

5) 安装 rknn-toolkit

进入rknn_toolkit-1.7.5-cp36-cp36m-win_amd64.whl所在的路径,执行下面的指令。

pip install rknn_toolkit-1.7.5-cp36-cp36m-win_amd64.whl
6)检查 RKNN-Toolkit 是否安装成功
(rknn) D:\RknnToolkit\rknn-toolkit-v1.7.5-packages\packages>python
Python 3.6.5 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] 
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from rknn.api import RKNN
>>>

如果导入 RKNN 模块没有失败,说明安装成功。

7)模型转换

首先按照D:\RknnToolkit\rknn_model_zoo-2.3.0\examples\yolov8\README.md中说明在地址

https://ftrg.zbox.filez.com/v2/delivery/data/95f00b0fc900458ba134f8b180b3f7a1/examples/yolov8/yolov8n.onnx

下载适用于RV1126的Yolov8n.onnx模型,不同于常规的yolov8n.onnx,有1输入9输出。用netron查看结果如下图所示。

切换到onnx转RKNN的python路径(rknn)

cd D:\RknnToolkit\rknn_model_zoo-2.3.0\examples\yolov8\python

注意:选择20~30张张量化图像文件。

执行如下指令:

(rknn) D:\RknnToolkit\rknn_model_zoo-2.3.0\examples\yolov8\python>python convert.py ../model/yolov8n.onnx rv1126

执行会提示如下警告

FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.   np_resource = np.dtype([("resource", np.ubyte, 1)])

网络查找原因并处理:原因:版本过高,先卸载再安装numpy执行如下指令

pip uninstall numpy
pip install numpy==1.16.4

再次执行上面的转换指令提示如下信息

W:tensorflow:From C:\Users\713lz\Miniconda3\envs\rknn\lib\site-packages\rknn\api\rknn.py:160: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.等错误

首先卸载再安装(原来tensorflow安装的是tensorflow version为1.14.0)

pip uninstall tensorflow 

pip install tensorflow

重新安装tensorflow后,运行正常不再报错误提示。

8)RKNN所需onnx模型测试

执行如下命令

(rknn) D:\RknnToolkit\rknn_model_zoo-2.3.0\examples\yolov8\python>python yolov8.py --model_path=../model/yolov8n.onnx --img_show

提示错误:ValueError: 'rknn_model_zoo' is not in list

修改yolov8.py文件内容如下

再次执行指令效果如下:

9)模型部署

(1)移植说明

根据yolov8文件夹cpp下的文件CMakeLists.txt可以看到内容如下,说明在部署参考时一定要用rknpu1文件夹下的yolov8.cc文件。

首先,aarch64和armhf的区别。aarch64是ARM的64位架构,也就是ARMv8,而armhf是32位ARM架构,支持硬件浮点运算。RK3588是aarch64架构而RV1126是32位armhf架构。所以库的选择为:3rdparty\rknpu1\Linux\armhf\librknn_api.so,仅7K大小。

(2)官网例程

首先将D:\RknnToolkit\rknn_model_zoo-2.3.0\3rdparty\librga\include文件夹下的头文件放置在一个文件夹,该文件夹并命名为rga,将librga头文件放在Ubuntu操作系统下的

/home/thomas/rv1126/repo_new/buildroot/output/rockchip_rv1126_rv1109/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include路径下。

其次将D:\RknnToolkit\rknn_model_zoo-2.3.0\3rdparty\librga\Linux\armhf路径下的库文件librga.a和librga.so放置在Ubuntu操作系统下路径:

/home/thomas/rv1126/repo_new/buildroot/output/rockchip_rv1126_rv1109/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib

再将要包含的头文件路径添加到ai文件夹下的makefile文件中。如下图所示。

同样将sta_image头文件和jpeg_turbo中的头文件放在与rga相同的路径下并包含如上图所示。

注意:因为jpeg_turbo库文件只提供了静态库libturbojpeg.a,将此文件要放置在/home/viz/RV1126_IPC/rv1126_ipc_custom/libs/rv1126路径下,类似libai.a一样将此库编译到程序中去。

最后在demo的makefile文件中添加库文件如下图所示,编译即可。

3)利用OpenCV完成图像缩小到640模型大小

系统自带的OpenCV为3.4,利用imread读取jpg图像返回的数据一直为NULL,换成bmp图像read和write均正常。是因为当尝试加载一些特殊的图像格式(如 JPG)时,如果缺少相应的解码器支持,也可能导致加载失败。OpenCV 默认仅支持常见的 BMP/PNG 格式,其他高级格式依赖于额外插件的支持。

注意:在板子上运行命令时,需执行mon_app.sh stop,才能再次运行程序./rv1126_ip。

2.2 RKNN Toolkit Lite 

1)功能:RKNN Toolkit Lite 1.75 RK1808 RV1126 等带有 Rockchip NPU 的平台提供 Python 编程接口,帮助用户部署 RKNN 模型,加速 AI 应用的落地。

2)使用场景:
运行在 PC 上,此时 PC 需要通过 USB 连接带有 RK1808 等芯片的硬件设备。
直接运行在装有 Debian 系统的 RK1808 RK3399Pro RV1109 RV1126 等开发板上。
注意: 说明RKNN Toolkit Lite不适合运行在Windows平台上。也就是适用于嵌入式平台的调试及测试。

安装利用清华源

pip install tensorflow==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菩提树下的凡夫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值