本专栏将从安装到实例运用全方位系列讲解 GitHub YOLOv5 开源代码。
专栏地址:GitHub YOLOv5 开源代码项目系列讲解
目 录
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 训练结果展示
保存位置
以上就是关于训练相关参数解释的所有内容,感谢阅读!