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
####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)
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.
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
.
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
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.