From c8d812ed8b1b1d696383b223888355119a7e249f Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Mon, 21 Feb 2022 14:23:27 +0100 Subject: [PATCH] Switch default LR scheduler from cos to linear (#6729) * Switch default LR scheduler from cos to linear Based on empirical results of training both ways on all YOLOv5 models. * linear bug fix --- train.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/train.py b/train.py index 2eec9304abf3..88586fde395e 100644 --- a/train.py +++ b/train.py @@ -176,10 +176,10 @@ def train(hyp, # path/to/hyp.yaml or hyp dictionary del g0, g1, g2 # Scheduler - if opt.linear_lr: - lf = lambda x: (1 - x / (epochs - 1)) * (1.0 - hyp['lrf']) + hyp['lrf'] # linear - else: + if opt.cos_lr: lf = one_cycle(1, hyp['lrf'], epochs) # cosine 1->hyp['lrf'] + else: + lf = lambda x: (1 - x / epochs) * (1.0 - hyp['lrf']) + hyp['lrf'] # linear scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) # plot_lr_scheduler(optimizer, scheduler, epochs) # EMA @@ -479,7 +479,7 @@ def parse_opt(known=False): parser.add_argument('--name', default='exp', help='save to project/name') parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') parser.add_argument('--quad', action='store_true', help='quad dataloader') - parser.add_argument('--linear-lr', action='store_true', help='linear LR') + parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler') parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon') parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)') parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')