Попытка получить ИК 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
параметр, чтобы увидеть полный вывод.
Пожалуйста, обратитесь по ссылке ниже
Ваша команда выглядит примерно так:
<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.
Надеюсь это поможет.