在使用 RKNN SDK 之前,用户首先需要使用 RKNN-Toolkit 工具将用户的模型转换为 RKNN
模型,用户可以在 https://github.com/rockchip-linux/rknn-toolkit 获取工具的完整
安装包及使用文档。
成功转换生成 RKNN 模型之后,用户可以先通过 RKNN-Toolkit 连接 RK1808 等开发板进行联
机调试,确保模型的精度性能符合要求。
得到 RKNN 模型文件之后,用户可以选择使用 C 或 Python 接口在 RK1808 等平台开发应用RKNN-Toolkit 是为用户提供在 PC、 Rockchip NPU 平台上进行模型转换、推理和性能评估的 开发套件
本开发套件支持运行于 Ubuntu、Windows、MacOS、Debian 等操作系统。需要满足以下运行 环境要求:
操作系统版本 | Ubuntu16.04(x64)及以上 Windows 7(x64)及以上 Mac OS X 10.13.5(x64)及以上 Debian 9.8(aarch64)及以上 |
---|---|
Python 版本 | 3.5/3.6/3.7 |
Python 库依赖 | ‘numpy == 1.16.3’ ‘scipy == 1.3.0’ ‘Pillow == 5.3.0’ ‘h5py == 2.8.0’ ‘lmdb == 0.93’ ‘networkx == 1.11’ ‘flatbuffers == 1.10’, ‘protobuf == 3.11.2’ ‘onnx == 1.6.0’ ‘onnx-tf == 1.2.1’ ‘flask == 1.0.2’ ‘tensorflow == 1.11.0’ or ‘tensorflow-gpu’ ‘dill0.2.8.2’ ‘ruamel.yaml == 0.15.81’ ‘psutils == 5.6.2’ ‘ply == 3.11’ ‘requests == 2.22.0’ ‘torch == 1.2.0’ or ‘torch == 1.5.1’ or 'torch1.6.0’ ‘mxnet == 1.5.0’ |
本文所采用环境为:Ubuntu18.04.6 (x64),Python3.6.9,RV1126 EVB板
亲测Ubuntu20.04.5不能使用,Python版本不要高过3.7,不要低于3.6
sudo apt-get install python3.6
sudo apt-get install python3-pip
获取RKNN-Toolkit:rockchip-linux/rknn-toolkit at v1.6.0 (github.com)
安装Python依赖
pip3 install -i http://pypi.douban.com/simple/ tensorflow==1.11.0
pip3 install -i http://pypi.douban.com/simple/ mxnet==1.5.0
pip3 install -i http://pypi.douban.com/simple/ torchvision==0.4.0
pip3 install -i http://pypi.douban.com/simple/ torch==1.5.1
pip3 install -i http://pypi.douban.com/simple/ opencv-python
pip3 install -i http://pypi.douban.com/simple/ gluoncv
sudo pip3 install -i http://pypi.douban.com/simple/ rknn_toolkit-1.6.0-cp36-cp36m-linux_x86_64.whl
rk@rk:~/rknn-toolkit-v1.6.0/package$ python3
>>> from rknn.api import RKNN
>>>
如果导入RKNN模块没有失败,说明安装成功
Linux x86_64 上的 RKNN-Toolkit 自带了一个 RK1808 的模拟器,可以用来仿真模型在 RK1808 上运行时的行为。
cd /home/wilson/rknn-toolkit/examples/tensorflow/ssd_mobilenet_v1
python3 test.py
--> Loading model
W Use existed rule db file to convert tensorflow model.
done
--> Building model
W The target_platform is not set in config, using default target platform rk1808.
done
--> Init runtime environment
done
--> Running model
done
W When performing performance evaluation, inputs can be set to None to use fake inputs.
========================================================================
Performance
========================================================================
Layer ID Name Time(us)
57 openvx.tensor_transpose_3 125
117 convolution.relu.pooling.layer2_2 204
115 convolution.relu.pooling.layer2_2 404
112 convolution.relu.pooling.layer2_2 416
110 convolution.relu.pooling.layer2_2 597
107 convolution.relu.pooling.layer2_2 245
105 convolution.relu.pooling.layer2_2 503
102 convolution.relu.pooling.layer2_2 326
100 convolution.relu.pooling.layer2_2 223
97 convolution.relu.pooling.layer2_2 166
95 convolution.relu.pooling.layer2_2 242
92 convolution.relu.pooling.layer2_2 291
90 convolution.relu.pooling.layer2_2 242
87 convolution.relu.pooling.layer2_2 162
85 convolution.relu.pooling.layer2_2 258
82 convolution.relu.pooling.layer2_2 316
80 convolution.relu.pooling.layer2_2 258
77 convolution.relu.pooling.layer2_2 316
75 convolution.relu.pooling.layer2_2 258
72 convolution.relu.pooling.layer2_2 316
70 convolution.relu.pooling.layer2_2 258
64 convolution.relu.pooling.layer2_2 316
60 convolution.relu.pooling.layer2_2 258
46 convolution.relu.pooling.layer2_2 316
28 convolution.relu.pooling.layer2_2 171
84 openvx.tensor_transpose_3 48
34 convolution.relu.pooling.layer2_2 47
114 openvx.tensor_transpose_3 6
69 convolution.relu.pooling.layer2_2 297
63 convolution.relu.pooling.layer2_2 234
59 convolution.relu.pooling.layer2_2 337
45 convolution.relu.pooling.layer2_2 484
27 convolution.relu.pooling.layer2_2 250
79 openvx.tensor_transpose_3 29
33 convolution.relu.pooling.layer2_2 33
109 openvx.tensor_transpose_3 5
56 convolution.relu.pooling.layer2_2 122
44 convolution.relu.pooling.layer2_2 490
26 convolution.relu.pooling.layer2_2 97
74 openvx.tensor_transpose_3 10
32 convolution.relu.pooling.layer2_2 11
104 openvx.tensor_transpose_3 5
55 convolution.relu.pooling.layer2_2 30
43 convolution.relu.pooling.layer2_2 147
25 convolution.relu.pooling.layer2_2 51
68 openvx.tensor_transpose_3 6
31 convolution.relu.pooling.layer2_2 6
99 openvx.tensor_transpose_3 4
54 convolution.relu.pooling.layer2_2 17
42 convolution.relu.pooling.layer2_2 147
24 convolution.relu.pooling.layer2_2 51
67 openvx.tensor_transpose_3 5
30 convolution.relu.pooling.layer2_2 6
94 openvx.tensor_transpose_3 4
53 convolution.relu.pooling.layer2_2 10
41 convolution.relu.pooling.layer2_2 21
23 fullyconnected.relu.layer_3 13
29 fullyconnected.relu.layer_3 8
Total Time(us): 10218
FPS(600MHz): 73.40
FPS(800MHz): 97.87
Note: Time of each layer is converted according to 800MHz!
========================================================================
wilson@Ubuntu18:~/rknn-toolkit/examples/tensorflow/ssd_mobilenet_v1$ adb devices
List of devices attached
20230105RV1126FD2G0028 device
vim test.py
# Config for Model Input PreProcess
rknn.config(mean_values=[[127.5, 127.5, 127.5]], std_values=[[127.5, 127.5, 127.5]], reorder_channel='0 1 2')
#修改为
rknn.config(mean_values=[[127.5, 127.5, 127.5]], std_values=[[127.5, 127.5, 127.5]], reorder_channel='0 1 2',target_platform=['rv1126'])
# init runtime environment
print('--> Init runtime environment')
ret = rknn.init_runtime()
#修改为(device_id)
ret = rknn.init_runtime(target='rv1126',device_id='20230105RV1126FD2G0028') #device_id输入刚刚查询到的id
wilson@Ubuntu18:~/rknn-toolkit/examples/tensorflow/ssd_mobilenet_v1$ python3 test.py
--> Loading model
W Use existed rule db file to convert tensorflow model.
done
--> Building model
done
--> Init runtime environment
I NPUTransfer: Starting NPU Transfer Client, Transfer version 2.1.0 (b5861e7@2020-11-23T11:50:36)
D RKNNAPI: ==============================================
D RKNNAPI: RKNN VERSION:
D RKNNAPI: API: 1.6.0 (79320de build: 2020-12-29 10:56:36)
D RKNNAPI: DRV: 1.7.0 (7880361 build: 2021-08-16 14:05:08)
D RKNNAPI: ==============================================
done
--> Running model
done
W When performing performance evaluation, inputs can be set to None to use fake inputs.
========================================================================
Performance
========================================================================
Total Time(us): 8884
FPS: 112.56
========================================================================