RK1126/RK1109 NPU 进行模型推理时必须使用RKNN模型。如果用户使用自己研发的算法模型,需要熟悉 RKNN 开发流程,把自己的模型转换成 RKNN 再进行使用。
RKNN 介绍
RKNN 是 Rockchip npu 平台使用的模型类型,以.rknn后缀结尾的模型文件。Rockchip 提供了完整了模型转换 Python 工具,方便用户将自主研发的算法模型转换成 RKNN 模型,同时 Rockchip 也提供了C/C++和Python API 接口。
RKNN-Toolkit
工具介绍
RKNN-Toolkit 是为用户提供在 PC、 Rockchip NPU 平台上进行模型转换、推理和性能评估的 开发套件,用户通过该工具提供的 Python 接口可以便捷地完成以下功能:
模型转换 :支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、Darknet、Pytorch、MXNet 模型转成 RKNN 模型,支持 RKNN 模型导入导出,后续能够在 Rockchip NPU 平台上加 载使用。从1.2.0版本开始支持多输入模型。从1.3.0版本开始支持 Pytorch 和 MXNet。
量化功能 :支持将浮点模型转成量化模型, 目前支持的量化方法有非对称量化( asymmetric_quantized-u8 ) , 动态定点量化 ( dynamic_fixed_point-8 和 dynamic_fixed_point-16)。从1.0.0版本开始, RKNN-Toolkit 开始支持混合量化功能。
模型推理 :能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型并获取推理结果;也可以将 RKNN 模型分发到指定的 NPU 设备上进行推理。
性能评估 :能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型,并评估模型性能(包括总 耗时和每一层的耗时);也可以将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型 在实际设备上运行时的性能。
内存评估 :评估模型运行时对系统和 NPU 内存的消耗情况。使用该功能时,必须将 RKNN 模型分发到 NPU 设备中运行,并调用相关接口获取内存使用信息。从0.9.9版本开始支持 该功能。
模型预编译 :通过预编译技术生成的 RKNN 模型可以减少在硬件平台上的加载时间。对 于部分模型,还可以减少模型尺寸。但是预编译后的 RKNN 模型只能在 NPU 设备上运行。 目前只有 x86_64 Ubuntu 平台支持直接从原始模型生成预编译 RKNN 模型。 RKNN-Toolkit 从0.9.5版本开始支持模型预编译功能,并在1.0.0版本中对预编译方法进行了升级,升级 后的预编译模型无法与旧驱动兼容。从1.4.0版本开始,也可以通过 NPU 设备将普通 RKNN 模型转成预编译 RKNN 模型。
模型分段 :该功能用于多模型同时运行的场景下,可以将单个模型分成多段在 NPU 上执 行,借此来调节多个模型占用 NPU 的执行时间,避免因为一个模型占用太多执行时间, 1而使其他模型得不到及时执行。RKNN-Toolkit 从1.2.0版本开始支持该功能。该功能必须 在带有 Rockchip NPU 的硬件上使用,且 NPU 驱动版本要大于 0.9.8。
自定义算子功能 :如果模型含有 RKNN-Toolkit 不支持的算子(operator),那么在模型转 换阶段就会失败。这时候可以使用自定义算子功能来添加不支持的算子,从而使模型能正 常转换和运行。RKNN-Toolkit 从1.2.0版本开始支持该功能。自定义算子的使用和开发请 参考《Rockchip_Developer_Guide_RKNN_Toolkit_Custom_OP_CN》文档。
量化精度分析功能 :该功能将给出模型量化前后每一层推理结果的欧氏距离或余弦距离, 以分析量化误差是如何出现的,为提高量化模型的精度提供思路。该功能从1.3.0版本开 始支持。1.4.0 版本增加逐层量化精度分析子功能,将每一层运行时的输入指定为正确的 浮点值,以排除逐层误差积累,能够更准确的反映每一层自身受量化的影响。
可视化功能 :该功能以图形界面的形式呈现 RKNN-Toolkit 的各项功能,简化用户操作步 骤。用户可以通过填写表单、点击功能按钮的形式完成模型的转换和推理等功能,而不需 要再去手动编写脚本。有关可视化功能的具体使用方法请参考 《Rockchip_User_Guide_RKNN_Toolkit_Visualization_CN》文档。1.3.0 版本开始支持该功 能。1.4.0 版本完善了对多输入模型的支持,并且支持 RK1806, RV1109, RV1126 等新的 Rockchip NPU 设备。
模型优化等级功能 :RKNN-Toolkit 在模型转换过程中会对模型进行优化,默认的优化选项 可能会对模型精度产生一些影响。通过设置优化等级,可以关闭部分或全部优化选项。有 关优化等级的具体使用方法请参考 config 接口中optimization_level参数的说明。该功能从 1.3.0 版本开始支持。
环境依赖
系统支持 :Ubuntu 16.04 x64(以上)、Window 7 x64(以上)、Mac OS X 10.13.5 x64 (以上)、 Debian 9.8 (x64)以上
Python 版本 :3.5/3.6/3.7
Python 依赖 :
PS :
Windows 只提供Python3.6的安装包。
MacOS 提供Python3.6和Python3.7的安装包。
ARM64 平台(安装 Debian 9 或 10 操作系统)提供Python3.5(Debain 9)和 Python3.7 (Debian10)的安装包。
除 MacOS 平台外,其他平台的 scipy 依赖为>=1.1.0。
快速上手
PC 主机
测试环境使用Ubuntu 16.04 x86_64 PC主机。其他平台可以参考 sdk/external/rknn-toolkit/doc/Rockchip_Quick_Start_RKNN_Toolkit_V1.4.0_XX.pdf。
RKNN-Toolkit 安装
设备默认没有开启 OTG 功能,如需要请先在内核开启 OTG,编译升级内核。
USB OTG 连接主机和设备运行 demo
除了python接口外,我们也提供了模型推理的C/C++接口,用户可以在 PC 上完成模型转换再到板子上 使用C/C++完成模型推理。以下是 demo 运行。
RV1126 主机
测试环境使用RV1126主机。文件系统是 Debian10。以下操作均在 RV1126上执行。
Firefly Debian10 固件 RKNN Toolkit Lite 安装步骤:
一、 安装依赖 numpy / psutils / ruamel.yaml
二、 安装 opencv-python 。用 pip3 安装会一直失败,所以直接在网上下载包。
三、安装 RKNN Toolkit Lite
四、 跑 example
开发文档
当你安装好RKNN-Toolkit并且通过 demo 初步了解和验证了开发流程后,你可以查看详细的 RKNN 开发 API 去完成自己的开发了。
原作者: Firefly Wiki