Progreso abril 2023 - RoboticsURJC/tfg-dcampoamor GitHub Wiki

Progreso abril 2023

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_entorno
    
    conda install cudatoolkit=11.8 cudnn=8.1 -c=conda-forge
    
    pip install tensorflow==2.11
    
    pip install opencv-python
    

    Se probaron varios modelos pre-entrenados sobre la imagen test 0.jpeg y a través de la webcam con los siguientes resultados:

    0.jpeg

    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)

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 pandas
    
    pip install tensorflow-object-detection-api
    
    conda install jupyter notebook
    

    Una 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:

    Jupyter Notebook module tensorflow has no attribute gfile.png

    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 por tf.io.gfile, por lo que al sustituirlo se solventó.

    Sin embargo, surgieron otros problemas:

    Parse Error 1 Parse Error 2 Parse Error 3 Parse Error 4 Parse Error 5

    Finalmente, eliminando la línea 172 fine_tune_checkpoint_version del archivo pipeline.config se terminó solucionando, por lo que pudimos terminar de ejecutar el bloque 5.Update Config For Transfer Learning tras cambiar el pipeline_config.model.ssd.num_classes en 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.

    AttributeError module numpy has no attribute typeDict

    Instalamos numpy:

    pip install numpy==1.21
    

    Y volvemos a obtener un error:

    ImportError

    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.

    export PYTHONPATH

    Posiblemente, al haber borrado la fine_tune_checkpoint_version del 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.

    ValueError Chackpoint version should be V2 pipeline fine tune checkpoint version V2

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

    step 100 step 10000

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:

    AttributeError

    Dado que el módulo tf.contrib se 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ódulo tf.contrib.slim por tf.data.

    Tras realizar estos cambios, corremos el programa, obteniendo esta vez el siguiente mensaje:

    ModuleNotFoundError

    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_os por import 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ón from tensorflow.contrib import training as contrib_training por:

    import tensorflow as tf
    from tensorflow.keras import callbacks, optimizers
    

    Otro de los errores que se han obtenido debido a esta incompatibilidad con las versiones más recientes de Tensorflow ha sido: AttributeError

    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:

    Name Error

    Por lo que en la celda en la que se realizan las importaciones, habrá que incluir from object_detection.utils import label_map_util para 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:

    Name Error

    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: Name Error

    Por lo que importamos tensorflow como tf en el bloque previo.

    import tensorflow as tf
    

    Tras solucionar esto e intentar ejecutar de nuevo el bloque, se obtiene otro error similar: Name Error

    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.