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

I/O performance difference for sequential vs random acess with MxNet data iterators?

我想向网络提供许多训练图像,这些图像是按照特定的采样规则从数据集中采样的。现在我有两个选择:

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

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

我的直觉告诉我顺序访问比随机访问 .rec 文件要快。但我不知道差异是否大到值得我花额外的时间来编写和测试我自己的迭代器 class。谁能给我一些提示?

因为这是一个关于性能的问题,我想这取决于你的网络处理图像的速度,而这又取决于你使用的是什么硬件运行你的训练。

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

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

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

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