Тензор потока 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