onnx模型部署到手机(onnx模型训练)

onnx模型部署到手机(onnx模型训练)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>欢迎学习ncnn系列相关文章&#xff0c;从训练、模型转换、精度分析&#xff0c;评估到部署Android端&#xff0c;推荐好资源&#xff1a;</p> 

讯享网

一、YoloV5训练自己数据集并测试
二、ncnn编译和安装
三、onnx模型转ncnn模型并推理可执行程序(resnet18例子)
四、yolov5-6.0Pyotorch模型转onxx模型再转ncnn模型部署
五、训练自己YOLOv5模型转ncnn模型并部署到Android手机端


在这里插入图片描述
讯享网

上一篇博文中将YOLOv5模型转到ncnn模型后部署到电脑端Ubuntu系统上,本教程讲解如何将YOLOv5模型转到ncnn模型后落地部署到Android手机端,主要在手机上检测单帧图像。在部署过程中我最开始用的是Vivo旗下的IQOO 6SE手机,通过Android Studio打包将apk安装到手机后,一直闪退,我折磨了很久,没解决,但使用手机模拟器是能够正常安装并检测。后来我翻出了老手机,部署到小米Max 3手机上可以正常检测。

本教程的讲解会涉及到之前写的一些博客,如果有不会的,对应学习之前的博文:
使用Yolov5训练自己制作的数据集
Android Studio详细安装教程及入门测试
Windows系统下安装java开发环境所需的JDK开发工具包

本教程的配套源码包获取方法文章末扫码到公众号「视觉研坊」中回复关键字:yolov5 ncnn模型Android部署。获取下载链接。

下载解压后的样子如下:

在这里插入图片描述

2.2.1 ncnn版YOLOv5源码包下载

ncnn版YOLOv5源码包下载地址为:ncnn版YOLOv5

在这里插入图片描述

2.2.2 ncnn预编译库下载

ncnn官网地址为:ncnn

打开ncnn官网地址后,找到realses打开,如下:

在这里插入图片描述

在这里插入图片描述

往下滑

在这里插入图片描述

下载好后的预编译库如下:

在这里插入图片描述

2.2.3 拷贝ncnn预编译库

上面下载好的两个包文件解压后,将预编译库中的4个文件都拷贝到yolov5_ncnn_Android cnn-android-yolov5-master/app/src/main/jni目录下,如下:

我自己在走这条路中遇到了很多问题,这里总结一下,学者如果也遇到类似我的问题,参考一下。

上面第二步骤都完成后,使用电脑上已经安装好的Android Studio打开ncnn-android-yolov5-master工程文件。打开后第一次构建可能遇到问题见下:

打开工程文件后会根据对应版本自动下载gradle,如果中途下载失败,可以点击reload或者直接去到C盘下找到.gradle文件夹,将整个.gradle文件夹删除,再重新下载,如下:

在这里插入图片描述

3.2.1 报错

Suppressed sync exceptions

CMake ‘3.10.2’ was not found in PATH or by cmake.dir property.
java.lang.RuntimeException: CMake ‘3.10.2’ was not found in PATH or by cmake.dir property.
at com.android.build.gradle.internal.cxx.configure.CmakeSearchContext.issueVersionNotFoundErrortryCreateCxxModuleModelcmakecmakeFoldertryCreateCxxModuleModelcmakecmakeFolder$2.invoke(TryCreateCxxModuleModel.kt:117)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)

在这里插入图片描述

3.2.2 问题分析

这个错误是因为 Android Studio 在构建项目时没有找到指定版本(3.10.2)的 CMake

3.2.3 解决办法

打开 Android Studio,然后选择 File -&gt; Settings -&gt; Appearance & Behavior -&gt; Android SDK -&gt; SDK Tools。

在 SDK Tools 选项卡中,找到 CMake,然后勾选 3.10.2 版本。

点击 Apply,等待下载和安装完成。
在这里插入图片描述

我自己原先版本是3.22.1,重新安装3.10.2版本:

在这里插入图片描述

在这里插入图片描述

3.2.4 添加环境变量

在电脑中打开系统变量,依次按照下面步骤添加环境变量:

在这里插入图片描述

3.2.5 测试CMake

在终端输入命令,如果输出CMake版本,说明安装成:

讯享网

在这里插入图片描述

完整的报错是 Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not “opens java.io” to unnamed module @5de92e13

该问题的解决办法,见我另外一篇博文:Unable to make field private final java.lang.String java.io

3.4.1 报错

Execution failed for task ‘:app:stripDebugDebugSymbols’.

No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi

3.4.2 问题分析

这个错误通常发生在NDK版本过高,与Android Gradle Plugin(AGP)版本不匹配时。

3.4.3 解决办法

下载低版本的NDK,下载有两种方法。

3.4.3.1 官网手动下载

手动下载NDK链接为:NDK

打开网页后具体下载步骤见下:

在这里插入图片描述

在这里插入图片描述

直接下载r21 ndk安装包的链接为:https://dl.google.com/android/repository/android-ndk-r21e-windows-x86_64.zip

如果下载太慢,可以将此链接复制到迅雷中下载,速度较快。

在这里插入图片描述
下载解压后得到的文件如下:

在这里插入图片描述

将toolchains文件夹中除了llvm的其他文件全部复制到路径:C:UsersAdministratorAppDataLocalAndroidSdk dk26.2. oolchains下

在这里插入图片描述

3.4.3.2 Android Studio自动下载

在Andriod Studio中直接下载,先打开设置,具体步骤见下:

在这里插入图片描述

在这里插入图片描述

通过上面方法可以直接下载低版本的NDK。

如果安装后没有权限打开,在AndroidManifest.xml文件中加入下面语句:

 

在这里插入图片描述

在第二步骤中从官网上下载得到的源码包中,已经包含了官网提供的ncnn模型,位于ncnn-android-yolov5-master/app/src/main/assets目录下。

CMakeLists.txt文件中需要修改的地方见下:

在这里插入图片描述

在build.gradle文件中修改部署平台,见下:

在这里插入图片描述

以上都准备好后,重新构建:

在这里插入图片描述

build文件中会保留上一次构建生成的信息,有时会影响构建,可以直接删除后重新构建生成:

在这里插入图片描述

构建成功样子如下:

在这里插入图片描述

先在手机上开启开发者选项,不同手机开启方法不一样,之前写过一篇关于vivo手机开启开发者选项的方法,参考:vivo手机开启开发者选项

打开开发者选项后,用数据线连接手机和电脑具体见下:

最开始连接会弹出下面窗口,选择传输文件:

在这里插入图片描述

下面是在开发者选项中依次开启:

在这里插入图片描述

在这里插入图片描述

手机连接电脑后会在手机弹出允许USB调试吗? 点击允许,如下:

在这里插入图片描述

4.3.1 连接没反应问题

如果手机端和电脑端通过数据线连通后,手机只是处于充电转态,没有弹出上面的允许USB调试吗?出现该问题是因为手机和电脑还没有通信过,需要找第三方软件先接通,比如互传,360手机助手等,这些软件会自动在手机上安装一个,装后就接通了,我自己用的是互传,如下:

在这里插入图片描述

在这里插入图片描述

通过互传软件连通后的样子如下:

在这里插入图片描述

上面步骤没问题后,在Android Studio界面会弹出以连接手机的型号,选择待部署的手机,如下:

在这里插入图片描述

点击run按钮,编译后会自动发送到手机进行安装:

在这里插入图片描述

4.4.1 打开APP

手机上安装好的样子如下:

在这里插入图片描述

打开yolov5ncnn,如下:

在这里插入图片描述

4.4.2 测试结果

点击选图后会跳转到自己手机相册里,随机选择一张图片,选用CPU或GPU识别,如下:

在这里插入图片描述

4.4.3 查看耗时

耗时情况,在电脑端Android Studio中日志里查看,如下,CPU耗时为586.91ms,GPU耗时为1522.50ms:

在这里插入图片描述

自己训练YOLOv5模型的详细教程,参考我的另外一篇博文:YOLOv5训练自己数据集

在YOLOv5训练自己数据集这篇博文对应的Pytorch源码包中,models/export.py脚本,用于将YOLOv5Pytorch模型转为onnx模型。

5.1.2 参数修改

使用该脚本需要修改及转换结果见下:

在这里插入图片描述

5.1.3 转换代码

讯享网

5.1.4 可视化网络结构

netron官网:netron

在这里插入图片描述

将生成的onnx模型直接拖到netron网络打开,如下:

在这里插入图片描述

关于onnx模型转ncnn模型有两种方法,比较复杂的方法参考我另外一篇博文:onnx模型转ncnn模型

5.2.1 ncnn模型在线转换工具

这里介绍比较简单的方法,其它大佬已经将转换过程封装在了网页端,链接为:ncnn模型在线转换工具

使用过程见下:

在这里插入图片描述

将上面生成的ncnn模型两个文件拷贝到yolov5_ncnn_Android/ncnn-android-yolov5-master/app/src/main/assets路径中,如下:

在这里插入图片描述

将Reshape修改为动态尺寸,可以兼容不同分辨率的图片:

在这里插入图片描述

根据自己训练得到的ncnn模型中.param文件参数,对应修改下面参数:

在这里插入图片描述

下面是导入ncnn模型的两个文件入口:

在这里插入图片描述

下面根据自己训练是样本中标签的类别修改,标签中有哪些类就对应写上,这里我自己训练的样本中只有person一个类,如下:

在这里插入图片描述

上面都修改好准备好后,剩下的步骤和前面4.4一样,安装apk到Android手机端后测试。

以上就是部署官网YOLv5模型和训练自己YOLOv5模型转ncnn模型并部署到Android手机端的详细实现过程,希望能帮到你!

总结不易,多多支持,谢谢!

感谢您阅读到最后!关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

小讯
上一篇 2025-04-17 18:26
下一篇 2025-06-07 21:29

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/198393.html