ValueError: Сообщение протокола SsdFeatureExtractor не имеет поля replace_preprocessor_with_placeholder - PullRequest
0 голосов
/ 13 апреля 2019

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

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

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

WARNING:tensorflow:From C:\Users\MHD\Anaconda3\envs\tf15\lib\site-packages\tensorflow\python\platform\app.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:\Users\MHD\Anaconda3\envs\tf15\lib\site-packages\tensorflow\python\platform\app.py", line 124, in run _sys.exit(main(argv)) File "C:\Users\MHD\Anaconda3\envs\tf15\lib\site-packages\tensorflow\python\util\deprecation.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:\tensorflow1\models\research\object_detection\legacy\trainer.py", line 249, in train detection_model = create_model_fn() File "C:\tensorflow1\models\research\object_detection\builders\model_builder.py", line 119, in build return _build_ssd_model(model_config.ssd, is_training, add_summaries) File "C:\tensorflow1\models\research\object_detection\builders\model_builder.py", line 237, in _build_ssd_model is_training=is_training) File "C:\tensorflow1\models\research\object_detection\builders\model_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 Ответ

0 голосов
/ 14 апреля 2019

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

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

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

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

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

...