源码链接: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:单类别的训练集