Попытка получить ИК openVino от замороженной модели TF

У меня есть заданная начальная модель V2, которую я хочу получить на RPI, используя NCS2. Примеры работают нормально. Теперь модель, которую мне дают, основана на демонстрации ssd_inceptionv2, которая, как я знаю, работает, поскольку я смог преобразовать замороженные pb этой демонстрации в файлы IR bin и xml и успешно запустить их на pi. Тем не менее, когда я пытаюсь преобразовать данную модель в IR, это не удается. Чтобы быть более конкретным, это терпит неудачу по-разному, в зависимости от того, как я пытаюсь конвертировать его.

Данная модель имеет замороженный файл.pb, файлы контрольных точек и файл.pbtxt. Конвертируя файл.pb, я использую команду:

python3 /opt/intel/computer_vision_sdk/deployment_tools/model_optimizer/mo_tf.py 
  --input_model frozengraph.pb 
  --tensorflow_use_custom_operations_config /opt/intel/computer_vision_sdk/deployment_tools/model_optimizer/extensions/front/tf/ssd_v2_support.json 
  --tensorflow_object_detection_api_pipeline "PATH"/pipeline.config 
  --reverse_input_channels 
  --data_type FP16

это дает ошибку формы ввода, которую я исправляю --input_shape [1,299,299,3], но это только приводит к ошибке:

Невозможно вывести формы или значения для узла

"Постпроцессор /BatchMultiClassNonMaxSuppression/MultiClassNonMaxSuppression/SortByField/TopKV2"

Поэтому я пытаюсь как заново заморозить модель, так и запустить преобразование в графе graph.pbtxt. Для обоих методов он выдает ошибки, поскольку количество узлов равно 0 и 1 соответственно.

Есть идеи, что я могу делать не так?

2 ответа

Предполагая, что вы в состоянии обнаружить объекты с помощью замороженного графика, попробуйте один раз, изменив аргумент командной строки на tenorsflow_object_detection_api_pipeline_config, а также какой файл pipeline.config вы используете? Вы должны иметь возможность создавать IR-файлы, если вы используете файл pipe.config, который был сгенерирован вместе со замороженным графиком для вашей пользовательской модели.

Модели Tensorflow могут быть немного хитрыми, особенно когда вы модифицируете модели в зоопарке, которые уже довольно сложны. Есть несколько вещей, которые я хотел бы упомянуть для вашего сценария:

В этом руководстве по OpenVINO в разделе " Использование параметров преобразования, специфичных для TensorFlow * ", вы увидите, что

Модели, созданные с помощью TensorFlow*, обычно не имеют полностью определенных форм (содержат -1 в некоторых измерениях). Необходимо передать явную форму для ввода, используя параметр командной строки --input_shape или -b, чтобы переопределить только размер пакета. Если форма полностью определена, то нет необходимости указывать опции -b или --input_shape.

Некоторые примеры этого включают эту проблему / ответ Openvino, и еще пару в руководстве Оптимизатора модели в разделе " Дополнительные темы о внутренностях Оптимизатора модели ".

Для справки, я смог преобразовать откорректированный quick_rcnn_inception_v2 из модельного зоопарка без указания --input_shape аргумент, так что это действительно зависит от вашей модели.

Кроме того, это может быть опечатка или проблема с версией, но --tensorflow_object_detection_api_pipeline аргумент официально --tensorflow_object_detection_api_pipeline_config (как упомянуто @Bhargavi).

Наконец, хороший способ отладки ваших конвертирующих команд - это использовать --log_level DEBUG параметр, чтобы увидеть полный вывод.

Пожалуйста, обратитесь по ссылке ниже

http://docs.openvinotoolkit.org/R5/_docs_MO_DG_prepare_model_convert_model_tf_specific_Convert_Object_Detection_API_Models.html

Ваша команда выглядит примерно так:

<INSTALL_DIR>/deployment_tools/model_optimizer/mo_tf.py --input_model=/tmp/ssd_inception_v2_coco_2018_01_28/frozen_inference_graph.pb --tensorflow_use_custom_operations_config <INSTALL_DIR>/deployment_tools/model_optimizer/extensions/front/tf/ssd_v2_support.json --tensorflow_object_detection_api_pipeline_config /tmp/ssd_inception_v2_coco_2018_01_28/pipeline.config --reverse_input_channels

Пожалуйста, внимательно прочтите раздел в документации Custom Input Shape. Добавьте
--log_level DEBUG, чтобы увидеть более подробную информацию о вашей ошибке MO.

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

Другие вопросы по тегам