iter_per_epoch
PeiChiChen opened this issue · 2 comments
PeiChiChen commented
您好,
想請問iter_per_epoch應該代表的是training set裡image數量嗎?
在citypersons裡面iter_per_epoch是2000,
但是citypersons的training set應該有2975張image,
所以想確認一下,
感謝!
lmy98129 commented
您好,这个设置是继承自本文的baseline方法CSP的固有代码设置。请参见以下代码:
- CSP官方代码:https://github.com/liuwei16/CSP/blob/master/keras_csp/config.py#L8
- 本文使用的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,建议您发邮件联系我们,回复的即时性会好一些。
刘孟寅
PeiChiChen commented
了解了,感謝!