ESTUDIO E IMPLEMENTACIÓN DE MEJORAS PARA UNA BIBLIOTECA C++ DE DETECCIÓN DE LANDMARKS FACIALES EN IMÁGENES
Fecha
2024-01-18
Autores
Título de la revista
ISSN de la revista
Título del volumen
Editor
Universidad Rey Juan Carlos
Resumen
Este Trabajo de Fin de Grado consiste en evolucionar una biblioteca C++ que, utilizando técnicas de Visión Artificial, permite entrenar y ejecutar estimadores de la posición 2D (mediante árboles de regresión) en la imagen de puntos de interés sobre el rostro (landmarks).
El objetivo principal es permitir la ejecución del entrenamiento e inferencia de los regresores desde python. Esto abre la posibilidad de expansión de este TFG con el uso de bibliotecas de Aprendizaje Automático (p.ej. Scikit-learn, PyTorch o TensorFlow) para conectarlas con el código C++.
Como objetivos secundarios están: unificar los métodos de guardado en disco y guardar los modelos entrenados en un formato XML legible y editable, y permitir la generación de canales para extraer características a partir de una imagen desde funciones implementadas en python.
El código base hace uso de las bibliotecas OpenCV para procesamiento de imágenes, Boost C++ para gestión de punteros y lectura de ficheros, Cereal para realizar el guardado de los modelos en ficheros y OpenMP para paralelizar operaciones. El software final tiene partes desarrolladas en C++ (wrapper y serialización en XML) y en python para la generación de canales personalizada y los ejemplos de uso del código empleando el wrapper.
Durante el desarrollo del recubrimiento python de la biblioteca C++ es necesario asegurarse de que los resultados obtenidos tanto en el entrenamiento como de inferencia de los detectores de landmarks son los mismos. Para ello, se han realizado varios experimentos con diferentes bases de datos que contienen imágenes y anotaciones manuales de landmarks, las cuales son: COFW, 300w y WFLW. Por otro lado, también se evalúa la diferencia de tamaño entre los ficheros XML y binarios generados de los regresores entrenados.
Se ha conseguido crear un wrapper de una biblioteca C++ empleando la biblioteca Pybind11 para ser llamado desde python que devuelve los mismos resultados con un rendimiento muy similar y empleando aproximadamente la misma cantidad de recursos que utilizando la biblioteca desde C++. Por último, se ha conseguido añadir la funcionalidad de guardar los modelos entrenados en formato XML a la ya existente de guardar en formato binario.
Descripción
Trabajo Fin de Grado leído en la Universidad Rey Juan Carlos en el curso académico 2023/2024. Directores/as: José Miguel Buenaposada Biencinto
Palabras clave
Citación
Colecciones
Excepto si se señala otra cosa, la licencia del ítem se describe como Creative Commons Atribución-CompartirIgual 4.0 Internacional