了解 mxnet.image.ImageDetIter

Understanding mxnet.image.ImageDetIter

我学习 MXNet 框架并尝试 运行 使用 SSD 进行对象检测的示例: https://gluon.mxnet.io/chapter08_computer-vision/object-detection.html

我使用的 GPU 是 NVidia GTX 1050,4GB 用于训练。我在 Jupyter 笔记本上工作。版本:Python 3.6,MXNet 1.3.1。

教程中说使用一个 GPU 从头开始​​训练大约需要 30 分钟。 3小时后我停了下来。当我中断训练时,模型已经处理了 24459 个批次(批次大小为 32)。整个数据集的大小为 87.7MB,小于 24459*32*256*256(图像大小为 256x256)。我不明白为什么它可能需要太多时间。 image.ImageDetIter 是否有任何特殊功能(例如,它永远不会自行停止)?

感谢您提供版本信息。您完全正确 - MXNet 1.3.0 中存在一个错误,其中 ImageDetIter 在您的示例中无限期循环。此问题已修复 Dec 2018,如果您升级到 MXNet 1.4.0,您将不会看到该问题。我通过 运行 上面的代码确认了这一点。

另一个重要说明,"Deep Learning - The Straight Dope" 已被弃用,取而代之的是 (Dive into Deep Learning)(d2l.ai)。内容已更新并用于课程MXNet.这里是书中对应的chapter.

此外,如果您想观看课程视频,我们会发布 here

至于重现,我 运行 并确认这是在 1.3.x 中无限循环并在 1.4.0.

中修复
train_iter = image.ImageDetIter(
        batch_size=1000, 
        data_shape=(3, data_shape, data_shape),
        path_imgrec='./data/pikachu_train.rec',
        path_imgidx='./data/pikachu_train.idx',
        #shuffle=True, 
        #mean=True,
        #rand_crop=1, 
        min_object_covered=0.95,
        last_batch_handle='pad',
        max_attempts=5)
train_iter.reset()
for i,data in enumerate(train_iter):    
    print((i+1)) # goes forever on 1.3.0 but not 1.4.0

希望对您有所帮助,

维沙尔