DuplicateFlagError при попытке обучить api обнаружения объектов tensorflow в сотрудничестве с google

Я пытаюсь обучить API обнаружения объектов Tensorflow на моем наборе данных, содержащем яблоки и перец. Для этого я сгенерировал необходимые файлы (TFrecords и изображения с аннотациями) и поместил их в каталог models / research / object_detection. Затем я разветвил API обнаружения объектов из github и отправил свои файлы в свое разветвленное репо. Затем я клонирую это репо в Google Collaboratory и запускаю файл train.py, но получаю ошибку DuplicateFlagError: master.

---------------------------------------------------------------------------

DuplicateFlagError               Traceback (most recent call last)
/content/models/research/object_detection/train.py in <module>()
     56 
     57 flags = tf.app.flags
---> 58 flags.DEFINE_string('master', '', 'Name of the TensorFlow master to use.')
     59 flags.DEFINE_integer('task', 0, 'task id')
     60 flags.DEFINE_integer('num_clones', 1, 'Number of clones to deploy per worker.')

/usr/local/lib/python3.6/dist-packages/tensorflow/python/platform/flags.py in wrapper(*args, **kwargs)
     56           'Use of the keyword argument names (flag_name, default_value, '
     57           'docstring) is deprecated, please use (name, default, help) instead.')
---> 58     return original_function(*args, **kwargs)
     59 
     60   return tf_decorator.make_decorator(original_function, wrapper)

/usr/local/lib/python3.6/dist-packages/absl/flags/_defines.py in DEFINE_string(name, default, help, flag_values, **args)
    239   parser = _argument_parser.ArgumentParser()
    240   serializer = _argument_parser.ArgumentSerializer()
--> 241   DEFINE(parser, name, default, help, flag_values, serializer, **args)
    242 
    243 

/usr/local/lib/python3.6/dist-packages/absl/flags/_defines.py in DEFINE(parser, name, default, help, flag_values, serializer, module_name, **args)
     80   """
     81   DEFINE_flag(_flag.Flag(parser, serializer, name, default, help, **args),
---> 82               flag_values, module_name)
     83 
     84 

/usr/local/lib/python3.6/dist-packages/absl/flags/_defines.py in DEFINE_flag(flag, flag_values, module_name)
    102   # Copying the reference to flag_values prevents pychecker warnings.
    103   fv = flag_values
--> 104   fv[flag.name] = flag
    105   # Tell flag_values who's defining the flag.
    106   if module_name:

/usr/local/lib/python3.6/dist-packages/absl/flags/_flagvalues.py in __setitem__(self, name, flag)
    425         # module is simply being imported a subsequent time.
    426         return
--> 427       raise _exceptions.DuplicateFlagError.from_flag(name, self)
    428     short_name = flag.short_name
    429     # If a new flag overrides an old one, we need to cleanup the old flag's

DuplicateFlagError: The flag 'master' is defined twice. First from object_detection/train.py, Second from object_detection/train.py.  Description from first occurrence: Name of the TensorFlow master to use.

Чтобы решить эту проблему, я попытался прокомментировать эту строку, но затем я получил DuplicateFlagError на следующем флаге, то есть на следующей строке. Итак, чтобы попытаться решить эту проблему, я прокомментировал все строки в train.py, которые объявляли эти флаги, т.е. я прокомментировал строки 58 и 82. Но затем я получил ошибку NotFoundError:;

---------------------------------------------------------------------------
NotFoundError                             Traceback (most recent call last)
/content/models/research/object_detection/train.py in <module>()
    165 
    166 if __name__ == '__main__':
--> 167   tf.app.run()

/usr/local/lib/python3.6/dist-packages/tensorflow/python/platform/app.py in run(main, argv)
    124   # Call the main function, passing through any arguments
    125   # to the final program.
--> 126   _sys.exit(main(argv))
    127 
    128 

/content/models/research/object_detection/train.py in main(_)
    105                            ('input.config', FLAGS.input_config_path)]:
    106         tf.gfile.Copy(config, os.path.join(FLAGS.train_dir, name),
--> 107                       overwrite=True)
    108 
    109   model_config = configs['model']

/usr/local/lib/python3.6/dist-packages/tensorflow/python/lib/io/file_io.py in copy(oldpath, newpath, overwrite)
    390   with errors.raise_exception_on_not_ok_status() as status:
    391     pywrap_tensorflow.CopyFile(
--> 392         compat.as_bytes(oldpath), compat.as_bytes(newpath), overwrite, status)
    393 
    394 

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg)
    514             None, None,
    515             compat.as_text(c_api.TF_Message(self.status.status)),
--> 516             c_api.TF_GetCode(self.status.status))
    517     # Delete the underlying status object from memory otherwise it stays alive
    518     # as there is a reference to status from this from the traceback due to

NotFoundError: ; No such file or directory

Как мне решить эту проблему? Это моя записная книжка Collab - https://drive.google.com/file/d/1mZGOKX3JZXyG4XYkI6WHIXoNbRSpkE_F/view?usp=sharing


person Jayesh Saita    schedule 03.03.2018    source источник


Ответы (2)


Пройдя через ваш блокнот colab и модифицированный форк из репозитория Tenorflow / models Github, вот как я заставил его работать на моем локальном компьютере.

У меня последняя версия tenorflow, то есть 1.6, такая же, как и в Google Colab.

  1. Путь, указанный вами в ssd_mobilenet_v1_coco.config, равен data/object-detection.pbtxt. Так что запустите train.py из каталога models/research/object_detection.

  2. train.py ожидает --pipeline_config_path в качестве параметра, но вы указали --pipeline_config. Итак, если вы пройдете train.py код, вы поймете, что если --pipeline_config_path не указан, тогда он по умолчанию использует имя файла конфигурации как models.config, и, следовательно, вы получите NotFoundError: ; No such file or directory

Итак, последняя команда должна быть такой:

ubuntu@Himanshu:~/Desktop/models/research/object_detection$ python train.py --logtostderr --train_dir=training --pipeline_config_path=training/ssd_mobilenet_v1_coco.config
  1. Хорошо, что я установил Tensorflow 1.6, я получил ту же ошибку, о которой говорилось здесь: init () получил неожиданный аргумент ключевого слова 'dct_method'

Как следует из комментария в приведенной выше ссылке: Удалите dct_method=dct_method в object_detection/data_decoders/tf_example_decoder.py около строки 109.

Надеюсь это поможет.

person himanshurawlani    schedule 04.03.2018

person    schedule
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода. Также постарайтесь не загромождать свой код пояснительными комментариями, это снижает удобочитаемость как кода, так и пояснений! - person Filnor; 06.07.2018
comment
Спасибо @Filnor за ваши ценные предложения. - person Md. Asaf-uddowla; 28.01.2020