| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> YOLOv5学习记录(二): 模型转化及Android端部署 -> 正文阅读 |
|
[移动开发]YOLOv5学习记录(二): 模型转化及Android端部署 |
目录前言在上一篇文章中,我们大致讲述了如何在YOLO框架下训练自己的数据模型。 本篇内容进一步讲述如何将训练得到的数据模型,转换格式并部署在Android平台上。 一、PT-->ONNX-->NCNN1、准备pt文件按照上篇文章的步骤,想必大家都已经得到了自己训练好的模型,我的训练好的模型在./runs/train/exp4/weights下名为best.pt的文件; 2、PT转ONNX在yolov5-master根目录下有export.py文件,可以直接采用转换命令:
注意:转换命令后加:--train;(去掉后处理部分的导出,不然后面转param会报错) YOLOv5 6.0 去掉了focus,不需要手工修改任何文件,在ncnn使用时兼容性更好。网上很多教程都是基于6.0之前的版本,转换命令和后面修改./models/common.py办法不能照搬(这个坑困扰了很久emo) 最终在大佬的文章 详细记录u版YOLOv5目标检测ncnn实现评论区看到了一句话: 运行成功,会在与best.pt同目录下产生两个文件best.onnx和best.torchscript(也是一种模型转换格式),我们这里只讨论onnx。 此时可以通过可视化工具Netron查看网络的总体架构,如果不想安装到本地,可以直接点击Open Model,选择刚才转换出来的best.onnx文件即可。 安装命令如下:
使用方法如下: 可视化网络结构: 3、简化ONNX转为onnx格式后,还需要再进行模型简化,不然会在转换的时候报错: ?安装简化工具:
简化命令如下:
此时就已经基本完成了。 4、ONNX转param、bin其实不用按照网上的有些教程下载ncnn源码编译配置,说实话,这个编译配置过程真的很容易让人劝退。(我就转个格式,给我搞这么多花里胡哨?) 这里推荐两种比较简便的转换方式: 1、下载编译好的:Releases · Tencent/ncnn · GitHub,可以根据自己的平台和配置选择合适的编译好的文件。以ncnn-VS2019为例,可以直接使用在路径./x64/bin下的onnx2ncnn.exe来实现转换,转换命令如下(记得修改自己的路径):
转换会生成两个文件,param是网络结构文件,bin为网络权重文件。 2、在查找资料的过程中也发现了一个在线转换神器(不知道会不会收集自己的模型,但是确实好用): 一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine (convertmodel.com) 如果出现转换报错,请再次确认模型是否经过简化、导出命令是否加入:--train
?5、修改param打开刚才生成的.param文件,拉到最后,将红框内的三个数据全部修改为:-1,这样做是为了防止移植到Android端,检测时出现密密麻麻的检测框覆盖图片。 至此,模型转换完毕,让我们一起去部署吧! 二、Android 平台部署1、安装Android studio自己训练出来的模型,当然还是要自己来移植部署,所以又解锁了新技能:Android studio; 安装下载请参考:Android Studio安装教程(超级详细)_dhhyx的博客-CSDN博客_android studio安装教程 2、下载ncnn-android-yolov5案例NCNN官方提供的example:GitHub - nihui/ncnn-android-yolov5: The YOLOv5 object detection android example 下载到本地后,还需要按照步骤进行配置: (注:安装配置时注意待部署手机支持的SDK最低版本,此处如果出现报错,大概率是因为版本匹配问题,确定版本号后,修改build.gradle中的defaultConfig的minSdkVersion等参数即可) 3、修改example以适应自己的数据模型1、anchors的值在训练开始时是默认根据数据集重新计算,所以我们首先要拿到数据模型的anchors值,代码内容如下:
输出如下:
当然,你也可以选择在训练开始的时候关闭自适应计算训练集中的最佳锚框值。 ?将train.py中上面的一行代码,设置为False即可,每次训练时就不会自动计算。(这个我没有试过) 2、同时输出层ID在Permute层里面,找到对应的参数: 最后,将模型对应的anchors值、及Permute层的参数改写到ncnn-android-yolov5-master/app/src/main/jni/yolov5ncnn_jni.cpp文件中,如下图所示: 至此。所有工作准备完毕,可以在Android上测试自己的模型啦! 总结以上就是模型部署的全部内容,各位有什么问题欢迎大家在评论区留言讨论,互相学习交流! 参考 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 17:55:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |