1.1.1 weights

parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
  1. 权重的路径地址。
  2. 注意:weights 和 cfg 两者必须要有一个,否则代码会找不到网络的模型结构,即会报错!!!

1.1.2 cfg

parser.add_argument('--cfg', type=str, default=ROOT / 'models/yolov5s.yaml', help='model.yaml path')
  1. 网络模型的结构文件
  2. 内容是简易的网络结构与其中模块的具体参数,例如输入通道数,输出通道数,卷积核大小数量,步长以及concat的维度等等
  3. 注意:
  • 如果使用了 weights 预训练权重,这个参数可以使用,代码会自动载入 weights 得到网络模型
  • 不使用weights的话,则必须指定该参数

    1.1.3 data

parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
  1. 数据集的配置文件
  2. 可以使用coco格式,voc格式的数据集,但最终会转化成yolov5可以读的txt格式

1.1.4 hyp

parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
  1. 超参数配置文件
  2. 里面设定训练需要的超参数,例如学习率啊、动量啊、权重衰减等参数设定
  3. 注意:
  • 其中hyp.VOC是对VOC数据集进行训练的文件,其中hyp.scratch中的三个yaml,分别是low,med,high是对coco数据集进行训练的超参数字典,其中scratch表示从头开始训练。
  • 一些说法是当模型是n与s的时候使用low的超参数,其他时候使用high,但可能要考虑到数据集,自己尝试使用哪种会更好

1.1.5 epochs

parser.add_argument('--epochs', type=int, default=100, help='total training epochs')
  1. 训练周期

1.1.6 batch-size

parser.add_argument("--batch-size", type=int, default=16, help="total batch size for all GPUs, -1 for autobatch")
  1. 多少个数据算作一个batch
  2. 一次送进去网络多少数据(图像),一般是2的次幂,根据自己显卡的情况来判断,如果自己判断不了,这里可以改成‘-1’,网络可以自动计算适应训练需求。

1.1.7 imgsz

parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="train, val image size (pixels)")
  1. 网络训练和验证的时候,输入图片的尺寸
  2. 两个数字前者为训练集大小,后者为评估集大小

1.1.8 rect

parser.add_argument('--rect', action='store_true', help='rectangular training')
  1. 矩形训练方式
  2. 开启后会对输入的矩形图片进行预处理,通过保持原图高宽比进行resize后,对resize后的图片进行填充,填充到32的最小整数倍,然后进行矩形训练,减少训练时间。
  3. 只要加上’–rect’程序就会将rect设为true; 所谓矩阵推理就是不再要求你训练的图片是正方形了;矩阵推理会加速模型的推理过程,减少一些冗余信息。下图分别是矩阵推理方式和方形推理方式

img

1.1.9 resume

parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
  1. resume代表着断点续训:即是否在之前训练的一个模型基础上继续训练,default 值默认是 false。
  2. 不需要断点续训的情况是default是false,如果遇到意外情况,电脑断电等情况,可以考虑使用断点续训的方式,此时要给default具体的没训练完的权重位置。
parser.add_argument('--resume', nargs='?', const=True, default='runs/train/exp3/weights/best.pt', help='resume most recent training')
  1. 注:

    • 不仅会读取文件,也会读取文件的配置信息
    • 此时将会从上次意外断开的地方继续进行训练。
    • 除非意外情况,一般不建议断点续训,我们一致认为断点续训的效果不如一直训练的情况要好。

1.1.10 nosave

parser.add_argument("--nosave", action="store_true", help="only save final checkpoint")
  1. 只保留最后一次权重
  2. 默认关闭,开启后只会保留最后的一次权重

1.1.11 noval

parser.add_argument("--noval", action="store_true", help="only validate final epoch")
  1. 开启后,网络只会对最后一个epoch进行验证

1.1.12 noautoanchor

parser.add_argument("--noautoanchor", action="store_true", help="disable AutoAnchor")
  1. 关闭自动计算锚框功能,默认关闭
  2. 注:yolov5采用的是kmeans聚类算法来计算anchor box的大小和比例,最终自动计算出一组最合适训练的锚框。

1.1.13 noplots

parser.add_argument("--noplots", action="store_true", help="save no plot files")
  1. 不保存训练过程的可视化文件,默认关闭

1.1.14 evolve

 parser.add_argument("--evolve", type=int, nargs="?", const=300, help="evolve hyperparameters for x generations")
  1. 超参数优化,使用超参数优化算法进行自动调参,默认关闭
  2. 注:yolov5采用遗传算法对超参数进行优化,寻找一组最优的训练超参数。开启后传入参数n,训练每迭代n次进行一次超参数进化;开启后不传入参数,则默认为const=300。

1.1.15 evolve_population

    parser.add_argument("--evolve_population", type=str, default=ROOT / "data/hyps", help="location for loading population")
  1. 超参数优化的文件
  2. 配合evolve自动使用,超参数优化的保存位置

1.1.16 resume_evolve

parser.add_argument("--resume_evolve", type=str, default=None, help="resume evolve from last generation")
  1. 断点训练+超参数优化
  2. 超参数优化会导致参数改变,如果采用断点训练的话,则需要指定参数的路径

1.1.17 bucket

parser.add_argument("--bucket", type=str, default="", help="gsutil bucket")
  1. 云盘

1.1.18 cache

parser.add_argument("--cache", type=str, nargs="?", const="ram", help="image --cache ram/disk")
  1. 缓存数据集到内存,这样可以加快训练的速度
  • cache,可以指定的值:ram/disk;
  • cache,参数不指定值,则默认为const=‘ram’。

1.1.19 image-weights

parser.add_argument("--image-weights", action="store_true", help="use weighted image selection for training")
  1. 对数据加权训练
  2. 搭配 rect 参数使用,对数据集的图片进行加权训练

1.1.20 device

parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu")
  1. 训练时使用的设备
  2. 如果忽略的话,代码会根本环境自动选择,如果有GPU会优先使用
  • 设备没有GPU,使用CPU训练------python train.py --device cpu
  • 设备有单个GPU,使用单个GPU训练------python train.py --device 0
  • 设备有多个GPU,使用多个GPU训练------python train.py --device 0,1,2(使用第1,2,3张GPU训练训练)

1.1.21 multi-scale

parser.add_argument("--multi-scale", action="store_true", help="vary img-size +/- 50%%")
  1. 多尺度训练,默认关闭
多尺度训练是指设置几种不同的图片输入尺度,训练时每隔一定iterations随机选取一种尺度训练,这样训练出来的模型鲁棒性更强。多尺度训练在比赛中经常可以看到他身影,是被证明了有效提高性能的方式。输入图片的尺寸对检测模型的性能影响很大,在基础网络部分常常会生成比原图小数十倍的特征图,导致小物体的特征描述不容易被检测网络捕捉。通过输入更大、更多尺寸的图片进行训练,能够在一定程度上提高检测模型对物体大小的鲁棒性。

1.1.22 single-cls

parser.add_argument("--single-cls", action="store_true", help="train multi-class data as single-class")
  1. 单类别训练,默认false
  2. 有多个检测类别时候,只训练指定的目标

1.1.23 optimizer

parser.add_argument("--optimizer", type=str, choices=["SGD", "Adam", "AdamW"], default="SGD", help="optimizer")
  1. 优化器,默认使用SGD优化器
这里可选择的只有三个‘SGD’, ‘Adam’, ‘AdamW’

1.1.24 sync-bn

parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode")
  1. 同步批量归一化

只有在分布式训练(DDP)时才有效。

在传统的批归一化(Batch Normalization,简称 BN)中,每个 GPU 会对数据的均值和方差进行单独计算

在多 GPU 训练时,每个 GPU 计算的均值和方差可能会不同,导致模型训练不稳定

为了解决这个问题,SyncBN 技术将 BN 的计算放在了整个分布式训练过程中进行,确保所有 GPU 上计算的均值和方差是一致的,从而提高模型训练的稳定性和效果,但同时也会增加训练时间和硬件要求,因此需要根据具体的训练数据和硬件资源来决定是否使用 SyncBN。

1.1.25 workers

parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)")
  1. 线程数

Dataloader中workers表示加载处理数据使用的线程数,使用多线程加载数据时,每个线程会负责加载和处理一批数据,数据加载处理完成后,会送入相应的队列中,最后主线程会从队列中读取数据,并送入GPU中进行模型计算

workers为0表示不使用多线程,仅使用主线程进行数据加载和处理。

1.1.26 project

parser.add_argument("--project", default=ROOT / "runs/train", help="save to project/name")
  1. 训练结果保存的主路径

1.1.27 name

parser.add_argument("--name", default="exp", help="save to project/name")
  1. 训练结果保存的子路径
  2. 参考 1.1.26 project 参数介绍,里面的子文件夹

1.1.28 exist-ok

parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment")
  1. 是否覆盖保存位置,默认关闭
  2. 每次训练都会生成一个子文件夹,例如exp1,exp2,以此类推。开启的话,新生成的就会直接覆盖之前的训练结果

1.1.29 quad

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

quad dataloader 是一种数据加载器,它可以并行地从磁盘读取和处理多个图像,并将它们打包成四张图像,从而减少了数据读取和预处理的时间,并提高了数据加载的效率。

官方给出的开启这个功能后的实际效果:

  • 好处是在比默认 640 大的数据集上训练效果更好
  • 副作用是在 640 大小的数据集上训练效果可能会差一些

1.1.30 cos-lr

parser.add_argument("--cos-lr", action="store_true", help="cosine LR scheduler")
  1. 余弦退火学习率衰减策略,使用cos衰减的学习率

1.1.31 label-smoothing

parser.add_argument("--label-smoothing", type=float, default=0.0, help="Label smoothing epsilon")
  1. 标签平滑策略,可以防止过拟合
  2. 例:python train.py --label-smoothing 0.1
    表示在每个标签的真实概率上添加一个 epsilon=0.1的噪声,从而使模型对标签的波动更加鲁棒;
具体的值要根据实际网络调整

1.1.32 patience

parser.add_argument("--patience", type=int, default=100, help="EarlyStopping patience (epochs without improvement)")
  1. 提前停止训练
  2. patience 参数指定为整数n时,表示模型在训练时,若连续n个epoch验证精度都没有提升,则认为训练已经过拟合,停止训练

1.1.33 freeze

parser.add_argument("--freeze", nargs="+", type=int, default=[0], help="Freeze layers: backbone=10, first3=0 1 2")
  1. 冻结网络
  2. 网络共有10层,迁移学习时,可以冻结一部分参数,只训练后面的层达到加快训练的目的。指定n,冻结前n(0<n<=10)层参数。

冻结模型前n层的训练权重,比如可以冻结网络的主干权重,backbone是提取特征的,对于各大公司来说已经提取的很好了,我们需要做的是在提取出的特征上做好特征融合和提取,所以可以考虑冻结别人已经训练好的主干权重,fine-tune后面层就可以了,不需要从头开始训练,大大减少了实践而且还提高了性能。

例如命令 python train.py --freeze 9就可以表示冻结前9层的主干特征提取。yolov5中主干一共就前10层(0-9层)

1.1.34 save-period

parser.add_argument("--save-period", type=int, default=-1, help="Save checkpoint every x epochs (disabled if < 1)")
  1. 固定周期保留权重。默认关闭,只保留最好和最后的网络权重
  2. 开启后,会根据设定的数值,每隔这个数值的epochs就会保留一次网络权重

1.1.35 seed

parser.add_argument("--seed", type=int, default=0, help="Global training seed")
  1. 随机种子
  2. 保证网络结果的复现,一般用于复现别人的成果。

1.1.36 local_rank

parser.add_argument("--local_rank", type=int, default=-1, help="Automatic DDP Multi-GPU argument, do not modify")
  1. 分布式训练
  2. python train.py --local_rank 1,2
    这样,第一个进程将使用第 2 号 GPU,第二个进程将使用第 3 号 GPU

    注意,如果使用了 --local_rank 参数,那么在启动训练脚本时需要使用 PyTorch 的分布式训练工具,例如 torch.distributed.launch

1.1.37 entiy

  1. 模型实体
  2. 模型实体可以是一个实体名称或实体 ID,通常用于在实体存储库中管理模型的版本控制和记录。
    在使用实体存储库时,需要创建一个实体来存储模型,并在训练时指定该实体,这样训练结果就可以与该实体相关联并保存到实体存储库中。
    该参数默认值为 None,如果未指定实体,则训练结果将不会与任何实体相关联。

1.1.38 upload_dataset

  1. 上传数据集。默认关闭,不上传数据集
  • 如果命令行使用’–upload_dataset’参数,但没有传递参数,则默认值为const=True,表示上传数据集。
  • 如果命令行使用’–upload_dataset’参数,并且传递了参数’val’,则默认为True,表示要上传val数据集。

1.1.39 bbox_interval

parser.add_argument("--bbox_interval", type=int, default=-1, help="Set bounding-box image logging interval")
  1. 记录边框图片
  2. 训练过程中,每隔多少个epoch记录一次带有边界框的图片,类似于训练过程数据的可视化

1.1.40 artifact_alias

parser.add_argument("--artifact_alias", type=str, default="latest", help="Version of dataset artifact to use")
  1. 数据集工件版本别名
  2. 用于指定要使用的数据集工件的版本别名。
    命令行使用方法:python train.py --artifact_alias latest
  3. 在使用MLFlow等工具跟踪模型训练和数据集版本时,会给每个版本分配唯一的别名。通过指定此参数,可以使用特定版本的数据集工件。默认情况下,使用最新版本的数据集工件。

1.1.41 ndjson-console

parser.add_argument("--ndjson-console", action="store_true", help="Log ndjson to console")
  1. 将ndjson输出在控制台

3.42 ndjson-file

parser.add_argument("--ndjson-file", action="store_true", help="Log ndjson to file")
  1. 将ndjson 记录在文件中
分类: YOLO 标签: PythonYOLOYOLOv5

评论

暂无评论数据

暂无评论数据

目录