我想向网络提供许多训练图像,这些图像是按照某些采样规则从数据集中采样的。现在我有两个选择:
-
使用采样逻辑脱机生成图像列表,然后将 .lst 文件转换为 .rec 文件,并使用顺序 DataIter 访问它。
-
编写我自己的 DataIter 子类,可以在线对图像进行采样。因此,该类需要支持随机访问,可能继承自MXIndexedRecordIO。我需要为原始数据集创建一个 .rec 文件。
我的直觉告诉我,顺序访问将比 .rec 文件的随机访问更快。但我不知道差异是否大到值得我花额外的时间来编写和测试我自己的迭代器类。谁能给我一个提示?
在您的情况下,最好使用 MXRecordIO 预打包图像。它将提高性能,并在处理数据集的方式上引入一致性。
它将文件作为列表存储在.rec文件中,其中顺序很重要
然后,您可以使用 mxnet.image.ImageIter 按顺序迭代 .rec。
http://mxnet.io/api/python/io.html#mxnet.image.ImageIter
由于这是一个关于性能的问题,我想这取决于您的网络处理图像的速度,而这又取决于您运行训练的硬件。