Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教关于 batch_size 的设定问题 #51

Open
canglangzhige opened this issue Apr 19, 2023 · 6 comments
Open

请教关于 batch_size 的设定问题 #51

canglangzhige opened this issue Apr 19, 2023 · 6 comments

Comments

@canglangzhige
Copy link

canglangzhige commented Apr 19, 2023

非常感谢您的工作!
配置文件中的 “batch_size: 4 # batch size for training (bs12 for 1GPU)” ,请问这里设定的batch_size是一张卡的量吗?
我设定 batch_size: 8 --nproc_per_node=8,可以占满8张 2080 Ti。
但是 batch_size: 64(8x8) --nproc_per_node=8,显存就不足了。
但是 torch.utils.data.DataLoader()传入的 batch_size 不应该是总数,即 8x8=64 吗?
期待您的指教,谢谢!

@chunbolang
Copy link
Owner

感谢您对我们工作的关注!

  1. 是一张卡的量
  2. 传入的一张卡的bs

祝好,

@canglangzhige
Copy link
Author

canglangzhige commented Apr 24, 2023

感谢您的回复,还有几个问题向您请教:

  1. 为何输入的图像尺寸是单数(417、473),即8的倍数+1,然后在代码中又进行了处理。直接使用 480、640等8的倍数不行吗?

  2. 训练 Base Learner (PSPNet)的 mIoU 您那边能达到多少,我一直达不到很高的精度,比如在 split0上也就0.5左右。而 PSPNet 论文中在完整 PASCAL VOC 2012 数据集上 mIoU 可以达到 0.854。这是什么原因呢?您实验中能达到多少呢?

  3. 对于每个 split 和 1-shot/5-shot是否需要单独训练和测试,即:
    1)选择split=0,首先训练第一阶段(Base Learner ),指定shot = 1, 然后训练第二阶段,最后测试 split=0 shot=1的结果;
    指定shot = 5, 然后训练第二阶段,最后测试 split=0 shot=5的结果。
    2)选择split=1,首先训练第一阶段(Base Learner ),指定shot = 1, 然后训练第二阶段,最后测试 split=1 shot=1的结果;
    指定shot = 5, 然后训练第二阶段,最后测试 split=1 shot=5的结果。
    .......

感谢您不吝赐教,非常感谢!

@chunbolang
Copy link
Owner

您好,

  1. 这一部分沿用了PFENet、PSPNet的设置,使用480等尺寸应该也是可行的,但需要注释掉一些assert代码。
  2. 我训练的模型精度在60~70之间,可以参考这个issue
  3. 可以不单独训练,但实验结果表明单独训练5-shot模型效果会更好噢~

祝好,

@canglangzhige
Copy link
Author

canglangzhige commented Apr 25, 2023

非常感谢!但是我还是有点不明白,希望得到师兄的进一步指导:

对于问题 2,我使用您提供的PSPNet权重 基础上又训练了100个epoch,但是miou只有0.5左右。在此基础上训练整个小样本网络,miou 0.4+。这很奇怪,不知道为啥。

对于问题3,如果不单独再训练的话,怎么得出在其它 split 上的结果呢?我的意思是对于每一个 split(split和fold是一个概念吗),是否需要将stage1、stage2的训练过程都进行一遍。也就是split=0 1 2 3,因此需要训练四次,这样才能得到您论文中 Fold-0 Fold-1 Fold-2 Fold-3 四个结果?

@chunbolang
Copy link
Owner

您好,

  1. 目前我也不是很清楚,您可以按我们的配置尝试重新训练base-learner。
  2. 抱歉我之前没有表述清楚,每个split肯定需要单独训练,否则类别信息就泄露了。另外,split和fold是一样的含义。

@chunbolang
Copy link
Owner

不同split间没有联系,可以简单地将它们认为是不同的数据集。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants