首页 > 其他分享 >说明文档

说明文档

时间:2024-10-06 10:49:16浏览次数:9  
标签:__ 训练 py 说明 yaml train 文档 安装

这篇文档主要介绍《基于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 YOLO

if __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, pose
                cache=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可以关闭amp
                project='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 YOLO

if __name__ == '__main__':
    model = YOLO('D:/Downloads/YOLOv8/result/result_8_HSFPN/train/exp/weights/best.pt') # select your model.pt path
    model.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改为False

3.训练的过程中报错类型不匹配的问题
找到'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) 针对环境的问题
环境的问题每个人遇见的都不一样,可自行上网查找。

标签:__,训练,py,说明,yaml,train,文档,安装
From: https://www.cnblogs.com/louaq/p/18448913

相关文章

  • 免费TLS--Let's Encrypt 使用说明
    Let'sEncrypt:这是一个由非营利性组织互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构。它为众多网站提供TLS证书,其免费证书的签发/续签可以通过脚本自动化完成。Let'sEncrypt免费证书的有效期通常为90天。官方网站为:https://letsencrypt.org/zh-cn/根据官......
  • 基于SpringBoot+Vue+协同过滤算法的音乐推荐系统设计与实现(源码+论文+PPT+部署文档教
    具体实现截图网站首页页面主要包括系统首页、热门歌曲、音乐资讯、留言板、个人中心等内容,并根据需要进行详细操作;如图5-1所示:图5-1网站首页界面图在注册流程中,用户在Vue前端填写必要信息(如用户名、密码等)并提交。前端将这些信息通过HTTP请求发送到Java后端。后端处理......
  • 基于Hadoop+Scrapy爬虫+可视化大屏分析的大型超市进销存系统设计与实现(源码+lw+部署
    具体实现截图大型超市数据处理系统5.1前台用户功能实现当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到大型超市数据处理系统的导航条显示首页、生鲜信息、系统公告、留言反馈、个人中心等。系统首页界面如图5-1所示:图5-1系统首页界面这是一个用户注册的......
  • 3.资源《Arduino UNO R3 proteus 电机测速仿真工程文件(含驱动代码)》说明。
     资源链接: ArduinoUNOR3proteus电机测速仿真工程文件(含驱动代码)1.文件明细:2.文件内容说明包含:proteus工程、原理图、仿真程序。3.内容展示4.简述该文件为Proteus工程。用于电机测速验证。5.演示视频proteus仿真电机测速......
  • LabelMe 标注文件格式说明
    LabelMe标注文件格式说明LabelMe简介LabelMe是一款开源的图像标注工具,由麻省理工学院计算机科学与人工智能实验室(CSAIL)开发。它主要用于手动标注图像数据,以便为计算机视觉任务(如目标检测、图像分割和物体识别)生成训练数据。LabelMe提供了一个友好的用户界面,支持多......
  • 科研小tip2|OpenNI2环境配置(文字简要说明)
    在本栏科研小tip1中我分享了winpcap的可行安装方法,但并没有具体讲解环境配置方法,因为其他博主已经对winpcap的环境配置做了许多分享不过我个人在使用时遇到了按照步骤完成配置后,运行仍然出现提示OpenNI2.dll(OpenNI2动态库)不存在的报错,我想可能也有许多与我一样遇到这一问题的......
  • PbootCMS网站模板调用幻灯片轮播图及参数说明
    根据你提供的信息,我们可以详细解释如何使用 {pboot:slide} 标签及其相关的列表标签,并给出具体的示例和应用场景。适用范围全站任意地方均可使用 {pboot:slide} 标签来展示幻灯片。标签参数gid=*: 分组,必填,用于控制需要输出的幻灯片分组。num=*: 数量,非必填,用于控制需要......
  • PbootCMS模板调用幻灯片轮播图及参数说明
    我们可以详细解释如何使用 {pboot:slide} 标签以及相关的列表标签,并给出具体的示例和应用场景。适用范围全站任意地方均可使用 {pboot:slide} 标签来展示幻灯片。标签参数gid=*:分组,必填,用于控制需要输出的幻灯片分组。num=*:数量,非必填,用于控制需要输出的数量,默认为5个......
  • Java Doc 生成文档
    packagecom.div.Base;/***@authorWendy*@version1.0*@since1.8*/publicclassDoc01{Stringname;//属性/***@authorWendy*@paramname*@return*@throwsException*/publi......
  • cnblogs内容同步到51cto上的说明(声明)
    51CTO网站上的blog地址为:https://blog.51cto.com/u_15642578该地址是个人在博客园cnblogs上的同步账号(https://cnblogs.com/xyz),在cnblogs上发表的内容会不定期的在经过51CTO审核通过后同步到该51CTO地址下。之所以将cnblogs上的文章同步到51CTO网站上,其原因有两个:希望自己的......