《【北京迅为】itop-3568开发板NPU使用手册》系统性地介绍了RKNPU从入门到应用开发的全流程知识体系。本手册以“认识工具—构建环境—模型转换—部署实践”为主线,为开发者在Linux和Android双平台上提供完整的NPU应用开发指导。

本手册既适合嵌入式AI开发初学者系统学习,也可作为高级开发者的技术参考,帮助开发者高效利用RKNPU实现各类AI应用的部署与优化。

完整教程及配套资料,关注我的B站👉【北京迅为电子】或公众号,回复【RKNPU2】即可领取,你的关注是我更新的最大动力~


【公众号】迅为电子

【交流群】861311530

【视频展示】【【北京迅为】基于RK3568/RK3588开发板的AI图像识别方案】 

【视频教程】【AI深度学习推理加速器】——RKNPU2 从入门到实践(基于RK3588和RK3568)


第3章 让NPU跑起来

3.1 在Linux系统中使用NPU

下载rknpu2并拷贝虚拟机Ubuntu,如下图所示, RKNPU2提供了访问rk3568芯片NPU的高级接口。

下载地址为“iTOP-3568开发板\02_【iTOP-RK3568开发板】开发资料\11_NPU使用配套资料\01_rknpu2工具

对于RK3568来说,Linux平台RKNN SDK库文件为librknnrt.so,如下图所示:

RK3568平台RKNN SDK包含了 API 使用示例程序、NPU 运行库、服务程序、文档。

服务程序称为 rknn_server,是在开发板上常驻的服务进程,用于连板推理。 在RKNN SDK中提供了Linux平台的MobileNet 图像分类、SSD 目标检测、YOLOv5 目标检测示例。这些 Demo能够为客户基于RKNN SDK开发自己的AI应用提供参考。

在rknpu2/examples中还有很多其他例子,如下图所示:

下面以rknpu2/examples下的 rknn_yolov5_demo 在 RK3568 Linux 64 位平台buildroot系统上运行为例,来讲解如何快速上手运行。整体思路分为三步:

1 在虚拟机Ubuntu18.04上交叉编译demo程序 rknn_yolov5_demo(demo已经默认是rknn,无需进行模型转换)

2 部署到iTOP-RK3568开发板

3 在开发板上运行demo

3.1.1 设置交叉编译器

1 安装gcc交叉编译器,

编译器下载地址是网盘资料“iTOP-3568开发板\02_【iTOP-RK3568开发板】开发资料\11_NPU使用配套资料\03_编译所需工具\Linux”,

拷贝gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz到Ubuntu的/opt/tool_chain目录下,这里拷贝的路径要和作者保持一致,后面要用到交叉编译器的绝对路径。如下图所示:

2 解压交叉编译器压缩包

tar -vxf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz

解压后如下图所示:

解压完成后备用!

3.1.2 修改编译工具路径

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

2 修改build-linux_RK356X.sh文件,将TOOL_CHAIN 修改为gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu解压路径并保存修改文件,如下图所示。

TOOL_CHAIN=/opt/tool_chain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
GCC_COMPILER=$TOOL_CHAIN/bin/aarch64-linux-gnu

3.1.3 更新RKNN模型

RKNN是Rockchip NPU平台(也就是开发板)使用的模型类型,是以.rknn结尾的模型文件。

RKNN SDK提供的demo程序中默认自带了RKNN模型,在RKNN SDK的examples/rknn_yolov5_demo/model/RK356X/目录下,如下图所示:

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

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

3.1.4 编译demo

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

cd examples/rknn_yolov5_demo/

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

./build-linux_RK356X.sh

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

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

3.1.5 开发板运行demo

1 通过U盘拷贝RKNPU2工具中的

runtime/RK356X/Linux/librknn_api/aarch64/目录下的文件到开发板的/usr/lib目录下。

2 把编译好的程序rknn_yolov5_demo_Linux通过U盘拷贝到开发板的根目录上,开发板上要烧写linux系统(buildroot)。如下图所示:

3 设置库文件的路径,输入以下命令:

export LD_LIBRARY_PATH=./lib

4 进入程序所在的目录,输入以下命令:

cd /rknn_yolov5_demo_Linux

5 运行程序来识别相应的图片中物体,输入以下命令:

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

6 运行完生成结果图片out.jpg,如下图所示:

7 拷贝生成的out.jpg到U盘中,如下图所示:

8 在windows下查看out.jpg,如下图所示:

3.2 在Android系统中使用NPU

下载rknpu2并拷贝到虚拟机Ubuntu,如下图所示, RKNPU2提供了访问rk3568芯片NPU的高级接口。

下载地址为“iTOP-3568开发板\02_【iTOP-RK3568开发板】开发资料\11_NPU使用配套资料\01_rknpu2工具

Android平台有俩种方式来调用RKNN API

第一种:AI应用直接链接RKNN SDK库文件librknnrt.so

第二种:应用链接Android 平台HIDL实现的librknn_api_android.so,HIDL是用于指定 Android HAL 和其用户之间的接口的一种接口描述语言。

如果需要通过CTS/VTS 测试(兼容性测试套件/供应商测试套件)的安卓设备,可以使用基于 Android 平台 HIDL 实现的 RKNN API。

如果不需要通过CTS/VTS 测试的安卓设备,建议直接使用librknnrt.so,这样对各个调用接口流程的链路更短,可以提供改好的性能。

对于使用Android HIDL实现的RKNN API的代码位于RK356x Android系统SDK的 vendor/rockchip/hardware/interfaces/neuralnetworks 目录下。当编译完Android系统时,会生成一些NPU相关的库,如下所示,但是对于应用只需要链接使用librknn_api_android.so 即可。

/system/lib/librknn_api_android.so

/system/lib/librknnhal_bridge.rockchip.so

/system/lib64/librknn_api_android.so

/system/lib64/librknnhal_bridge.rockchip.so /vendor/lib64/rockchip.hardware.neuralnetworks@1.0.so /vendor/lib64/rockchip.hardware.neuralnetworks@1.0-adapter-helper.so /vendor/lib64/librknnrt.so

/vendor/lib64/hw/rockchip.hardware.neuralnetworks@1.0-impl.so

在RKNN SDK中提供了Android平台的MobileNet 图像分类、SSD 目标检测、YOLOv5 目标检测示例。这些 Demo能够为客户基于RKNN SDK开发自己的AI应用提供参考。在rknpu2/examples中还有很多例子,如下图所示:

下面以 rknn_yolov5_demo 在 RK3568 Android 64位平台上运行为例,来讲解如何快速上手运行。整体思路分为三步:

1 在虚拟机Ubuntu18.04上交叉编译demo程序 rknn_yolov5_demo(demo已经默认是rknn,无需进行模型转换)

2 部署到iTOP-RK3568开发板

3 在开发板上运行demo

3.2.1下载编译所需工具

1 Android系统编译需要下载NDK,Android NDK下载地址为如下所示:https://developer.android.google.cn/ndk/downloads/older_releases#ndk-17c-downloads

将下载地址复制到浏览器,并打开网页,如下图所示:

2 点击“我同意这些条款”,如下图所示:

3 往下滑动网页,找到Android NDK r17c(建议的版本),下载Linux 64 位(x86)的软件包,如下图所示:

4 下载完毕,在Ubuntu的/opt/tool_chain目录下新建tool_chain文件夹,然后将android-ndk-r17c-linux-x86_64.zip拷贝到ubuntu的/opt/tool_chain路径下,然后解压,如下图所示:

5 迅为在网盘地址“iTOP-3568开发板\02_【iTOP-RK3568开发板】开发资料\11_NPU使用配套资料\03_编译所需工具\Android”目录下也提供了android-ndk-r17c安装包。

3.2.2 修改编译工具路径

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

2 修改build-android_RK356X.sh文件,将ANDROID_NDK_PATH 修改为 android-ndk-r17c 的保存路径,如下图所示:

NDK在ubuntu上的路径为/opt/tool_chain/android-ndk-r17c/,如下图所示。注意!!!ANDROID_NDK_PATH修改的路径要和实际的路径一致。

3.2.3 更新RKNN模型

RKNN是Rockchip NPU平台(也就是开发板)使用的模型类型,是以.rknn结尾的模型文件。

RKNN SDK提供的demo程序中默认自带了RKNN模型,在RKNN SDK的examples/rknn_yolov5_demo/model/RK356X/目录下,如下图所示:

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

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

3.2.4 编译demo

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

cd examples/rknn_yolov5_demo/

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

./build-android_RK356X.sh

3 此例子为编译 RK3568的安卓11 64 位平台。若需要编译其他平台请选择相应的脚本。详情可参考/rknpu2/examples/rknn_yolov5_demo/README.md 若在编译时出现 cmake 错误,可执行apt install cmake 命令安装 cmake 后再运行编译脚本。 

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

5 我们可以编译生成 Android 或 Linux Demo(需要交叉编译环境)。也可以直接下载编译好的 Demo,可以在网盘资料资料“iTOP-3568开发板\02_【iTOP-RK3568开发板】开发资料\11_NPU使用配套资料\02_NPU demo\Android”下载。

3.2.5 开发板运行demo

1 开发板上要烧写Android11系统,并连接好usb线。

接着使用命令sudo apt install android-tools-adb在虚拟机Ubuntu上安装adb工具。

2 开发板系统启动之后,我们将开发板连接到虚拟机Ubuntu18.04上。

3 开发板被ubuntu识别之后,在demo目录下输入“adb devices”命令可以查看到开发板设备。如下图所示,

4 推送拷贝rknn_server到开发板,输入以下命令:

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

5 推送拷贝librknnrt.so到开发板,输入以下命令:

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

6 使用adb推送拷贝rknn_yolov5_demo_Android(上一小节编译好的程序)到开发板的/data目录,注意!因为android系统权限问题,只能拷贝到data目录。输入以下命令拷贝:

adb push rknn_yolov5_demo_Android /data/

如果拷贝失败,要在串口终端上输入以下命令,然后再进行push操作

su
chmod 777 /data

7 然后我们进入开发板所在的系统,输入“adb shell”命令。

8 进入程序所在的目录,输入以下命令:

cd /data/rknn_yolov5_demo_Android/

9 设置库文件的路径,输入以下命令:

export LD_LIBRARY_PATH=./lib

10 运行程序来识别相应的图片中物体,输入以下命令:

用法 Usage: ./rknn_yolov5_demo <rknn model> <jpg> 
./rknn_yolov5_demo ./model/RK356X/yolov5s-640-640.rknn ./model/bus.jpg 

11 打开一个新的窗口终端,下载识别后的图片out.jpg到虚拟机ubuntu18.04上查看,输入以下命令:

adb pull /data/rknn_yolov5_demo_Android/out.jpg ./ 

查看out.jpg如下图所示:查看out.jpg如下图所示:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐