xg-chu/CrowdDet

分布式训练的时候没有使用分布式的sampler

Closed this issue · 8 comments

您好 我最近在您的代码上做一下实验,但是我发现在train.py中,您似乎没有给dataloader提供distributed sampler,这样会导致每张卡可能会获得同样的图片作为训练数据,那么有可能有些图片就一直训练不到,这是否对crowdhuman的训练造成影响呢?

每个dataloader是每张卡的子进程分别初始化的,不会获得同样的图片。如果每张卡都获得同样的训练图片,会出现严重的掉点。

额 我做了一个实验 如果把shuffle设为False,打印数据集取到的图片,每张卡对应的id是一样的诶...我的意思是 不一定重复 但是每张卡的dataiter都只在数据集里随机取1/num_gpu的图片 但是一个epoch跑完应该并不保证每张卡拿到的图片不重复

shuffle都设置false了当然是顺序取图片啊

举个例子来说吧 比如我有 [1,2,3,4,5,6,7,8]这么多图 拿两张卡训练 每张卡放两张图 那么iter_per_epoch=8 / (2 * 2) = 2,对于第一张卡来说 它会每次随机取两次,每次取两张图,比如两次分别取了[1,3], [5,4],然后第二张卡它也跟第一张卡一样 随机取了两次,两次取到的id是[2,3],[7,8] 那么第6张图片就不会在这个epoch被任何一张卡训练到

每个epoch过程中确实不保证遍历整个数据集,但是由于每张卡自行shuffle,各自train几个epoch后,每张卡都会独立的遍历一遍数据集。比如使用8卡,那么8个epoch后,每张卡都遍历了整个数据集。

懂了~哈哈哈 这种写法好奇怪啊 感谢解答~

对点数影响极小,写起来又方便😉

学习了😎