web-dev-qa-db-ja.com

Tensorflowエラー:TypeError:__ init __()が予期しないキーワード引数 'dct_method'を取得しました

Tensorflow-Gpu(1.5)の現在のリリースで Tensorflow Object Detection API を実行すると、カスタムの画像セットでトレーニングしようとすると、次のエラーがスローされます。

INFO:tensorflow:Scale of 0 disables regularizer.
INFO:tensorflow:Scale of 0 disables regularizer.
WARNING:tensorflow:From C:\tensorflow1\models\research\object_detection\trainer.py:228: create_global_step (from tensorflow.contrib.framework.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.create_global_step
Traceback (most recent call last):
  File "train.py", line 167, in <module>
    tf.app.run()
  File "C:\Users\Vic-10-3\AppData\Local\Continuum\anaconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\platform\app.py", line 124, in run
    _sys.exit(main(argv))
  File "train.py", line 163, in main
    worker_job_name, is_chief, FLAGS.train_dir)
  File "C:\tensorflow1\models\research\object_detection\trainer.py", line 235, in train
    train_config.prefetch_queue_capacity, data_augmentation_options)
  File "C:\tensorflow1\models\research\object_detection\trainer.py", line 59, in create_input_queue
    tensor_dict = create_tensor_dict_fn()
  File "train.py", line 120, in get_next
    dataset_builder.build(config)).get_next()
  File "C:\tensorflow1\models\research\object_detection\builders\dataset_builder.py", line 138, in build
    label_map_proto_file=label_map_proto_file)
  File "C:\tensorflow1\models\research\object_detection\data_decoders\tf_example_decoder.py", line 110, in __init__
    dct_method=dct_method),
TypeError: __init__() got an unexpected keyword argument 'dct_method'

予想される動作は実際のトレーニングを実行することですが、明らかに最新のリリースと互換性がなくなったようです。

エラーを再現するための手順: チュートリアルに従ってください そしてカスタムデータセットでトレーニングします。

9
Traviccc

このエラーは、ファイルtf_example_decoder.pyとTensorflowがインストールされていることの非互換性が原因です。

ファイルmodels/research/object_detection/data_decoders/tf_example_decoder.py:

28行目:

slim_example_decoder = tf.contrib.slim.tfexample_decoder

104行目:

self.items_to_handlers = {
    fields.InputDataFields.image:
        slim_example_decoder.Image(
            image_key='image/encoded',
            format_key='image/format',
            channels=3,
            dct_method=dct_method),....
            .....
            ....
            ..
            .
            }

slim_example_decoder.Imageはtf.contrib.slim.tfexample_decoder.Imageです

Tensorflow 1.5のソースコードでは、tf.contrib.slim.tfexample_decoder.Imageにはdct_method引数がありません。したがって、dct_method引数が渡されると、エラーがスローされます。

単純なハックは、この引数を渡さないことです。したがって、tf_example_decoder.pyの110行目を編集して、dct_method=dct_methodを削除します。私はこれを試しましたが、うまくいき、トレーニングには何の影響もありませんでした。

6
user2358715