ошибка экспорта модели обнаружения объекта ssd_mobilenet_v2 в замороженный граф вывода - PullRequest
0 голосов
/ 07 октября 2019

Я обучил пользовательской модели обнаружения объектов на основе следующей информации:

  • Версия Python: Python 3.5.6
  • Платформа ОС: Windows 10 Pro
  • TensorFlow установлен из (источника или двоичного файла): двоичный файл
  • Tensorflow-GPU: 1.14.0
  • Версия CUDA / cuDNN: 10.0
  • Инструкции в соответствии с этим TensorFlow-Object-Detection-API tutorial
  • Контрольная точка для Finetune: ssd_mobilenet_v2_coco_2018_03_29.tar.gz взято из Tensoflow модель зоопарка
  • Config: ssd_mobilenet_v2_fullyconv_coco.config

    Причиной выбора этой конкретной конфигурации было то, что это был единственный тип ssd_mobilenet_*, который поддерживает keep_aspect_ratio_resizer, который учитывает соотношение сторон входного изображения при изменении размераэто для обучения. Единственное изменение, которое у меня было в конфигурации max_dimension: 1014 вместо значения по умолчанию max_dimension: 640.

После успешного обучения модели в течение более 50 тысяч эпох с разумной потерей обучения и локализации я используюследующая команда для остановки модели:

python export_inference_graph.py --input_type image_tensor --write_inference_graph True --pipeline_config_path training/ssd_mobilenet_v2_fullyconv_coco.config --trained_checkpoint_prefix training/model.ckpt-XXXXX --output_directory inference_graph

, которая возвращает странную ошибку (ссылка на export_inference_graph.py ):

I1007 12:32:59.855752  1896 convolutional_box_predictor.py:151] depth of additional conv before box predictor: 0
I1007 12:32:59.910747  1896 convolutional_box_predictor.py:151] depth of additional conv before box predictor: 0
I1007 12:32:59.965748  1896 convolutional_box_predictor.py:151] depth of additional conv before box predictor: 0
I1007 12:33:00.015746  1896 convolutional_box_predictor.py:151] depth of additional conv before box predictor: 0
I1007 12:33:00.065742  1896 convolutional_box_predictor.py:151] depth of additional conv before box predictor: 0
I1007 12:33:00.115744  1896 convolutional_box_predictor.py:151] depth of additional conv before box predictor: 0
Traceback (most recent call last):
  File "export_inference_graph.py", line 162, in <module>
    tf.app.run()
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\platform\app.py", line 40, in run
    _run(main=main, argv=argv, flags_parser=_parse_flags_tolerate_undef)
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\absl\app.py", line 300, in run
    _run_main(main, args)
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\absl\app.py", line 251, in _run_main
    sys.exit(main(argv))
  File "export_inference_graph.py", line 158, in main
    write_inference_graph=FLAGS.write_inference_graph)
  File "C:\tensorflow1\models\research\object_detection\exporter.py", line 489, in export_inference_graph
    write_inference_graph=write_inference_graph)
  File "C:\tensorflow1\models\research\object_detection\exporter.py", line 392, in _export_inference_graph
    graph_hook_fn=graph_hook_fn)
  File "C:\tensorflow1\models\research\object_detection\exporter.py", line 359, in build_detection_graph
    output_collection_name=output_collection_name)
  File "C:\tensorflow1\models\research\object_detection\exporter.py", line 338, in _get_outputs_from_inputs
    output_tensors, true_image_shapes)
  File "C:\tensorflow1\models\research\object_detection\meta_architectures\ssd_meta_arch.py", line 722, in postprocess
    anchor_indices = tf.range(self._anchors.num_boxes_static())
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\ops\math_ops.py", line 1305, in range
    limit = ops.convert_to_tensor(limit, dtype=dtype, name="limit")
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\framework\ops.py", line 1087, in convert_to_tensor
    return convert_to_tensor_v2(value, dtype, preferred_dtype, name)
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\framework\ops.py", line 1145, in convert_to_tensor_v2
    as_ref=False)
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\framework\ops.py", line 1224, in internal_convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\framework\constant_op.py", line 305, in _constant_tensor_conversion_function
    return constant(v, dtype=dtype, name=name)
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\framework\constant_op.py", line 246, in constant
    allow_broadcast=True)
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\framework\constant_op.py", line 284, in _constant_impl
    allow_broadcast=allow_broadcast))
  File "C:\ProgramData\Miniconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\framework\tensor_util.py", line 454, in make_tensor_proto
    raise ValueError("None values not supported.")
ValueError: None values not supported.

Обратите внимание, что то же самоеточная настройка работает просто отлично, когда был использован checpoint fast_rcnn_inception_v2_coco_2018_01_28 ( config ). Я могу легко конвертировать замороженный график и SavedModel. Выдавать поверхности при первом переключении на ssd_mobilenet_v2. Кто-то здесь , кажется, успешно преобразовал эти модели в замороженный график, однако, это было год назад и основано на Tensorflow 1.10.0

...