使用MxNet数据迭代器进行顺序与随机访问的I / O性能差异?

时间:2017-07-15 02:11:01

标签: mxnet

我想通过遵循某些采样规则向网络提供从数据集中采样的许多训练图像。现在我有两个选择:

  1. 使用采样逻辑离线生成图像列表,然后将.lst文件转换为.rec文件,并使用顺序DataIter访问它。

  2. 编写我自己的可以在线采样图像的DataIter子类。因此,该类需要支持随机访问,可能继承自MXIndexedRecordIO。我需要为原始数据集创建一个.rec文件。

  3. 我的直觉告诉我,顺序访问比.rec文件的随机访问更快。但是,我不知道差异是否足够大,值得花费额外的时间来编写和测试我自己的迭代器类。任何人都可以给我一个暗示吗?

2 个答案:

答案 0 :(得分:0)

由于这是关于性能的问题,我想这取决于您的网络处理图像的速度,而这又取决于您正在进行培训的硬件。

答案 1 :(得分:0)

在您的情况下,最好使用MXRecordIO预先包装图像。它将为您提供性能提升,并在处理数据集方面引入一致性。

它会将文件作为列表存储在.rec文件中,其中顺序很重要

然后,您可以使用mxnet.image.ImageIter按顺序迭代.rec。

http://mxnet.io/api/python/io.html#mxnet.image.ImageIter