点击头像,立即联系微信客服
       福州牛新牛科技有限公司是一家专业的嵌入式人工智能物联网(Embedded AIoT)产品供应商和技术方案商,同时也是一家集设计、研发、生产和销售于一体的国家级高新技术企业。公司批量供应AI核心板、工控板、AIoT智能网关、AI边缘计算终端等产品,并提供定制开发服务和一站式AIoT解决方案。NNEWN提供免费技术方案咨询和项目评估,有需要的读者可以点击右侧图标跳转到需求提交页面提交您的项目需求:
【AI开发_03】模型转换环境搭建
来源: | 作者:nnewn | 发布时间: 2021-08-28 | 2191 次浏览 | 分享到:

Rknn-toolkit是NNEWN带有NPU的硬件平台用于模型迁移及量化功能的开发工具套件,用来制作RKnn模型,以便NNEWN硬件平台的NPU加速神经网络模型的推理过程。此套件不用于AI训练,且目前只支持Linux平台。

本文是rknn-toolkit的简明安装教程,对应的版本是rknn-toolkit-1.3.0。

1. 概述

  在NNEWN的基于瑞芯微芯片方案的硬件平台上部署神经网络模型时,需要先把模型转换为.rknn格式的文件,目前支持的框架有caffe、tensorflow、tensorflow lite、onnx、darknetpytorch。需注意一点,在rknn-toolkit 1.3.0之前版本,对于pytorch等不支持的框架,可以先转为onnx再转为rknn模型处理。

  rknn-toolkit套件提供了以下功能:

  • 模型转换:将其他格式的模型转换为rknn模型,使其能在RK硬件平台上部署使用;

  • 量化功能:支持将浮点模型转换成量化模型,目前支持的量化方法有非对称量化(asymmetric_quantized-u8)、动态定点量化(dynamic_fixed_point-8dynamic_fixed_point-16)。

  • 模型推理:能够在PC上模拟运行模型并获取推理结果,也能在NNEWN硬件平台上运行模型并获取推理结果。

  • 性能评估:能够在PC上模拟运行并获得模型总耗时及每一层的耗时信息;也可以通过联机调试的方式在指定硬件平台上NNEWN硬件平台上运行模型,以获取模型在硬件上完整运行一次的总时间和每一层的耗时情况。

  • 内存评估:获取模型运行时的内存使用情况。通过联机调试的方法获取模型在NNEWN硬件平台上运行时间内存的使用情况。

  • 模型预编译:通过预编译技术,可以减少模型加载的时间,对于部分模型,还可以减少模型尺寸。但是,预编译后的rknn模型只能在带有NPU的硬件平台上运行。

2.环境要求

操作系统版本Debian9及以上版本或Ubuntu16.04(x64)及以上版本
Python版本3.5/3.6
Python库依赖‘numpy >= 1.16.1’
‘scipy >= 1.1.0’
‘Pillow >= 3.1.2’
‘h5py >= 2.7.1’
‘lmdb >= 0.92’
‘netwrokx == 1.11’
‘flatbuffers == 1.9’
‘protobuf >=3.5.2’
‘onnx == 1.4.0’
‘onnx-tf ==1.2.0’
‘flask >=1.0.2’
‘tensorflow >= 1.11.0’
‘dill == 0.2.8.2’
‘opencv-python >=3.4.3.18’
‘Ruamel.yaml == 0.15.82’
‘Psutils >=5.6.2’

3.安装步骤

  安装Linux基础系统,照安装向导把Linux基础系统装好,这个阶段一般按最小系统来安装就可以了。

  1. 安装平台SDK及交叉编译工具以及gcc, gcc-c++, make等构建工具
      请参考
    开发环境搭建安装开发工具。

  2. 安装AI开发的SDK和工具链

  建议安装Anaconda包管理工具托管的Python,方便管理包之间的依赖关系。Anaconda离线安装包的下载地址:

  下载相应的离线安装包 Anaconda3-5.2.0-Linux-x86_64.sh,保存到本地,然后运行命令:XXX,按照提示安装,安装位置可自由选择,本文安装到了/opt/zlg/anaconda.运行完Anaconda3-5.2.0-Linux-x86_64.sh离线安装包后,只是装了Anaconda管理工具所需要一些基础包,真正开发需要的工具包集合,需要连网在线安装,主要步骤有:

  • 修改Anaconda镜像源为清华镜像

  在用户的主目录创建.condarc文件,内容如下:

channels:  - defaultsshow_channel_urls: truechanel_alias: https://mirrors.tuna.tsinghua.edu.cn/anacondadefault_channels:  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/main  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/free  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/r  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pro  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/msys2custom_channels:  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  pythorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

  编辑好.condarc后,运行 conda clean -i清除索引缓存,保证用的是镜像站提供的索引

  • 更新基础包base

注:

安装anaconda包管理环境后,默认会在shell提示符首部加入当前环境标识’(…)’,这样方便用户知道自己当前处于哪一个工具集环境,比如当前处于’base’环境上下文,所以提示符变成’(base) zlgmcu@m1808-devel:~$ ‘.

  • 创建相应的工具集环境

  在conda中创建的多个环境是可以side-by-side并存的,所以在同一个系统中可以按需求,随时创建配置不同版本的环境,每个环境私有的依赖包都安装在该环境上下文中,公有的依赖包则安装在base中。

  • 删除创建的工具集环境

  如果一个通过conda create命令创建的环境不再需要了,可以用conda remove命令删除

  • 安装rknn-toolkit工具包

  安装rknn-toolkit工具包前,有个要特别注意的细节就是,rknn-toolkit工具包的众多依赖包,分成两部分,一部分可在Anaconda托管的库中找到,另一部分位于Anaconda之外的第三方库,是需要通过pip命令安装,所以在安装之前需要把pip源也设成国内镜像来加速安装,比如设成清华的源

  属于Anaconda托管的包,用conda install <package>安装,非托管的第三方包用pip install <package>安装。但通常需要批量安装多个依赖包,把所需要包列在一个需求清单文件中,通过conda install --file <conda-requiments.txt>pip install -r <pip-requirments.txt>批量安装。
  下面给出安装rknn-toolkit-1.3.0所需依赖包的两个清单文件内容:

conda-rknn_toolkit-1.3.0-requirements.txt 清单
_libgcc_mutex=0.1=main_mutex_mxnet=0.0.40=mkl_tflow_select=2.3.0=mklabsl-py=0.9.0=py36_0asn1crypto=1.3.0=py36_0astor=0.8.0=py36_0backports=1.0=py_2backports.weakref=1.0rc1=py36_0blas=1.0=mklbleach=1.5.0=py36_0blinker=1.4=py36_0bzip2=1.0.8=h7b6447c_0c-ares=1.15.0=h7b6447c_1001ca-certificates=2020.1.1=0cachetools=3.1.1=py_0cairo=1.14.12=h8948797_3certifi=2020.4.5.1=py36_0cffi=1.14.0=py36h2e261b9_0chardet=3.0.4=py36_1003click=7.1.1=py_0cryptography=2.8=py36h1ba5d50_0decorator=4.4.2=py_0ffmpeg=4.0=hcdf2ecd_0fontconfig=2.13.0=h9420a91_0freeglut=3.0.0=hf484d3e_5freetype=2.9.1=h8a8886c_1gast=0.2.2=py36_0glib=2.63.1=h5a9c865_0google-auth=1.13.1=py_0google-auth-oauthlib=0.4.1=py_2google-pasta=0.2.0=py_0graphite2=1.3.13=h23475e2_0grpcio=1.27.2=py36hf8bcb03_0h5py=2.8.0=py36h989c5e5_3harfbuzz=1.8.8=hffaf4a1_0hdf5=1.10.2=hba1933b_1html5lib=0.9999999=py36_0icu=58.2=he6710b0_3intel-openmp=2019.4=243itsdangerous=1.1.0=py36_0jasper=2.0.14=h07fcdf6_1jinja2=2.11.2=py_0jpeg=9b=h024ee3a_2keras-applications=1.0.8=py_0keras-preprocessing=1.1.0=py_1ld_impl_linux-64=2.33.1=h53a641e_7libedit=3.1.20181209=hc058e9b_0libffi=3.2.1=hd88cf55_4libgcc-ng=9.1.0=hdf63c60_0libgfortran-ng=7.3.0=hdf63c60_0libglu=9.0.0=hf484d3e_1libmklml=2019.0.5=0libmxnet=1.5.0=mkl_hfe83b78_0libopencv=3.4.2=hb342d67_1libopus=1.3.1=h7b6447c_0libpng=1.6.37=hbc83047_0libprotobuf=3.6.1=hd408876_0libstdcxx-ng=9.1.0=hdf63c60_0libtiff=4.1.0=h2733197_0libuuid=1.0.3=h1bed415_2libvpx=1.7.0=h439df22_0libxcb=1.13=h1bed415_1libxml2=2.9.9=hea5a465_1markdown=3.1.1=py36_0markupsafe=1.1.1=py36h7b6447c_0mkl=2020.0=166mkl-dnn=0.19=hfd86e86_1mkl-service=2.3.0=py36he904b0f_0mkl_fft=1.0.15=py36ha843d7b_0mkl_random=1.1.0=py36hd6b4f25_0mxnet=1.5.0=hea8a0af_0ncurses=6.2=he6710b0_1numpy=1.16.3=py36h7e9f1db_0numpy-base=1.16.3=py36hde5b4d6_0oauthlib=3.1.0=py_0olefile=0.46=py36_0openssl=1.1.1g=h7b6447c_0opt_einsum=3.1.0=py_0pcre=8.43=he6710b0_0pip=20.0.2=py36_1pixman=0.38.0=h7b6447c_0protobuf=3.6.1=py36he6710b0_0py-mxnet=1.5.0=py36hc738527_0pyasn1=0.4.8=py_0pyasn1-modules=0.2.7=py_0pycparser=2.20=py_0pyjwt=1.7.1=py36_0pyopenssl=19.1.0=py36_0pysocks=1.7.1=py36_0python=3.6.10=hcf32534_1readline=8.0=h7b6447c_0requests-oauthlib=1.3.0=py_0rsa=4.0=py_0scipy=1.3.0=py36h7c811a0_0setuptools=46.1.3=py36_0six=1.14.0=py36_0sqlite=3.31.1=h62c20be_1tensorboard=1.12.2=py36he6710b0_0tensorflow=1.12.0=mkl_py36h69b6ba0_0tensorflow-base=1.12.0=mkl_py36h3c3e929_0termcolor=1.1.0=py36_1tk=8.6.8=hbc83047_0urllib3=1.25.8=py36_0werkzeug=1.0.1=py_0wheel=0.34.2=py36_0wrapt=1.12.1=py36h7b6447c_1xz=5.2.5=h7b6447c_0zlib=1.2.11=h7b6447c_3zstd=1.3.7=h0b5b093_0
pip-rknn_toolkit-1.3.0-requirements.txt 清单
dill==0.2.8.2flask==1.0.2flatbuffers==1.10idna==2.8lmdb==0.93networkx==1.11onnx==1.4.1onnx-tf==1.2.1pillow==5.3.0ply==3.11psutil==5.6.2pyyaml==5.3.1requests==2.22.0ruamel-yaml==0.15.81typing==3.7.4.1typing-extensions==3.7.4.2

  先把依赖包都装上,注意要装到先前创建的环境:

  再安装rknn-toolkit-1.3.0工具包,选择文件”rknn_toolkit-1.3.0-cp36-cp36m-linux_x86_64.whl”:

文件”rknn_toolkit-1.3.0-cp36-cp36m-linux_x86_64.whl”可在光盘资料中找到。

  • 检查rknn-toolkit是否安装成功

  若没有出现任何报错,则安装成功。

注意,可能出现以下WARING,是显示里面依赖的库在未来的接口会有变更,目前仍可以正常使用!
rknn-toolkit_warning

  至此,M1808的AI开发环境rknn-toolkit就安装好了。


热门文章推荐
热门产品推荐
  • RK3588核心板 | NXN-CORE-3588-BTB-5060-V2

    RK3588核心板 | NXN-CORE-3588-BTB-5060-V2

    核心板

    0.00

    0.00

  • RK3588核心板 | NXN-CORE-3588-BTB-6080-V2

    RK3588核心板 | NXN-CORE-3588-BTB-6080-V2

    核心板

    20000.00

    2799.00

  • RK3588核心板 | NXN-CORE-3588-MXM-7082-V2

    RK3588核心板 | NXN-CORE-3588-MXM-7082-V2

    核心板

    20000.00

    2799.00

  • RK3576核心板 | NXN-CORE-3576-260-5070-V1

    RK3576核心板 | NXN-CORE-3576-260-5070-V1

    核心板

    0.00

    0.00

  • RK3568核心板 | NXN-CORE-3568-MXM-5282-V2

    RK3568核心板 | NXN-CORE-3568-MXM-5282-V2

    核心板

    0.00

    0.00

  • RV1126核心板 | NXN-CORE-1126-BTB-4045-V2

    RV1126核心板 | NXN-CORE-1126-BTB-4045-V2

    核心板

    699.00

    699.00

  • 一种多通道视频采集及拼接显示的应用程序

    一种多通道视频采集及拼接显示的应用程序

    应用开发

    20000.00

    2799.00

  • 一种基于RK3588的通用型开发板

    一种基于RK3588的通用型开发板

    产品中心

    20000.00

    2799.00

  • 物联网云平台

    物联网云平台

    应用开发

    0.00

    0.00

Copyright © 2021-2024 福州牛新牛科技有限公司 All rights reserved. |