Novauto Wiki 开发者资料

超星未来 - 让智能驾驶更简单

站点工具


nova09产品资料:02.人工智能:01.模型转换

2.1 模型转换

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调用流程

5.jpg


示例


    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()

下载

详细的模型转换相关资料,点击下载



nova09产品资料/02.人工智能/01.模型转换.txt · 最后更改: 2020/05/25 16:18 由 admin