解决模型训练loss nan的问题

用mmdetection训练检测模型时,出现了bbox_loss和cls_loss nan的问题,记录排查原因的过程,以及最终的解决。现象是,loss 在正常降低的过程中,突然跳变nan,整体震荡下降。

1. 调小学习率

一般出现loss nan,无非是网络传输的梯度过大导致的,所以首先考虑减小模型的学习率。可是学习率调小100倍甚至10000倍,还出现nan的情况,所以考虑其他原因导致。先排除学习率的影响,将学习率设为0,loss依旧nan,然后就可以尝试下一个了。

2. 梯度裁剪

在学习率为0的情况下,进行梯度裁剪。在模型配置里schedule_1x.py,加上grad_clip

optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))

依旧出现loss nan,这时有点蒙了。

3. 数据清洗

在github上看到有人分享经验,mmdetection v2版本,在gt的box和image的重叠区域为0时,会出现loss nan的情况,于是,我查了一边……庞!大!的!数据。发现,还真是数据出的问题。就是有11张图size很大的图在labelImg标注时,旋转了90度,也就是手机采集的竖长的图,到了LabelImg里变成横的了,标注的坐标信息也是这个横着的,而原图是竖着的,所以,标注的box在原图就有对不上的情况,处理掉这个,loss nan情况消失。

训练模型的时候,会遇到各种各样的问题,可能要调很多参数,要根据现象进行分析,把可能的原因都排查一遍,最直接的做法就是排除法,把最好排查的因素排除了,就会逐渐清晰。

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值