源码链接:https://github.com/ultralytics/yolov5/blob/master/train.py
使用字典存储模型的超参数
# 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获取命令行参数
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:单类别的训练集