U版YOLOv5学习笔记之训练参数


源码链接:https://github.com/ultralytics/yolov5/blob/master/train.py

使用字典存储模型的超参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Hyperparameters
hyp = {'lr0': 0.01,  # initial learning rate (SGD=1E-2, Adam=1E-3)
       'momentum': 0.937,  # SGD momentum
       'weight_decay': 5e-4,  # optimizer weight decay
       'giou': 0.05,  # giou loss gain
       'cls': 0.58,  # cls loss gain
       'cls_pw': 1.0,  # cls BCELoss positive_weight
       'obj': 1.0,  # obj loss gain (*=img_size/320 if img_size != 320)
       'obj_pw': 1.0,  # obj BCELoss positive_weight
       'iou_t': 0.20,  # iou training threshold
       'anchor_t': 4.0,  # anchor-multiple threshold
       'fl_gamma': 0.0,  # focal loss gamma (efficientDet default is gamma=1.5)
       'hsv_h': 0.014,  # image HSV-Hue augmentation (fraction)
       'hsv_s': 0.68,  # image HSV-Saturation augmentation (fraction)
       'hsv_v': 0.36,  # image HSV-Value augmentation (fraction)
       'degrees': 0.0,  # image rotation (+/- deg)
       'translate': 0.0,  # image translation (+/- fraction)
       'scale': 0.5,  # image scale (+/- gain)
       'shear': 0.0}  # image shear (+/- deg)
  • lr0:学习率,可以理解为模型的学习速度
  • momentum: 动量,梯度下降法中一种常用的加速技术,加快收敛
  • weight_decay:权值衰减,防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大
  • giou:GIoU损失收益
  • cls:类别损失收益
  • cls_pw:类别交叉熵损失正类权重
  • obj:是否有物体损失收益
  • obj_pw:是否有物体交叉熵正类权重
  • iou_t:iou阈值
  • anchor_t:多尺度anchor阈值
  • fl_gamma:focal loss gamma系数
  • hsv_h:色调Hue,增强系数
  • hsv_s:饱和度Saturation,增强系数
  • hsv_v:明度Value,增强系数
  • degrees:图片旋转角度
  • translate:图片转换
  • scale:图片缩放
  • shear:图片裁减

使用argparse获取命令行参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
parser = argparse.ArgumentParser()  # 创建解析器
parser.add_argument('--epochs', type=int, default=300) # type 参数类型 default 默认值
parser.add_argument('--batch-size', type=int, default=16)
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='*.cfg path')  # help 参数描述
parser.add_argument('--data', type=str, default='data/coco128.yaml', help='*.data path')
# nargs='+' 所有当前命令行参数被聚集到一个列表中
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='train,test sizes')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--resume', action='store_true', help='resume training from last.pt')
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
parser.add_argument('--notest', action='store_true', help='only test final epoch')
parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
parser.add_argument('--weights', type=str, default='', help='initial weights path')
parser.add_argument('--name', default='', help='renames results.txt to results_name.txt if supplied')
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--adam', action='store_true', help='use adam optimizer')
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%')
parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset')
opt = parser.parse_args()

'''
opt:
Namespace(adam=False, batch_size=16, bucket='', cache_images=False,
cfg='./models/yolov5s.yaml', data='./data/coco128.yaml', device='',
epochs=300, evolve=False, img_size=[640, 640], multi_scale=False,
name='', nosave=False, notest=False, rect=False, resume=False,
single_cls=False, weights='')
'''

  • epochs:指的就是训练过程中整个数据集将被迭代多少次
  • batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch
  • cfg:存储模型结构的配置文件
  • data:存储训练、测试数据的文件
  • img-size:输入图片宽高
  • rect:进行矩形训练
  • resume:恢复最近保存的模型开始训练
  • nosave:仅保存最终checkpoint
  • notest:仅测试最后的epoch
  • evolve:进化超参数
  • bucket:gsutil bucket
  • cache-images:缓存图像以加快训练速度
  • weights:权重文件路径
  • name: 重命名results.txt to results_name.txt
  • device:cuda device, i.e. 0 or 0,1,2,3 or cpu
  • adam:使用adam优化
  • multi-scale:多尺度训练,img-size +/- 50%
  • single-cls:单类别的训练集