[RKNN] 1. 入门介绍

系列文章目录

[RKNN] 1. 入门介绍

[RKNN] 2. 模型转换和推理--API介绍&以yolox为例

[RKNN] 3. 零拷贝接口推理

[RKNN] 4. 基于零拷贝接口封装

目录

平台介绍

上位机配置及使用

开发板环境配置

1. ubuntu20.04安装

2. 装必备软件

opencv

ros

npu

Why NPU?

CPU和GPU

NPU


最近半年一直在做部署,NCNN在树莓派上表现一般、TensorRT的Jetson系列开发板贵,看到了有国产的芯片听说效果还不错,而且相对来说资源和文档都不算很多,就来部署试试,留下这系列文章做个纪念。

这第一篇文章主要是环境说明和配置,NPU结构的介绍等。

平台介绍

本系列文章均采用搭载RK3588s的Orange Pi 5B,为了方便后续机器人上ROS的部署,系统采用Ubuntu20.04。硬件和系统本文就不再叙述了,硬件参数可以见板子的官网介绍。RKNN的资源可见下面的以下仓库,都包含了官方提供的中英文文档。

上位机模型转换和python推理:https://github.com/rockchip-linux/rknn-toolkit2

板载py简易的推理接口:https://github.com/rockchip-linux/rknn-toolkit2/tree/master/rknn_toolkit_lite2

板载C/C++推理API和demo,有更灵活的推理接口:https://github.com/rockchip-linux/rknpu2

 python和C的api本系列都会进行实验,但是应该会以C为主。

上位机配置及使用

首先RKNN也是类似TensorRT闭源的,只开放了API的接口以及编译好的链接库。而且比较难受的是,根据我看rknn-toollit2的文档,是不能用户自定义算子的,估计只能等待官方实现,所以不能类似使用CUDA编程配合TensorRT实现纯GPU的推理加速。 

目前官方Github的仓库中commit版本是2023年5月26号提交的版本。rknn-toolskit2里面的packages中包含了编译好的python包,分别对应ubuntu16(python3.6)、ubuntu20(python3.8)、ubuntu22(python3.10),这个包是你本地机器(x86平台)用的,可以实现模型的转换、rknn模拟硬件npu的运行仿真以及推理等。

# 在ubuntu20.04 使用conda创建虚拟环境
conda create -n rknn python=3.8
conda activate rknn

# 默认会安装tensorflow、pytorch等太大了,加上 --no-deps 则不会自动安装
pip install rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl --no-deps 

# 可以注释仓库/doc/requirements_cp38-1.5.0.txt 中不想安装的包
pip install -r doc/requirements_cp38-1.5.0.txt

然后测试,会自动转换模型和使用npu模拟器进行推理

cd /examples/onnx/yolov5
python test.py

# 不报错并且能输出推理结果,应该就没问题了

开发板环境配置

1. ubuntu20.04安装

5B开发板默认带的是一个安卓的系统,我这里开发需要使用ubuntu,所以按照官方教程往开发板的emmc中刷一个他们提供的arm版本的ubuntu20.04。官方仓库的OrangePi_5B_RK3588S_用户手册_v1.1.pdf的这个文件中具体操作流程。我使用的是2.6.1章节中的使用RKDevTool烧录,十分简单,按照它的步骤就可以了,最后的工具显示下图,就成功了,同时ubuntu系统已经启动了,默认用户名和密码都是orangepi。

[RKNN] 1. 入门介绍_第1张图片

然后用ssh远程登录到系统,就可以开始愉悦的操作了。

2. 装必备软件

opencv

我后来才发现https://github.com/rockchip-linux/rknpu2/tree/master/examples/3rdparty这里有编译好的opencv以及其他常用的包。如果希望用最新版本的还是按照下面手动编译,否则直接用它的就行了

如果需要用c++版本的opencv或者有特别需求的需要像下面这样进行编译,只用python版本的话,直接pip就可以了

# 下载源码 https://opencv.org/releases/
# 我装的是最新版本4.8.0

# 安装一些基础包
sudo apt-get install build-essential   
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libgtk-3-dev   libjpeg-dev  libtiff5-dev  libpng-dev 
sudo apt-get install python3-dev python3-numpy
 
sudo apt-get install libeigen3-dev

# 进入解压后的源码路径
mkdir build && cd build 

# 设置编译选项
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES CMAKE_INSTALL_PREFIX=/usr/local ..

# 开始编译
make -j8

# 安装
sudo make install

# 我这边是一路顺畅,大概编译了40-50min

ros

强烈推荐小鱼的ros安装工具,简单易用小鱼的一键安装系列 | 鱼香ROS

wget http://fishros.com/install -O fishros && . fishros

# 安装ubuntu ros1 noetic

# 我这边安装也是一路顺畅

npu

python接口测试

# 安装板载rknn toolkit_lite2
# https://github.com/rockchip-linux/rknn-toolkit2/tree/master/rknn_toolkit_lite2/packages

sudo apt install python3-pip
pip install rknn_toolkit_lite2-1.5.0-cp38-cp38-linux_aarch64.whl

# 测试 https://github.com/rockchip-linux/rknn-toolkit2/tree/master/rknn_toolkit_lite2/examples/inference_with_lite

python test.py 

# 成功推理

C++接口测试

# https://github.com/rockchip-linux/rknpu2
# 这个里面的C++ demo也可以正常运行了,后续使用需要在CMakeLists.txt中修改相关库路径即可

Why NPU?

由于不想为了介绍硬件结构单独开一个文章介绍,这里就一并说明了。在过去的许多年里,计算机的运算都是利用通用的CPU或者GPU进行的,近些年来芯片行业成为热门,FPGA、NPU等越来越多的使用,有什么区别呢?使用npu有什么优势呢?

CPU和GPU

CPU和GPU用的都比较多了,下图是两者的基本结构,可以看到两者都具有计算单元、控制单元、Cache等,但是CPU的ALU少于GPU,而Cache明显多于GPU,这种结构也使得CPU具有高兴能处理串行指令,GPU可以进行并行运算。更多介绍可以参考nvidia的cuda编程教程。

[RKNN] 1. 入门介绍_第2张图片

NPU

那NPU呢?既然串行和并行都有了,为什么还要有新的结构呢?NPU (NeuralNetworks Process Units)神经网络处理单元,它是专门为神经网络设计的,可以快速执行卷积、矩阵乘法等NN中最基本的运算单元,而且功耗更低,相同功耗下,NPU的性能比GPU更高。NPU与GPU加速不同,体现为每层神经元计算结果不用输出到主内存,而是按照神经网络的连接传递到下层神经元继续计算,因此其在运算性能和功耗上都有很大的提升。

下图是RKNN的NPU核心示意图

[RKNN] 1. 入门介绍_第3张图片

你可能感兴趣的:(RKNN,计算机视觉,边缘计算,人工智能)