Обнаружение объекта Tensorflow - увеличение размера партии приводит к сбою - PullRequest
0 голосов
/ 29 января 2020

Я пытался обучить модель обнаружения объекта, используя API обнаружения объекта tenorflow.

Сеть хорошо работает, когда batch_size равно 1. Однако увеличение batch_size приводит к следующей ошибке после некоторых шагов.

Сеть: Быстрее RCNN

train_config: {
  batch_size: 1
  optimizer {
    momentum_optimizer: {
      learning_rate: {
        manual_step_learning_rate {
          initial_learning_rate: 0.0002
          schedule {
            step: 25000
            learning_rate: .00002
          }
          schedule {
            step: 50000
            learning_rate: .000002
          }
        }
      }
      momentum_optimizer_value: 0.9
    }
    use_moving_average: false
  }

Ошибка :

ИНФОРМАЦИЯ: tenorflow: Ошибка сообщена Координатору:, ConcatOp: Размеры входов должны совпадать: shape [0] = [1 841 600,3] против shape [3] = [1 776 600,3]
[[concat node (определено в / home) /<>/.virtualenvs/dl4cv/lib/python3.6/site-packages/object_detection-0.1-py3.6.egg/object_detection/legacy/trainer.py:190)]]
Возможно, возникли ошибки из операции ввода.
Операции ввода источника, подключенные к concat узла:
Preprocessor_3 / sub (определено в /home/<>/.virtualenvs/dl4cv/lib/python3.6/site-packages/object_detection- 0.1-py3.6.egg / object_detection / models / fast_rcnn_inception_v2_feature_extractor.py: 100)

Обучение с увеличенным batch_size работает на SSD mobil enet однако.
Пока я решил проблему для своего варианта использования, разместив этот вопрос в SO, чтобы понять причину такого поведения.

1 Ответ

1 голос
/ 29 января 2020

Только из-за ошибки кажется, что ваши отдельные входы имеют разные размеры. Я предполагаю, что он пытается объединить (ConcatOp) 4 отдельных входа в один тензор, чтобы создать мини-пакет в качестве ввода.

При попытке объединить, он имеет один вход с 841x600x3 и один вход с 776x600x3 ( игнорируется размер партии). Очевидно, что 841 и 776 не равны, но они должны быть. При размере пакета 1 функция concat, вероятно, не вызывается, поскольку вам не нужно объединять входные данные, чтобы получить мини-пакет. Также, похоже, нет другого компонента, который опирается на заранее определенный размер ввода, поэтому сеть будет работать нормально или, по крайней мере, не будет sh.

Я бы проверил набор данных, который вы используете, и проверил если это должно быть так или у вас есть некоторые ошибочные образцы данных. Если с набором данных все в порядке и это действительно может произойти, вам нужно изменить размер всех входов до некоторого предварительно определенного разрешения, чтобы можно было объединить их, вероятно, в мини-пакет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...