from object_detection.builders import model_builder
Arrojaba diferentes errores respecto a keras. Lo que me funcionó fue instalar keras manualmente usando las siguientes instrucciones:
!pip install tensorflow==2.15.0
y
!pip install keras==2.15.0
Ambas líneas deben colocarse una de debajo de otra después de la instalación de "object_detection" y es que su setup instala las últimas versiones de tf y keras lo cual causa los conflictos.
Por cierto, también utilicé la versión 4.8.0.76 de opencv-python-headless y moví los "import" iniciales después de la línea que instala keras. Y es que instalar tf y keras reinicia la sesión.
Agradecido!
Para utilizar un modelo de **Object Detection pre-entrenado** en TensorFlow (o en cualquier framework compatible con TensorFlow, como tf2), puedes seguir estos pasos:
### Paso 1: Instalar las dependencias necesarias
Asegúrate de tener instaladas las bibliotecas requeridas, incluyendo TensorFlow y el módulo de detección de objetos.
import tensorflow as tf
import tensorflow\_hub as hub
fromobject\_detection.utils import label\_map\_util
fromobject\_detection.utils import visualization\_utils as vis\_util
\# Cargar el modelo preentrenado
MODEL\_NAME ='ssd\_inception\_v2\_coco\_2017\_11\_17'# Puedes elegir otros modelos de Object Detection\# Cargar el modelo pre-entrenado desde TensorFlow Hub
PATH\_TO\_MODEL =f'./models/{MODEL\_NAME}/saved\_model'
\# Cargar el modelo
model = tf.saved\_model.load(PATH\_TO\_MODEL)\# Cargar la etiqueta del mapeo (labels)PATH\_TO\_LABELS ='models/research/object\_detection/data/mscoco\_label\_map.pbtxt'category\_index = label\_map\_util.create\_category\_index\_from\_labelmap(PATH\_TO\_LABELS, use\_display\_name=True)
### Paso 3: Cargar y preprocesar una imagen
A continuación, carga una imagen y prepárala para pasarla al modelo.
import numpy as np
import matplotlib.pyplot as plt
import cv2
\# Función para cargar imagen
def load\_image\_into\_numpy\_array(image\_path):  image = np.array(cv2.imread(image\_path))  return image
\# Cargar una imagen de ejemplo
image\_path ='path\_to\_your\_image.jpg'image\_np = load\_image\_into\_numpy\_array(image\_path)image\_np\_expanded = np.expand\_dims(image\_np, axis=0)# Añadir la dimensión de batch
### Paso 4: Realizar la detección
Ahora puedes pasar la imagen preprocesada a tu modelo para hacer la detección.
\# Realizar la detección de objetos
input\_tensor = tf.convert\_to\_tensor(image\_np\_expanded, dtype=tf.float32)model\_fn = model.signatures\['serving\_default']output\_dict = model\_fn(input\_tensor)\# Los resultados son dictados en el formato:\# 'detection\_boxes','detection\_classes','detection\_scores','num\_detections'boxes = output\_dict\['detection\_boxes'].numpy()classes = output\_dict\['detection\_classes'].numpy().astype(np.int32)scores = output\_dict\['detection\_scores'].numpy()num =int(output\_dict\['num\_detections'].numpy())
\# Visualizar los resultados
vis\_util.visualize\_boxes\_and\_labels\_on\_image\_array(  image\_np,  boxes\[0],  classes\[0],  scores\[0],  category\_index,  instance\_masks=None,  use\_normalized\_coordinates=True,  line\_thickness=8)
\# Mostrar la imagen con las detecciones
plt.imshow(image\_np)plt.show()
### Explicación:
1. **Modelo Pre-entrenado**: Cargamos un modelo de detección de objetos pre-entrenado desde un directorio guardado, especificando su ruta.
2. **Preprocesamiento**: Las imágenes deben ser cargadas y ajustadas para ser aceptadas por el modelo. Se convierten a matrices numpy y se expanden para agregar la dimensión del batch.
3. **Inferencia**: Pasamos la imagen al modelo para obtener las predicciones de los objetos detectados, que incluyen las coordenadas de las cajas delimitadoras, las clases y las puntuaciones de confianza.
4. **Visualización**: Finalmente, utilizamos las utilidades de visualización para dibujar las cajas delimitadoras y las etiquetas sobre la imagen.
esta clase la verdad me quede un poco confundido con lo que hace, sentí que fue como copiar y pegar.
Tuve el siguiente error al importar el model_builder:
ImportError: numpy.core.multiarray failed to import
Para solucionarlo desinstale los siguientes paquetes:
Pd. Estoy usando colab y este no me permite instalar las versiones especificas que propone el profesor.
Hola!
Gracias por la propuesta para solucionar el problema. Se han actualizado algunos paquetes y ahora puede devolver ese error. Una forma de solventar el error, es descargar una versión concreta de numpy:
!pip install numpy==1.22.4
antes de importar por primera vez el paquete numpy dentro del notebook:
import numpy as np
En Colab, es posible instalar paquetes con versiones concretas de la forma anteriormente indicada:
!pip install numpy==1.22.4
Espero que te sirva y muchas gracias por el reporte!
Sergio
DEMASIADO FRUSTRANTE ESTE CURSO, he intentado por dos meses instalar la API de object_detection de manera que la linea from object_detection.builders import model_builder funcione, pero ha sido imposible.
DEMASIADO FRUSTRANTE.
Te entiendo, es frustrante porque el curso está bastante desactualizado. Te guio un poco porque también estuve pegado allí.
Normalmente el error siempre aparece en la consola y nos dice que pasa. En mi caso eran las librerias 'Demasiado viejas' Para eso debia actualizar !pip install protobuf==3.20.1
Por ahi vi el comentario de otro compañero que debiamos actualizar las librerias de !pip install tensorflow==2.15.0!pip install keras==2.15.0 No sé si influya, pero de todas formas lo dejo
Usa alguna IA para que te explique el error y como puedes solucionarlo (Gemini, claude, chatgpt) No es necesario la version paga
P.D: Me volví a quedar pegado porque le modelo pre-entrenado no existe, al parecer cambiaron la ruta o debo descargar otro. Estoy trabajando en ello
Creo que sería bueno en alguna parte del curso dar una instruccion detallada de las dependencias, al dia de hoy encuentro demasiados inconvenientes ejecutando los pasos de esta clase y la carga de los modelos posee demasiados problemas de dependencias.
No es intuitivo la configuración del ambiente necesario para el uso del modelo.
¡Hola! Me sale este error al importar from object_detection.utils import config_util
cannot import name 'eval_pb2' from 'object_detection.protos' (/usr/local/lib/python3.8/dist-packages/object_detection/protos/__init__.py)
¿Qué hago?
Hola!
Te recomiendo revisar las versiones de TensorFlow y opencv-python-headless, siguiendo las que se indican en los notebooks, además de revisar que la instalación del módulo object_detection no devuelve ningún error.
Un saludo!
este problema se debe a que NO se instalo de forma correcta object_detection hay una posibildiad de que lo hayas instalado con pip object-detection.
Eso NO es lo ideal, puesto que genera varios errores, object detection debe ser instalado desde el repositorio de git, Tensorflow, models, research, object detection etc :D
Ya no pude continuar, queda la sensación de frustración porque a partir de las siguientes líneas from object_detection.builders import model_builder ya no funcionó y no pude corrgirlo ni usando IA, sería prudente poner los ajustes pertinentes para asegurarse que esto funcione. En mi caso no soy programador de profesión, he aprendido python aquí en la plataforma pero a pesar de las sugerencias no logré corregirlo, y de verdad que hice bastantes adecuaciones durante todas las clases pasadas. Ojalá pudieran actualizar los notebooks mientras los cursos estén vigentes
Para usar el modelo, actualmente debido a las dependencias, en lugar de usar object_detection de model garden, usé la version oficial que es vision y para importar la red entrenada ocupo las dependencias:js from official.vision.modeling import factory from official.core import exp_factory y para importar el modelo que se muestra en clase:```js
exp_config = exp_factory.get_exp_config('ssd_resnet50_v1_fpn_640x640_coco17_tpu-8')
model = factory.build_model(exp_config)
model.summary()
No se formatea bien el código, pero aquí está de nuevo:
from official.vision.modeling import factory
from official.core import exp_factory
exp_config = exp_factory.get_exp_config('ssd_resnet50_v1_fpn_640x640_coco17_tpu-8')model = factory.build_model(exp_config)model.summary()
Si hay alguien que quiere usar este cuaderno en entorno local, en Windows, hice un repositorio que explica la instalación de los paquetes necesarios. Espero sea útil.