【精选】Yolo v5 训练自己的数据从训练到调参实战详解 您所在的位置:网站首页 yolov5配置参数 【精选】Yolo v5 训练自己的数据从训练到调参实战详解

【精选】Yolo v5 训练自己的数据从训练到调参实战详解

2023-11-08 21:49| 来源: 网络整理| 查看: 265

主要分3章,第一章先跑通模型代码,熟悉yolo v5的输入和输出;第二章训练自己的数据;第三章讲解模型参数部分

文章目录 一、跑通模型1、代码下载2、环境配置3、参数路径调整3、运行detect.py文件 二、训练自己的数据1.数据准备1.1准备数据样本和标签 2、路径创建与修改2.1样本数据读取路径修改2.2新建并修改配置文件.yaml2.3修改train.py文件中的data路径参数 3、常用参数调节4、train.py 三、可修改的参数部分详解1.总述2.参数详解2.1--weights2.2--cfg2.3--data2.4--hyp2.5--epochs2.6--batch-size2.7--imgsz2.8--rect2.9--resume2.10--nosave2.11--notest2.12--noautoanchor2.13--evolve2.14--bucket2.15--cache2.16--image-weights2.17--device2.18--multi-scale2.19--single-cls2.20--adam2.21--sync-bn2.22--workers2.23--project2.24--name2.25--exist-ok2.26--quad2.27--linear-lr2.28--label-smoothing2.29--patience2.30--freeze2.31--save-period2.32--local_rank2.33--entity2.34--upload_dataset2.35--bbox_interval2.36--artifact_alias 参考

一、跑通模型 1、代码下载

YOLOv5 开源代码项目下载地址:https://github.com/ultralytics/yolov5

yolov5s.pt 的下载地址,放到yolov5-master根目录下即可。 ps:不提前下载也可以,代码自动下载 https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt

2、环境配置

conda create -n 【环境名自定义】 python = 3.6 activate 【环境名自定义】

进入pytorch官网,选择复制对应版本的pytorch安装命令 pip install

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

然后缺什么库下载什么库就行了。具体查看根目录下的 requirements.txt 在这里插入图片描述

3、参数路径调整

源代码中好像没有权重和视频,如果没有自动下载的话请自行下载并保存到相应位置 这部分主要需要确认权重路径、和数据(图像或视频)路径 视频的话改为路径下指定视频名即可 在这里插入图片描述 在这里插入图片描述 这里的路径也需要改! 在这里插入图片描述

运行之前配置一下 Edit Configurations --> 选择 detect -->在Parameters 里输入 --view-img 可实时观看检测情况 ps:也可以不配置,此步骤可略过 在这里插入图片描述 在这里插入图片描述

3、运行detect.py文件

训练结束后可在根目录下的run文件夹查看检测结果 在这里插入图片描述 在这里插入图片描述

二、训练自己的数据 1.数据准备 1.1准备数据样本和标签

数据标签格式 *

用到的工具:labelImg

a.安装labelImg

pip install labelImg

b.选择文件路径、选择保存路径、选择yolo模式。并在 View中选择 自动保存模式 在这里插入图片描述

2、路径创建与修改 2.1样本数据读取路径修改

# 新建文件夹 # 文件夹名称自定义,如mydata1,下所属文件夹按以下格式创建 mydata1下文件目录如下,分别将前面准备好的【训练样本】放到images下的train,【测试样本】放到images下的val;【训练标签】–> labes下的train,【测试标签】–> labels下的val 在这里插入图片描述

2.2新建并修改配置文件.yaml 在根目录data下新建xxx.yaml文件 在这里插入图片描述复制粘贴参数内容如下,路径自定义为你数据路径,类的数量名称自定义并按0、1、2、3对应排列 在这里插入图片描述 2.3修改train.py文件中的data路径参数

指定自己创建的xxx.yaml文件路径 在这里插入图片描述

3、常用参数调节

高亮部分都是初步训练时常用可修改的,具体内容看后面的解释 parser.add_argument(’–weights’, type=str, default=ROOT / 'yolov5s.pt’, help=‘initial weights path’) #选择预训练权重模型,若default为空则用程序自带初始权重 parser.add_argument(’–cfg’, type=str, default=‘yolov5s.yaml’, help=‘model.yaml path’) #选择神经网络模型 parser.add_argument(’–data’, type=str, default=ROOT / ‘data/mydata.yaml’, help=‘dataset.yaml path’) #样本数据路径,进入到mydata.yaml文件里修改修改 parser.add_argument(’–hyp’, type=str, default=ROOT / ‘data/hyps/hyp.scratch.yaml’, help=‘hyperparameters path’) #超参数:动量、衰减率等。一般用不到 parser.add_argument(’–epochs’, type=int, default=400) #训练几轮,设定epoch数量 parser.add_argument(’–batch-size’, type=int, default=32, help=‘total batch size for all GPUs, -1 for autobatch’) #每批次的数据量,default=-1时自动调节大小 parser.add_argument(’–imgsz’, ‘–img’, ‘–img-size’, type=int, default=640, help=‘train, val image size (pixels)’)#训练集和测试集图片的像素大小,640*640 parser.add_argument(’–device’, default=’’, help=‘cuda device, i.e. 0 or 0,1,2,3 or cpu’) #用于设置运行 pytorch 框架的使用设备,是用 GPU cuda,还是 cpu parser.add_argument(’–workers’, type=int, default=0, help=‘max dataloader workers (per RANK in DDP mode)’) #多线程:这里建议 default 设置为 0。 parser.add_argument(’–project’, default=ROOT / ‘runs/train’, help=‘save to project/name’) #用于指定训练好的模型的保存路径。 parser.add_argument(’–freeze’, type=int, default=24, help=‘Number of layers to freeze. backbone=10, all=24’) #冻结层数设置

4、train.py

运行train.py训练即可 训练结束后会在根目录下生成一个run文件夹,里面存放训练结果和权重 在这里插入图片描述

三、可修改的参数部分详解 1.总述

参数部分代码如下:

'''*****************超参数修改*****************''' def parse_opt(known=False): parser = argparse.ArgumentParser() parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path') #选择预训练权重模型,若default为空则用程序自带初始权重 # parser.add_argument('--weights', type=str, default='', help='initial weights path') # parser.add_argument('--cfg', type=str, default='', help='model.yaml path') #选择神经网络模型 parser.add_argument('--cfg', type=str, default='yolov5s.yaml', help='model.yaml path') parser.add_argument('--data', type=str, default=ROOT / 'data/mydata.yaml', help='dataset.yaml path') #样本数据路径,进入到mydata.yaml文件里修改修改 parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path') #超参数:动量、衰减率等。一般用不到 # parser.add_argument('--epochs', type=int, default=300) parser.add_argument('--epochs', type=int, default=400) #训练几轮,设定epoch数量 parser.add_argument('--batch-size', type=int, default=32, help='total batch size for all GPUs, -1 for autobatch') #每批次的数据量,default=-1时自动调节大小 parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')#训练集和测试集图片的像素大小,640*640 parser.add_argument('--rect', action='store_true', help='rectangular training') #减去一些不必要信息,加速模型推理过程 parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training') #在最近训练的一个模型基础上继续训练 parser.add_argument('--nosave', action='store_true', help='only save final checkpoint') #生效后只保存最后一次 pt 文件 parser.add_argument('--noval', action='store_true', help='only validate final epoch') #生效后只在最后一次测试 parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check') parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations') #对x代超参数进行优化 parser.add_argument('--bucket', type=str, default='', help='gsutil bucket') parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"') #将对图片进行缓存,以便更好地进行训练 parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training') #对于那些训练不好的图片,会在下一轮中增加一些权重。 parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') #用于设置运行 pytorch 框架的使用设备,是用 GPU cuda,还是 cpu parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%') #对图片尺度进行变换 parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class') # 用于设定训练数据集是单类别还是多类别。默认为 false,意味着是多别。 parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer') #优化器:填入到 Edit Configuration --> Parameters parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode') #进行多 GPU 进行分布式训练。 # parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)') parser.add_argument('--workers', type=int, default=0, help='max dataloader workers (per RANK in DDP mode)') #多线程:这里建议 default 设置为 0。 parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name') #用于指定训练好的模型的保存路径。 parser.add_argument('--name', default='exp', help='save to project/name') # 用于设定保存的模型文件名。 parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') #用于设定预测结果的保存存在位置情况。 parser.add_argument('--quad', action='store_true', help='quad dataloader') #quad 数据加载的相关设置 parser.add_argument('--linear-lr', action='store_true', help='linear LR') #学习率方式设置 parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon') #平滑处理防止过拟合 parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)') #若epoch没有提升则提前结束 parser.add_argument('--freeze', type=int, default=24, help='Number of layers to freeze. backbone=10, all=24') #冻结层数设置 parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)') #用于记录训练日志信息,int 型,默认为 -1。 parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify') #DistributedDataParallel 单机多卡训练,一般不改动。 # Weights & Biases arguments #wandb可视化的一些设置 parser.add_argument('--entity', default=None, help='W&B: Entity') parser.add_argument('--upload_dataset', action='store_true', help='W&B: Upload dataset as artifact table') parser.add_argument('--bbox_interval', type=int, default=-1, help='W&B: Set bounding-box image logging interval') parser.add_argument('--artifact_alias', type=str, default='latest', help='W&B: Version of dataset artifact to use') #无意义,可注释掉 opt = parser.parse_known_args()[0] if known else parser.parse_args() return opt 2.参数详解 2.1–weights parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')

选择预训练权重模型,若default为空则用程序自带初始权重

2.2–cfg parser.add_argument('--cfg', type=str, default='yolov5s.yaml', help='model.yaml path')

选择神经网络模型,default为’ '时使用程序自带模型

2.3–data parser.add_argument('--data', type=str, default=ROOT / 'data/mydata.yaml', help='dataset.yaml path')

样本数据路径,进入到mydata.yaml文件里修改修改

2.4–hyp parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')

超参数:动量、衰减率、box设置等等,一般情况下用不到在这里插入图片描述

2.5–epochs parser.add_argument('--epochs', type=int, default=400)

训练的轮数:训练几轮,设定epoch数量。源码中 default 值为 300,训练轮次则显示为 0~299

2.6–batch-size parser.add_argument('--batch-size', type=int, default=32, help='total batch size for all GPUs, -1 for autobatch')

每次网路输入的数据量:每批次的输入数据量,default=-1时自动调节大小

2.7–imgsz parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')

图片大小:训练集和测试集图片的像素大小,输入默认640*640

2.8–rect parser.add_argument('--rect', action='store_true', help='rectangular training')

在这里插入图片描述

设置矩阵的训练方式:作用是减去一些不必要信息,加速模型推理过程。

2.9–resume parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')

是否在最近训练的一个模型基础上继续训练:default 值默认是 false,当想要 default 为 true 时必须指定在哪个模型上继续训练。指定的模型路径按字符串形式赋值给 default。

2.10–nosave parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')

只保存最后一次 pt 文件

2.11–notest parser.add_argument('--noval', action='store_true', help='only validate final epoch')

生效后只在最后一次进行测试。

此类参数被激活的条件是填入到 Edit Configuration --> Parameters 中,若有多个被激活参数,中间用空格隔开即可。 在这里插入图片描述在这里插入图片描述

2.12–noautoanchor parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')

用于设置在目标检测任务中是否采用锚点 / 锚框。 遍历输入图像上所有可能的像素框,然后选出正确的目标框,并对位置和大小进行调整就可以完成目标检测任务。 默认开启,用这种方式来简化模型训练过程。

2.13–evolve parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')

对x代超参数进行优化。 作用是寻找最优超参数的方式,方法是利用遗传算法自动搜索超参数。 默人不开启

2.14–bucket parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')

这个参数是 yolov5 作者将一些东西放在谷歌云盘,可以进行下载。

2.15–cache parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')

生效后将对图片进行缓存,以便更好地进行训练。

2.16–image-weights parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')

生效后对于那些训练不好的图片,会在下一轮中增加一些权重。

2.17–device parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')

用于设置运行 pytorch 框架的使用设备,是用 GPU cuda,还是 cpu

2.18–multi-scale parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')

对图片尺度进行变换

2.19–single-cls parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')

用于设定训练数据集是单类别还是多类别。 默认为 false,意味着是多类别。

2.20–adam parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')

优化器:填入到 Edit Configuration --> Parameters 中即为 true ,意味着要用此优化器;否则为 false,为 false 时用的是随机梯度下降(SGD)优化算法。

2.21–sync-bn parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')

进行多 GPU 进行分布式训练。

2.22–workers parser.add_argument('--workers', type=int, default=0, help='max dataloader workers (per RANK in DDP mode)')

多线程:这里建议 default 设置为 0。

2.23–project parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')

用于指定训练好的模型的保存路径。

2.24–name parser.add_argument('--name', default='exp', help='save to project/name')

用于设定保存的模型文件名。

2.25–exist-ok parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')

用于设定预测结果的保存存在位置情况。 当激活时为 true,在 name 指定文件夹下保存,源码中保存在 exp 文件夹下 当不激活时为 false,在新命名的文件夹下保存。

2.26–quad parser.add_argument('--quad', action='store_true', help='quad dataloader')

解释为 quad 数据加载的相关设置。 简单理解,生效后可以在比前面 “–img-size” 部分设置的训练测试数据集更大的数据集上训练。

好处是在比默认 640 大的数据集上训练效果更好副作用是在 640 大小的数据集上训练效果可能会差一些 2.27–linear-lr parser.add_argument('--linear-lr', action='store_true', help='linear LR')

用于对学习速率进行调整 默认为 false,含义是通过余弦函数来降低学习率。

注:当我们使用梯度下降算法来优化目标函数的时候,当越来越接近Loss值的全局最小值时,学习率应该变得更小来使得模型尽可能接近这一点,而余弦退火(Cosine annealing)可以通过余弦函数来降低学习率。

2.28–label-smoothing parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')

用于对标签进行平滑处理。 作用是防止在分类算法中过拟合情况的产生。

2.29–patience parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')

提前结束:若epoch没有提升则提前结束

2.30–freeze parser.add_argument('--freeze', type=int, default=24, help='Number of layers to freeze. backbone=10, all=24')

冻结层:可适当减少冻结层数

2.31–save-period parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')

用于记录训练日志信息,int 型,默认为 -1。

2.32–local_rank parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')

DistributedDataParallel 单机多卡训练,一般不改动。

2.33–entity parser.add_argument('--entity', default=None, help='W&B: Entity')

与 wandb 库相关的参数设置,作用不大,忽略。

2.34–upload_dataset parser.add_argument('--upload_dataset', action='store_true', help='W&B: Upload dataset as artifact table')

wandb 库对应的东西,作用不大,不必考虑。

2.35–bbox_interval parser.add_argument('--bbox_interval', type=int, default=-1, help='W&B: Set bounding-box image logging interval')

与 wandb 库相关的参数设置,作用不大,忽略。

2.36–artifact_alias parser.add_argument('--artifact_alias', type=str, default='latest', help='W&B: Version of dataset artifact to use')

这一行参数表达的是想实现但还未实现的一个内容,忽略即可。亲测注释掉整个程序也可运行。

参考

https://blog.csdn.net/IT_charge/article/details/119177578



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有