YOLOV7L训练损失为NAN YOLOV8L训练损失不下降
Closed this issue · 2 comments
采用yolov-tiny训练BDD100K数据集可以正常训练,但是由于模型太小,最后验证集精度比较低,IoU=0.50:0.95 在0.29-0.30附近,想用大点的模型重新训练。
但是在数据集相同的条件下,换用yolov7l直接损失为nan;换用yolov8l损失一直不下降。
请问我该采用什么策略,才能使用yolov7l或者yolov8l正常训练。
训练环境为GPU mindspore==2.0.0
如果需要调节学习率,请帮忙解释一下下面的学习率参数的意义,以及该如何调节?(以yolov7l为例)
optimizer:
optimizer: momentum
lr_init: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
momentum: 0.937 # SGD momentum/Adam beta1
nesterov: True # update gradients with NAG(Nesterov Accelerated Gradient) algorithm
loss_scale: 1.0 # loss scale for optimizer
warmup_epochs: 3 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
min_warmup_step: 1000 # minimum warmup step
group_param: yolov7 # group param strategy
gp_weight_decay: 0.0005 # group param weight decay 5e-4
start_factor: 1.0
end_factor: 0.01
参数分组学习率计算参考如下,可以通过调整参数(lr_init
、start_factor
、end_factor
、warmup_bias_lr
)等进行控制:
https://github.com/mindspore-lab/mindyolo/blob/master/mindyolo/optim/group_params.py#L8
另外调整学习率的时候同时可以注意一下,实际计算 loss
的时候会将loss放大 rank_size
倍
https://github.com/mindspore-lab/mindyolo/blob/master/train.py#L213
gpu版本当前还未支持,可能会存在一些问题,问题描述里面的 yolov7l loss 为nan的情况,可以查看出现 NaN 前一个step的梯度,确认是哪个算子最开始出现的 NaN;