Progreso abril 2023 - RoboticsURJC/tfg-dcampoamor GitHub Wiki

SEMANA 16 (03/04/2023-09/04/2023)
SEMANA 17 (10/04/2023-16/04/2023)
SEMANA 18 (17/04/2023-23/04/2023)
SEMANA 19 (24/04/2023-30/04/2023)
Semana 16 (03/04/2023-09/04/2023)
-
Detección de objetos en imágenes y webcam con TensorFlow
Después de intentar acceder en el código trainer.py y train.py a los tensores en los que se guardaban los datos de pérdida y precisión, entre otros para poder realizar gráficas durante el entrenamiento del modelo, obteniendo únicamente en estos intentos gráficas en blanco, por lo que se decidió paralelamente intentar comenzar de nuevo tomando de base otros foros y repositorios distintos de GitHub.
Por lo que se intentaron seguir los pasos explicados tanto en TensorFlow Object Detection basado en el repositorio de GitHub Real time object detection CPU como en TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Object.
Se consiguió replicar los resultados obtenidos en el ejemplo de TensorFlow Object Detection tanto de detección en imágenes como a través de la webcam gracias a los archivos Detector.py y run_me.py.
El entorno utilizado de la versión 23.3.1 de Anaconda en el que se obtuvieron estos resultados tenía la siguiente configuración:
Versión de python Versión de tensorflow 3.11 2.12 Driver version nvidia-smi Versión de CUDA Versión de cudnn Versión de cudatoolkit Versión de opencv-python 510.108.03 11.6 8.1 11.8 4.7.0 Para crear este entorno se siguiero los siguientes pasos:
conda create -n nombre_del_entorno python==3.11 conda activate nombre_del_entornoconda install cudatoolkit=11.8 cudnn=8.1 -c=conda-forgepip install tensorflow==2.11pip install opencv-pythonSe probaron varios modelos pre-entrenados sobre la imagen test 0.jpeg y a través de la webcam con los siguientes resultados:

-
ssd_mobilenet_v2_320x320_coco17_tpu-8
En imágenes:

En webcam: webcam ssd_mobilenet_v2_320x320_coco17_tpu-8.mp4

-
efficientdet_d4_coco17_tpu-32
En imágenes:

En webcam: webcam efficientdet_d4_coco17_tpu-32.mp4

-
faster_rcnn_resnet50_v1_640x640_coco17_tpu-8
En imágenes:

En webcam: webcam faster_rcnn_resnet50_v1_640x640_coco17_tpu-8.mp4

Sin embargo, las fresas no eran uno de los objectos pre-entrenados y recogidos en el archivo coco.names, por lo que seguía siendo necesario el entrenamiento del modelo escogido.
-
Semana 17 (10/04/2023-16/04/2023)
-
Detección de objetos en webcam con TensorFlow con modelos no pre-entrenados
Para poder detectar, en nuestro caso fresas, es necesario utilizar un modelo entrenado por nosotros. Se utilizó como guía el vídeo Real Time Sign Language Detection with Tensorflow Object Detection and Python | Deep Learning SSD con repositorio Real Time Object Detection.
Semana 18 (17/04/2023-23/04/2023)
-
Detección de fresas en webcam con TensorFlow con modelos no pre-entrenados
El entorno real_object_detection creado para esto tenía las siguientes características:
Versión de python Versión de tensorflow 3.8.16 2.11 Driver version nvidia-smi Versión de CUDA Versión de cudnn Versión de cudatoolkit Versión de opencv-python 510.108.03 11.6 8.1 11.2.2 4.7.0 Después de crear y activar el entorno de anaconda, e instalar el paquete pandas, se ha tenido que instalar el Object Detection API de tensorflow junto con Jupyter Notebook.
conda install pandaspip install tensorflow-object-detection-apiconda install jupyter notebookUna vez habiendo accedido a Jupyter Notebook a través del comando
jupyter notebook, y habiendo empezado a ejecutar bloque a bloque el archivo Tutorial.ipynb, en el bloque 5. Update Config For Transfer Learning aparece el siguiente error:
Se solucionó este problema cambiando en el archivo config_util.py del entorno de anaconda, el paquete
tf.gfile, dado que en TensorFlow 2.0 este paquete se ha reemplazado portf.io.gfile, por lo que al sustituirlo se solventó.Sin embargo, surgieron otros problemas:

Finalmente, eliminando la línea 172
fine_tune_checkpoint_versiondel archivo pipeline.config se terminó solucionando, por lo que pudimos terminar de ejecutar el bloque 5.Update Config For Transfer Learning tras cambiar elpipeline_config.model.ssd.num_classesen la penúltima celda del bloque 5, a una única clase, para poder obtener en el bloque 6.Train the model el comando que tendremos que copiar en la terminal para entrenar nuestro modelo.
Instalamos numpy:
pip install numpy==1.21Y volvemos a obtener un error:

Para solucionar esto, se tuvo que exportar la ruta a models/research y posteriormente volver a ejecutar el comando obtenido del bloque 6 del programa de jupyter notebook para poder empezar el entrenamiento del modelo.

Posiblemente, al haber borrado la
fine_tune_checkpoint_versiondel archivo pipeline.config nos aparezca un ValueError al intentar ejecutar el comando, por lo que habrá que volver a poner en el archivo pipeline.config esta línea para solventarlo.

Finalmente, dejamos entrenando el modelo hasta el paso número 10000 que hemos establecido.

SEMANA 19 (24/04/2023-30/04/2023)
-
Detección de fresas en webcam con TensorFlow con modelos no pre-entrenados
Al ejecutar el bloque 7. Load Train Model From Checkpoint obtenemos el siguiente problema:

Dado que el módulo
tf.contribse eliminó en TensorFlow 2.0 y muchas de sus funciones y herramientas se reorganizaron en otros módulos de TensorFlow o se eliminaron por completo, se procedió a buscar qué módulo sustituye las funcionalidades de este para una versión de Tensorflow 2.0 o superior, como lo es en este caso, por lo que se sustituyó en varios archivos de las librerias del entorno el módulotf.contrib.slimportf.data.Tras realizar estos cambios, corremos el programa, obteniendo esta vez el siguiente mensaje:

Para solucionarlo, al tener que actualizar el código, dada la versión de Tensorflow utilizada, se cambió la línea
from tensorflow.contrib.image.python.os import image_osporimport tensorflow.image as image_ops. También se tuvo que cambiar en la línea 27 del archivo nasnet.py situado en la ruta /anaconda3/envs/real_object_detection/lib/python3.8/site-packages/object_detection-0.1-py3.8.egg/nets/nasnet/nasnet.py , la instrucciónfrom tensorflow.contrib import training as contrib_trainingpor:import tensorflow as tf from tensorflow.keras import callbacks, optimizersOtro de los errores que se han obtenido debido a esta incompatibilidad con las versiones más recientes de Tensorflow ha sido:

Dado que del bloque número 7 del archivo Tutorial_actualizado únicamente se utilizaría en caso de querer cargar un modelo de entrenamiento desde su último checkpoint, volveremos más adelante para terminar de actualizar todos los archivos que contengan módulos, funciones y herramientas relativas a TF 1, que actualmente se hayan reorganizado en otros módulos en TF 2.
Al ejecutar el bloque siguiente ( 8. Detect in Real Time), obtenemos el siguiente mensaje de error:

Por lo que en la celda en la que se realizan las importaciones, habrá que incluir
from object_detection.utils import label_map_utilpara solucionarlo.También es posible que, si no tenemos la variable cap, a través de la cuál vamos a capturar el vídeo de nuestra cámara, definida previamente, exista un error proveniente de la celda en la que se ejecuta la instrucción
cap.release()del tipo:
Por lo que se solucionará borrando esa celda o no ejecutándola.
Al ejecutar el siguiente bloque obtenemos también el siguiente error del tipo NameError:

Por lo que importamos tensorflow como tf en el bloque previo.
import tensorflow as tfTras solucionar esto e intentar ejecutar de nuevo el bloque, se obtiene otro error similar:

Paralelamente, se decició ralizar un tutorial sobre cómo funcionaba Jupyter Notebook dado que nunca antes había trabajado con esta herramienta. Para ello, se revisó la documentación de la página oficial de Jupyter Notebook y se realizaró un tutorial para principiantes de Jupyter Notebook con python, siendo como resultado de esto el archivo Python Starter.