RKNN-Toolkit开发套件进行模型转换、推理运行和性能评估

模型转换

Rockchip提供RKNN-Toolkit开发套件进行模型转换、推理运行和性能评估。

用户通过提供的 python 接口可以便捷地完成以下功能:

1)模型转换:支持 Caffe、Tensorflow、TensorFlow Lite、ONNX、Darknet 模型,支持RKNN 模型导入导出,后续能够在硬件平台上加载使用。

2)模型推理:能够在 PC 上模拟运行模型并获取推理结果,也可以在指定硬件平台RK3399Pro(或 RK3399Pro Linux)上运行模型并获取推理结果。

3)性能评估:能够在 PC 上模拟运行并获取模型总耗时及每一层的耗时信息,也可以通过联机调试的方式在指定硬件平台 RK3399Pro(或 RK3399Pro Linux)上运行模型,并获取模型在硬件上运行时的总时间和每一层的耗时信息。

本章节主要讲解如何在Toybrick RK3399Pro开发板上进行模型转换,若需要了解其他功能说明请参考RKNN-Toolkit使用指南文档:《RKNN-Toolkit使用指南_V*.pdf》。

安装准备

 

 
  1. sudo dnf install -y cmake gcc gcc-c++ protobuf-devel protobuf-compiler lapack-devel opencv-devel

 

 
  1. sudo dnf install -y python3-devel python3-opencv python3-numpy-f2py python3-h5py python3-lmdb  python3-grpcio

下载RKNN轮子包和其他Python轮子包,请到百度网盘下载:https://eyun.baidu.com/s/3nw94bjV(包含rknn-toolkit、scipy、onnx,tensorflow轮子包)

进入到轮子包所在目录,执行以下命令安装,轮子包x.x.x代表版本号,以用户下载的为准

 

 
  1. pip3 install --user scipy-1.2.0-cp36-cp36m-linux_aarch64.whl

 

 
  1. pip3 install --user onnx-1.4.1-cp36-cp36m-linux_aarch64.whl

 

 
  1. pip3 install --user tensorflow-1.10.1-cp36-cp36m-linux_aarch64.whl
 
  1. pip3 install --user rknn_toolkit-x.x.x-cp36-cp36m-linux_aarch64.whl

若想要最新版本的轮子包或者发现预编译的轮子包有问题,可以自行用pip安装,这样会源码编译安装轮子包,耗时会较久,需耐心等待。

 

 
  1. pip3 install scipy
  2. pip3 install onnx

若安装遇到报错,请视报错信息安装对应的软件包。

API调用流程

RKNN-Toolkit开发套件进行模型转换、推理运行和性能评估_第1张图片

示例

 
  1. from rknn.api import RKNN  
  2.  
  3. INPUT_SIZE = 64
  4.  
  5. if __name__ == '__main__':
  6.     # 创建RKNN执行对象
  7.     rknn = RKNN()
  8. # 配置模型输入,用于NPU对数据输入的预处理
  9. # channel_mean_value='0 0 0 255',那么模型推理时,将会对RGB数据做如下转换
  10. # (R - 0)/255, (G - 0)/255, (B - 0)/255。推理时,RKNN模型会自动做均值和归一化处理
  11. # reorder_channel=’0 1 2’用于指定是否调整图像通道顺序,设置成0 1 2即按输入的图像通道顺序不做调整
  12. # reorder_channel=’2 1 0’表示交换0和2通道,如果输入是RGB,将会被调整为BGR。如果是BGR将会被调整为RGB
  13. #图像通道顺序不做调整
  14.     rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2')
  15.  
  16. # 加载TensorFlow模型
  17. # tf_pb='digital_gesture.pb'指定待转换的TensorFlow模型
  18. # inputs指定模型中的输入节点
  19. # outputs指定模型中输出节点
  20. # input_size_list指定模型输入的大小
  21.     print('--> Loading model')
  22.     rknn.load_tensorflow(tf_pb='digital_gesture.pb',
  23.                          inputs=['input_x'],
  24.                          outputs=['probability'],
  25.                          input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
  26.     print('done')
  27.  
  28. # 创建解析pb模型
  29. # do_quantization=False指定不进行量化
  30. # 量化会减小模型的体积和提升运算速度,但是会有精度的丢失
  31.     print('--> Building model')
  32.     rknn.build(do_quantization=False)
  33.     print('done')
  34.  
  35.     # 导出保存rknn模型文件
  36.     rknn.export_rknn('./digital_gesture.rknn')
  37.  
  38.     # Release RKNN Context
  39.     rknn.release()

你可能感兴趣的:(AI)