YOLOv5 训练技巧(四)

目录

学习率调整策略

训练预热 Warmup余弦退火调整学习率 CosineAnnealingLR

自动调整锚框(Autoanchor)

超参数进化(hyperparameter evolution)

自动混合精度训练

断点续训

学习率调整策略

训练预热 Warmup

刚开始训练时,模型权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡)
选择 Warmup 预热学习率的方式,可以使得开始训练的几个 epochs 或者一些 steps 内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后在选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。

从图中可以看出,前 30 个 epochs 可以认为是一个预热过程(Warmup),在预热的时候可以看到刚开始学习率非常之小,慢慢地学习率会有增加。

余弦退火调整学习率 CosineAnnealingLR

参考论文:https://arxiv.org/pdf/1608.03983.pdf

在训练过程中,每个批次的训练通过余弦退火的方式来更新学习率。

图 a 可以看出学习率的变化,这里既有 warmup,又有余弦退火的学习率调整方式。刚开始的时候,warmup 从学习率非常小到0.4,从 0.4 开始进行余弦退火方式调整学习率。
蓝色的虚线是 step Decay 方式,通过隔一定epochs进行跳变调整学习率

自动调整锚框(Autoanchor)

Anchor 给出了目标宽高的初始值,需要回归的是目标真实宽高与初始宽高的偏移量,而不使用Anchor 的做法需要回归宽高的绝对量

Autoanchor only runs when the best possible recall (BPR,最大可能召回率) is under threshold.
You can disable autoanchor with python train.py --noautoanchor

自动计算出的锚框信息,会自动保存在权重文件中

超参数进化(hyperparameter evolution)

超参数调整采用传统的方式是比较繁琐的,YOLOv5 采用的是类似遗传算法(只有选择和变异的操作)。

自动混合精度训练

自动混合精度训练:Automatic mixed precision(AMP) training

torch.FloatTensor 为32位浮点运算FP32,torch.HalfTensor 为16位浮点运算FP16

AMP 自动对Tensor的dtype类型进行变化,也就是框架按需自动调整tensor的dtype(FP16、FP32)(其实不是完全自动,有些地方还是需要手工干预)

断点续训

比如断电的时候,导致训练中断,为了不重新训练,我们可以用 --resume 来重新开始训练,也就是在上一次 last.pt 基础上进行继续训练

resume 后面不加参数的话,会从最新的 last.pt 开始训练
python train.py  --resume  

加具体的模型路径,则会从该模型的基础上继续训练
python train.py --resume runs/exp0/weights/last.pt  # resume from specific weights

猜你喜欢

转载自blog.csdn.net/weixin_44227733/article/details/124151340