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 训练结果展示
保存位置