Отсутствуют модули и атрибуты для обучения в API обнаружения объектов TensorFlow - PullRequest
2 голосов
/ 07 февраля 2020

Я сейчас пытаюсь обучить модель обнаружения объекта. Я следую учебнику Гилберта Таннера на YouTube. Я использую TF версии 1.9.0.

Кажется, что мне не хватает необходимых модулей. Когда я запускаю следующую команду:

python model_main.py --logtostderr --model_dir=training/ --pipeline_config_path=traini
ng/faster_rcnn_inception_v2_pets.config

я получаю следующую ошибку:

Traceback (most recent call last):
  File "model_main.py", line 26, in <module>
    from object_detection import model_lib
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\model_lib.py", line 28, in <module>
    from object_detection import exporter as exporter_lib
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\exporter.py", line 24, in <module>
    from object_detection.builders import model_builder
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\builders\model_builder.py", line 35, in <module>
    from object_detection.models import faster_rcnn_inception_resnet_v2_feature_extractor as frcnn_inc_res
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\models\faster_rcnn_inception_resnet_v2_feature_extractor
.py", line 30, in <module>
    from nets import inception_resnet_v2
  File "C:\Users\Admin\Desktop\ObjectDetection\models\research\object_detection\nets\inception_resnet_v2.py", line 375, in <module>
    batch_norm_updates_collections=tf.compat.v1.GraphKeys.UPDATE_OPS,
AttributeError: module 'tensorflow.compat' has no attribute 'v1'

По какой-то причине мне пришлось исправлять другие проблемы с некоторыми модулями, отсутствующими в правильное место (например, модуль nets не был помещен в каталог models / research / object_detection при установке, вместо этого он был помещен в models / research / slim).

Я не уверен, как именно исправить эту проблему. Я пытался отскочить между разными версиями 1.x TensorFlow, но каждый раз сталкивался с похожими ошибками, такими как отсутствие атрибута 'v2'.

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

Package Version Lastest Version
absl-py 0.9.0   0.8.1
astor   0.8.1   0.8.0
biwrap  0.1.6   
bleach  1.5.0   3.1.0
certifi 2019.11.28  2019.11.28
gast    0.3.3   0.3.2
grpcio  1.27.0  1.16.1
h5py    2.10.0  2.10.0
html5lib    0.9999999   1.0.1
keras-applications  1.0.8   1.0.8
keras-preprocessing 1.1.0   1.1.0
markdown    3.1.1   3.1.1
mock    3.0.5   3.0.5
numpy   1.18.1  1.18.1
object-detection    0.1 
pandas  1.0.0   1.0.0
pillow  7.0.0   7.0.0
pip 20.0.2  20.0.2
protobuf    3.11.3  3.11.2
pycocotools 2.0 
python  3.6.10  3.8.1
python-dateutil 2.8.1   2.8.1
pytz    2019.3  2019.3
setuptools  39.1.0  45.1.0
six 1.14.0  1.14.0
sqlite  3.31.1  3.31.1
tensorboard 1.9.0   2.0.0
tensorflow  1.9.0   2.0.0
tensorflow-estimator    1.13.0  2.0.0
tensorflow-plot 0.3.0   
tensorflow-tensorboard  1.5.1   
termcolor   1.1.0   1.1.0
vc  14.1    14.1
vs2015_runtime  14.16.27012 14.16.27012
werkzeug    0.16.1  0.16.1
wheel   0.34.2  0.34.2
wincertstore    0.2 0.2

Я пропустил какие-либо необходимые пакеты? Любая помощь по этому вопросу приветствуется. Пожалуйста, дайте мне знать, если я не включил информацию, которая будет полезна.

РЕДАКТИРОВАТЬ: строка 375 в C: \ Users \ Admin \ Desktop \ ObjectDetection \ models \ research \ object_detection \ nets \ inception_resnet_v2.py ниже выделено жирным шрифтом:

def inception_resnet_v2_arg_scope(
    weight_decay=0.00004,
    batch_norm_decay=0.9997,
    batch_norm_epsilon=0.001,
    activation_fn=tf.nn.relu,
    **batch_norm_updates_collections=tf.compat.v1.GraphKeys.UPDATE_OPS**,
    batch_norm_scale=False):

Вот ссылка на видео, на которое я ссылаюсь. Моя проблема возникает, когда я запускаю команду в 18:01. https://www.youtube.com/watch?v=HjiBbChYRDw Я понимаю, что приведенная выше команда немного отличается от показанной на видео. Однако в письменной версии руководства Гилберт Таннер обновил команду до той, которую я предоставил выше.

Изменение всех ссылок на tf.compat.v1.GraphKeys на tf.GraphKeys работает, но возникает больше ошибок :

AttributeError: module 'tensorflow.compat' has no attribute 'v2'

на этой подписи функции:

def global_pool(input_tensor, pool_op=tf.compat.v2.nn.avg_pool2d)

Когда я изменяю это на:

def global_pool(input_tensor, pool_op=tf.nn.avg_pool2d)

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

AttributeError: module 'tensorflow.nn' has no attribute 'avg_pool2d'

Нет документации для avg_pool2d для TensorFlow 1.x, а есть для TensorFlow 2.x, поэтому я не уверен, почему он находится в этом файле, если у меня есть TensorFlow 1.9.

Я замечаю tf .nn имеет атрибуты avg_pool и avg_pool3d, однако изменение его на эти приводит к ошибке TypeError:

Traceback (most recent call last):
  File "model_main.py", line 109, in <module>
    tf.app.run()
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\platform\app.py", line 125, in run
    _sys.exit(main(argv))
  File "model_main.py", line 105, in main
    tf.estimator.train_and_evaluate(estimator, train_spec, eval_specs[0])
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\training.py", line 447, in train_and_evaluate
    return executor.run()
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\training.py", line 531, in run
    return self.run_local()
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\training.py", line 669, in run_local
    hooks=train_hooks)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\estimator.py", line 366, in train
    loss = self._train_model(input_fn, hooks, saving_listeners)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\estimator.py", line 1119, in _train_model
    return self._train_model_default(input_fn, hooks, saving_listeners)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\estimator.py", line 1129, in _train_model_default
    input_fn, model_fn_lib.ModeKeys.TRAIN))
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\estimator.py", line 985, in _get_features_and_labels_from_input_fn
    result = self._call_input_fn(input_fn, mode)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\estimator\estimator.py", line 1074, in _call_input_fn
    return input_fn(**kwargs)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\inputs.py", line 504, in _train_input_fn
    params=params)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\inputs.py", line 607, in train_input
    batch_size=params['batch_size'] if params else train_config.batch_size)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\builders\dataset_builder.py", line 155, in build
    dataset = data_map_fn(process_fn, num_parallel_calls=num_parallel_calls)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py", line 882, in map
    return ParallelMapDataset(self, map_func, num_parallel_calls)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py", line 1899, in __init__
    super(ParallelMapDataset, self).__init__(input_dataset, map_func)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py", line 1868, in __init__
    self._map_func.add_to_graph(ops.get_default_graph())
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\framework\function.py", line 475, in add_to_graph
    self._create_definition_if_needed()
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\framework\function.py", line 331, in _create_definition_if_needed
    self._create_definition_if_needed_impl()
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\framework\function.py", line 340, in _create_definition_if_needed_impl
    self._capture_by_value, self._caller_device)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\framework\function.py", line 804, in func_graph_from_py_func
    outputs = func(*func_graph.inputs)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py", line 1833, in tf_map_func
    ret = map_func(nested_args)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\builders\dataset_builder.py", line 134, in process_fn
    processed_tensors = decoder.decode(value)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\data_decoders\tf_example_decoder.py", line 388, in decod
e
    tensors = decoder.decode(serialized_example, items=keys)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\contrib\slim\python\slim\data\tfexample_decoder.py", line 520, in decode
    outputs.append(handler.tensors_to_item(keys_to_tensors))
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\data_decoders\tf_example_decoder.py", line 129, in tenso
rs_to_item
    item = self._handler.tensors_to_item(keys_to_tensors)
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\data_decoders\tf_example_decoder.py", line 98, in tensor
s_to_item
    return tf.maximum(self._name_to_id_table.lookup(unmapped_tensor),
  File "C:\Users\Admin\Anaconda3\envs\object_detection\lib\site-packages\tensorflow\python\ops\lookup_ops.py", line 223, in lookup
    (self._key_dtype, keys.dtype))
TypeError: Signature mismatch. Keys must be dtype <dtype: 'float32'>, got <dtype: 'string'>.


Вот строка 98 в tenors_to_item:

    return tf.maximum(self._name_to_id_table.lookup(unmapped_tensor),
                      self._display_name_to_id_table.lookup(unmapped_tensor))

Я не уверен, как решить эту проблему, и кажется, что я не должен был менять сигнатуру функции. Нормально ли делать так много изменений в модулях?

1 Ответ

1 голос
/ 08 февраля 2020

Этот код tf.compat.v1.GraphKeys.UPDATE_OPS недоступен для Tensorflow==1.9.0, то же самое для tf.compat.v2.nn.avg_pool2d.

Чтобы эти функции обновили вашу версию до 1.15 с conda install tensorflow=1.15. Это будет соответствовать версии учебника. Как получено из это хранилище , оно использует tensorflow-gpu==1.15.2.

...