Problem beim Ausführen von object_detection_tutorial TypeError: load () fehlen 2 erforderliche Positionsargumente

11

Ich bin ziemlich neu in Tensorflow und versuche, object_detection_tutorial auszuführen. Ich erhalte TypeErrror und weiß nicht, wie ich das beheben soll.

Dies ist die Funktion load_model, bei der zwei Argumente fehlen:

Tags: Satz von String-Tags zur Identifizierung des erforderlichen MetaGraphDef. Diese sollten den Tags entsprechen, die beim Speichern der Variablen mit der SavedModel save () -API verwendet werden.

export_dir: Verzeichnis, in dem sich der SavedModel-Protokollpuffer und die zu ladenden Variablen befinden.

def load_model(model_name):
  base_url = 'http://download.tensorflow.org/models/object_detection/'
  model_file = model_name + '.tar.gz'
  model_dir = tf.keras.utils.get_file(
    fname=model_name, 
    origin=base_url + model_file,
    untar=True)

  model_dir = pathlib.Path(model_dir)/"saved_model"

  model = tf.saved_model.load(str(model_dir))
  model = model.signatures['serving_default']

  return model
WARNING:tensorflow:From <ipython-input-9-f8a3c92a04a4>:11: load (from tensorflow.python.saved_model.loader_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.loader.load or tf.compat.v1.saved_model.load. There will be a new function for importing SavedModels in Tensorflow 2.0.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-e10c73a22cc9> in <module>
      1 model_name = 'ssd_mobilenet_v1_coco_2017_11_17'
----> 2 detection_model = load_model(model_name)

<ipython-input-9-f8a3c92a04a4> in load_model(model_name)
      9   model_dir = pathlib.Path(model_dir)/"saved_model"
     10 
---> 11   model = tf.saved_model.load(str(model_dir))
     12   model = model.signatures['serving_default']
     13 

~/.local/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py in new_func(*args, **kwargs)
    322               'in a future version' if date is None else ('after %s' % date),
    323               instructions)
--> 324       return func(*args, **kwargs)
    325     return tf_decorator.make_decorator(
    326         func, new_func, 'deprecated',

TypeError: load() missing 2 required positional arguments: 'tags' and 'export_dir'

Können Sie mir helfen, dieses Problem zu beheben und meinen ersten Objektdetektor auszuführen: D?

Dominik
quelle

Antworten:

14

Ich hatte das gleiche Problem und ich versuche es jetzt seit 1 Woche zu lösen. Ich denke, die Lösung sollte dies sein;

model = tf.compat.v2.saved_model.load(str(model_dir), None)

Weitere Details wären (von der offiziellen Website );

Laden Sie ein SavedModel aus export_dir.

tf.saved_model.load(
    export_dir,
    tags=None
)

Aliase:

tf.compat.v1.saved_model.load_v2

tf.compat.v2.saved_model.load
Onur Baskin
quelle
1
Ich habe Ihre Lösung verwendet und einen weiteren Fehler erhalten. Ich habe alles aktualisiert, was ich konnte und es funktioniert! Ich hatte auch einen Fehler, als pathlib nicht installiert wurde.
Dominik
@ Dominik kannst du genauer sein? Vielleicht kann ich helfen, weil dieses Tensorflow-Abenteuer mich dazu gebracht hat, viele Probleme zu lösen: D
Onur Baskin
4
@OnurBaskin Es gibt später einen Fehler: TypeError: Das Argument int () muss eine Zeichenfolge, ein
byteähnliches
@ Dominik Ich nehme an, es ist deine Tensorflow-Version. Es sollte Version 2.0 (stabil) sein. Hier ist der Link für die Frage, die ich gestellt habe. Vielleicht haben Sie den genauen Fehler. Suchen Sie außerdem nach alten Importen, für die 'compatible.v1' erforderlich ist. Später sollten Sie viele weitere Fehler haben, aber auf diese Weise migrieren Sie einen alten Code.
Onur Baskin
@ OnBurin Ich bin ziemlich verwirrt. Ich dachte, die Objekterkennungs-API sei nur mit TensorFlow 1-Versionen kompatibel.
Biiiiiird
0

Ich vermutete, dass es sich um ein Verzweigungsproblem handelte, und die Verwendung des Zweigs tf_2_1_reference hat den Trick für mich getan:

igian@iGians-MBP models % git checkout tf_2_1_reference
M   research/object_detection/object_detection_tutorial.ipynb
Branch 'tf_2_1_reference' set up to track remote branch 'tf_2_1_reference' from 'origin'.
Switched to a new branch 'tf_2_1_reference'
igians@iGians-MBP models % jupyter notebook

Führen Sie dann jede Jupiter-Zelle des Tutorials wie einen guten Neuling aus!

Dies ist der Zweig, den ich verwendet habe: https://github.com/tensorflow/models/tree/tf_2_1_reference

iGian
quelle