0
点赞
收藏
分享

微信扫一扫

TQ3568开发板NPU使用手册

TQ3568开发板NPU使用手册_linux

第一章:认识NPU  

1.1 NPU的起源  

在探讨NPU之前,让我们先了解一下CPU和GPU。CPU,即中央处理器,类似于人类的大脑,主要负责逻辑控制和任务调度。然而,CPU的计算能力相对较弱。而GPU则是一种图形处理器,专用于图形处理,因此需要进行大量的计算。相比之下,GPU在计算方面表现出色,但在逻辑控制和任务调度方面相对较弱。因此,我们可以将GPU视为CPU的补充。

然而,随着人工智能和大数据时代的到来,以往的嵌入式处理器中的CPU和GPU逐渐无法满足不断增长的需求,尤其是在深度学习领域。为了满足这种不断增长的需求,NPU(神经网络处理器)应运而生。NPU的目标是提供更强大的计算能力,尤其是在处理深度学习任务方面。通过采用高效的算法和专门的硬件设计,NPU能够加速神经网络计算及相关任务,从而提供更高的性能和效率。

综上所述,NPU是为了应对日益增长的人工智能和大数据需求而设计的处理器。它通过优化的算法和硬件设计,提供高性能和高效率的神经网络计算能力,尤其在深度学习领域具有突出的表现。如下图所示:


NPU,全称为神经网络处理器(Neural Process Unit),在电路层面模拟了人类的神经元和突触,因此在处理人工智能任务方面表现出色。

NPU的出现极大地减轻了CPU和GPU的负担。在任务处理过程中,首先经过CPU的处理,然后根据任务性质决定是分配到GPU还是NPU。对于图像处理方面的任务,交由GPU处理;而对于人工智能方面的任务,交由NPU处理。

NPU广泛应用于多个领域,包括人脸跟踪、视频监控、先进的驾驶员辅助系统(ADAS)、智能语音等。它的应用场景非常多样化,涵盖了许多重要的任务和功能。


1.2 RKNPU的发展历程  

为了满足人工智能的需求,瑞芯微的处理器逐渐开始集成NPU,并将其内置于处理器中,命名为RKNPU。

RKNPU经历了几代的发展。首先,第一代RKNPU从RK3399pro和RK1808开始引入,相较于传统的CPU和GPU,在深度学习计算能力方面有了显著提升。接下来,第二代NPU在RV1109和RV1126上使用,进一步提升了NPU的利用率。第三代RKNPU应用于RK3566和RK3568,采用全新的自研NPU架构。

这一系列RKNPU的发展过程如下图所示。


瑞芯微的RK3568芯片内置的NPU是RKNPU第三代的代表产品。它具备全新的自研架构,支持多种卷积运算和混合操作,提供强大的神经网络加速处理性能,并包含CNA、DPU和PPU模块,用于加速卷积、数据处理和Pooling操作。

NPU开发完整的流程如下图所示:


1、模型训练

在模型训练阶段,用户根据需求和实际情况选择合适的框架(如Caffe、TensorFlow等)进行训练得到符合需求的模型。也可直接使用已经训练好的模型。

2、模型转换

此阶段为通过RKNN Toolkit把模型训练中得到的模型转换为NPU可用的模型。

3、程序开发

最后阶段为基于RKNN API或RKNN Tookit的Python API开发程序实现业务逻辑。

第二章 快速上手RKNPU2  

2.1 获取SDK  

1、首先,下载rknpu2并拷贝虚拟机Ubuntu(获取路径在3.1小节),如下图所示,RKNPU2 提供了访问rk3568 芯片 NPU 的高级接口,其API为C语言构成,常用于在开发板上构建模型与推理。


2、将rknpu2_1.3.0.tar.gz压缩包解压到当前文件夹,如下图所示


RK356X平台 NPU SDK 包含了 API 使用示例程序、NPU 运行库、服务程序、文档。服务程序称为 rknn_server,是在开发板上常驻的服务进程,用于连板推理。

其中doc目录放着提供给用户的帮助文档,如下图所示:


examples目录放着许多demo,如下图所示:


在 RKNN SDK 中提供了 Linux 平台的 MobileNet 图像分类、SSD 目标检测、 YOLOv5目标检测示例。这些 Demo 能够为客户基于 RKNN SDK 开发自己的AI 应用提供参考。

值得注意的是,runtime目录用于存放API运行时所需的运行库与头文件

2.2 RKNPU2 的编译及使用方法  

下面以 rknpu2/examples 下的 rknn_yolov5_demo 在 RK3568 Linux 64 位平台(buildroot 系统)上运行为例,来讲解如何快速上手运行。

1、设置交叉编译器  

我们知道,在linux开发中。涉及编译时,总少不了交叉编译器的配置。用户可查看《TQ3568平台编译手册》对交叉编译器进行下载安装。

2、修改编译工具路径  

因为此章节以 rknn_yolov5_demo 在 RK3568 Linux 64 位平台上运行为例, 所以修改 examples/rknn_yolov5_demo/build-XXX.sh 的编译工具路径,如下图所示:


修改build-linux_RK356X.sh 文件,将 TOOL_CHAIN和GCC_COMPILER。修改内容如下所示:

· 

· 

TOOL_CHAIN=/opt/EmbedSky/TQ3568/tools/aarch64-linux-gcc-v9.3GCC_COMPILER=$TOOL_CHAIN/bin/aarch64-linux


3、更新 RKNN 模型  

 一般来说,想要使用RKNPU进行推理学习。先要使用RKNN-Toolkit工具将常见的深度学习模型转换成适用于RKNPU的模型格式(.rknn结尾的模型文件)。接着,应用程序加载转换好的模型,调用RKNPU进行推理加速。

RKNN SDK 提供的 demo 程序中默认自带了 RKNN 模型,我们无需再进行模型转换,此模型在RKNN SDK 的 examples/rknn_yolov5_demo/model/RK356X/目录下,如下图所示:


如使用自己的模型需要转换成 rknn 模型,转换方法可以参考第 5 章节。

在得到 RKNN 模型之后,demo 程序使用 C 接口在 RK3568 平台开发应用,如下图所示:


2.3 编译 rknn_yolov5_demo  

1、在终端命令窗口进入 rknn_yolov5_demo 文件夹,输入以下命令:

· 

cd examples/rknn_yolov5_demo/

2、运行 build-android_RK356X.sh 脚本编译程序

· 

./build-linux_RK356X.sh


备注:

1) 此例子为编译 RK356X 的Linux 64 位平台。若需要编译其他平台请选择相应的脚本。详情可参考/rknpu2/examples/rknn_yolov5_demo/README.md。

2) 若在编译时出现 cmake 错误,可执行以下命令安装 cmake 后再运行编译脚本。

· 

sudo apt install cmake

3、编译完成之后,编译好的程序一般放在 install 目录,如下图所示:

4、网盘中也提供了编译好的Demo,可以在网盘资料"\02_ 【iTOP-RK3568 开发板】开发资料\11_NPU 使用配套资料\02_NPU demo\Linux"下载。

2.4 在板端运行 rknn_yolov5_demo

1、将运行时所需的库文件拷贝到开发板的/usr/lib 目录下  

值得注意的是,库文件在runtime/RK356X/Linux/librknn_api/aarch64/目录下,如下图所示:


在librknn_api目录下,使用ADB命令将库文件传到开发板

· 

adb push aarch64/* /usr/lib


2、把编译好的程序rknn_yolov5_demo_Linux通过ADB上传到开发板的根目录上, 开发板上要烧写 linux 系统(buildroot)。 

· 

adb push rknn_yolov5_demo_Linux/ /


在开发板终端查看,如下图所示:


3、设置库文件的路径  

· 

export LD_LIBRARY_PATH=./lib

4、进入程序所在目录  

· 

cd /rknn_yolov5_demo_Linux

5、 运行程序识别相应的图片中物体的类别  

用法 Usage: ./rknn_yolov5_demo <rknn model><jpg>

· 

./rknn_yolov5_demo ./model/RK356X/yolov5s-640-640.rknn ./model/bus.jpg


6、将生成的图片下载至本地电脑中查看

· 

adb pull rknn_yolov5_demo_Linux/out.jpg ./



第三章:RKNPU开发环境搭建  

3.1 工具路径说明  

3.1.1 RKNN SDK说明  

要使用 RKNPU,需要下载 RKNN SDK。RKNN SDK 对RKNPU提供对外编程接口,能够帮助用户部署使用RKNN-Toolkit2导出的RKNN模型,加速AI应用的落地。SDK里也有许多模型的demo,供用户参考开发。

请用户自行把RKNN SDK拷入Ubuntu虚拟机中。RKNN SDK的下载地址位于“\08_开发板配套工具\Linux平台工具\NPU 使用配套资料\01_rknpu2 工具”。

3.1.2 RKNN-Toolkit2工具说明  

在使用RKNN SDK之前,用户需要使用RKNN-Toolkit2工具将自主研发的算法模型转换为RKNN模型。RKNN是Rockchip NPU平台(即开发板)所使用的模型类型,其文件以.rknn结尾。一旦获得RKNN模型,用户可以选择使用C接口在RK3568平台上开发应用程序。至于如何将其它模型转换为rknn模型,在4.1小节有将onnx模型转换为rknn模型的例程,供用户参考。

请用户自行把RKNN-Toolkit2工具拷入Ubuntu虚拟机中。RKNN-Toolkit2工具的下载地址为“\08_开发板配套工具\Linux平台工具\NPU 使用配套资料\02_rknn-toolkit2工具”。

3.2 RKNN-Toolkit环境搭建  

3.2.1 RKNN-Toolkit2 介绍  

RKNN-Toolkit是为用户提供在 PC、 Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成以下功能:

1、模型转换

支持Caffe、Tensorflow、TensorFlow Lite、ONNX、Darknet、Pytorch、MXNet 模型转成 RKNN 模型,支持 RKNN 模型导入导出,后续能够在 Rockchip NPU 平台上加载使用。从1.2.0版本开始支持多输入模型。从1.3.0版本开始支持 Pytorch 和 MXNet。

2、量化功能

支持将浮点模型转成量化模型, 目前支持的量化方法有非对称量化( asymmetric_quantized-u8 ) , 动态定点量化 ( dynamic_fixed_point-8 和 dynamic_fixed_point-16)。从1.0.0版本开始, RKNN-Toolkit 开始支持混合量化功能。

3、模型推理

能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型并获取推理结果;也可以将 RKNN 模型分发到指定的 NPU 设备上进行推理。

4、性能评估

能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型,并评估模型性能(包括总 耗时和每一层的耗时);也可以将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型 在实际设备上运行时的性能。

5、内存评估

评估模型运行时对系统和 NPU 内存的消耗情况。使用该功能时,必须将 RKNN 模型分发到 NPU 设备中运行,并调用相关接口获取内存使用信息。从0.9.9版本开始支持该功能。

RKNNToolkit2 工具包中还包含了 RKNN Toolkit Lite2 工具,RKNN Toolkit Lite2 工具只可以在开发板上部署运行 RKNN 模型,不能进行模型转换,如果非RKNN 模型,请使用 RKNN-Toolkit2 来进行转换。

3.2.2 使用pip 安装RKNN-Toolkit2  

用户可以使用我司提供的 Ubuntu20.04版本虚拟机镜像,已经配置了开发环境。值得注意的是,由于RKNN SDK与RKNN-Toolkit2工具过大,不宜放入虚拟机镜像中,以免用户下载时间过长,请用户根据3.1小节自行将工具拷入Ubuntu系统中。

虚拟机镜像下载路径为:

"08_开发板配套工具\Linux平台工具\NPU 使用配套资料\03_Ubuntu20.04_NPU"。

接下来讲解如何自行搭建开发环境。下面的例子是20.04版本的ubuntu系统。

3.2.2.1 创建 virtualenv 环境  

值得注意的是,以下所有安装命令,若提示权限不足,请在前面加上sudo执行。

1、安装所需的依赖包:

· 

· 

· 

apt-get install python3 python3-dev python3-pip            apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc

2、如果系统中同时有多个版本的 Python 环境,建议使用 virtualenv 管理 Python 环境,作者使用virtualenv管理python环境,输入以下命令安装:

· 

apt install virtualenv

3、由于Ubuntu 20.04中默认的 python 环境为 python3.8,那么此时创建的虚拟环境是以 python3.8 创建的虚拟环境,选择 python3 来创建虚拟化环境,输入如下命令:

值得注意的是,embedsky_rknn为自创的目录,请在embedsky_rknn所在目录执行以下命令,笔者的embedsky_rknn目录在/home/embedsky/目录下。

· 

virtualenv -p /usr/bin/python3 embedsky_rknn   #embedsky_rknn可以改为其它名称

4、激活虚拟化环境,输入以下命令:

· 

source embedsky_rknn/bin/activate 


可以看到,前方出现了(embedsky_rknn)代表虚拟化环境激活成功。

3.2.2.2 安装 Python 库依赖  

1、打开rknn-toolkit2-1.3.0/doc/requirements_cp38-1.3.0.txt文件

· 

vi  rknn-toolkit2-1.3.0/doc/requirements_cp38-1.3.0.txt

将numpy==1.17.3更改为1.20.3如下图所示:


保存退出,若提示文件只读。请使用更高权限打开此文件进行修改。

2、为了安装方便,我们使用如下命令安装。这里要注意!20版本的UBuntu默认 python 为 3.8版本,使用 requirements_cp38-1.3.0.txt。(具体路径请以实际为准)

· 

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /opt/rknn-toolkit2-1.3.0/doc/requirements_cp38-1.3.0.txt


可以发现,会报以下错误:


解决方法:执行以下语句安装1.20.3版本的numpy

· 

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy==1.20.3


重新执行安装语句,python库依赖安装成功如下图所示:

· 

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /opt/rknn-toolkit2-1.3.0/doc/requirements_cp38-1.3.0.txt


3.2.2.3 安装 RKNN-Toolkit  

 1、输入以下命令进入 rknn_toolkit2*.whl安装包目录,如下所示:

· 

cd xxx/rknn-toolkit2-1.3.0/packages


2、输入以下命令安装 rknn_toolkit2

· 

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple rknn_toolkit2-1.3.0_11912b58-cp38-cp38-linux_x86_64.whl


可以发现,有版本兼容问题报错。这个对我要实现的功能无关紧要,继续往下。

3、输入以下语句检查 RKNN-Toolkit2 是否安装成功, 若没有提示错误,说明 RKNN 库安装成功,安装成功如下图所示:

· 

· 

python3            from rknn.api import RKNN


5、如上图所示,确认已成功安装RKNN-Toolkit2后,按住"ctrl+d"即可退出python3。

第四章 RKNN-Toolkit2工具的使用  

4.1 在PC端模拟推理  

 RKNN-Toolkit2 自带了一个模拟器,在 Ubuntu20.04 上运行 demo 程序即是在仿真 NPU模拟器上运行 demo。以下演示如何在模拟器上运行 RKNN-Toolkit2 工具自带的 yolov5.onnx 模型。

1、cd 进入rknn-toolkit2-1.3.0/examples/onnx/yolov5目录

· 

cd rknn-toolkit2-1.3.0/examples/onnx/yolov5

2、执行以下命令转换 yolov5s.onnx 为 rknn 模型并运行模型推理图片

· 

python3 test.py


3、运行模型如下图所示


由上图结果可以看出,图上有三个人和一个巴士,所在坐标与原图相符,推理图片成功。原图如下图所示:


4、转换后的模型保存在执行test.py程序的同级目录下,如下图所示:


成功将模型转换成.rknn模型后,该模型就可以被RKNPU识别并推理。

4.2 RKNN-Toolkit2 连板推理  

1、首先,开发板烧写 Android11系统,连接好电源线、串口线、公对公的双头USB烧写线,一头连接开发板,一头连接PC端。


上电,虚拟机UBuntu会弹出以下内容,我们选择将USB连接虚拟机。


2、查看板子设备

· 

adb devices


由上图所示,可以看到TQ3568开发板的id为“e0912a58aa7da2cd”,连接成功。

3、进入 RKNPU2 SDK目录,如下所示:


4、执行以下命令使adb 获得开发板 root 权限

· 

adb root


5、执行以下命令重新挂载开发板

· 

adb remount


6、更新板子的 rknn_server 和 librknnrt.so

librknnrt.so: 是一个板端的 runtime 库。

rknn_server: 是一个运行在板子上的后台代理服务,用于接收 PC 通过 USB 传输过来的协议, 然后执行板端 runtime 对应的接口,并返回结果给PC。

7、执行以下命令将rknn_server推送拷贝到开发板上

· 

adb push runtime/RK356X/Android/rknn_server/arm64/rknn_server /vendor/bin

8、执行以下面临将librknnrt.so推送拷贝到开发板上

· 

adb push runtime/RK356X/Android/librknn_api/arm64-v8a/librknnrt.so /vendor/lib64

9、打开 adb shell 命令行,即可操作TQ3568开发板,修改rknn_server权限:

· 

· 

· 

· 

adb shell            chmod +x /vendor/bin/rknn_server       #修改rknn_server权限            sync            reboot


10、Android 系统启动时会自动运行 rknn_server, "ps -ef|grep rknn_server"可以查看是否运行,如下图所示

· 

ps -ef | grep rknn_server


11、我们进入 rknn-toolkit2-1.3.0 文件夹。以 demo(onnx/yolov5)为例,使用 rk3568 平台进行推理。输入以下命令进入 examples/onnx/yolov5 文件夹。

· 

cd examples/onnx/yolov5


12、修改 examples/onnx/yolov5/test.py 文件,我们修改对应的平台为 rk3568,修改的地方分别在235行和265行附近,修改如下所示:


13、执行以下命令,激活虚拟化环境

· 

source embedsky_rknn/bin/activate


14、在运行模型之前,执行以下语句检查开发板是否被识别到,保证后续数据能被正确传输。

· 

adb devices


15、进入到 examples/onnx/yolov5 文件夹,输入以下命令,执行模型转换和推理模 型的 test.py 脚本

· 

cd  examples/onnx/yolov5            python test.py



由上图结果可以看出,图上有三个人和一个巴士,所在坐标与原图相符,推理图片成功。原图如下图所示:


举报

相关推荐

0 条评论