Ошибка значения: сообщение протокола SsdFeatureExtractor не имеет поля replace_preprocessor_with_placeholder

#python-3.x #tensorflow #object-detection-api

#python-3.x #тензорный поток #object-detection-api

Вопрос:

Я использую API обнаружения объектов для обучения своей собственной модели, но во время выполнения обучения с использованием этой команды:

python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_coco.config

Я получаю эту ошибку:

WARNING:tensorflow:From C:UsersMHDAnaconda3envstf15libsite-packagestensorflowpythonplatformapp.py:124: main (from __main__) is deprecated and will be removed in a future version.
Instructions for updating:
Use object_detection/model_main.py.
Traceback (most recent call last):
File "train.py", line 179, in <module>
tf.app.run()
File "C:UsersMHDAnaconda3envstf15libsite-packagestensorflowpythonplatformapp.py", line 124, in run
_sys.exit(main(argv))
File "C:UsersMHDAnaconda3envstf15libsite-packagestensorflowpythonutildeprecation.py", line 136, in new_func
return func(*args, **kwargs)
File "train.py", line 175, in main
graph_hook_fn=graph_rewriter_fn)
File "C:tensorflow1modelsresearchobject_detectionlegacytrainer.py", line 249, in train
detection_model = create_model_fn()
File "C:tensorflow1modelsresearchobject_detectionbuildersmodel_builder.py", line 119, in build
return _build_ssd_model(model_config.ssd, is_training, add_summaries)
File "C:tensorflow1modelsresearchobject_detectionbuildersmodel_builder.py", line 237, in _build_ssd_model
is_training=is_training)
File "C:tensorflow1modelsresearchobject_detectionbuildersmodel_builder.py", line 187, in _build_ssd_feature_extractor
if feature_extractor_config.HasField('replace_preprocessor_with_placeholder'):
ValueError: Protocol message SsdFeatureExtractor has no field replace_preprocessor_with_placeholder

пожалуйста, помогите мне, ребята

Ответ №1:

Проследив причину этой ошибки, я обнаружил, что опция replace_preprocessor_with_placeholder была недавно добавлена. Вот запись фиксации.(На этой странице, если вы выполните поиск replace_preprocessor_with_placeholder , вы обнаружите, что оно было добавлено недавно 7 марта 2019 года).

Таким образом, причина ошибки, очевидно, в том, что версия ваших протофайлов не соответствует версии кода. Если вы сравните object_detection/protos/ssd.proto на своем локальном компьютере и в репозитории github, вы, вероятно, обнаружите, что эта строка не существует в файле вашего локального компьютера (потому что этот файл также был добавлен недавно!).

Самый простой способ исправить эту ошибку — переустановить api обнаружения объектов, следуя этому руководству.

Поскольку у вас уже установлены все пакеты, по сути, вам нужно выполнить два шага: установить coco api и скомпилировать protobuff. Новая компиляция protobuff исправит вашу ошибку.

Также я рекомендую вам следовать последнему руководству по api, я вижу в вашем вызове, который вы используете train.py , этот файл теперь помещен в устаревшую папку и не рекомендуется запускать, поскольку они могут быть устаревшими.