关于YOLO8学习(一)环境搭建,官方检测模型部署到手机

embedded/2024/9/23 7:32:00/

一,环境的搭建

环境

win10
python 3.11
cmake
pytorch
pycharm

过程

首先安装好一个pycharm,这里就不一一叙述了。
其次,选择好一个python版本,是关键所在。有些YOLO的版本,并不支持很高的python版本,博主选用的是python3.11版本。经过实际的测试,这个版本比较合适。

pythonpycharmPyCharmpythonpython_12">注意,配置到这里,python环境和pycharm都已经安装,这里从PyCharm新建一个项目,python建议配置一个虚拟的环境,这样不会影响系统级别的python依赖。

(一)首先就是安装cmake的环境。直接从cmake下载,然后path配置cmake路径即可。

(二)完成cmake安装后,进行onnxsim安装,这个库,会涉及到yolo转换onnx,同时也是依赖cmake才能正常安装。
相关指令:pip install onnxsim

(三)安装pytorch版本
pip install torch2.0.1+cu117 torchvision0.15.2+cu117 torchaudio==2.0.2+cu117 -f https://download.pytorch.org/whl/torch_stable.html

(四)然后指定一个yolo版本进行安装,这里指定版本为8.0.134。注意,这个版本将会影响后续的代码编写。
具体指令如下:
pip install ultralytics==8.0.134

(五)特别注意,如果你的电脑有显卡,在训练模型的时候,是可以用显卡训练的,但是对于英伟达的1660系列的显卡,需要在train方法中,声明好amp=False,才能进行GPU训练。

完成,上述步骤后,就配置好所有需要进行训练的环境了,后面的文章,将会描述如何把官方的训练好的模型,部署到手机上。

二,官方的模型,转换,部署到手机上

对于如何训练一个模型,后续教程才进行讲解,现在要讲解的是,如何把官方的一个训练好的模型,部署到安卓手机上,并且能让其正常运行。

整个流程,就是Pt–>onnx–>ncnn。进行文件转换后,生成的nccn文件,部署到安卓手机上,并实现检测功能。

首先,下载好官方的模型:yolov8n.pt
对于这个模型,直接百度一搜索,就会有了,同时,也可以通过代码的形式,下载到项目的目录中,相关代码如下:

model = YOLO(('yolov8n.pt')

通过执行上面的python代码,就会自动下载yolov8n.pt文件,到执行文件同级别的目录了。

yolo_44">转换之前,这里是需要修改yolo的源码的,具体步骤如下:

head.py文件:
在这里插入图片描述
block.py文件:
在这里插入图片描述

修改完上面两个文件后,执行下面的代码,

model = YOLO("yolov8n.pt")
model.export(format="onnx",imgsz=320, half=True, opset=12, optimize=True)

这样,就把pt文件,转换成了onnx文件了。


onnx 转换为 ncnn

这里的方法有很多,博主直接用tc官方的onnx2ncnn.exe进行转换:
下载链接:
官方资源地址:

下载完成后,找到onnx2ncnn.exe文件,然后执行下面的指令,就可以得到两个文件,两个文件就是对应的ncnn资源文件:

onnx2ncnn.exe xxxx.onnx targetxx.param targetxx.bin

接下来,就是部署到安卓端上面了。
参考链接:
https://github.com/FeiGeChuanShu/ncnn-android-yolov8/tree/main/ncnn-android-yolov8

在这里插入图片描述

下载这个ncnn-android-yolov8的项目,然后用androidstudio打开,编译的ndk为21。gradle7+,然后,对应的opencv和ncnn下载链接如下:
ncnn-20240410-apple-vulkan.zip
opencv

下载完成后,上面的文件,全部解药到安卓项目中的jni目录。

接下来,就是开始修改jni文件了。

修改点一

修改yolo.cpp中的输入输出名字,一般名字都是input–>images
output–>output0

在这里插入图片描述

修改点二

修改strings.xml文件,替换为你的模型名字,如下图:
在这里插入图片描述

修改点三

修改yolo8ncnn.cpp文件,模型名字,如下图:
在这里插入图片描述

修改点四

修改yolo.cpp中的generate_proposals函数,分类数量,这个数量,一般都是对应你的模型数量,官方模型,在demo中的类型,是80个,所以这里一般不做修改。

完成上述步骤后,点击as进行run,就可以实现了。

that’s all-----------------------------------------------------


http://www.ppmy.cn/embedded/30302.html

相关文章

Apache Kafka知识点表格总结

之前的项目中用到RabbitMQ比较多,也有用到RocketMQ,,虽然项目中没有用到过Kafka,不过自己在空闲时间学习过,而且在面试中也会问到,因为还是有不少公司用到Kafka,所以做个总结,一方面是做为面试参考&#xf…

关于下载上传的sheetjs

一、背景 需要讲后端返回来的表格数据通过前端设置导出其中某些字段,而且得是xlsx格式的。 那就考虑使用控件SheetJS。如果是几年前,一般来说,保存excel的文件都是后端去处理,处理完成给前端一个接口,前端调用了打开…

(详细整理!!!!)Tensorflow与Keras、Python版本对应关系!!!

小伙伴们大家好,不知道大家有没有被tensorflow框架困扰过 今天我就给大家整理一下tensorflow和keras、python版本的对应关系 大家这些都可以在官网找到,下面我把官网的连接给大家放在这里:在 Windows 环境中从源代码构建 | TensorFlow (g…

使用protoc-jar-maven-plugin生成grpc项目

在《使用protobuf-maven-plugin生成grpc项目》中我们使用protobuf-maven-plugin完成了grpc代码的翻译。本文我们将只是替换pom.xml中的部分内容,使用protoc-jar-maven-plugin来完成相同的功能。总体来说protoc-jar-maven-plugin方案更加简便。 环境 见《使用proto…

工厂模式和策略模式区别

工厂模式和策略模式都是面向对象设计模式,但它们的目的和应用场景有所不同。 工厂模式是一种创建型设计模式,旨在通过使用一个工厂类来创建对象,而不是直接使用new关键字来创建对象。这样做可以使系统更容易扩展和维护,因为新的对…

JavaScript中的Math对象方法、Date对象方法

个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 🌟Math对象方法🍄1 Math静态属性🍄2 Math…

Go语言基本语法(五)标识符、关键字、操作符、分隔符和字面量

在Go语言中,程序的基本构建块包括标识符、关键字、操作符、分隔符和字面量,它们共同构成了Go语言的语法基础。以下是这些元素的详细介绍: 标识符(Identifier) Go语言中的标识符是用来命名程序元素(如变量…

【计算机毕业设计】基于SSM++jsp的社区管理与服务系统【源码+lw+部署文档+讲解】

目录 摘 要 Abstract 第一章 绪论 第二章 系统关键技术 第三章 系统分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3运行可行性 3.1.4法律可行性 3.4.1注册流程 3.4.2登录流程 3.4.3活动报名流程 第四章 系统设计 4.3.1登录模块顺序图 4.3.2添加信息模块顺序图 4.4.1 数据库E-…