说明文档

news/2024/10/6 11:00:59

这篇文档主要介绍《基于YOLOv8的农田病虫害检测与分析》的代码实现部分,整篇论文的目的主要是改进YOLOv8的网络结构,使其在检测病虫害的精度和实时性上有所提升。接下来,我将介绍如何从零开始搭建起本项目。

安装Python

到python的官方网站:https://www.python.org/下载,安装

安装完成后,在命令行窗口运行:python,查看安装的结果,如下图:

至此,Python安装完成,接下来还需要安装anaconda,这是一个python虚拟环境,特别适合管理python的环境。

安装anaconda

到anaconda的官方网站:https://www.anaconda.com/download/success下载,并安装:

安装成功后,会在开始菜单出现如下图所示:

anaconda安装完成,接下来安装pycharm,主要用来编写代码。

安装Pycharm

学生可以申请教育版

支持,所有的软件安装完成。

YOLOv8目录结构介绍

首先介绍整个项目的目录:

和原来的YOLOv8相比,根目录新增一些训练的脚本和测试的脚本,比如train.py和Detect.py,当然也可以直接通过命令行的方式来实现,两者效果都是一样的。

重点是ultralytics/nn目录,所有的改进模块都是在这里进行,在这里我新建了一个Addmodules的目录,里面是改进的各种模块,包括主干网络,颈部网络和检测头的改进。

需要修改的部分我都已经作了修改,不用再做其他的改动

还有一个重要的目录:ultralytics/cfg/models/Add,这里面放的都是yaml文件,其中改进的yaml文件都已经写好,不需要改动。

以下是一个yaml文件的示例,其它的都是类似的结构,只是参数不同:

安装项目的环境(非常重要)

环境配置非常重要,我当时配环境换了一周左右的时间,中间经历了各种报错,软件包不兼容的问题和显卡驱动匹配的问题,总之就是不好搞。为了方面复现工作,我已经把anaconda的环境导出为environment.yml,位于项目的根目录里面,创建虚拟环境的时候直接使用就可以

anaconda虚拟环境

再anaconda prompt终端输入conda env create -f environment.yml,就可以根据environment.yml文件创建虚拟环境,创建好后,通过conda env list查看环境是否存在,如下图所示就表明创建成功:

如果安装的时候出现torch相关的错误,大概率是你的显卡驱动和这里面的torch包版本不匹配,这个问题需要自行修改即可,网上关于这方面的资料很多。

使用虚拟环境

虚拟环境创建完成之后,就可以在pycharm中使用,点击右下角,切换conda环境,选择刚才创建的虚拟环境。如果到了这一步还没有报错的话,恭喜你,已经完成了80%的工作。

运行Detect.py脚本,测试检测效果,如果没有报错,接下来就是训练模型。

训练脚本train.py

找到根目录的train.py文件,注释已经写的很清楚,如下图:

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('yolov8-HSFPN.yaml')# model.load('yolov8n.pt') # 是否加载预训练权重,科研不建议大家加载否则很难提升精度model.train(data=r'D:/Downloads/YOLOv8/datasets/data.yaml',# 如果大家任务是其它的'ultralytics/cfg/default.yaml'找到这里修改task可以改成detect, segment, classify, posecache=False,imgsz=640,epochs=150,single_cls=False,  # 是否是单类别检测batch=4,close_mosaic=10,workers=0,device='0',optimizer='SGD', # using SGD# resume='runs/train/exp21/weights/last.pt', # 如过想续训就设置last.pt的地址amp=True,  # 如果出现训练损失为Nan可以关闭ampproject='runs/train',name='exp',)

model = YOLO('yolov8-HSFPN.yaml'),把里面的yaml文件换成自己的yaml文件,我这里用的是yolov8-HSFPN.yaml,data=r'D:/Downloads/YOLOv8/datasets/data.yaml,同理,换成自己数据集的yaml文件,我这里的数据集是yolo格式。其它的参数可以按照自己的任务自行调整。

还有一个检测的脚本,Detect.py:

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('D:/Downloads/YOLOv8/result/result_8_HSFPN/train/exp/weights/best.pt') # select your model.pt pathmodel.predict(source='D:/Downloads/YOLOv8/ultralytics/assets',imgsz=640,project='runs/detect',name='exp',save=True,)

同理,把best.pt换成你自己训练好的模型,source里面输入检测图片的路径,运行该脚本就可以开始检测,结果保存在runs/detect目录。

开始训练

准备好数据集,最好是yolo格式的,我的数据集项目里自带了,不需要重新下载:

datasets目录里面就是我的数据集:有train,test,valid三个目录,分别存放训练集,测试集和验证集的图像和标签:

准备这些之后,运行train.py文件,开始训练。如果报错的话,请自行上网查找,无非就是找不到数据集,某个包的版本不对,或者是GPU用不了,只能用CPU。

训练结果

训练结果会保存在runs/train目录下,exp1,exp2,exp3的顺序,表示每一次的训练结果。

上图就是训练完成后目录的结构,weights目录里面就是我们需要的模型:best.pts是效果最好的,最后也是需要这个,last.pt是最后一次的训练结果。

总结

整个项目的改进工作我已经做好,复现的话只需装好对应的环境,修改train.py的参数,运行train.py就可以开始训练;修改Detect.py的参数,就可以检测。目前项目只针对检测任务,对于分割和分类没有做改进。

经验之谈

(1)以下为两个重要库的版本,必须对应下载,否则会报错

python == 3.9.7
pytorch == 1.12.1
timm == 0.9.12 # 此安装包必须要
mmcv-full == 1.6.2 # 不安装此包部分关于dyhead的代码运行不了以及Gold-YOLO

(2)mmcv-full会安装失败是因为自身系统的编译工具有问题,也有可能是环境之间安装的有冲突

推荐大家离线安装的形式,下面的地址中大家可以找找自己的版本,下载到本地进行安装。
https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html
https://download.openmmlab.com/mmcv/dist/index.html

(3)basicsr安装失败原因,通过pip install basicsr 下载如果失败,大家可以去百度搜一下如何换下载镜像源就可以修复

针对一些报错的解决办法在这里说一下

(1)训练过程中loss出现Nan值.
可以尝试关闭AMP混合精度训练.

(2)多卡训练问题,修改模型以后不能支持多卡训练可以尝试下面的两行命令行操作,两个是不同的操作,是代表不同的版本现尝试第一个不行用第二个

python -m torch.distributed.run --nproc_per_node 2 train.py
python -m torch.distributed.launch --nproc_per_node 2 train.py

(3) 针对运行过程中的一些报错解决
1.如果训练的过程中验证报错了(主要是一些形状不匹配的错误这是因为验证集的一些特殊图片导致)
找到ultralytics/models/yolo/detect/train.py的DetectionTrainer class中的build_dataset函数中的rect=mode == 'val'改为rect=False

2.推理的时候运行detect.py文件报了形状不匹配的错误
找到ultralytics/engine/predictor.py找到函数def pre_transform(self, im),在LetterBox中的auto改为False3.训练的过程中报错类型不匹配的问题
找到'ultralytics/engine/validator.py'文件找到 'class BaseValidator:' 然后在其'__call__'中
self.args.half = self.device.type != 'cpu'  # force FP16 val during training的一行代码下面加上self.args.half = False

(4) 针对yaml文件中的nc修改
不用修改,模型会自动根据你数据集的配置文件获取。
这也是模型打印两次的区别,第一次打印出来的就是你选择模型的yaml文件结构,第二次打印的就是替换了你数据集的yaml文件,模型使用的是第二种。

(5) 针对环境的问题
环境的问题每个人遇见的都不一样,可自行上网查找。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

13-网络安全漏洞防护技术原理与应用

13.1 概述 1)概念 网络安全漏洞又称为脆弱性,简称漏洞。 漏洞一般是致使网络信息系统安全策略相冲突的缺陷,这种缺陷通常称为安全隐患。 安全漏洞的影响主要有机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控制性下降、真实性不保等。 根据漏洞的补丁状况,可将漏洞…

2024-2025-1 20241305 《计算机基础与程序设计》第二周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))这个作业要求在哪里 2024-2025-1计算机基础与程序设计第二周作业(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276))这个作业…

2024-2025-1 20241318 《计算机基础与程序设计》第二周学习总结

这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK02这个作业的目标 <数字化、信息安全、自学教材(计算机科学概论(第七版)第1章并完成云班课测试、《C语言程序设计…

【THM】The Marketplace练习

脚本小子是这样的,黑客只要写POC就可以,可是脚本小子要考虑的事情就多了。 学到了新知识:利用XSS漏洞进行钓鱼、通过Token获取管理员权限、利用docker提权【THM】The Marketplace练习 与本文相关的TryHackMe实验房间链接:TryHackMe | The Marketplace 简介:你能接管marke…

Windows计划任务出现0x1错误结果

Windows计划任务出现0x1错误结果现象 解决方法 结果 现象 参考不少的文章,基本上都是说因为权限的问题,但试了N次都不行,仍然报0x1的错误结果,亲测解决方法说明如下; 1.脚本本身没问题,手动本地可以执行; 2.系统版本 Windows 10 专业工作站版 版本号 21H2 解决方法 在设…

面相快速入门教程2转化智慧

2 转化智慧 你的脸是遗传、环境和生活经历的产物。它展现了你的身份、经历和未来;它揭示了你独特的潜能,以及你需要什么才能感到幸福。你特征中的信息可以成为帮助你创造真正有意义和充实生活的绝佳资源。你所要做的就是照镜子。 事实上,你不需要知道什么特别的事情,就能从…

P10678 『STA - R6』月 题解

Solution 看了别的大佬的题解,感觉都是数学证明然后用树和图做的,看不懂啊。。。萌新瑟瑟发抖 用 vector 模拟树,然后贪心摸索做出来了。注意到要求最深叶子结点和最浅叶子结点的距离最短时的情况,那么此时根节点应该是树中度数最大的点,把树尽可能的拓宽,深度换宽度。 那…

学期(如2024-2025-1) 20241304 《计算机基础与程序设计》第2周学习总结

学期(如2024-2025-1)20241304 《计算机基础与程序设计》第2周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第二周作业)这个作业的目标 <…