rayleizhu / BiFormer

[CVPR 2023] Official code release of our paper "BiFormer: Vision Transformer with Bi-Level Routing Attention"
https://arxiv.org/abs/2303.08810
MIT License
460 stars 36 forks source link

分割模型单卡训练 #34

Closed taoxingwang closed 9 months ago

taoxingwang commented 9 months ago

作者您好,对于您所做的工作表示感谢。我在复现biformer中语义分割代码时,按照github上您的建议,进行修改slurm_train.sh使得我能都在单机单卡上运行。运行sfpn.biformer_small.py,结束后我只取得了miou为42.7的结果,与您的miou=48.9相差较大。请问您对于单机分割模型单卡训练参数修改有什么建议吗?期待您的回信。

rayleizhu commented 9 months ago

由于是step schedule, 如果你没有改动其它参数, 相比于多卡,单卡训练时:

  1. batch size减小到了1/8
  2. 训练数据量(scanned images)减小到了1/8

1似乎没有什么很好的方法解决,2倒是可以通过将步数增加至8倍看看。

taoxingwang commented 9 months ago

非常感谢您的回复,感谢您给出的建议,我将尝试进行调整。

taoxingwang commented 8 months ago

作者您好,我已经使用单卡进行训练,我将原始的samples_per_gpu=4更改为samples_per_gpu=8。并且将其中 原始 经过修改成 修改后 最终取得了最高为49.2的mIoU结果。 对于修改部分我有一些疑问希望您能解答。 1、由于我是使用单卡我将batch size设置为8,按您之前的建议我应当将保持训练的数据量,所以我将迭代次数设置为32w这样的操作是正确的吗? 2、对于您提出的:we use 8 gpu instead of 4 in mmsegmentation, so lr*2 and max_iters/2。我在设置学习率时是按照与迭代次数成反比的关系进行取值的,请问您这样的取值是否是正确的。 3、您对于对于学习率的设置是按照batch size 还是迭代次数,或者是gpu数量。 希望您对于我的修改给出您的宝贵建议,期待您的回复。

rayleizhu commented 8 months ago

1、由于我是使用单卡我将batch size设置为8,按您之前的建议我应当将保持训练的数据量,所以我将迭代次数设置为32w这样的操作是正确的吗?

bs8*32w step = bs4*8gpus*8w step, 数据量一致,所以没有问题

2、对于您提出的:we use 8 gpu instead of 4 in mmsegmentation, so lr*2 and max_iters/2。我在设置学习率时是按照与迭代次数成反比的关系进行取值的,请问您这样的取值是否是正确的。 3、您对于对于学习率的设置是按照batch size 还是迭代次数,或者是gpu数量。

根据论文Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour中的 linear scaling rule,学习率应该与effective batch size (gpus*batch_size)成正比。不过既然训练出来的结果达到预期,也不一定要完全保持一致。深度学习的学习率多少有点玄学在里面,天知道哪个最好。

taoxingwang commented 8 months ago

非常感谢您的解答。