mindyolo icon indicating copy to clipboard operation
mindyolo copied to clipboard

关于默认使用学习率,使用的是一个固定学习率?

Open WangFengtu1996 opened this issue 10 months ago • 3 comments

  • 从下面这个函数来看, 这个学习率使用的是固定学习率? https://github.com/mindspore-lab/mindyolo/blob/8228636c35b52d571d63713af7f2eb199e2698c1/mindyolo/optim/scheduler.py#L7

  • 在log 中的学习率,是一个动态变化的学习率 image

  • 在gpu上 visdrone yolov5 loss 一直不下降 image

WangFengtu1996 avatar Apr 02 '24 11:04 WangFengtu1996

每个模型都有自己的学习率衰减策略,GPU上的性能没有全量验证过

yuedongli1 avatar Apr 03 '24 06:04 yuedongli1

我这边没理解哈,因为我看这个学习率除了yolox 外,送给nn.Momentum 全部是一个 固定的学习率呗, 这个是怎么衰减的呢?

我这边也尝试将下面生成的学习率送进去 nn.Momentum , 但是得到的学习率,画出来的结果完全是一样的

def linear_warmup_lr(current_step, warmup_steps, base_lr, init_lr):
    """Linear learning rate."""
    lr_inc = (float(base_lr) - float(init_lr)) / float(warmup_steps)
    lr = float(init_lr) + lr_inc * current_step
    return lr

def warmup_cosine_annealing_lr(lr, steps_per_epoch, warmup_epochs, max_epoch, T_max, eta_min=0):
    """Cosine annealing learning rate."""
    # TODO checke input type
    base_lr = lr
    warmup_init_lr = 0
    total_steps = int(max_epoch * steps_per_epoch)
    warmup_steps = int(warmup_epochs * steps_per_epoch)

    lr_each_step = []
    for i in range(total_steps):
        last_epoch = i // steps_per_epoch
        if i < warmup_steps:
            lr = linear_warmup_lr(i + 1, warmup_steps, base_lr, warmup_init_lr)
        else:
            lr = eta_min + (base_lr - eta_min) * (1. + math.cos(math.pi * last_epoch / T_max)) / 2
        lr_each_step.append(lr)

    return np.array(lr_each_step).astype(np.float32)

可以看下这个link https://www.hiascend.com/forum/thread-0294147492002755003-1-1.html

WangFengtu1996 avatar Apr 03 '24 07:04 WangFengtu1996

可以看下这个函数 里面对不同的模型做了不一样的 权重分组和学习率衰减策略 https://github.com/mindspore-lab/mindyolo/blob/master/mindyolo/optim/group_params.py#L8

zhanghuiyao avatar Apr 07 '24 07:04 zhanghuiyao