def build_lr_scheduler()

in solver/build.py [0:0]


def build_lr_scheduler(args, optimizer):

    if not hasattr(args, 'max_iters'):
        #important house-keeping stuff
        args.max_iters = args.n_iters_per_epoch * args.epochs
        
    if getattr(args, 'warmup_iters', None) is None:
        args.warmup_iters = args.n_iters_per_epoch * args.warmup_epochs

    warmup_iters = args.warmup_iters
    warmup_lr = float(getattr(args.lr_scheduler, 'warmup_lr', 0.001))
    warmup_method = getattr(args.lr_scheduler, 'warmup_method', 'linear')
    clamp_lr_percent = float(getattr(args.lr_scheduler, 'clamp_lr_percent', 0.))
    clamp_lr = args.lr_scheduler.base_lr * clamp_lr_percent

    if args.lr_scheduler.method == 'warmup_cosine_lr':
        return WarmupCosineLR(
                optimizer, 
                args.max_iters, 
                warmup_factor = warmup_lr,
                warmup_iters = warmup_iters,
                warmup_method = warmup_method,
                clamp_lr = clamp_lr,
        )
    elif args.lr_scheduler.method == 'warmup_exp_decay_lr':
        decay_cycle_iters = int(args.lr_scheduler.lr_decay_cycle * args.n_iters_per_epoch)
        total_decay_iters = args.n_iters_per_epoch * (args.epochs - args.warmup_epochs)
        milestones = [ warmup_iters + (idx + 1) * decay_cycle_iters \
                        for idx in range(total_decay_iters // decay_cycle_iters)]
        return WarmupMultiStepLR(
                optimizer,
                milestones,
                gamma=args.lr_scheduler.lr_decay_rate_per_cycle,
                warmup_factor = warmup_lr,
                warmup_iters = warmup_iters,
                warmup_method = warmup_method,
                clamp_lr = clamp_lr,
        )
    elif args.lr_scheduler.method == 'warmup_linear_lr':
        decay_cycle_iters = args.n_iters_per_epoch
        milestones = [ warmup_iters + (idx + 1) * decay_cycle_iters \
                        for idx in range(args.epochs - args.warmup_epochs)]
        return WarmupLinearDecayLR(
                optimizer, 
                milestones,
                warmup_factor = warmup_lr,
                warmup_iters = warmup_iters,
                warmup_method = warmup_method,
                clamp_lr = clamp_lr,
        )
    elif args.lr_scheduler.method == 'constant_lr':
        return ConstantLR(
                optimizer
        )
    else:
        raise NotImplementedError