一、rknn-toolkit是什么
最近在评估rk1808运算性能,使用rk1808 npu必须将模型转化rockchip自己的模型rknn模型文件,rknn-toolkit是rockchip官方提供的工具包。工具包的主要用途如下:
RKNN-Toolkit开发套件提供了模型转换、推理运行和性能评估等几大功能,其还为我们提供了python调用的例程。
我们可以通过rknn-toolkit通过提供的 python 接口可以便捷地完成以下功能:
1)模型转换:rknn-toolkit支持 Caffe、Tensorflow、TensorFlow Lite、ONNX、Darknet 模型,支持RKNN 模型导入导出,能够在rockchip硬件平台上加载使用,充分发挥npu的加速。
2)模型推理:能够在我们 PC 上模拟加载模型并获取推理结果,也可以在特定硬件平台RK3399Pro/RK1808 的硬件(默认提供的是Linux环境)上运行模型并获取推理结果。
3)性能评估:能够为我们提供模型运算性能的评估,通过在 PC 上模拟运行并获取模型总耗时及每一层的耗时信息,或者通过联机调试(adb)的方式在指定硬件平台 RK3399Pro/RK1808 的硬件上运行模型,并获取模型在硬件上运行时的总时间和每一层的耗时信息,来得出模型的性能等状态。
二、环境搭建
安装rknn-toolkit有两种方式:手动安装和pip自动安装。
1.手动安装
1.1 基础库的安装:python3,pip3 libglib2.0-dev libsm-dev libxrender-dev libxext-dev(注意pip的版本,unbuntu 16.04默认的版本太低,不升级会有一大堆的异常)
sudo apt-get install -y python3 python3-pip libglib2.0-dev \ libsm-dev libxrender-dev libxext-dev
1.2 rknn-toolkit 库下载( rknn-toolkit 1.6版本)
Baidu Cloud: https://eyun.baidu.com/s/3eTG3VsY (pwd:rknn) Onedrive:https://rockchips-my.sharepoint.com/:f:/g/personal/addy_ke_rockchips_onmicrosoft_com/EkQBzgZ6fmJFlZRLf6AjL_0BcEn9uGzNVovRkKxWEboA8g?e=J5rjYS Github: https://github.com/rockchip-linux/rknn-toolkit
1.3 安装RKNN Toolkit(不同版本rknn-toolkit目录名不同)
cd rknn-toolkit pip3 install --user -r rknn-toolkit/packages/requirements-cpu.txt # rknn-toolkit的版本可能不一样,请选择对应的文件进行安装 pip3 install --user rknn-toolkit/packages/rknn_toolkit-1.3.0-cp35-cp35m-linux_x86_64.whl
(PS:如果PC中有GPU加速则用requirements-gpu.txt替换requirements-cpu.txt。)
2.自动安装
2.1配置pip
新建pip.conf文件(注意:先升级pip的版本到最新版本,不然会有很大问题)
sudo vim /etc/pip.conf
在pipconf文件中添加如下内容
[global]
extra-index-url = http://repo.rock-chips.com/pypi/simple
trusted-host = repo.rock-chips.com
(ps:如果出现pip版本问题,可以参考我的另一篇文章:https://blog.csdn.net/hanpengyu/article/details/113257105)
2.2安装基础库
sudo apt install cmake python3-scipy python3-h5py libprotobuf-dev protobuf-compiler zlib1g-dev libjpeg-dev python3-dev python3-opencv
2.3安装rknn-toolkit
pip3 install --user -U rknn-toolkit
如果使用pc棒的安装rknn-toolkit-lite
pip3 install --user -U rknn-toolkit-lite
2.4安装平台相关
RK3399Pro :
pip3 install --user -U rknn-toolkit
RK3399Pro OR RK1808 (PC棒):
pip3 install --user -U rknn-toolkit-lite
2.5安装在rknn-toolkit api
下载地址如下:
GitHub:
* for 1808: https://github.com/rockchip-linux/rknpu
* for other platforms: https://github.com/rockchip-linux/RKNPUTools
Baidu Cloud: https://eyun.baidu.com/s/3kXoPFuf (pwd: uMuA)
Onedrive: https://rockchips-my.sharepoint. ... f1OJODES1g?e=ZSjbAo
rk3399pro:
sudo apt install rknn-rk3399pro
(or)
sudo dnf install rknn-rk3399pro
rk1808 computer stric:
sudo apt install rknn-rk1808
(or)
sudo dnf install rknn-rk1808
更新api
sudo apt update -y
3.安装tensorflow的库
注意:rknn模型应该是基于tensorflow的,如果不装,调用时会出错,出错截图如下:(本例子是onnx模型转化为rknn)
python3 run_rknn.py
Traceback (most recent call last):
File "run_rknn.py", line 74, in
rknn = RKNN()
File "/home/roc/.local/lib/python3.5/site-packages/rknn/api/rknn.py", line 47, in __init__
self.config()
File "/home/roc/.local/lib/python3.5/site-packages/rknn/api/rknn.py", line 676, in config
return self.rknn_base.config(args)
File "rknn/api/rknn_base.py", line 72, in rknn.api.rknn_base.RKNNBase.config
File "/home/roc/.local/lib/python3.5/site-packages/rknn/base/acuitylib/__init__.py", line 1, in
from acuitylib.optimize.optimizer import Optimizer
File "/home/roc/.local/lib/python3.5/site-packages/rknn/base/acuitylib/__init__.py", line 1, in
from acuitylib.optimize.optimizer import Optimizer
File "rknn/base/acuitylib/optimize/optimizer.py", line 14, in init rknn.base.acuitylib.optimize.optimizer
File "rknn/base/acuitylib/optimize/rules/merge_layer.py", line 3, in init rknn.base.acuitylib.optimize.rules.merge_layer
File "/home/roc/.local/lib/python3.5/site-packages/rknn/base/acuitylib/layer/__init__.py", line 2, in
from acuitylib.layer.add import *
File "rknn/base/acuitylib/layer/add.py", line 1, in init rknn.base.acuitylib.layer.add
File "rknn/base/acuitylib/layer/acuitylayer.py", line 3, in init rknn.base.acuitylib.layer.acuitylayer
File "rknn/base/acuitylib/xtf.py", line 1, in init rknn.base.acuitylib.xtf
ImportError: No module named 'tensorflow'
pip安装
pip3 install --user -U tensorflow==1.14.0