YOLOv3官方版本的学习率配置信息在模型配置文件 *.cfg file 中:
- learning_rate: 标准学习率
- burn_in: 学习率从 0 上升到 learning_rate 的 batch 数目
- max_batches: 需要进行训练的 batch 数目
- policy: 学习率调度的策略
- steps: 在何处进行学习率衰减
- scales: 学习率进行衰减的倍数
这个YOLO关于学习率调度的的代码设置在 train.py 中,设置标准学习率和最终的学习率分别为参数hyp['lr0'] 和 hyp['lrf'],其中最终的学习率 final LR = hyp['lr0'] * (10 ** hyp['lrf'])。例如,标准学习率 hyp['lr0'] = 0.001, hyp['lrf'] = -2,因此 final LR = 0.00001.下面这张图显示了Pytorch中的两个常用的学习率调度方法。其中YOLO原版采用的是 MultiStepLR scheduler。我们可以根据自己需要对学习率进行调整。
YOLO会对前面1000个batch进行学习率warm up:
# SGD burn-in
if epoch == 0 and i <= n_burnin:
lr = hyp['lr0'] * (i / n_burnin) ** 4
for x in optimizer.param_groups:
x['lr'] = lr
不过代码里默认是注释掉了,如果使用的话需要打开以下