GitHub YOLOv5 开源代码项目系列讲解(四)——训练相关参数解释

  • Post author:
  • Post category:其他



GitHub YOLOv5 开源代码项目系列讲解(四)——训练相关参数解释_闭关修炼——暂退的博客-CSDN博客

目 录

1 总述

2 参数详解

2.1 –weights

2.2 –cfg

2.3 –data

2.4 –hyp

2.5 –epochs

2.6 –batch-size

2.7 –img-size

2.8 –rect

2.9 –resume

2.10 –nosave

2.11 –notest

​2.12 –noautoanchor

2.13 –evolve

2.14 –bucket

2.15 –cache-images

2.16 –image-weights

2.17 –device

2.18 –multi-scale

2.19 –single-cls

2.20 –adam

2.21 –sync-bn

2.22 –local_rank

2.23 –workers

2.24 –project

2.25 –entity

2.26 –name

2.27 –exist-ok

2.28 –quad

2.29 –linear-lr

2.30 –label-smoothing

2.31 –upload_dataset

2.32 –bbox_interval

2.33 –save_period

2.34 –artifact_alias

3 训练结果展示

1 总述

利用 yolov5 进行训练神经网络用到的是开源项目源码中的 train.py。

我们可对其 main 函数的红框部分进行调整参数。

2 参数详解

2.1 –weights

parser.add_argument('--weights', type=str, default='', help='initial weights path')


可以用于指定一个训练好的模型路径,用这个模型初始化模型中一些参数(首先需要提前下载或运行程序时会自动下载)

default 默认为空,意义是用程序的参数权重进行初始化,而不用已经训练好的模型进行初始化。

default 值可设置为:

Yolov5s.pt

Yolov5m.pt

Yolov5l.pt

Yolov5x.pt

2.2 –cfg

parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
cfg 为 configuration(设置)的缩写,用于进行模型的配置。

default 用于选择 model 文件。

其设置值可在此文件夹中找到:

2.3 –data

parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path')


用于指定训练数据集。

其设置值可在此文件夹中找到:

2.4 –hyp

parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path')


用于设置超参数(一般用不到)。

其设置值可在此文件夹中找到,源码中提供了两个文件:

hyp.finetune.yaml:设置了一些训练 VOC 数据集时用到的超参数

hyp.scratch.yaml:设置了一些训练 COCO 数据集时用到的超参数



2.5 –epochs

parser.add_argument('--epochs', type=int, default=300)


用于设置训练的轮数。

源码中 default 值为 300,训练轮次则显示为 0~299。

2.6 –batch-size

parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')


用于设置一次跑多少的数据输入到网络当中。不设置时默认为16。

2.7 –img-size

parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')


用于分别设置训练集和测试集的大小。

两个数字前者为训练集大小,后者为测试集大小。

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('--notest', action='store_true', help='only test 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', action='store_true', help='evolve hyperparameters')


生效后对超参数进行净化。

作用是寻找最优超参数的方式,方法是利用遗传算法自动搜索超参数。

默人不开启。

2.14 –bucket

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


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

2.15 –cache-images

parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')


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

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 –local_rank

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

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

2.23 –workers

parser.add_argument(‘–workers’, type=int, default=0, help=’maximum number of dataloader workers’)

这里强烈建议 default 设置为 0。

2.24 –project

parser.add_argument(‘–project’, default=’runs/train’, help=’save to project/name’)

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

2.25 –entity

parser.add_argument(‘–entity’, default=None, help=’W&B entity’)

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

这里补充一点:

关闭 wandb 的方法是:在源码 tree 下找到 util –> wandb_logging –> wandb_utils.py 文件,在 18 行左右的位置之后,加一句 “wandb = None”,即可关闭。(因为 wandb 库需要另外安装,而且其作用不大,这里提供一种忽略方法)

2.26 –name

parser.add_argument(‘–name’, default=’exp’, help=’save to project/name’)

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

2.27 –exist-ok

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

用于设定预测结果的保存存在位置情况。

当不激活时为 false,在新命名的文件夹下保存。

当激活时为 true,在 name 指定文件夹下保存,源码中保存在 exp 文件夹下

对应示例图片在 《GitHub YOLOv5 开源代码项目系列讲解(三)——预测相关参数解释》 博文 2.17 部分可以找到。

2.28 –quad

parser.add_argument(‘–quad’, action=’store_true’, help=’quad dataloader’)

解释为 quad 数据加载的相关设置。

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

好处是在比默认 640 大的数据集上训练效果更好

副作用是在 640 大小的数据集上训练效果可能会差一些

2.29 –linear-lr

parser.add_argument(‘–linear-lr’, action=’store_true’, help=’linear LR’)

用于对学习速率进行调整

默认为 false,含义是通过余弦函数来降低学习率。

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

生效之后则转变为通过线性处理来降低学习率。

2.30 –label-smoothing

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

用于对标签进行平滑处理。

作用是防止在分类算法中过拟合情况的产生。

2.31 –upload_dataset

parser.add_argument(‘–upload_dataset’, action=’store_true’, help=’Upload dataset as W&B artifact table’)

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

2.32 –bbox_interval

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

这又是一个与 wandb 库相关的参数设置,作用不大,忽略。

2.33 –save_period

parser.add_argument(‘–save_period’, type=int, default=-1, help=’Log model after every “save_period” epoch’)

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

2.34 –artifact_alias

parser.add_argument(‘–artifact_alias’, type=str, default=”latest”, help=’version of dataset artifact to be used’)

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

3 训练结果展示



保存位置