Problem z uruchomieniem tutorialu_wykrywania obiektów TypeError: load () brakuje 2 wymaganych argumentów pozycyjnych

11

Jestem całkiem nowy w tensorflow i próbuję uruchomić samouczek wykrywania obiektów. Dostaję błąd typu i nie wiem, jak to naprawić.

Jest to funkcja load_model, która pomija 2 argumenty:

tags: zestaw tagów łańcuchowych do identyfikacji wymaganego MetaGraphDef. Powinny one odpowiadać znacznikom używanym podczas zapisywania zmiennych za pomocą API SavedModel save ().

export_dir: katalog, w którym znajduje się bufor protokołu SavedModel i zmienne do załadowania.

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'

Czy możesz mi pomóc to naprawić i uruchomić mój pierwszy wykrywacz obiektów: D?

Dominik
źródło

Odpowiedzi:

14

Miałem ten sam problem i próbuję rozwiązać ten problem już od 1 tygodnia. Myślę, że rozwiązaniem powinno być to;

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

Więcej szczegółów byłoby (z oficjalnej strony internetowej );

Załaduj SavedModel z export_dir.

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

Skróty:

tf.compat.v1.saved_model.load_v2

tf.compat.v2.saved_model.load
Onur Baskin
źródło
1
Użyłem twojego rozwiązania i dostałem kolejny błąd. Zaktualizowałem wszystko, co mogłem i działa! Miałem również błąd polegający na tym, że pathlib nie został zainstalowany.
Dominik,
@Dominik czy możesz być bardziej szczegółowy? może mogę pomóc, ponieważ ta przygoda z tensorflowem doprowadziła mnie do rozwiązania wielu problemów: D
Onur Baskin
4
@OnurBaskin Później pojawia się błąd: argument TypeError: int () musi być łańcuchem,
bajtowym
@Dominik Zakładam, że to twoja wersja Tensorflow. Powinna to być wersja 2.0 (stabilna). Oto link do pytania, które zadałem, być może masz dokładny błąd. Poszukaj również dowolnego starego importu, który wymaga „kompatybil.v1”. później powinieneś mieć dużo więcej błędów, ale w ten sposób migrujesz stary kod.
Onur Baskin
@OnurBaskin Jestem całkiem zdezorientowany. Myślałem, że Object Detection API jest kompatybilny tylko z wersjami TensorFlow 1.
Biiiiiird
0

Domyślam się, że to był problem z gałęzią, a użycie gałęzi tf_2_1_reference zrobiło dla mnie lewę:

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

Następnie wykonaj każdą komórkę Jowisza samouczka jak dobry nowicjusz!

Jest to gałąź, z której korzystałem: https://github.com/tensorflow/models/tree/tf_2_1_reference

iGian
źródło