RKNN-Toolkit开发套件可以实现模型转换、推理运行和性能评估。
1)模型转换:支持 Caffe、Tensorflow、TensorFlow Lite、ONNX、Darknet 模型,支持RKNN 模型导入导出,后续能够在硬件平台上加载使用。
2)模型推理:能够在 PC 上模拟运行模型并获取推理结果,也可以在指定硬件平台Nova-09上运行模型并获取推理结果。
3)性能评估:能够在 PC 上模拟运行并获取模型总耗时及每一层的耗时信息,也可以通过联机调试的方式在指定硬件平台Nova-09上运行模型,并获取模型在硬件上运行时的总时间和每一层的耗时信息。
本章节主要讲解如何在PC上进行模型转换,若需要了解详细功能请参考使用指南文档:《RKNN-Toolkit使用指南_V*.pdf》。
安装
目前提供两种方式安装 RKNN-Toolkit:一是通过 pip install 命令安装;二是运行带完整 RKNN-Toolkit 工具包的 docker 镜像。下面分别介绍这两种安装方式的具体步骤。
通过 pip install 命令安装
1.创建 virtualenv 环境(如果系统中同时有多个版本的 Python 环境,建议使用 virtualenv 管理 Python 环境)。
sudo apt install virtualenv sudo apt-get install libpython3.5-dev sudo apt install python3-tk virtualenv -p /usr/bin/python3 venv source venv/bin/activate
2.安装 TensorFlow、python-opencv 等依赖库:
#如果要使用TensorFlowGPU版本,请执行以下命令安装TensorFlow依赖 pip install tensorflow-gpu #如果要使用TensorFlow CPU版本,请执行以下 pip install tensorflow #执行以下命令安装opencv-python pip install opencv-python
注:RKNN-Toolkit本身并不依赖opencv-python,但是在example中的示例都会用到这个库来读取图片,所以这里将该库也一并安装了。
3.安装RKNN-Toolkit
请根据不同的python版本,选择不同的安装包文件(位于package/目录):
Python3.5 for x86_64:rknn_toolkit-1.1.0-cp35-cp35m-linux_x86_64.whl
Python3.6 for x86_64:rknn_toolkit-1.1.0-cp36-cp36m-linux_x86_64.whl
通过DOCKER镜像安装
在docker文件夹下提供了一个已打包所有开发环境的Docker镜像,用户只需要加载该镜像即可直接上手使用RKNN-Toolkit,使用方法如下:
1.安装Docker
请根据官方手册安装Docker(https://docs.docker.com/install/linux/docker-ce/ubuntu/)。
2.加载镜像
执行以下命令加载镜像:
docker load –input rknn-toolkit-1.1.0-docker.tar.gz
加载成功后,执行“docker images”命令能够看到rknn-toolkit的镜像,如下所示:
REPOSITORY TAG IMAGEID CREATED SIZE rknn-toolkit 1.1.0 10ea0db4a54b 2 hours ago 2.07GB
3.运行镜像
执行以下命令运行docker镜像,运行后将进入镜像的bash环境。
docker run -t -i –privileged -v /dev/bus/usb:/dev/bus/usb rknn-toolkit:1.1.0 /bin/bash
如果想将自己代码映射进去可以加上“-v <host src folder>:<image dst folder>”参数,例如:
docker run -t -i –privileged -v /dev/bus/usb:/dev/bus/usb -v /home/rk/test:/test rknn-toolkit:1.1.0 /bin/bash
4.运行 demo
cd /example/mobilenet_v1 python test.py
API调用流程
示例
import numpy as np import cv2 from rknn.api import RKNN def show_outputs(outputs): output = outputs[0][0] output_sorted = sorted(output, reverse=True) top5_str = 'mobilenet_v1\n—–TOP 5—–\n' for i in range(5): value = output_sorted[i] index = np.where(output == value) for j in range(len(index)): if (i + j) >= 5: break if value > 0: topi = '{}: {}\n'.format(index[j], value) else: topi = '-1: 0.0\n' top5_str += topi print(top5_str) def show_perfs(perfs): perfs = 'perfs: {}\n'.format(outputs) print(perfs) if name == 'main': # Create RKNN object rknn = RKNN() # pre-process config print('–> config model') rknn.config(channel_mean_value='103.94 116.78 123.68 58.82', reorder_channel='0 1 2') print('done') # Load tensorflow model print('–> Loading model') ret = rknn.load_tflite(model='./mobilenet_v1.tflite') if ret != 0: print('Load mobilenet_v1 failed!') exit(ret) print('done') # Build model print('–> Building model') ret = rknn.build(do_quantization=True, dataset='./dataset.txt') if ret != 0: print('Build mobilenet_v1 failed!') exit(ret) print('done') # Export rknn model print('–> Export RKNN model') ret = rknn.export_rknn('./mobilenet_v1.rknn') if ret != 0: print('Export mobilenet_v1.rknn failed!') exit(ret) print('done') # Set inputs img = cv2.imread('./dog_224x224.jpg') img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # init runtime environment print('–> Init runtime environment') ret = rknn.init_runtime() if ret != 0: print('Init runtime environment failed') exit(ret) print('done') # Inference print('–> Running model') outputs = rknn.inference(inputs=[img]) show_outputs(outputs) print('done') # perf print('–> Begin evaluate model performance') perf_results = rknn.eval_perf(inputs=[img]) print('done') rknn.release()
下载
详细的模型转换相关资料,点击下载。