Тензор потока openvino ssd-mobilnet Coco Пользовательский набор данных ошибки ввода слой

Итак, я использую набор данных кокосов TensorFlow SSD-Mobilnet V1. Что я дополнительно обучил на своем собственном наборе данных, но когда я пытаюсь преобразовать его в OpenVino IR, чтобы запустить его на Raspberry PI с Movidius Chip. Я получаю ошибку

➜  utils sudo python3 summarize_graph.py --input_model ssd.pb 
WARNING: Logging before flag parsing goes to stderr.
W0722 17:17:05.565755 4678620608 __init__.py:308] Limited tf.compat.v2.summary API due to missing TensorBoard installation.
W0722 17:17:06.696880 4678620608 deprecation_wrapper.py:119] From ../../mo/front/tf/loader.py:35: The name tf.GraphDef is deprecated. Please use tf.compat.v1.GraphDef instead.

W0722 17:17:06.697348 4678620608 deprecation_wrapper.py:119] From ../../mo/front/tf/loader.py:109: The name tf.MetaGraphDef is deprecated. Please use tf.compat.v1.MetaGraphDef instead.

W0722 17:17:06.697680 4678620608 deprecation_wrapper.py:119] From ../../mo/front/tf/loader.py:235: The name tf.NodeDef is deprecated. Please use tf.compat.v1.NodeDef instead.

1 input(s) detected:
Name: image_tensor, type: uint8, shape: (-1,-1,-1,3)
7 output(s) detected:
detection_boxes
detection_scores
detection_multiclass_scores
detection_classes
num_detections
raw_detection_boxes
raw_detection_scores

Когда я пытаюсь преобразовать ssd.pb(замороженная модель) в OpenVino IR

➜  model_optimizer sudo python3 mo_tf.py --input_model ssd.pb          
Password:
Model Optimizer arguments:
Common parameters:
    - Path to the Input Model:  /opt/intel/openvino_2019.1.144/deployment_tools/model_optimizer/ssd.pb
    - Path for generated IR:    /opt/intel/openvino_2019.1.144/deployment_tools/model_optimizer/.
    - IR output name:   ssd
    - Log level:    ERROR
    - Batch:    Not specified, inherited from the model
    - Input layers:     Not specified, inherited from the model
    - Output layers:    Not specified, inherited from the model
    - Input shapes:     Not specified, inherited from the model
    - Mean values:  Not specified
    - Scale values:     Not specified
    - Scale factor:     Not specified
    - Precision of IR:  FP32
    - Enable fusing:    True
    - Enable grouped convolutions fusing:   True
    - Move mean values to preprocess section:   False
    - Reverse input channels:   False
TensorFlow specific parameters:
    - Input model in text protobuf format:  False
    - Path to model dump for TensorBoard:   None
    - List of shared libraries with TensorFlow custom layers implementation:    None
    - Update the configuration file with input/output node names:   None
    - Use configuration file used to generate the model with Object Detection API:  None
    - Operations to offload:    None
    - Patterns to offload:  None
    - Use the config file:  None
Model Optimizer version:    2019.1.1-83-g28dfbfd
WARNING: Logging before flag parsing goes to stderr.
E0722 17:24:22.964164 4474824128 infer.py:158] Shape [-1 -1 -1  3] is not fully defined for output 0 of "image_tensor". Use --input_shape with positive integers to override model input shapes.
E0722 17:24:22.964462 4474824128 infer.py:178] Cannot infer shapes or values for node "image_tensor".
E0722 17:24:22.964554 4474824128 infer.py:179] Not all output shapes were inferred or fully defined for node "image_tensor". 
 For more information please refer to Model Optimizer FAQ (<INSTALL_DIR>/deployment_tools/documentation/docs/MO_FAQ.html), question #40. 
E0722 17:24:22.964632 4474824128 infer.py:180] 
E0722 17:24:22.964720 4474824128 infer.py:181] It can happen due to bug in custom shape infer function <function tf_placeholder_ext.<locals>.<lambda> at 0x12ab64bf8>.
E0722 17:24:22.964787 4474824128 infer.py:182] Or because the node inputs have incorrect values/shapes.
E0722 17:24:22.964850 4474824128 infer.py:183] Or because input shapes are incorrect (embedded to the model or passed via --input_shape).
E0722 17:24:22.965915 4474824128 infer.py:192] Run Model Optimizer with --log_level=DEBUG for more information.
E0722 17:24:22.966033 4474824128 main.py:317] Exception occurred during running replacer "REPLACEMENT_ID" (<class 'extensions.middle.PartialInfer.PartialInfer'>): Stopped shape/value propagation at "image_tensor" node. 
 For more information please refer to Model Optimizer FAQ (<INSTALL_DIR>/deployment_tools/documentation/docs/MO_FAQ.html), question #38.

Как вы думаете, мы должны это исправить?

2 ответа

Решение

Я обновил свой OpenVINO до OpenVINO toolkit R2 2019, и с помощью приведенной ниже команды я смог создать файл IR

python3 ~/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_model frozen_inference_graph.pb --tensorflow_use_custom_operations_config ~/intel/openvino/deployment_tools/model_optimizer/extension/front/tf/ssd_support_api_v1.14.json --tensorflow_object_detection_api_pipeline_config pipeline.config -b 1 --data_type FP16 --reverse_input_channels

Когда вы пытаетесь преобразовать ssd.pb(ваша замороженная модель), вы передаете только входной параметр модели в сценарии mo_tf.py. Чтобы преобразовать модель обнаружения объекта в IR, перейдите в каталог оптимизатора модели, запустите скрипт mo_tf.py со следующими обязательными параметрами:

--input_model:
Файл с предварительно обученной моделью (двоичный или текстовый файл.pb после замораживания)

--tensorflow_use_custom_operations_config: файл конфигурации, в котором описываются правила для преобразования определенных топологий TensorFlow*. Для моделей, загруженных из зоопарка TensorFlow* Object Detection API, файлы конфигурации можно найти в каталоге /deploy_tools/model_optimizer/extensions/front/tf. Вы можете использовать ssd_v2_support.json / ssd_support.json - для замороженных топологий SSD из моделей. зоопарк. Он будет доступен в вышеупомянутом каталоге.

--tensorflow_object_detection_api_pipeline_config: специальный файл конфигурации, который описывает гиперпараметры топологии и структуру модели API TensorFlow Object Detection. Для моделей, загруженных из зоопарка TensorFlow* Object Detection API, файл конфигурации имеет название pipe.config. Если вы планируете обучать модель самостоятельно, вы можете найти шаблоны для этих файлов в репозитории моделей.

--input_shape(необязательно): пользовательская форма входного изображения, нам нужно передать эти значения на основе использованной вами предварительно обученной модели. Модель принимает входное изображение в формате [1 H W C], где параметр относится к размеру пакета, высоте, ширине, каналу соответственно. Оптимизатор модели не принимает отрицательные значения для партии, высоты, ширины и номера канала. Таким образом, вам нужно передать действительный набор из 4 положительных чисел, используя параметр --input_shape, если размеры входного изображения модели (мобильная сеть SSD) известны заранее.
Если он недоступен, вам не нужно передавать входную форму.

Пример команды mo_tf.py, которая использует модель SSD-MobileNet-v2-COCO, загруженную из загрузчика модели, поставляется с openvino, показан ниже.

python mo_tf.py  
              --input_model "c:\Program Files (x86)\IntelSWTools\openvino_2019.1.087\deployment_tools\tools\model_downloader\object_detection\common\ssd_mobilenet_v2_coco\tf\ssd_mobilenet_v2_coco.frozen.pb" 
              --tensorflow_use_custom_operations_config  "c:\Program Files (x86)\IntelSWTools\openvino_2019.1.087\deployment_tools\model_optimizer\extensions\front\tf\ssd_v2_support.json"  
              --tensorflow_object_detection_api_pipeline_config  "c:\Program Files (x86)\IntelSWTools\openvino_2019.1.087\deployment_tools\tools\model_downloader\object_detection\common\ssd_mobilenet_v2_coco\tf\ssd_mobilenet_v2_coco.config" 
              --data_type FP16 
              --log_level DEBUG

Для получения дополнительной информации см. Ссылку https://docs.openvinotoolkit.org/latest/_docs_MO_DG_prepare_model_convert_model_tf_specific_Convert_Object_Detection_API_Models.html
Надеюсь, это поможет.

Для преобразования ssd mobilenetv2 добавьте "Postprocessor/Cast_1" в исходный ssd_v2_support.json и используйте следующую команду. он должен работать нормально.

"instances": {
            "end_points": [
                "detection_boxes",
                "detection_scores",
                "num_detections"
            ],
            "start_points": [
                "Postprocessor/Shape",
                "Postprocessor/scale_logits",
                "Postprocessor/Tile",
                "Postprocessor/Reshape_1",
                "Postprocessor/Cast_1"
            ]
        },

затем используйте следующую команду

#### object detection conversion

import platform
is_win = 'windows' in platform.platform().lower()

mo_tf_path = '/opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py'
json_file = '/opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf/ssd_v2_support.json'
pb_file =          'model/frozen_inference_graph.pb'
pipeline_file =       'model/pipeline.config'
output_dir =       'output/'

img_height = 300
input_shape = [1,img_height,img_height,3]
input_shape_str = str(input_shape).replace(' ','')
input_shape_str

!python3 {mo_tf_path} --input_model {pb_file}  --tensorflow_object_detection_api_pipeline_config {pipeline_file} --tensorflow_use_custom_operations_config {json_file} --output="detection_boxes,detection_scores,num_detections" --output_dir {output_dir} --reverse_input_channels --data_type FP16 --log_level DEBUG 

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