lmy98129/VLPD

iter_per_epoch

PeiChiChen opened this issue · 2 comments

您好,
想請問iter_per_epoch應該代表的是training set裡image數量嗎?
在citypersons裡面iter_per_epoch是2000,
但是citypersons的training set應該有2975張image,
所以想確認一下,
感謝!

您好,这个设置是继承自本文的baseline方法CSP的固有代码设置。请参见以下代码:

  1. CSP官方代码:https://github.com/liuwei16/CSP/blob/master/keras_csp/config.py#L8
  2. 本文使用的PyTorch版本CSP代码:https://github.com/ligang-cs/CSP-Pedestrian-detection/blob/master/config.py#L10

另外,以下是我个人的理解,仅供参考:

  • 事实上,因为所有版本的代码都设置了随机shuffle,相当于每个epoch的训练数据都是随机打乱顺序的,前2000张都是2975张中不同的2000张,不存在直接丢弃某一部分数据、在所有epoch中都不再训练的情况。
  • 例如,CSP官方代码是自己写的data_generator,带有随机shuffle功能,参见这段代码
  • 同时,PyTorch的DDP多卡训练机制中,DistributedSampler用于分配各GPU数据,其默认参数为shuffle=True,所以我们无需自己写随机shuffle。DistributedSampler和DataLoader的shuffle冲突(参见PyTorch的这行源码),因此本项目的这段代码没有显式地给出shuffle=True,反而需要设置DataLoader的shuffle=False
  • 当然,PyTorch文档里面明确了,DataLoader的shuffle默认参数就是False,所以testloader也直接没给shuffle的设置。虽然测试的时候打乱不影响结果,但多一步操作没必要。
  • 至于具体设置2000的理由,可以询问CSP原作者,我对此也不是很了解。主要是为了公平比较,只能继承这个设置。

如果我们事情比较多,可能会很久没回issue,建议您发邮件联系我们,回复的即时性会好一些。

刘孟寅

了解了,感謝!