Как использовать API обнаружения объектов со старой версией tensorflow - v1.3.0?

Мне нужно использовать API обнаружения объектов тензорного потока (ssd_mobilenet_v1_coco), но я должен использовать тензорный поток 1.3.0 (обязательно из-за среды).

У меня переобученная модель на 1.9.0, но она не совместима с 1.3.0:

Отслеживание (последний вызов последним): файл "run_test.py", строка 29, в tf.import_graph_def (od_graph_def, name = '') Файл "/opt/carndcapstone/venv/local/lib/python2.7/site-packages /tensorflow/python/framework/importer.py ", строка 285, в import_graph_def поднять ValueError ('Нет операции с именем% s в определенных операциях.'% node.op) ValueError: Нет операции с именем NonMaxSuppressionV3 в определенных операциях.

Просто интересно, можно ли использовать API обнаружения объектов с tenorflow 1.3.0. Не видел API версии 1.3.0 на GitHub. Есть ли способ обойти эту проблему?


person emosdead    schedule 26.12.2018    source источник


Ответы (2)


Вот что я сделал,

Шаг 1. Обучите модель с помощью последней доступной версии Object API обнаружения

Теперь вы обучили ckpt и другие файлы

└── training
   ├── checkpoint
   ├── model.ckpt.data-XXXX-of-XXXX
   ├── model.ckpt.index
   └── model.ckpt.meta

Шаг 2: Теперь клонируйте предыдущую фиксацию API обнаружения объектов, совместимую с tensorflow 1.3.0 1f34fcafc1454e0d31ab4a6cc022102a54ac0f5b

Шаг 3: создайте новую виртуальную среду conda с tf 1.4.0 и установите зависимости для использования API обнаружения объектов во вновь клонированной папке обнаружения объектов.

Шаг 4: Активируйте новую среду conda и просто запустите export_inference_graph.py на модели ckpt, обученной на первом шаге.

Сгенерированный замороженный граф совместим с Tensorflow 1.3.0 и 1.4.0

Для получения дополнительных сведений см. это

person Vin    schedule 22.07.2019

У меня такая же проблема. Вот что я сделал.

В процессе обучения я следовал этому руководству.

Согласно выпускам, Tensorflow 1.3.0. вышла 16 августа 2017 года. Поэтому вам нужно будет использовать соответствующую версию Object Detection API. На тот момент последней версией были Protocol Buffers v3.4.0, так что вам тоже нужно их использовать.

Вы можете получить ValueError: axis = 0 not in [0, 0) (у меня нет подтверждения, но Я подозреваю, что эта ошибка появляется, когда вы создавали свои TFRecords с использованием более нового API обнаружения объектов.) На всякий случай, если ссылка не работает, решение состоит в изменении вашего конвейера *.config, например:

loss {
  classification_loss {
    weighted_sigmoid {
    anchorwise_output: true  #add this
    }
  }
  localization_loss {
    weighted_smooth_l1 {
    anchorwise_output: true  #add this
    }
  }
  hard_example_miner {
    num_hard_examples: 3000
    iou_threshold: 0.99
    loss_type: CLASSIFICATION
    max_negatives_per_positive: 3
    min_negatives_per_image: 0
  }
  classification_weight: 1.0
  localization_weight: 1.0
}
person Jacob    schedule 13.01.2019