《【北京迅为】itop-3568开发板NPU使用手册》-第3章 让NPU跑起来
《【北京迅为】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如下图所示:
更多推荐

所有评论(0)