Маска R-cnn / UnboundLocalError: локальная переменная 'id изображения', на которую ссылается перед назначением - PullRequest
1 голос
/ 26 февраля 2020

Я пытался запустить Mask R-CNN для небольшого пользовательского набора данных (изображения +. json полигональные данные, преобразованные в бинарные маски) в Google Colab (скрипт представляет собой смесь различных учебных пособий с использованием Mask R -CNN / Matterport репо на github). Все работает до тех пор, пока не будет обучена голова - модель работает до первой эпохи, а затем выдает «UnboundLocalError: локальная переменная 'image_id', на которую ссылаются перед присваиванием" (ошибка прилагается) / генератор данных - zeroDivisionError

Где это происходит в коде: training_heads_first

Код ошибки:

Starting at epoch 0. LR=0.001

Checkpoint Path: logs/pipes20200225T2257/mask_rcnn_pipes_{epoch:04d}.h5
Selecting layers to train
fpn_c5p5               (Conv2D)
fpn_c4p4               (Conv2D)
fpn_c3p3               (Conv2D)
fpn_c2p2               (Conv2D)
fpn_p5                 (Conv2D)
fpn_p2                 (Conv2D)
fpn_p3                 (Conv2D)
fpn_p4                 (Conv2D)
In model:  rpn_model
    rpn_conv_shared        (Conv2D)
    rpn_class_raw          (Conv2D)
    rpn_bbox_pred          (Conv2D)
mrcnn_mask_conv1       (TimeDistributed)
mrcnn_mask_bn1         (TimeDistributed)
mrcnn_mask_conv2       (TimeDistributed)
mrcnn_mask_bn2         (TimeDistributed)
mrcnn_class_conv1      (TimeDistributed)
mrcnn_class_bn1        (TimeDistributed)
mrcnn_mask_conv3       (TimeDistributed)
mrcnn_mask_bn3         (TimeDistributed)
mrcnn_class_conv2      (TimeDistributed)
mrcnn_class_bn2        (TimeDistributed)
mrcnn_mask_conv4       (TimeDistributed)
mrcnn_mask_bn4         (TimeDistributed)
mrcnn_bbox_fc          (TimeDistributed)
mrcnn_mask_deconv      (TimeDistributed)
mrcnn_class_logits     (TimeDistributed)
mrcnn_mask             (TimeDistributed)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gradients_impl.py:110: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
  "Converting sparse IndexedSlices to a dense Tensor of unknown shape. "
/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py:49: UserWarning: Using a generator with `use_multiprocessing=True` and multiple workers may duplicate your data. Please consider using the `keras.utils.Sequence class.
  UserWarning('Using a generator with `use_multiprocessing=True`'
Epoch 1/10
---------------------------------------------------------------------------
RemoteTraceback                           Traceback (most recent call last)
RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/mrcnn/model.py", line 1695, in data_generator
    image_index = (image_index + 1) % len(image_ids)
ZeroDivisionError: integer division or modulo by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "/usr/local/lib/python3.6/dist-packages/keras/utils/data_utils.py", line 641, in next_sample
    return six.next(_SHARED_SEQUENCES[uid])
  File "/usr/local/lib/python3.6/dist-packages/mrcnn/model.py", line 1805, in data_generator
    dataset.image_info[image_id]))
UnboundLocalError: local variable 'image_id' referenced before assignment
"""

The above exception was the direct cause of the following exception:

UnboundLocalError                         Traceback (most recent call last)
<ipython-input-21-0da65da78eb9> in <module>()
----> 1 model.train(dataset_train, dataset_val, epochs=10,layers="heads", learning_rate=config.LEARNING_RATE)

10 frames
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py in data_generator()
   1803             # Log it and skip the image
   1804             logging.exception("Error processing image {}".format(
-> 1805                 dataset.image_info[image_id]))
   1806             error_count += 1
   1807             if error_count > 5:

UnboundLocalError: local variable 'image_id' referenced before assignment

Я проверил файл. json, это не пусто, данные, похоже, загружены правильно.

Я не совсем уверен, имеет ли это какое-либо отношение к настройке в коде в целом, или это как-то связано с библиотекой mrcnn. Любой совет о том, как справиться с этим, был бы очень полезен!

Я поделюсь записной книжкой Colab здесь для справки: https://colab.research.google.com/drive/1vWoBwbcie68J8UYcIEFd4ApYbdsHb1ot

...