Проблема с запуском object_detection_tutorial TypeError: load () отсутствует 2 обязательных позиционных аргумента

11

Я довольно новичок в tenorflow и пытаюсь запустить object_detection_tutorial. Я получаю TypeErrror и не знаю, как это исправить.

Это функция load_model, которая пропускает 2 аргумента:

теги: набор строковых тегов для определения необходимого MetaGraphDef. Они должны соответствовать тегам, используемым при сохранении переменных с помощью SavedModel save () API.

export_dir: каталог, в котором находятся буфер протокола SavedModel и переменные для загрузки.

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'

Можете ли вы помочь мне исправить это и запустить мой первый детектор объектов: D?

Dominik
источник

Ответы:

14

У меня была такая же проблема, и я пытаюсь решить эту проблему в течение 1 недели. Я думаю, что решение должно быть таким;

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

Более подробно будет (с официального сайта );

Загрузите SavedModel из export_dir.

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

Псевдонимы:

tf.compat.v1.saved_model.load_v2

tf.compat.v2.saved_model.load
Онур Баскин
источник
1
Я использовал ваше решение и получил еще одну ошибку. Я обновил все, что мог, и это работает! У меня также была ошибка, когда pathlib не был установлен.
Доминик
@ Доминик, можешь ли ты быть более конкретным? может быть, я могу помочь, потому что это приключение тензорного потока, я привел меня, чтобы решить множество вопросов: D
Онур Баскин
4
@OnurBaskin Позже возникает ошибка: аргумент TypeError: int () должен быть строкой,
байтовым
@Dominik Полагаю, это твоя версия Tensorflow. Должна быть версия 2.0 (стабильная). Вот ссылка на вопрос, который я задал, возможно, у вас есть точная ошибка. Кроме того, ищите любой старый импорт, который требует 'compat.v1'. позже у вас должно быть много ошибок, но именно так вы переносите старый код.
Онур Баскин
@ OnurBaskin Я в замешательстве. Я думал, что API обнаружения объектов совместим только с версиями TensorFlow 1.
Biiiiiird
0

Я догадался, что это была проблема с веткой, и использование ветки tf_2_1_reference помогло мне:

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

Затем выполнил каждую ячейку Юпитера из учебника, как хороший новичок!

Это ветвь, которую я использовал: https://github.com/tensorflow/models/tree/tf_2_1_reference

iGian
источник