リンゴとトウガラシを含むデータセットでTensorflow Object Detection APIをトレーニングしようとしています。そのために、必要なファイル(注釈付きのTFrecordsおよび画像)を生成し、models/research/object_detectionディレクトリに配置しました。次に、githubからオブジェクト検出APIをフォークし、自分のファイルをフォークしたリポジトリにプッシュしました。次に、このリポジトリを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
####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)
Colabノートブックとtensorflow/models Githubリポジトリから変更したフォークを確認した後、ローカルマシンで動作させる方法を次に示します。
最新のtensorflowバージョン、つまりGoogle Colabと同じ1.6を入手しました。
ssd_mobilenet_v1_coco.config
で指定したパスはdata/object-detection.pbtxt
です。したがって、models/research/object_detection
ディレクトリからtrain.pyを実行します。
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
上記のリンクのコメントからわかるように、109行目付近のdct_method=dct_method
のobject_detection/data_decoders/tf_example_decoder.py
を削除します。
お役に立てれば。