Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Página 1 de 39 INSTITUCIÓN: TECNOLÓGICO DE LA LAGUNA CARRERA: MECATRÓNICA MATERIA: INTELIGENCIA ARTIFICIAL DOCTOR: SERGIO LÓPEZ HERNÁNDEZ ALUMNO: RODRÍGUEZ GUERRA EDUARDO ANTONIO MATRICULA: 19131252 PROYECTO FINAL NAVEGADOR NEURONAL DE DIAPOSITIVAS FECHA DE ENTREGA: 07 DE DICIEMBRE DE 2023 de Página 2 de 39 Al principio del semestre tuve la oportunidad de ver diversas herramientas con las cuales pude ir formulando que hacer…. También en diversas ocasiones tuve que exponer en clase y si es molesto que después de decir todo de una diapositiva, recorrer lo necesario para cambiarla, o incluso exponer a lado de la computadora limita mucho ciertos movimientos, ya como ultima alternativa dejé a un compa cambiando la diapositiva, pero siempre pasa o en la mayoría de los casos se le va la onda y casi casi tienes que gritarle, algo que arruina la seriedad de la presentación. Entonces así llego la idea, una red neuronal entrenada para detectar ciertas señales y en función a esa detección cambiar de diapositivas. Dentro de los últimos temas vistos en clase pude observar que para herramientas de visión ya hay cierto grupo de redes neuronales, listas para ser entrenadas con diferentes dataset y que el resultado de dicho entrenamiento lo apliquemos a un sketch que nos permita hacer detección en imágenes, videos o incluso a una cámara en tiempo real. Investigando y asesorándome con el Doctor Sergio, descubrí que la opción mas viable entre costo computacional, facilidad de implementación y que mejor resultados me daba era YOLOv5, pero ¿qué es YOLOv5?.... Yolov5: (You Only Look Once). Este es un sistema de código abierto para la detección de objetos en tiempo real pre-entrenado con el dataset COCO, el cual hace uso de una única red neuronal convolucional (CNN) para detectar objetos en imágenes. En este punto hay una amplia variedad de versiones. Y por si fuera poco este modelo está disponible en Google colap justo para entrenarlo con una computadora en línea y así poder proponer entrenamientos mas rígidos que en entrenamiento un entrenamiento realizado de manera local. Ya una vez establecido donde voy a trabajar debo de establecer las bases del proyecto. La idea ya esta y el medio también. Jugando un poco con Power Point, pude ver que en medio de la presentación puedo hacer ciertas cosas con solo apretar letras del teclado. de Página 3 de 39 Con la tecla W→Ocultaba toda la información de la diapositiva, dejando solamente el fondo. Con la tecla H→ Pasas a la siguiente diapositiva Con la tecla P→ Retrocedes a la diapositiva pasada Entonces, si pudiera encontrar la forma en la que usando Python pudiera simular que aprieto alguna tecla ante determinado evento, podría ajustar ese evento al resultado de alguna de las detecciones. Así encontré la librería keyboard, la cual me permite mandar a llamar a un método que simula que aprieto cierta tecla de la computadora con el siguiente comando. keyboard.press_and_release('q') Ya que tengo el cómo, debo decidir que señales tendría que detectar mi sketch, por comodidad opte por realizar las señales solo con las manos o en términos mas simples una sola mano. Las señales que sometería a entrenamiento fueron 4 Un amor y paz Un Like de Página 4 de 39 Un puño Una palma Hay otras señales que fueron descartadas como la bridney señal (demasiado irreverente), la que hacen en star trek (ya que la mayoría de la gente es incapaz de imitar). Y con esto comenzamos la búsqueda de un dataset decente, entre imágenes que me pasaron unos compañeros e imágenes de internet tenia listos 2 dataset, uno para entrenamiento que consta de 30 imágenes de cada señal, y uno para entrenamiento que solo tiene 6 de cada categoría. Ya una vez que tenía las imágenes correctamente etiquetadas, tenia que ver la forma de ingresarlas en colap en el formato correcto para su entrenamiento. Apartir de esa necesidad encontré el siguiente repertorio https://github.com/DavidReveloLuna/YoloV5. https://github.com/DavidReveloLuna/YoloV5 de Página 5 de 39 Ya después de clonar el repertorio y ejecutar el sketch tendremos la siguiente carpeta. Creamos la carpeta train_dataset y dentro de ella tendrá que ir otras dos carpetas imágenes, labels y en cada una de esas dos carpetas deberemos tener otras dos, train and val. Guardadas justo en la carpeta destinada al repertorio. de Página 6 de 39 Después tomamos todas nuestras imágenes y las pegamos en las carpetas de train en caso de que estén tomadas en cuenta para entrenamiento o para evaluación. Algunos ejemplos de las imágenes destinadas a entrenamiento. de Página 7 de 39 Ya con las imágenes correctamente guardadas, debemos ingresar al labelimg.py En la sección de view ponemos autoguardar, esto para que después de seleccionar el área de interes la información se guarde al instante. Abrimos el directorio donde se encuentran las imágenes del entrenamiento, train_dataset/images/train Y en change dave directori, seleccionamos la carpeta de train ubicada en el apartado labels, básicamente indicaremos donde quereos guardar la información del área de interés. Nos aseguramos de que este seleccionada la opción de yolo. Y comenzamos…. Para comenzar la selección apretamos la tecla w, y antes se seguir estaba omitiendo que tenemos que borrar los datos de un archivo, entonces cerramos labelimg.py, ingresamos a la carpeta de este repertorio. de Página 8 de 39 Nos dirigimos a data. Y a este será el documento al que le borremos toda la información, ya que cuando recién se instala viene precargado con 14 categorias que no nos van a servir para nada y solo nos provocaran estragos a la hora del entrenamiento. Ya una vez borrado este, volvemos abrir el archivo desde la ventana de comandos. de Página 9 de 39 Cuando seleccionamos de manera correcta la etiqueta se generará el siguiente archivo: El cero significa que estamos trabajando con la primera categoría, y los 4 números la ubicación de los 4 puntitos que componen el área de la imagen, hacemos esto con el resto de las imágenes y cuando terminemos cambiamos a las carpetas de val Ya cuando tenemos el txt de todas las imágenes procederemos a comprimir el train_data. Ahora si desde yolov5 en colap Guardamos una copia en nuestro drive. Después en colap importamos el archivo extraído de Página 10 de 39 Y con el siguiente comando lo extraemos: Generando la carpeta train en colap Después… en el repertorio nos indica que tendremos que generar un archivo para decirle a yolov5, tienes 4 categorias y son estas de Página 11 de 39 Se puede generar en el block de notas y solo agregar la terminación requerida .yaml Ese archivo lo cargamos en la siguiente ubicación dentro de colap: Y listo ahora pasamos a la parte del entrnamiento Este código se sitúa en la parte 3. A base de prueba y error encontré que un buen numero de épocas para entrenar seria de 70. Procedemos a comenzar En el primer entrenamiento presentamos estas estadísticas Y en el último: Colap nos genero 2 archivos, uno con la arquitectura de la última época y otro con la mejor arquitectura de la época en la que se registraron mejores resultados, en este caso decidí descargar ambas y probar cual era la mejor, ya que el dataset de evaluación no era tan extenso como para concluir descartar a último entrenamiento. Para encontrar esos archivos accedemos a esta ubicación: de Página 12 de 39 Obvio probe los rsukltados en imágenes antes de descargarlos, para ello use este código: tomando en cuenta que ya tenía 4 imágenes cargadas en colap, diferentes a las del dataset,Prueba 1… de Página 13 de 39 Prueba 2: Prueba 3: Prueba 4: de Página 14 de 39 Por fin tenemos las arquitecturas, ahora trabajaremos con ellas Recomendaciones: Para esto crear un ambiente de Python con la versión 3.9 ya que los requerimientos propuestos en la propia pagina de yolov5 piden librerías cuyas versiones vuelven obsoletas a Python 3.7 y 3,8 Ya cuando tengamos ese ambiente creado ejecutaremos los siguientes códigos en la ventana de comandos, En mi caso como tengo anaconda tuvo que ser desde anaconda prompt Con el primero descargamos jupyter, el otro nos permite la opción de ejecutar determinados kernels en jupyter, el tercero crea un kernel llamado yolov5test El cuarto manda a importar un repertorio el cual contiene en su interior los requerimientos para instalar las librerías solicitadas con todo y versiones. Cuando terminen de instalarse, antes de ejecutar la última línea que abrirá jupter tenemos que copiar y pegar 2 archivos. de Página 15 de 39 Yolov5video es un archivo creado en jupyter para mandas a llamar a una serie de métodos que me permitan usar al archivo best obtenido en colap con mi cámara. Ahora si abramos jupyter desde el ambiente recién creado Ejecutamos yolov5video de Página 16 de 39 El creador de este archivo lo volvió tan fácil que puedes implementar este código ya sea para detectar en imgenes, videos o en la webcam Este archivo lo dejare adjunto en la tarea. Lo probamos… de Página 17 de 39 de Página 18 de 39 Como podemos ver en la última imagen, llegábamos a tener multiples detecciones en un mismo objeto, al principio lo atribui al hecho de que faltara un entrenamiento mejor pero de reflexionar un momento era por que tenia un umbral muy pequeño, solo era cuestión de aumentarlo un poco mas Y ya de Página 19 de 39 Ahora surgía la duda, ya detecta, lo hace bien, pero como desencadenar el evento que deseo ante determinadas detecciones. Reflexionando un rato, me cayo el 20 de que este código usaba métodos de uno llamado detección lo abrí haber que había y me encontré todo esto: de Página 20 de 39 de Página 21 de 39 de Página 22 de 39 de Página 23 de 39 de Página 24 de 39 de Página 25 de 39 de Página 26 de 39 de Página 27 de 39 de Página 28 de 39 Obvio me asuste cuando lo vi, era un código tan potente, pero pensé bueno debe de haber un momento en el que se asigne la etiqueta y se escriba a que categoría aparece, si logro encontrar dicho fragmento y con un if activar el evento deseado lograría resolver mi problema. Esa solución es la que esta seleccionada dentro del código mostrado, el delay lo puse por que en la primera prueba al ponerlo en marcha terminaba pasando diapositivas muy rápido, entonces…. Con solo medio segundo de espera resolvi este problema. Y ya con esto marchando de maravilla. de Página 29 de 39 de Página 30 de 39 Ahora si terminamos de entrenar a nuestra red neuronal. de Página 31 de 39 CONCLUSIONES: Para comenzar, las pruebas en mi casa un lugar con iluminación suficiente, fueron altamente satisfactorias, además como usaba droidcam el procesamiento era super rápido teniendo la computadora cargando. Ahora en la escuela un lugar con poca iluminación, usando la cámara web y mi computadora sin cargar presentaba un procesamiento mas lento y resultados incorrectos. Ósea todo mal, jajaja, detectaba puños donde no era y la señal la mal interpretaba. de Página 32 de 39 Y volvía el problema de las multiples detecciones, Estaba claro que tenía que cambiar a un lugar con mejor iluminación: de Página 33 de 39 de Página 34 de 39 Ya con esto funciono de manera adecuada. Para futuras aplicaciones me gustaría aumentar el dataset y considerar ejemplos en poca iluminación para evitar los problemas presentados en la demostración. Por último, señalar que el curso sobrepaso mis expectativas, y me llevo buenas herramientas para la aspiración de lugares de residencia profesional. También modificaría el umbral para que pueda soportar detección en poca luz. Anexos: de Página 35 de 39 de Página 36 de 39 de Página 37 de 39 de Página 38 de 39 de Página 39 de 39
Compartir