Problema al ejecutar object_detection_tutorial TypeError: a load () le faltan 2 argumentos posicionales requeridos

11

Soy bastante nuevo en tensorflow e intento ejecutar object_detection_tutorial. Recibo TypeErrror y no sé cómo solucionarlo.

Esta es la función load_model que pierde 2 argumentos:

etiquetas: Conjunto de etiquetas de cadena para identificar el MetaGraphDef requerido. Deben corresponder a las etiquetas utilizadas al guardar las variables utilizando la API saveModel save ().

export_dir: Directorio en el que se ubican el búfer del protocolo SavedModel y las variables que se cargarán.

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'

¿Me pueden ayudar a solucionar esto y ejecutar mi primer detector de objetos: D?

Dominik
fuente

Respuestas:

14

Tuve el mismo problema y estoy tratando de resolver esto durante 1 semana. Supongo que la solución debería ser esta;

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

Más detalles serían (del sitio web oficial );

Cargue un modelo guardado de export_dir.

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

Alias

tf.compat.v1.saved_model.load_v2

tf.compat.v2.saved_model.load
Onur Baskin
fuente
1
Usé tu solución y recibí otro error. ¡Actualicé todo lo que pude y funciona! También tuve un error con pathlib no se instala.
Dominik el
@Dominik, ¿puedes ser más específico? tal vez pueda ayudar porque esta aventura de tensorflow me ha llevado a resolver muchos problemas: D
Onur Baskin
44
@OnurBaskin Hay un error más adelante: TypeError: el argumento int () debe ser una cadena, un objeto de tipo bytes o un número, no 'Tensor'
kaitsu
@Dominik Supongo que es tu versión de Tensorflow. Debería ser la versión 2.0 (estable). Aquí está el enlace para la pregunta que he hecho, tal vez tenga el error exacto. Además, busque cualquier importación antigua que requiera 'compat.v1'. más adelante debería tener muchos más errores, pero así es como migra un código antiguo.
Onur Baskin el
@OnurBaskin Estoy bastante confundido. Pensé que la API de detección de objetos solo era compatible con las versiones de TensorFlow 1.
Biiiiiird
0

Supuse que era un problema de rama y el uso de la rama tf_2_1_reference me ayudó:

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

¡Luego ejecuté cada celda de Júpiter del tutorial como un buen novato!

Esta es la rama que utilicé: https://github.com/tensorflow/models/tree/tf_2_1_reference

iGian
fuente