YOLOV5部署Android Studio安卓平台NCNN

坑非常多,兄弟们,我已经踩了三天的坑了,我这里部署了官方的yolov5s和我自己训练的yolov5n的模型

下载Android Studio,配置安卓开发环境,这个过程比较漫长。

安装cmake,注意安装的是cmake3.10版本。

根据手机安卓版本选择相应的安卓版本,我的是红米K30Pro,安卓12。

使用腾讯开源的ncnn,这是一个为手机端极致优化的高性能神经网络前向计算框架,能够将深度学习算法轻松移植到手机端高效执行。

下载解压ncnn-android-yolov5-master和ncnn-20231027-android-vulkan。

nihui/ncnn-android-yolov5: The YOLOv5 object detection android example (github.com)

https://github.com/Tencent/ncnn/releases/download/20231027/ncnn-20231027-android-vulkan.zip

把ncnn-20231027-android-vulkan里面的文件复制一份到ncnn-android-yolov5-master的\app\src\main\jni目录下。

用Android studio 打开这个ncnn-android-yolov5-master项目的build.gradle文件。

然后等待Android Studio构建工程,这个过程比较漫长。

完事之后打开ncnn-android-yolov5-master\app\src\main\jni\CMakeLists.txt将原根目录ncnn-20201218-android-vulkan/删了

修改依赖的gradle插件版本为7.3.0,为什么呢,因为这个版本亲测没有问题,其他会出现各种各样的问题。

然后是修改使用的gradle版本为7.4-all版本,亲测其他版本不匹配。

重新sync项目,如果此时你还一切顺利,那么恭喜你,你已经成功了一大半,如果你开始出现各种各样的报错,那也正常,绝大部分是版本的问题,我在到达此处前卡了一天,你可能需要处理gradle下载慢之类的问题,报错的话复制百度

连接手机,打开手机的开发者模式,打开USB调试,打开USB安装,等Android Studio检测到我的红米K30Pro,然后点击运行,这时app就可以安装到手机上了,可以正常识别。

我们刚刚部署的是yolov5s的官方模型,现在我们要部署我们的模型。

首先将我们实验三优化的onnx格式模型转换为ncnn所需的格式。

大概有三种方法:

第一种是最快的,用这个在线转换网站一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine (convertmodel.com) 

第二种也是我们下面用的这种,直接下载ncnn编译好的可执行文件转换

第三种就是编译ncnn,这个比较复杂,我没用 

下载解压ncnn-20231027-windows-vs2022-shared,使用x64/bin下的onnx2ncnn程序将onnx模型转换为ncnn所需的模型和参数文件。

将我们的onnx文件复制一份到x64/bin文件夹下。

Windows使用以下命令行完成模型转换。

得到ncnn需要的模型和参数文件。

然后用我们的参数文件替换asset中的yolov5s.param和yolov5s.bin,为了方便,名字也要改成yolov5s,需要将yolov5ncnn_jni.cpp中的stride16和stride32中的ex.extract改为参数文件最后两个permute的输出名称,你也可以用Netron来看参数模型找到最后两个permute的输出名称。

还需要修改类别

这里根据不同的yolov5版本可能需要进行对参数文件的修改,我先不修改跑跑看,可以看到app也成功安装到手机上了,打开并选一张照片进行识别,可以看到框比较多。

根据网上的解决办法,是将参数文件中Reshape后面对应的0=6400、0=1600、0=400均修改为0=-1。

这样可以解决多个框的问题,确实解决了,但是一个框都没有了。

于是我把参数改回去,并增加多一层注意力机制。

然后把nms阈值调成0。

最后变成这样了,不知道有没有大佬可以帮忙解决一下。

参考资料

YOLOv5使用NCNN将模型部署到Android端教程(1)部署自己的训练模型到Android实现静态图片检测 - 知乎 (zhihu.com)

【精选】记录历经三天将自己的yolov5模型部署到Android安卓手机_yolov5部署到手机-CSDN博客

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

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

相关文章

LeetCode——字符串(Java)

字符串 简介[简单] 344. 反转字符串[简单] 541. 反转字符串 II[中等] 151. 反转字符串中的单词 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录。会附上一些个人的思路,如果有错误,可以在评论区提醒一下。 [简单] 344. 反转字符串…

【IPC】消息队列

1、IPC对象 除了最原始的进程间通信方式信号、无名管道和有名管道外,还有三种进程间通信方式,这 三种方式称之为IPC对象 IPC对象分类:消息队列、共享内存、信号量(信号灯集) IPC对象也是在内核空间开辟区域,每一种IPC对象创建好…

15分钟,不,用模板做数据可视化只需5分钟

测试显示,一个对奥威BI软件不太熟悉的人来开发数据可视化报表,要15分钟,而当这个人去套用数据可视化模板做报表,只需5分钟! 数据可视化模板是奥威BI上的一个特色功能板块。用户下载后更新数据源,立即就能获…

windows安装wsl2以及ubuntu

查看自己系统的版本 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令 在设置,系统里面就能看到 开启windows功能 直接winQ搜 开启hyber-V、使用于Linux的Windows子系统、虚拟机平…

群晖7.2版本安装CloudDriver2(套件)挂载alist(xiaoya)到本地

CloudDrive是一个强大的多云盘管理工具,为用户提供包含云盘本地挂载的一站式的多云盘解决方案。挂载到本地后,可以像本地文件一样进行操作。 一、套件库添加矿神源 二、安装CloudDriver2 1、搜索安装 搜索框输入【clouddrive】,搜索到Clou…

拍照小白入坑

快门 M(上半圆):通过控制快门打开时间控制感光量,高速可以定格时间,低速可以记录移动轨迹 清晰度,速度不够快,图片不清晰。拍景拍物1/100s,拍嬉戏的孩子、笑容1/500s,快速移动的鸟、汽车1/2000…

获取文章分类详情

CategoryController GetMapping("/detail")public Result<Category> detail(Integer id){Category c categoryService.findById(id);return Result.success(c);} CategoryService //根据id查询分类信息Category findById(Integer id); CategoryServiceImpl …

山西电力市场日前价格预测【2023-11-20】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-20&#xff09;山西电力市场全天平均日前电价为255.39元/MWh。其中&#xff0c;最高日前电价为436.50元/MWh&#xff0c;预计出现在18:00。最低日前电价为21.61元/MWh&#xff0c;预计出…

【hive遇到的坑】—使用 is null / is not null 对string类型字段进行null值过滤无效

项目场景&#xff1a; 查看测试表test_1&#xff0c;发现表字段classes里面有null值&#xff0c;过滤null值。 --查看 > select * from test_1; ----------------------------- | test_1.id | test_1.classes | ----------------------------- | Mary | class 1 …

【DevOps】Git 图文详解(三):常用的 Git GUI

Git 图文详解&#xff08;三&#xff09;&#xff1a;常用的 Git GUI 1.SourceTree2.TortoiseGit3.VSCode 中的 Git 如果不想用命令行工具&#xff0c;完全可以安装一个 Git 的 GUI 工具&#xff0c;用的更简单、更舒服。不用记那么多命令了&#xff0c;极易上手&#xff0c;不…

C语言循环结构 do while循环

do while循环 do while循环语句概述do while循环输出20个数do while循环注意事项 do while循环语句概述 作用&#xff1a;满足循环条件&#xff0c;执行循环语句 语法&#xff1a;do{ 循环语句 } while&#xff08;循环条件&#xff09;&#xff1b; 注意&#xff1a;与 while…

Rocket如何实现顺序消费

RocketMQ 支持两种消息模式 集群消费&#xff08; Clustering &#xff09;和广播消费&#xff08; Broadcasting &#xff09;。 集群消费&#xff1a;同一 Topic 下的一条消息只会被同一消费组中的一个消费者消费。也就是说&#xff0c;消息被负载均衡到了同一个消费组的多…

OpenCV技术应用(4)— 如何改变图像的透明度

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教你如何改变图像的透明度&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍 改变图像透明度的实…

flink中配置Rockdb的重要配置项

背景 由于我们在flink中使用了状态比较大&#xff0c;无法完全把状态数据存放到tm的堆内存中&#xff0c;所以我们选择了把状态存放到rockdb上&#xff0c;也就是使用rockdb作为状态后端存储,本文就是简单记录下使用rockdb状态后端存储的几个重要的配置项 使用rockdb状态后端…

LangChain 代理 Agent(学习笔记)

原文&#xff1a;LangChain 代理 Agent(学习笔记) - 尘叶心繁的专栏 - TNBLOG LangChain 代理 Agent(学习笔记) LangChain 代理 Agent(学习笔记) 简介Agent Zero-shot ReActStructured Input ReActOpenAI FunctionsConversationalSelf ask with searchReAct document storePlan…

【算法与数据结构】前言

算法与数据结构是OI中不可或缺的一部分。 今天&#xff0c;让我们走进算法与数据结构独特世界。 性能 算法与数据结构都是完成任务的方法。 方法就要有性能。 有性能就有描述性能的语言。 这就是复杂度。 复杂度的描述 由于复杂度描述的是大致性能&#xff0c;所以采用的是…

cesium雷达扫描(模糊圆效果)

cesium雷达扫描(模糊圆效果) 1、实现思路 使用ellipse方法加载圆型,修改ellipse中‘material’方法重写自己的glsl来实现当前效果 1、示例源码 index.html <!DOCTYPE html> <html lang="en"><head><!<

场景交互与场景漫游-场景漫游器(6)

场景漫游 在浏览整个三维场景时&#xff0c;矩阵变换是非常关键的&#xff0c;通过适当的矩阵变换可以获得各种移动或者渲染效果。因此&#xff0c;在编写自己的场景漫游操作器时&#xff0c;如何作出符合逻辑的矩阵操作器是非常重要的&#xff0c;但这对初学者来说还是有一定难…

Java集合大总结——List的简单使用

List简单介绍 鉴于Java中数组用来存储数据的局限性&#xff0c;我们通常使用java.util.List替代数组List集合类中元素有序、且可重复&#xff0c;集合中的每个元素都有其对应的顺序索引。JDK API中List接口的实现类常用的有&#xff1a;ArrayList、LinkedList和Vector。 List…

【腾讯云云上实验室-向量数据库】TAI时代的数据枢纽-向量数据库 VectorDB

一、向量数据库的发展历程和时代机遇 回顾向量数据库的发展历程&#xff1a; 2012年开始&#xff0c;深度神经网络的发展催生了向量数据库的发展&#xff1b;2015年至2016年&#xff0c;Google和微软发布了标志性的论文&#xff1b;2017年&#xff0c;Facebook开源了Faiss框架…