YOLOv5 项目:训练代码和参数详细介绍(train)

您所在的位置:网站首页 noval是什么意思 YOLOv5 项目:训练代码和参数详细介绍(train)

YOLOv5 项目:训练代码和参数详细介绍(train)

2024-07-04 10:55| 来源: 网络整理| 查看: 265

1、前言

本章将介绍YOLOv5项目训练代码的参数,关于YOLOv5项目的环境配置和推理代码参数详细介绍可以参考之前的文章

pycharm 打开YOLOv5项目,训练代码如下图的红框所示

2、训练参数

yolov5 训练脚本的训练参数如下

"""Parses command-line arguments for YOLOv5 training, validation, and testing.""" parser = argparse.ArgumentParser() parser.add_argument("--weights", type=str, default=ROOT / "yolov5s.pt", help="initial weights path") parser.add_argument("--cfg", type=str, default="", help="model.yaml path") parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path") parser.add_argument("--hyp", type=str, default=ROOT / "data/hyps/hyp.scratch-low.yaml", help="hyperparameters path") parser.add_argument("--epochs", type=int, default=100, help="total training epochs") parser.add_argument("--batch-size", type=int, default=16, help="total batch size for all GPUs, -1 for autobatch") parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="train, val image size (pixels)") 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") parser.add_argument("--noval", action="store_true", help="only validate final epoch") parser.add_argument("--noautoanchor", action="store_true", help="disable AutoAnchor") parser.add_argument("--noplots", action="store_true", help="save no plot files") parser.add_argument("--evolve", type=int, nargs="?", const=300, help="evolve hyperparameters for x generations") parser.add_argument( "--evolve_population", type=str, default=ROOT / "data/hyps", help="location for loading population" ) parser.add_argument("--resume_evolve", type=str, default=None, help="resume evolve from last generation") parser.add_argument("--bucket", type=str, default="", help="gsutil bucket") parser.add_argument("--cache", type=str, nargs="?", const="ram", help="image --cache ram/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") 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") parser.add_argument("--optimizer", type=str, choices=["SGD", "Adam", "AdamW"], default="SGD", help="optimizer") parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode") parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") 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") parser.add_argument("--cos-lr", action="store_true", help="cosine LR scheduler") 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)") parser.add_argument("--freeze", nargs="+", type=int, default=[0], help="Freeze layers: backbone=10, first3=0 1 2") parser.add_argument("--save-period", type=int, default=-1, help="Save checkpoint every x epochs (disabled if < 1)") parser.add_argument("--seed", type=int, default=0, help="Global training seed") parser.add_argument("--local_rank", type=int, default=-1, help="Automatic DDP Multi-GPU argument, do not modify") # Logger arguments parser.add_argument("--entity", default=None, help="Entity") parser.add_argument("--upload_dataset", nargs="?", const=True, default=False, help='Upload data, "val" option') parser.add_argument("--bbox_interval", type=int, default=-1, help="Set bounding-box image logging interval") parser.add_argument("--artifact_alias", type=str, default="latest", help="Version of dataset artifact to use") # NDJSON logging parser.add_argument("--ndjson-console", action="store_true", help="Log ndjson to console") parser.add_argument("--ndjson-file", action="store_true", help="Log ndjson to file")

3、train 脚本训练超参数详解

这里对train 脚本超参数介绍,其实有部分参数和detect参数类似,可以参考之前的介绍

YOLOv5 项目:推理代码和参数详细介绍(detect)-CSDN博客

需要注意的带有 action = 'store_true' ,理解为布尔类型的参数,默认就是关闭。如果打开的话,直接用python detect.py --save-txt 即可 

其他类型的要在后面跟实参,例如python detect.pt --conf-thres 0.5

3.1 weights 权重文件 parser.add_argument("--weights", type=str, default=ROOT / "yolov5s.pt", help="initial weights path")

预训练权重的路径,默认的是 yolov5s.pt

如果不使用的话,可使用"–weights" 参数指定一个空字符串:“”,或者将default默认值设置为空字符串:“”;

3.2 cfg 模型文件 parser.add_argument("--cfg", type=str, default="", help="model.yaml path")

网络模型的结构文件

注意:

如果使用了 weights 预训练权重,这个参数可以使用,代码会自动载入 weights 得到网络模型不使用的话,则必须指定该参数

weights 和 cfg 两者必须要有一个,否则代码会找不到网络的模型结构,即会报错!!!

3.3 data 数据集的配置文件 parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path")

默认的是coco128.yaml 的路径,里面存放数据集的训练集、测试集路径啊,以及检测的类别之类的

这里默认会下载coco数据集,需要删掉

3.4 hyp 超参数配置文件 parser.add_argument("--hyp", type=str, default=ROOT / "data/hyps/hyp.scratch-low.yaml", help="hyperparameters path")

里面设定训练需要的超参数,例如学习率啊、动量啊、权重衰减啊等等参数设定

3.5 epochs 训练周期 parser.add_argument("--epochs", type=int, default=100, help="total training epochs")

这个很简单了,就是迭代训练集多少次,这里默认100

3.6 batch-size parser.add_argument("--batch-size", type=int, default=16, help="total batch size for all GPUs, -1 for autobatch")

这个也很简单,多少个数据算作一个batch

3.7 imgsz,img,img-size 图像的尺寸 parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="train, val image size (pixels)")

网络训练和验证的时候,输入图片的尺寸

3.8 rect 矩形训练 parser.add_argument("--rect", action="store_true", help="rectangular training")

矩形训练,因为图像尺寸不同,会导致训练时间加长。

开启后会对输入的矩形图片进行预处理,通过保持原图高宽比进行resize后,对resize后的图片进行填充,填充到32的最小整数倍,然后进行矩形训练,减少训练时间。

3.9 resume 断点训练 parser.add_argument("--resume", nargs="?", const=True, default=False, help="resume most recent training")

断点续训就是设备中断后,从上一个训练任务中断的地方继续训练

需要注意的是:当模型训练完成,则无法进行断点续训;

需要搭配"–weights" 参数使用,指定训练中断保存的最后一次模型权重文件。

3.10 nosave 保留最后一次权重 parser.add_argument("--nosave", action="store_true", help="only save final checkpoint")

默认关闭,开启后只会保留最后的一次权重

3.11 noval 最后一次验证 parser.add_argument("--noval", action="store_true", help="only validate final epoch")

开启后,网络只会对最后一个epoch进行验证

3.12 noautoanchor 自动计算锚框 parser.add_argument("--noautoanchor", action="store_true", help="disable AutoAnchor")

关闭自动计算锚框功能,默认关闭

yolov5采用的是kmeans聚类算法来计算anchor box的大小和比例,最终自动计算出一组最合适训练的锚框。

3.13 noplots 可视化文件 parser.add_argument("--noplots", action="store_true", help="save no plot files")

不保存训练过程的可视化文件,默认关闭

3.14 evolve 超参数优化 parser.add_argument("--evolve", type=int, nargs="?", const=300, help="evolve hyperparameters for x generations")

使用超参数优化算法进行自动调参,默认关闭yolov5采用遗传算法对超参数进行优化,寻找一组最优的训练超参数。开启后传入参数n,训练每迭代n次进行一次超参数进化;开启后不传入参数,则默认为const=300。

3.15 evolve_population 超参数优化的文件 parser.add_argument("--evolve_population", type=str, default=ROOT / "data/hyps", help="location for loading population")

配合上面自动使用,超参数优化的保存位置

3.16 resume_evolve 断点训练+超参数优化 parser.add_argument("--resume_evolve", type=str, default=None, help="resume evolve from last generation")

超参数优化会导致参数改变,如果采用断点训练的话,则需要指定参数的路径

3.17 bucket 云盘 parser.add_argument("--bucket", type=str, default="", help="gsutil bucket")

从谷歌云盘下载或上传数据 1,该参数用于指定 gsutil bucket 的名称,其中 gsutil 是 Google 提供的一个命令行工具,用于访问 Google Cloud Storage(GCS)服务; 2,GCS 是 Google 提供的一种对象存储服务,用户可以将任意数量和类型的数据存储在其中。用户可以通过 gsutil 命令行工具上传、下载、复制、删除等操作 GCS 中的数据。在训练模型时,如果需要使用 GCS 中的数据集,就需要指定 bucket 的名称。

3.18 cache 缓存数据集 parser.add_argument("--cache", type=str, nargs="?", const="ram", help="image --cache ram/disk")

缓存数据集到内存,这样可以加快训练的速度

cache,可以指定的值:ram/disk;cache,参数不指定值,则默认为const=‘ram’。

3.19 image-weights 对数据加权训练 parser.add_argument("--image-weights", action="store_true", help="use weighted image selection for training")

搭配 rect 参数使用,对数据集的图片进行加权训练

3.20 device 训练设备 parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu")

训练时使用的设备

如果忽略的话,代码会根本环境自动选择,如果有GPU会优先使用

设备没有GPU,使用CPU训练------python train.py --device cpu设备有单个GPU,使用单个GPU训练------python train.py --device 0设备有多个GPU,使用单个GPU训练:

python train.py --device 0 (使用第1张GPU训练); python train.py --device 2 (使用第3张GPU训练);

设备有多个GPU,使用多个GPU训练------python train.py --device 0,1,2(使用第1,2,3张GPU训练训练)

3.21 multi-scale多尺度训练 parser.add_argument("--multi-scale", action="store_true", help="vary img-size +/- 50%%")

多尺度训练,这里默认关闭

这个开启的话,对网络的精度会有提升,根据情况选择是否开启

3.22 single-cls 单类别训练 parser.add_argument("--single-cls", action="store_true", help="train multi-class data as single-class")

有多个检测类别时候,只训练指定的目标

3.23 optimizer 优化器选择 parser.add_argument("--optimizer", type=str, choices=["SGD", "Adam", "AdamW"], default="SGD", help="optimizer")

默认使用SGD 优化器----->python train.py --optimizer SGD

注意:这里可选择的只有三个‘SGD’, ‘Adam’, ‘AdamW’

3.24 sync-bn 同步批量归一化 parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode")

在传统的批归一化(Batch Normalization,简称 BN)中,每个 GPU 会对数据的均值和方差进行单独计算

在多 GPU 训练时,每个 GPU 计算的均值和方差可能会不同,导致模型训练不稳定

为了解决这个问题,SyncBN 技术将 BN 的计算放在了整个分布式训练过程中进行,确保所有 GPU 上计算的均值和方差是一致的,从而提高模型训练的稳定性和效果,但同时也会增加训练时间和硬件要求,因此需要根据具体的训练数据和硬件资源来决定是否使用 SyncBN。

只有在分布式训练(DDP)时才有效

3.25 workers 线程数 parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)")

DataLoader中的num_workers参数,默认为8

Dataloader中numworkers表示加载处理数据使用的线程数,使用多线程加载数据时,每个线程会负责加载和处理一批数据,数据加载处理完成后,会送入相应的队列中,最后主线程会从队列中读取数据,并送入GPU中进行模型计算

numworkers为0表示不使用多线程,仅使用主线程进行数据加载和处理。

3.26 project 保存路径 parser.add_argument("--project", default=ROOT / "runs/train", help="save to project/name")

和detect 里面的参数一样,即每次训练结果保存的主路径

主路径:每次训练会生成一个单独的子文件夹,主路径就是存放这些单独子文件夹的地方,可以自己命名

例如’runs/train’。比如说第一次训练保存结果的文件夹是exp1,第二次是exp2,第三次是exp3,则这些子文件夹都会放在主路径’runs/train’下面。

3.27 name 子路径 parser.add_argument("--name", default="exp", help="save to project/name")

参考 3.26 project 参数介绍,里面的子文件夹

3.28 exist-ok 保存位置是否覆盖 parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment")

默认关闭

每次训练都会生成一个子文件夹,例如exp1,exp2,以此类推

开启的话,新生成的就会直接覆盖之前的训练结果

3.29 quad 数据加载 parser.add_argument("--quad", action="store_true", help="quad dataloader")

quad dataloader 是一种数据加载器,它可以并行地从磁盘读取和处理多个图像,并将它们打包成四张图像,从而减少了数据读取和预处理的时间,并提高了数据加载的效率。

3.30 cos-lr 余弦退火学习率衰减策略 parser.add_argument("--cos-lr", action="store_true", help="cosine LR scheduler")

使用cos衰减的学习率

3.31 label-smoothing 标签平滑策略 parser.add_argument("--label-smoothing", type=float, default=0.0, help="Label smoothing epsilon")

标签平滑策略,可以防止过拟合

python train.py --label-smoothing 0.1 表示在每个标签的真实概率上添加一个 epsilon=0.1的噪声,从而使模型对标签的波动更加鲁棒;

具体的值要根据实际网络调整

3.32 patience 提前停止训练 parser.add_argument("--patience", type=int, default=100, help="EarlyStopping patience (epochs without improvement)")

patience 参数指定为整数n时,表示模型在训练时,若连续n个epoch验证精度都没有提升,则认为训练已经过拟合,停止训练

3.33 freeze 冻结网络 parser.add_argument("--freeze", nargs="+", type=int, default=[0], help="Freeze layers: backbone=10, first3=0 1 2")

网络共有10层,迁移学习时,可以冻结一部分参数,只训练后面的层达到加快训练的目的

指定n,冻结前n(0



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3