web-dev-qa-db-fra.com

DuplicateFlagError lors de la tentative de formation d'une api de détection d'objet tensorflow sur google collaboratory

J'essaie de former l'API Tensorflow Object Detection sur mon ensemble de données contenant des pommes et du poivron. Pour cela, j'ai généré les fichiers requis (TFrecords et les images avec des annotations) et les ai placés dans le répertoire models/research/object_detection . Ensuite, j'ai créé l’application Object api de github et ai poussé mes fichiers dans mon repertoire forké ..__ Ensuite, je clone ce référentiel dans Google Collaboratory et exécute le fichier train.py mais j'obtiens l'erreur 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.

Pour résoudre ce problème, j’ai essayé de commenter cette ligne, mais j’ai eu DuplicateFlagError sur le drapeau suivant, c’est-à-dire sur la ligne suivante. Donc, pour essayer de résoudre le problème, j’ai commenté toutes les lignes de train.py qui déclaraient ces drapeaux, c’est-à-dire de la ligne 58 à la ligne 82. Mais j’ai eu l’erreur NotFoundError:;

---------------------------------------------------------------------------
NotFoundError                             Traceback (most recent call last)
/content/models/research/object_detection/train.py in <module>()
    165 
    166 if __== '__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

Comment le résoudre? Voici mon cahier Collab - https://drive.google.com/file/d/1mZGOKX3JZXyG4XYkI6WHIXoNbRSpkE_F/view?usp=sharing

4
Jayesh Saita
####Delete all flags before declare#####

def del_all_flags(FLAGS):
    flags_dict = FLAGS._flags()    
    keys_list = [keys for keys in flags_dict]    
    for keys in keys_list:
        FLAGS.__delattr__(keys)

del_all_flags(tf.flags.FLAGS)
10
Asaf-Uddowla

Après avoir examiné votre cahier de notes colab et votre fourche modifiée à partir du référentiel Github de tensorflow/models, voici comment je l’ai fait fonctionner sur ma machine locale.

La dernière version de tensorflow, à savoir 1.6, est identique à celle de Google Colab.

  1. Le chemin que vous avez spécifié dans ssd_mobilenet_v1_coco.config est data/object-detection.pbtxt. Donc exécutez train.py à partir du répertoire models/research/object_detection.

  2. train.py attend --pipeline_config_path comme paramètre mais vous avez spécifié --pipeline_config. Donc, si vous passez par le code train.py, vous réaliserez que si --pipeline_config_path n'est pas spécifié, le nom du fichier de configuration par défaut est alors models.config et vous obtenez donc NotFoundError: ; No such file or directory.

Donc, la commande finale devrait être comme ceci:

ubuntu@Himanshu:~/Desktop/models/research/object_detection$ python train.py --logtostderr --train_dir=training --pipeline_config_path=training/ssd_mobilenet_v1_coco.config
  1. Bien que j'ai installé Tensorflow 1.6, j'ai la même erreur que celle mentionnée ici: init () a un argument de mot clé inattendu 'dct_method'

Comme le suggère le commentaire dans le lien ci-dessus: Supprimez dct_method=dct_method dans object_detection/data_decoders/tf_example_decoder.py autour de la ligne 109.

J'espère que cela t'aides.

0
himanshurawlani