ewrfcas / MVSFormer

Codes of MVSFormer: Multi-View Stereo by Learning Robust Image Features and Temperature-based Depth (TMLR2023)
Apache License 2.0
175 stars 10 forks source link

占用显存问题 #33

Open kk6398 opened 6 months ago

kk6398 commented 6 months ago

您好,我在复现mvsformer中TwinMVSNet模型时,用4张4090运行,在config_mvsformer.json文件中,将batchsize设置为4,也就是每张gpu分得的batch为1。即使这样,每张gpu显存占用也达到了23G【一共24G】。 请问,我如果在mvsformer工作基础上进行改进的话,就会因为显存不足而无法进行训练。请问有什么好的解决办法吗?

ewrfcas commented 6 months ago

您好,可以尝试略微降低最高分辨率的尺度,并不会对结果造成太大影响。高分辨的情况下即使只有batch=1大多数情况也是足够的(还有梯度累积存在),较低分辨率保证较大的batch即可。

ewrfcas commented 6 months ago

但是由于整个模型存在BN,所以梯度累积并不能完美等价代替大batch的训练,这里可能会存在略微的gap。

kk6398 commented 6 months ago

您好,可以尝试略微降低最高分辨率的尺度,并不会对结果造成太大影响。高分辨的情况下即使只有batch=1大多数情况也是足够的(还有梯度累积存在),较低分辨率保证较大的batch即可。

您好,感谢您的回复。请问,降低尺度,是指降低dtu训练集的尺度吗?将dtu训练集图像尺度改成与casmvsnet一样的640x512的尺度吗?

ewrfcas commented 6 months ago

您好,可以尝试略微降低最高分辨率的尺度,并不会对结果造成太大影响。高分辨的情况下即使只有batch=1大多数情况也是足够的(还有梯度累积存在),较低分辨率保证较大的batch即可。

您好,感谢您的回复。请问,降低尺度,是指降低dtu训练集的尺度吗?将dtu训练集图像尺度改成与casmvsnet一样的640x512的尺度吗?

修改config_mvsformer中的multi_scale_args(scales和scale_batch_map)。比如可以吧[1024,1280]去掉。

kk6398 commented 6 months ago

我尝试将[1024,1280]去掉后训练,但是出现了在Epoch0,iter200时,出现total_loss==0的情况,也报错误:

MVSFormer/trainer/mvsformer_trainer.py", line 184, in _train_epoch
scalar_outputs = {"loss": total_loss.item()}
AttributeError: 'float' object has no attribute 'item'

请问是什么原因呢?

ewrfcas commented 6 months ago

scale_batch_map里的1024也去掉了吗?这里是对应height的sub-batch

kk6398 commented 6 months ago

scale_batch_map里的1024也去掉了吗?这里是对应height的sub-batch 您好,我尝试将其删除还是不行。 然后我又尝试了将multi_scale_args中删除大于1280的尺度,i.e.【,[896,1280],[960,1216],[960,1280],[960,1344]】,并将scale_batch_map中的"1024": 1 也删除掉了,这时训练就没问题了。lol (T⌓T)