【土堆】目标检测 YOLOv5 开源项目入门实战 2(最详尽版)—— 关于 train.py 参数讲解 & 训练 YOLOv5 模型

前言

这是我根据 B 站土堆的 目标检测 YOLOv5 开源代码项目调试与讲解实战 整理撰写的第二篇文章,具体介绍了 YOLOv5 项目中 train.py 文件的参数,所有代码均为视频演示版,非本人原创。在看这篇文章前,请公主王子们确保自己的 YOLOv5 已经配置完成,且项目中的 detect.py 文件也能够成功运行哦~如果在配置 YOLOv5 的过程中遇到问题,可以参考我的这一篇文章,链接放在这里啦:

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError-CSDN博客文章浏览阅读618次,点赞16次,收藏17次。这篇文章主要记录了作者在配置 YOLOv5 时遇到的问题以及解决方式,作者小白,请多包涵!https://blog.csdn.net/nanzhou520/article/details/134587856

除此之外,还要保证 YOLOv5 项目中的 train.py 文件也能够成功运行,大家可以参考我的这一篇文章:

【土堆】手把手带你解决 YOLOv5 运行 train.py 文件时遇到的问题 AttributeError: module ‘distutils‘ & RuntimeError & ...-CSDN博客文章浏览阅读340次,点赞10次,收藏11次。这篇文章记录了作者在运行 YOLOv5 的 train.py 文件时遇到的一系列问题以及相应的解决方式,包括 torch 的版本问题, AttributeError: module 'distutils' has no attribute 'version 和 unzip 失败的问题。作者小白,请多包涵!https://blog.csdn.net/nanzhou520/article/details/134675092

一、训练 YOLOv5 模型

在这个章节,我们将具体讲解 YOLOv5 项目 Tags5 版本中 train.py 文件的参数。我参考了土堆的视频教程以及下面这篇博客:

YOLOV5训练代码train.py训练参数解析_yolov5train代码详解-CSDN博客文章浏览阅读5.1k次,点赞21次,收藏135次。yolov5项目代码中,train.py是用于模型训练的代码,是yolov5中最为核心的代码之一,而代码中的训练参数则是核心中的核心,只有学会了各种训练参数的真正含义,才能使用yolov5进行最基本的训练。_yolov5train代码详解https://blog.csdn.net/m0_47026232/article/details/129869740除此之外,我也参考了知乎这篇文章:手把手带你调参 Yolov5(二) - 知乎

如下图所示,这些就是 train.py 文件中我们需要大致了解的参数。

1、weights

这个 weights 参数用于指定网络模型,其 default 默认设置为 yolov5s.pt 模型,也可设置为 yolov5m.pt、yolov5l.pt、yolov5x.pt 等官方预训练权重文件,代码运行后会自动下载这些模型,并将其保存在项目的根目录下。如果大家觉得下载速度慢,也可以去 GitHub 提供的 YOLOv5 官方开源项目中下载,点击【Release】就可以跳转对应页面下载 .pt 模型啦!注意 YOLOv5 版本的对应噢~

【补充】当 default 设置为空时,代码运行后将从头开始训练,这个过程可能会比较漫长~

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

2、cfg

这个 cfg 参数用于指定模型配置文件的路径,YOLOv5 官方开源项目的 Tags 5.0 源码提供了 4 个模型配置文件,配置文件中指定了部分参数信息和 backbone 的结构信息,如下图所示,值得注意的是,如果已经使用 weight 参数加载了预训练权重文件,就可以不使用该参数,因为训练时将直接使用预训练权重文件中保存的模型结构。

parser.add_argument('--cfg', type=str, default='', help='model.yaml path')

3、data

这个 data 参数用于指定数据集配置文件的路径,YOLOv5 官方开源项目的 Tags 5.0 源码提供了 4 个数据集配置文件,配置文件中存放了数据集的类别和路径信息,如下图所示,如果代码运行后没有检测到数据集,会自动下载 COCO128 数据集,当然也可以自行下载。

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

4、hyp

这个 hyp 参数用于指定超参数配置文件的路径,YOLOv5 官方开源项目的 Tags 5.0 源码提供了 2 个超参数配置文件,配置文件中存放了大量的参数信息,具体如图所示,简单来说, hyp.scratch.yaml 存放了从头开始训练 COCO 数据集模型时需要考虑的的常见超参数,而  hyp.finetune.yaml 则存放了对 VOC 数据集进行微调时需要考虑的常见超参数。

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

5、epochs

这个 epochs 参数用于指定训练的迭代轮数,默认设置为 default = 300 轮,表示将整个训练集训练 300 次。

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

6、batch-size

这个 batch-size 参数用于指定训练批量的大小,默认设置为 16 ,表示每次都从训练集中取 16 个训练样本放入模型进行训练。

【补充】当 default 设置为 -1 时,代码运行后将自动调节 batch-size 的大小。

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

7、img-size

这个 img-size 参数用于指定模型训练和测试时输入图片的尺寸大小,默认设置为 640 × 640,使用不同 .pt 模型时需要对这个参数进行调整,我们可以打开 GitHub 提供的 YOLOv5 官方开源项目,点击【Release】进入对应页面,如下图所示。

【补充】这个 img-size 参数与我上一篇提到的 detect.py 文件中的 img-size 参数相似,大家可以参考我的上一篇博文:【土堆】目标检测 YOLOv5 开源项目入门实战 1(最详尽版)—— 关于 detect.py 参数讲解与 lux ( annie ) & ffmpeg 安装-CSDN博客文章浏览阅读410次,点赞16次,收藏16次。这是我根据 B 站土堆的《目标检测 YOLOv5 开源代码项目调试与讲解实战》整理撰写的第一篇文章,具体介绍了 YOLOv5 项目中 detect.py 文件的参数,同时也大致讲解了 lux ( annie ) 下载神器的安装过程。作者小白,请多包涵!https://blog.csdn.net/nanzhou520/article/details/134606946

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

8、rect

这个 rect 参数用于确定是否用矩阵推理的方式去训练模型,矩阵推理将不再要求训练图片为正方形,在训练过程中能够对输入的矩形图片进行预处理,在保持原高宽比的基础上进行 resize 和填充,从而加速模型训练,减少信息冗余。

parser.add_argument('--rect', action='store_true', help='rectangular training')

【补充】为了让大家能够更加直观地感受到方形推理和矩阵推理的区别,我在下面贴了土堆视频教程的截图,请看!

9、resume

这个 resume 参数用于确定是否进行断点续训,也就是从上一个训练任务中断的地方继续训练,直至训练完成,默认值为 False ,如果想采用断点续训的方式,不仅要将 default 设置为 True ,还应该指定使用哪个训练过的模型,具体的命令可参考下面这行:

python train.py --resume D:\Downloads\yolov5-5.0\runs\train\exp\weights\last.pt
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')

10、nosave

这个 nosave 参数用于确认是否只保存最后一轮训练的 .pt 权重文件,默认是关闭的,保存 best.pt 和 last.pt 两个权重文件。

parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')

11、notest

这个 notest 参数用于确认是否只在最后一轮训练进行测试,默认是关闭的。

parser.add_argument('--notest', action='store_true', help='only test final epoch')

12、noautoanchor

这个 noautoanchor 参数用于确认是否禁用自动计算锚框的功能,默认是禁用的,如果大家想更加深入了解这个参数的作用,可以去搜索 锚点 锚框 ,也可以看我在本节开头推荐的知乎文章,里面介绍得比较详细,点击【这里】就可以直接跳转哟~

parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')

13、*evolve

这个 evolve 参数用于确认是否使用超参数优化算法进行自动调参,默认是关闭的,建议大家不要动这个参数。如果大家想更加深入了解这个参数的作用, 可以看我在本节开头推荐的知乎文章,里面介绍得比较详细,点击【这里】就可以直接跳转哟~(我 CV 我自己)

parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')

【补充】YOLOv5 使用遗传超参数进化,YOLOv5 提供的默认参数是通过在 COCO 数据集上使用超参数进化得来的,如下图所示:

【补充】可以在 Google 搜索 --evolve yolov5 meaning,然后进入对应的 GitHub 官网页面查看相关解释,如下图所示:

14、*bucket

这个 bucket 参数用于在谷歌云盘中下载或者上传数据,现在不怎么使用。

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

15、cache-images

这个 cache-images 参数用于确定是否提前将数据集图片缓存到内存,加快数据加载和训练速度,默认值为 False ,开启这个参数后就会缓存图片,从而更好地训练模型。

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

16、image-weights

这个 image-weights 参数用于确认是否对数据集图片进行加权训练,主要为了解决样本不平衡的问题,默认值为 False ,开启这个参数后就会对上一轮训练效果不好的图片,在下一轮训练中增加一些权重。

parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')

17、device

这个 device 参数用于选择训练使用的设备处理器,例如 GPU  CPU ,若 default 默认值为空,则代码会自动检测,除此之外,还存在下面这几种情况:

  1.  设备没有 GPU ,只能使用 CPU 训练:python train.py --device cpu
  2.  设备有单个 GPU ,使用单个 GPU 训练:python train.py --device 0
  3.  设备有多个 GPU ,使用单个 GPU 训练:python train.py --device 0(使用第 1 张 GPU 训练)
  4.  设备有多个 GPU ,使用多个 GPU 训练:python train.py --device 0, 1, 2(使用第 1,2,3 张 GPU 训练)
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')

18、multi-scale

这个 multi-scale 参数用于确认是否启用多尺度训练,多尺度训练是指设置多种图片输入尺度,训练时每隔一定 iterations 就随机选取其中一种尺度进行训练,这样训练出来的模型具有更强的鲁棒性,默认是关闭的,开启这个参数后,训练过程中每次输入图片都会放大或者缩小 50% 。

parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')

19、single-cls

这个 single-cls 参数用于设定训练数据集是单类别还是多类别,默认值为 False,也就是多类别。

parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')

20、adam

这个 adam 参数用于确定训练过程中是否使用 Adam 优化器,如果不开启这个参数,则会使用 随机梯度下降

parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')

21、sync-bn

这个 sync-bn 参数用于确定是否开启跨卡 同步批量归一化 (Synchronized Batch Normalization),默认是关闭的,开启这个参数后就可以使用 SyncBatchNorm 多 GPU 进行分布式训练,可参考:YOLOV5训练代码train.py训练参数解析_yolov5train代码详解-CSDN博客

parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')

22、*local_rank

这个 local_rank 参数用于 DistributedDataParallel 单机多卡训练,是 DDP 参数,单 GPU 设备不需要设置。

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

23、workers

这个 workers 参数用于设置 Dataloader 使用的最大 numworkers(加载和处理数据的线程数),默认值为 8 ,建议改为 0 ,表示不使用多线程,只使用主线程进行数据加载和处理。

parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')

24、project

这个 project 参数用于指定训练好的模型的保存路径,默认在 runs / train ,如下图所示。

parser.add_argument('--project', default='runs/train', help='save to project/name')

25、*entity

这个 entity 参数表示在线可视化工具 wandb ,类似于 tensorboard ,使用不多。

parser.add_argument('--entity', default=None, help='W&B entity')

【补充】wandb 是用于机器学习的开发工具,大家可以自行去【wandb官网】了解哟~(建议使用 Google 浏览器打开)

26、name

这个 name 参数用于指定保存模型的文件夹名,默认为 exp ,如下图所示。

parser.add_argument('--name', default='exp', help='save to project/name')

27、exist-ok

这个 exist-ok 参数用于确定是否覆盖同名的训练结果保存路径,默认是关闭的,表示不覆盖,每次预测结果都被保存在自动新建的文件夹中,例如 exp1、exp2 等文件夹。开启这个参数后,本次预测结果将被保存在 name 指定的文件夹中,通常是 exp 文件夹。

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

28、quad

这个 quad 参数用于确认是否使用 quad dataloader 数据加载器,默认是关闭的,quad dataloader 可以并行地从磁盘中读取和处理多个图像,并将其打包成四个图像,从而减少数据读取和预处理的时间,提高数据加载的效率。

parser.add_argument('--quad', action='store_true', help='quad dataloader')

【补充】这个补充大家可以酌情选择看不看哟~我浅浅记录一下如何在 YOLOv5 官方开源项目的源码文件中查看 quad 的作用!

【补充】更推荐王子公主们去 YOLOv5 官方开源项目的 GitHub 网页上查找相关的参数信息,点击【Issues】跳转!

【彩蛋】微臣顺便准备了【what is the new quad dataloader? 】的跳转入口~

  1.  优点:使用 quad 参数后,在 比默认 640 大 的数据集上训练效果 更好 
  2.  缺点:使用 quad 参数后,在 比默认 640 小 的数据集上训练效果 稍差 

29、linear-lr

这个 linear-lr 参数用于对学习速率进行调整,默认值为 False ,通过余弦函数来降低学习率,生效后按照线性方式调整学习率。

parser.add_argument('--linear-lr', action='store_true', help='linear LR')

30、label-smoothing

这个 label-smoothing 参数用于对标签进行平滑处理,防止在分类算法过程中产生过拟合问题,默认是关闭的。

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

31、upload_dataset

这个 upload_dataset 参数用于确认是否将 dataset 上传到 wandb tabel ,默认值为 False ,开启这个参数后,数据集将作为交互式 dsviz 表,可在浏览器中查看、查询、筛选和分析数据集。调用这个参数时,可以选择是否传递参数:

  1. 调用 --upload_dataset 参数,但没有传递参数,则表示上传数据集
  2. 调用 --upload_dataset 参数,并且有传递参数 val ,则表示上传 val 数据集
parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')

32、bbox_interval

这个 bbox_interval 参数用于设置界框图像记录间隔,即指定在训练过程中每隔多少个 epoch 记录一次带有边界框的图片,默认是关闭的。可使用命令行:python train.py --bbox_interval n( n > 0 时表示每隔 n 个 epoch 记录;n <= 0 时表示关闭 bbox_interval )。

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

33、save_period

这个 save_period 参数用于设置每隔多少个 epoch 保存一次训练权重,默认是关闭的,可使用命令行:python train.py --save_period n( n > 0 时表示每隔 n 个 epoch 保存;n <= 0 时表示关闭 save_period,只保存 best 和 last 权重 )。

parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')

34、artifact_alias

这个 artifact_alias 参数用于指定要使用的数据集工件的版本别名,可使用命令行:python train.py -- artifact_alias latest 。

parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')

【补充】在 YOLOv5 的 Tags5 版本中,artifact_alias 参数的功能尚未实现,因此这个参数没有用~

35、调试看参

通过分析 train.py 文件可知,所有参数最终都会被放到 opt 中,我们可以通过打断点的方式 调试看参

Ending

因为担心文章篇幅过长,所以我将《目标检测 YOLOv5 开源项目入门实战》这个系列写成了三篇文章:

  • 第一篇 具体介绍了 YOLOv5 项目 Tags5 版本中 detect.py 文件的参数,同时也大致讲解了 lux ( annie ) 的安装过程;
  • 第二篇 具体介绍了 YOLOv5 项目 Tags5 版本中 train.py 文件的参数,大致涵盖了 34 个参数;
  • 第三篇 具体讲解了如何使用云端 GPU 训练 YOLOv5 模型,以及如何自制数据集并对其进行训练。

作者目前还是小白阶段,可能在撰写文章的过程中存在很多不足和问题,请王子公主们多多包涵!当然也欢迎大家提出建议,微臣主打一个听劝!最后非常感谢大家能够阅读我的文章~希望大家生活顺利!

  • 33
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

作者正在煮茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值