基于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

相关推荐

  1. rknn3588 yolov5 学习笔记

    2024-04-09 12:04:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 12:04:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 12:04:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 12:04:03       87 阅读
  4. Python语言-面向对象

    2024-04-09 12:04:03       96 阅读

热门阅读

  1. 【算法基础】第一章:基础算法

    2024-04-09 12:04:03       27 阅读
  2. go语言学习--2.函数

    2024-04-09 12:04:03       36 阅读
  3. mysql基础命令和json类型

    2024-04-09 12:04:03       33 阅读
  4. reids自定义RedisTemplate以及乱码问题解决

    2024-04-09 12:04:03       31 阅读
  5. Gitea:轻量级自托管Git服务的简介

    2024-04-09 12:04:03       37 阅读
  6. ubuntu23 安装nodejs

    2024-04-09 12:04:03       33 阅读
  7. VSCode配置json文件 C语言篇

    2024-04-09 12:04:03       38 阅读
  8. linux 配置pg官方镜像

    2024-04-09 12:04:03       34 阅读
  9. HTML5标签(网页编程)

    2024-04-09 12:04:03       34 阅读