RKNN Toolkit Rockchip提供RKNN-Toolkit开发套件进行模型转换、推理运行和性能评估。 用户通过提供的 python 接口可以便捷地完成以下功能: 1)模型转换:支持 Caffe、Tensorflow、TensorFlow Lite、ONNX、Darknet 模 型,支持RKNN 模型导入导出,后续能够在硬件平台上加载使用。 2)模型推理:能够在 PC 上模拟运行模型并获取推理结果,也可以在指定硬件 平台RK3399Pro Linux上运行模型并获取推理结果。 3)性能评估:能够在 PC 上模拟运行并获取模型总耗时及每一层的耗时信息, 也可以通过联机调试的方式在指定硬件平台 RK3399Pro Linux上运行模型,并获 取模型在硬件上运行时的总时间和每一层的耗时信息。 RKNN Tookit仅支持Linux系统,可在3399pro开发板或PC上使用。 程序安装 在PC中安装 RKNN Toolkit可从此链接中下载: https://github.com/rockchip-linux/rknn-toolkit 安装方法请查看 doc/ 目录下的指导文件。 在板子上安装 因为 板子因存储空间和CPU性能限制,而且 RKNN Toolkit 安装过程非常困难, 所以推荐安装在板子上安装 RKNN Toolkit Lite 只负责推理部分。 《rknn_toolkit_lite》 API调用流程 模型转换 模型转换使用示例如下,详细请参考RKNN Tookit中的example。 from rknn.api import RKNN INPUT_SIZE = 64 if __name__ == '__main__': # 创建RKNN执行对象 rknn = RKNN() # 配置模型输入,用于NPU对数据输入的预处理 # channel_mean_value='0 0 0 255',那么模型推理时,将会对RGB数据做如下转换 # (R - 0)/255, (G - 0)/255, (B - 0)/255。推理时,RKNN模型会自动做均值和归一化处理 # reorder_channel=’0 1 2’用于指定是否调整图像通道顺序,设置成0 1 2即按输入的图像通道顺序不做调整 # reorder_channel=’2 1 0’表示交换0和2通道,如果输入是RGB,将会被调整为BGR。如果是BGR将会被调整为RGB #图像通道顺序不做调整 rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2') # 加载TensorFlow模型 # tf_pb='digital_gesture.pb'指定待转换的TensorFlow模型 # inputs指定模型中的输入节点 # outputs指定模型中输出节点 # input_size_list指定模型输入的大小 print('--> Loading model') rknn.load_tensorflow(tf_pb='digital_gesture.pb', inputs=['input_x'], outputs=['probability'], input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]]) print('done') # 创建解析pb模型 # do_quantization=False指定不进行量化 # 量化会减小模型的体积和提升运算速度,但是会有精度的丢失 print('--> Building model') rknn.build(do_quantization=False) print('done') # 导出保存rknn模型文件 rknn.export_rknn('./digital_gesture.rknn') # Release RKNN Context rknn.release() 模型推理 模型推理使用示例如下,详细请参考RKNN Tookit中的example。 import numpy as np from PIL import Image from rknn.api import RKNN # 解析模型的输出,获得概率最大的手势和对应的概率 def get_predict(probability): data = probability[0][0] data = data.tolist() max_prob = max(data) return data.index(max_prob), max_prob def load_model(): # 创建RKNN对象 rknn = RKNN() # 载入RKNN模型 print('-->loading model') rknn.load_rknn('./digital_gesture.rknn') print('loading model done') # 初始化RKNN运行环境 print('--> Init runtime environment') ret = rknn.init_runtime(target='rk3399pro') if ret != 0: print('Init runtime environment failed') exit(ret) print('done') return rknn def predict(rknn): im = Image.open("../picture/6_7.jpg") # 加载图片 im = im.resize((64, 64),Image.ANTIALIAS) # 图像缩放到64x64 mat = np.asarray(im.convert('RGB')) # 转换成RGB格式 outputs = rknn.inference(inputs=[mat]) # 运行推理,得到推理结果 pred, prob = get_predict(outputs) # 将推理结果转化为可视信息 print(prob) print(pred) if __name__=="__main__": rknn = load_model() predict(rknn) rknn.release() API 详细的API请参考RKNN-Toolkit中的使用指南文档: 《RKNN-Toolkit使用指南_V*.pdf》 。