Logo Studenta

REPORTE_PROYECTO_FINAL_Eduardo_Antonio_Rodriguez_Guerra

¡Este material tiene más páginas!

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

Continuar navegando

Materiales relacionados