Я обучил пользовательской модели обнаружения объектов на основе следующей информации:
- Версия 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