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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/600491.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web】CTFSHOW-2023CISCN国赛初赛刷题记录(全)

目录 Unzip BackendService go_session deserbug 主打一个精简 Unzip 进来先是一个文件上传界面 右键查看源码,actionupload.php 直接访问/upload.php,看到后端的源码 就是上传一个压缩包,对其进行解包处理 因为其是在/tmp下执行…

C++ | Leetcode C++题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; class Solution { public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(), nums.end());int n nums.size();int best 1e7;// 根据差值的绝对值来更新答案auto update [&](int cur) {if (abs(cur…

Qt 中的项目文件解析和命名规范

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、Qt项目文件解析 1、.pro 文件解析 2、widget.h 文件解析 3、main.cpp 文件解析 4、widget.cpp…

Redis: 持久化

文章目录 一、RDB持久化1、概念2、生成、载入RDB文件3、执行时机&#xff08;1&#xff09; 执行save命令&#xff08;2&#xff09;执行bgsave命令&#xff08;3&#xff09;Redis停机时&#xff08;4&#xff09;触发RDB条件 4、bgsave原理5、小结 二、AOF持久化1、概念2、AO…

element vue 日期时间组件封装

一、背景 年、月、周、日的时间范围类型&#xff0c;选择对应的日期类型&#xff0c;会传参给后端一个dateType参数&#xff0c;用于后端判断&#xff0c;进行数据抽稀。 二、实现效果 三、代码 完整代码&#xff1a; //年月周日&#xff0c;组件封装 //vue3 setup <scrip…

JAVA毕业设计134—基于Java+Springboot+Vue的社区医院管理系统(源代码+数据库+万字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的社区医院管理系统(源代码数据库万字论文)134 一、系统介绍 本项目前后端分离&#xff0c;分为管理员、用户、医生、前台四种角色 1、用户&#xff1a; 注…

边缘计算采集网关如何助力制造企业解决数采问题-天拓四方

一、企业背景 某大型制造企业&#xff0c;位于国内某经济发达的工业园区内&#xff0c;拥有多个生产线和智能化设备&#xff0c;致力于提高生产效率、降低运营成本。随着企业规模的扩大和生产自动化的推进&#xff0c;该企业面临着海量数据处理、实时响应和网络安全等多重挑战…

Prompt最佳实践|大模型也喜欢角色扮演?

在OpenAI的官方文档中已经提供了Prompt Enginerring的最佳实践&#xff0c;目的就是帮助用户更好的使用ChatGPT 编写优秀的提示词我一共总结了9个分类&#xff0c;本文讲解第2个分类&#xff1a;要求模型扮演角色 提供更多的细节要求模型扮演角色使用分隔符指定任务步骤提供样…

Java Web这一路走来

大部分Java应用都是Web或网络应用&#xff0c;MVC框架在Java框架中有着举足轻重的地位&#xff0c;一开始的Web应用并不现在这样子的&#xff0c;一步一步走来&#xff0c;每一步都经历了无数的血和泪的教训&#xff0c;以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

Cortex-M4架构

第一章 嵌入式系统概论 1.1 嵌入式系统概念 用于控制、监视或者辅助操作机器和设备的装置&#xff0c;是一种专用计算机系统。 更宽泛的定义&#xff1a;是在产品内部&#xff0c;具有特定功能的计算机系统。 1.2 嵌入式系统组成 硬件 ①处理器&#xff1a;CPU ②存储器…

学习:面向云备份提供商的 Solidigm 固态硬盘

SSD与HDD的区别 SSD和HDD之间的主要区别在于它们如何存储和传输数据。HDD有一个旋转盘片或磁盘&#xff0c;用于读取和写入数据。HDD的每GB初始价格通常低于SSD&#xff0c;这使其成为大型机构&#xff08;如金融机构、政府数据存储设施、高性能计算中心&#xff08;HPC&#…

lua学习笔记11(表的一些相关操作)

print("*****************************表的公共操作*******************************") --table.insert remove sort concat(表名&#xff0c;"分割标识") print("*****************************连接两个表*******************************") a{…