Понимание mxnet.image.ImageDetIter

#python #object-detection #mxnet

#python #обнаружение объекта #mxnet

Вопрос:

Я изучаю фреймворк MXNet и пытаюсь запустить пример обнаружения объекта с SSD:https://gluon.mxnet.io/chapter08_computer-vision/object-detection.html

Я использую графический процессор NVidia GTX 1050, 4 ГБ для обучения. Я работаю в Jupyter notebook. Версии: Python 3.6, MXNet 1.3.1.

В руководстве было сказано, что обучение с нуля занимает около 30 минут с одним графическим процессором. Я остановился через 3 часа. Модель обработала 24459 пакетов (размер пакета равен 32), когда я прервал обучение. Весь набор данных имеет размер 87,7 МБ, что меньше, чем 24459*32*256*256 (размер изображения 256×256). Я не могу понять, почему это может занять слишком много времени. Возможно, существуют какие-либо особые функции image.ImageDetIter (например, тот, который никогда не останавливается сам по себе)?

Ответ №1:

Спасибо за включение информации о версии. Вы абсолютно правы — в MXNet 1.3.0 была ошибка, из-за которой ImageDetIter в приведенном вами примере выполнялся бесконечный цикл. Это было исправлено в декабре 2018, и если вы обновитесь до MXNet 1.4.0, вы не увидите проблемы. Я подтвердил это, запустив приведенный выше код.

Еще одно важное замечание: «Глубокое обучение — прямой допинг» устарело в пользу (Погружение в глубокое обучение](d2l.ai ). Контент обновлен и используется для курса в MXNet.Вот соответствующая глава в книге.

Кроме того, видеоролики с курса размещены здесь, если вы хотите их посмотреть.

Что касается воспроизведения, я запустил и подтвердил, что это бесконечно повторялось в 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
  

Надеюсь, это поможет,

Вишал