GitHub YOLOv5 开源代码项目系列讲解------训练相关参数解释

Posted 荣仔!最靓的仔!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GitHub YOLOv5 开源代码项目系列讲解------训练相关参数解释相关的知识,希望对你有一定的参考价值。

本专栏将从安装到实例运用全方位系列讲解 GitHub YOLOv5 开源代码。
专栏地址:GitHub YOLOv5 开源代码项目系列讲解

目 录

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('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters 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 训练结果展示

保存位置

以上就是关于训练相关参数解释的所有内容,感谢阅读

技术之路,共同进步!

以上是关于GitHub YOLOv5 开源代码项目系列讲解------训练相关参数解释的主要内容,如果未能解决你的问题,请参考以下文章

GitHub YOLOv5 开源代码项目系列讲解------制作和训练自己的数据集

GitHub YOLOv5 开源代码项目系列讲解------训练相关参数解释

GitHub YOLOv5 开源代码项目系列讲解------预测相关参数解释

GitHub YOLOv5 开源代码项目系列讲解------链接手机摄像头实现目标检测

目标检测 YOLOv5 开源代码项目-环境配置问题

《模型轻量化-剪枝蒸馏量化系列》YOLOv5无损剪枝(附源码)