基于RKNN的YOLOv5安卓Demo

1.简介

基于RKNPU2 SDK 1.6.0版的安卓YOLOv5演示应用程序,选择图片进行对象检测并显示识别结果。

GitHub源码地址https://github.com/shiyinghan/rknn-android-yolov5

2.实现过程

参考RKNN官方库RKNN Model Zoo提供的YOLOv5对象检测demo,该demo是二进制的可执行程序,没有整合成app,但是代码结构比较清晰,整合成安卓应用,可以熟悉一下流程。

App相关的功能,例如加载asset下面的rknn模型文件等,参考了ncnn-android-yolov5软件库。

调用模型推理和后处理逻辑参考rknn_model_zoo/examples/yolov5/cpp下面的demo源码。

3.运行效果

先选择图片,然后点击识别,效果如下:
在这里插入图片描述

4.注意事项

运行该demo之前需要保证开发板端已经配置好了RKNN环境,/vendor/bin/rknn_server和/vendor/lib64/librknnrt.so的版本都是1.6.0。

RKNN官方已经有使用摄像头的实时数据进行yolov5对象检测并显示识别结果的demo,有需要的可以直接参考rknn_yolov5_android_apk_demo

5.关于零拷贝API

相比于通用API,官方更推荐零拷贝API,在代码里面可以直接设置是否使用零拷贝API,代码如下:
在这里插入图片描述

在RK3568开发板上面实际测试之后发现,零拷贝API相对于通用API,在单线程的实现逻辑下面,运行量化模型可以快1ms左右,优势并不大。而如果运行非量化模型,零拷贝API甚至可能比通用API更慢。究其原因,可能是因为零拷贝API只是减少一次内存拷贝,而一些操作(比如数据的归一化、量化、反量化等)本来运行在CPU上面,使用零拷贝API会导致这些操作运行在NPU上面。相比于CPU,NPU除了推理,其他操作并不一定有优势。

当然如果想要充分利用NPU,CPU更多的用作其他用途的话,还是推荐使用零拷贝API的。在RK3568开发板上面,运行于多线程模型下,通用API的NPU使用率最多95%,而零拷贝API的NPU使用率则可以达到99%。

6.参考

rknn_model_zoo
ncnn-android-yolov5

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值