gangweiX / IGEV

[CVPR 2023] Iterative Geometry Encoding Volume for Stereo Matching and Multi-View Stereo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

训练自己的数据集出现Nan

zhangshaojie1993 opened this issue · comments

每次在训练到接近8K iterations的时候都会出现loss为Nan的情况,数据集里有自己业务的数据。
nan

学习率太高了吗?导致梯度爆炸?

学习率太高了吗?导致梯度爆炸?
用的作者默认的学习率

学习率太高了吗?导致梯度爆炸?
用的作者默认的学习率

那我不太懂了。我训练也出问题了,我准备重新训练的,目前联系作者联系不上,可能他太忙了。我训练的时候,loss是稳定上升,最后趋于收敛了,我也搞不懂原因
image

scene2
@gangweiX 我只使用sceneflow数据集训练了一把,还是出现了nan,使用的是作者训练代码里的默认参数,能帮忙解答一下吗?

你好,你的问题可能有三种原因:

  1. 在不同设备上,seed即便相同初始化可能也会不同,可以尝试改一下seed;
  2. 半精度混合训练虽然提高了训练速度,但只有16bit,当数据过大时,容易发生溢出,出现nan,可以尝试关闭;(在train._stereo.py第206行,把mixed_precision的default参数删除,不要把default设置为False,参数判断的是有无字符串)
  3. 初始视差用的smooth_l1_loss监督,其余视差用的l1_loss监督,不同loss可能影响训练的稳定性,可以尝试都换成l1_loss。

另外,我建议可以直接加载sceneflow的预训练模型,然后在自己的数据集上训练,避免重新训练造成的不稳定。

你好,你的问题可能有三种原因:

1. 在不同设备上,seed即便相同初始化可能也会不同,可以尝试改一下seed;

2. 半精度混合训练虽然提高了训练速度,但只有16bit,当数据过大时,容易发生溢出,出现nan,可以尝试关闭;(在train._stereo.py第206行,把mixed_precision的default参数删除,不要把default设置为False,参数判断的是有无字符串)

3. 初始视差用的smooth_l1_loss监督,其余视差用的l1_loss监督,不同loss可能影响训练的稳定性,可以尝试都换成l1_loss。

另外,我建议可以直接加载sceneflow的预训练模型,然后在自己的数据集上训练,避免重新训练造成的不稳定。

非常感谢!!我后来就是用的sceneflow预训练模型来训练的,并且学习率调成了之前的1/10,训练变稳定了!

你好,我在复现论文时发现训练过程中会出现nan,所以我在代码中添加以下代码(图中画圈的)想要查看跑到第几个epoch时会出现nan。然后,我发现在训练一开始就有参数的梯度是nan,请问这是正常的吗?
image

感谢您之前的回复,我还有一个小问题想要请教:就是关于训练参数--slow_fast_gru的设置,我看这个参数在前身RAFT-Stereo中说可以提高计算速度,但是在您的论文并没有提到这点,在代码中这参数也是默认为false的。请问这个参数我要设置为true还是保持默认就好?

作者您好,我在sceneflow数据集上训练您的模型时,发现如果将lr设置为0.001,batchsize=2,然后跑到5k步左右的时候,3像素偏差会出现nan,我想咨询一下,如果batchsize设置只能是2的话,如果让网络可以快速下降,lr应该设置为多少呢