实战RK3568性能调优:如何利用迅为资料压榨NPU潜能-在Android系统中使用NPU

描述

 

     当你拿到性能强大的RK3568核心板,是否曾对那颗标称1Tops的NPU感到无从下手?特别是在Android系统上,如何绕过复杂的环境配置,快速部署AI模型?本文将抛开理论,直击实战,手把手带你利用迅为提供的完整资料,在Android系统上点亮NPU,让你的AI应用跑得更快、更稳。

 

开发板



为什么选择迅为的官方工具链?

RK3568的NPU确实强大,但对许多开发者而言,它就像一座“锁住的金矿”。从零开始交叉编译、解决依赖、适配系统……这个过程不仅繁琐,还极易因版本问题无法发挥硬件最佳性能。

迅为提供的RKNPU2工具链,其核心价值在于:

· 开箱即用:工具已预编译,与Android系统内核、驱动深度适配,省去大量环境配置时间。
· 性能最优:针对迅为硬件进行了底层参数调优,确保NPU算力被高效利用。
· 生态完整:从模型转换、示例代码到部署指南,提供了详情手册。

 


接下来,我们将进入最核心的实战环节。


 

让NPU跑起来-在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-download 

s

 

 

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

开发板

 

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 路径下,然后解压,

 

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_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 如下图所示:

开发板
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分