目标检测改进方法:Bag of Freebies for Training Object Detection Neural Networks

论文:Bag of Freebies for Training Object Detection Neural Networks
论文链接:https://:.org/abs/1902.04103

参考:https://blog.csdn.net/u014380165/article/details/88011833

 

按照我学习的过程:(实现的难易程度,哈哈哈)

1、lr采用 cosine+warm up

在神经网络训练的后期:如果学习率过高,会造成loss的振荡;但是如果学习率减小的过快,又会导致收敛变慢的问题。

lr 的改进方法:1)仅衰减    2)  衰减-》增加-》衰减-》增加 -》...    3)switch adam to sgd

1)仅衰减:

      原因:在采用批次随机梯度下降算法时,神经网络应该越来越接近Loss值的全局最小值。当它逐渐接近这个最小值时,学习率应该变得更小来使得模型不会超调且尽可能接近这一点。

      方法:随步数衰减 (在n步之后学习率变为原来的百分之m) ; 指数衰减 (α=α0e−kt);1/t衰减 (α=α0/(1+kt));余弦退火(   lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=5,eta_min=4e-08  )

2)衰减-》增加-》衰减-》增加 -》...  :

     原因:神经网络在训练过程中容易陷入局部最优值,通过突然提高学习率来跳出局部最优值并找到通向全局最优值的路径。

    方法:CLR(https://github.com/anandsaha/pytorch.cyclic.learning.rate)以一个(step_size1+step_size2)为一个周期。其中step_size1的lr以k1为系数线性增加 从min增加到max, step_size2的lr以k2为系数线性减少,从max减少到min。 

               SGDR通过梯度下降过程中突然提高学习率来跳出局部最优值并找到通向全局最优值的路径。这种方式称为带重启的随机梯度下降。

3)switch adam to sgd : 前期用Adam优化器,迅速收敛,后期切换到SGD,慢慢寻找最优解。

本文:(个人觉得使用warm up + adam->sgd + cosine)是最好的方法。

代码:(Pytorch)

optimizer = optim.Adam(net.parameters(), lr=args.lr, momentum=args.momentum,
                      weight_decay=args.weight_decay)
def adjust_learning_rate(optimizer, gamma, epoch_size,iteration,cfg): 
    if iteration//epoch_size ==50 :
        optimizer = optim.SGD(net.parameters(), lr=args.lr, momentum=args.momentum, weight_decay=args.weight_decay)
    if iteration//epoch_size < 6:
        lr = 1e-6 + (args.lr - 1e-6) * iteration / (epoch_size * 6)
        for param_group in optimizer.param_groups:
                param_group['lr'] = lr
    else if:
        if iteration in cfg['lr_steps']:  #list
            j=cfg['lr_steps'].index(iteration)
            lr = args.lr * (gamma ** (j+1))
            for param_group in optimizer.param_groups: 
                param_group['lr'] = lr
    else:
        lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=5,eta_min=4e-08)
        lr_scheduler.step()

              

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值