CarlosTMX / cetys_cat_recognition

0 stars 1 forks source link

Cómo correr el CTF bajo petición #1

Closed nepito closed 6 months ago

nepito commented 7 months ago

Pendientes

Hecho


Hola @CarlosTMX ya avanzó un paso más el CTF, felicidades 🎉.

El Actions nos indica, cuál es el siguiente paso a seguir. El siguiente paso es renombrar dos archivos.

¿Donde haces el call a archivo .pt de Yolo?

Acabamos de ver que ya consignaste el archivo yolov8OnlyCats_602020.pt en este repositorio. Yo creo que eso puede funcionar muy bien.

¿Cómo podría correr el CTF bajo petición?

La petición está tronando porque los archivos Dockerfile y Makefile tienen terminación .txt. Lo primero que debemos hacer es borrar esa terminación.

Una vez hecho eso, para volver a correr el CTF bajo petición:

1. Nos vamos a la pestaña de todos los Actions

ss_1

2. Escogemos la última corrida del CTF

ss_2

3. Adentro de cada corrida está el botón "Re-run jobs" en el ángulo superior derecho

ss_3

4. Finalmente selecciona la opción "Re-run failed jobs"

ss_4

nepito commented 7 months ago

¿Cómo interpretamos la salida del Actions?

El Actions nos dará retroalimentación de cómo vamos avanzando. Las pistas que saquemos de las salidas del Actions nos indicarán los pasos a seguir.

Por ejemplo, en la salida actual vemos:

Que ya avanzamos un paso más.

En las corridas anteriores, el CTF no podía clonar. Ahora ya clona exitosamente: image En el siguiente paso,

No puede encontrar el Dockerfile.

Esto es porque el archivo actualmente incluye la terminación txt. El CTF espera el nombre sin terminación. image Esto quiere decir que el siguiente paso es renombrar el archivo, removiendo su terminación.

CarlosTMX commented 7 months ago

Hola @nepito,

Vaya era más sencillo de lo que parecía, no había notado que los había subido como .txt, pero ya veo que cuando se descargaron los archivos se descarga automáticamente en ese formato.

Actualmente ya está corriendo el CETYS classifier, pero los resultados son muy diferentes a lo que yo obtuve con el dataset que ustedes me dieron, lo cual se me hace muy extraño (ver imagen de abajo) ya que con ninguno de los modelos que había entrenado obtuve resultados tan bajos.

image_2024-05-06_094921464

Para poder entender un poco más este resultado, quisiera saber ¿dónde se guardan el output de las pruebas? para ver si esto me permite hacer algún tipo de corrección.

nepito commented 7 months ago

@CarlosTMX qué bueno que ya estamos viendo resultados del clasificador 🎉🎉🎉

Los resultados que vemos son del dummy_classifier, por eso no son los que esperabas.

Para que podamos evaluar el clasificador de CETYS deberás hacer algunas modificaciones al Makefile. En la versión actual de Makefile, lo único que hacemos es copiar las fotos cuyo nombre empieza con c y las clasificamos como con gato.

Debes sustituir la línea 3 del Makefile con las instrucciones para poder correr el clasificador del CETYS.

¿Tú cómo corres localmente tu clasificador?

CarlosTMX commented 7 months ago

@nepito es un archivo de python muy sencillo:

Aquí uno de los detalles que estoy notando es que desconozco la dirección donde se tienen alojadas todas las fotos de gatos a analizar, ya que supongo que no son las direcciones que vienen en el Make por defecto. El otro es que tampoco tengo la dirección de donde quisieran que se alojaran las fotos resultantes para poder hacer el análisis de accuracy, specificity, etc. También, pensando en el tipo de output del programa, ¿ustedes solo almacenan las fotos que detecta como gato? o ¿es necesario crear una carpeta para todo lo que detecta y otra para todo lo que no detecta? En mi caso, yo almaceno todo en una sola dirección y solamente voy aumentando un contador cada vez que se genera un bounding box, permitiéndome sacar así mis propios cálculos.

Revisando tu repo de cat_recognition, en tu Dockerfile, veo que ahí instalas numpy, opencv y de más, por lo que yo entiendo que ahí debería de instalar ultralitycs para poder correr debidamente YOLO... o ¿me equivoco?

Todas estas dudas están saliendo porque es la primera vez que trabajo con Make, entonces estoy todavía en el proceso de aprendizaje.

Por cierto, gracias por la ayuda.

nepito commented 7 months ago

Hola @CarlosTMX 🖖🏿.

Muchas gracias por la respuesta tan detallada 🙌🏿. Esto nos ayuda mucho para poder contestar mejor.

El siguiente paso es que consignes el archivo de Python del que nos platicaste. Así podremos darte ayuda específica.

Abajo contestamos las dudas que te surgieron.


🐍 Consignar el archivo

Con tu archivo de Python podremos hacer la clasificación. Para eso tendremos una instrucción similar a detection_with_yolo del Makefile de cat_recognition:

detection_with_yolo: resize_images
    python src/yolo_detections.py

Pero en lugar de detection_with_yolo esperamos que se llame classification (como está actualmente en tu Makefile).

No te preocupes por los detalles del Makefile los abordaremos poco a poco. Para eso, necesitamos tu archivo para que podamos trabajar con tu estructura de carpetas.

🐋 La instalación de Ultralytics

Como bien dices, la instalación de Ultralytics la debemos hacer en el Dockerfile. Lo que nosotros hacemos es ir agregando las dependencias poco a poco. Aquí te pongo un ejemplo con las librerías que tú mencionaste.

RUN pip install \
    numpy \
    opencv-python \
    ultralytics

Recuerda que con el Makefile y el Dockerfile te podemos apoyar.

🗃️🛠️ Las carpetas del Makefile

En la versión actual de Makefile, lo único que hacemos es copiar las fotos cuyo nombre empieza con c y las clasificamos como con gato:

classification:
    mkdir --parents /workdir/cat_detected
    mv /workdir/camera_trap_photos/c*.jpg /workdir/cat_detected/

Estamos pendientes a cualquier duda y nos emociona tener la oportunidad de ofrecerte ayuda.

Referencias

CarlosTMX commented 6 months ago

Hola @nepito!

Gracias por la respuesta, creo que ya voy entendiendo un poco mejor como funciona la interfaz con su sistema. Ya subí varios de los archivos que creo que serán necesarios, así como algunas carpetas que se requieren, de momento, para poder hacer la detección.

Hasta ahora creo que ha habido buen progreso, aunque si noto que tarda bastante cada vez que se tiene que ejecutar el archivo Docker; supongo que esto es normal, ya que ultralytics trae consigo muchas dependencias y librerías de manera nativa. ¿Existe alguna manera de instalar ultralytics? Creo que esto ayudaría a hacer más eficiente esta parte del proceso. Entiendo que esto funciona muy diferente a un proceso compilado o un VM, pero quizá tu conoces alguna manera y podemos ir trabajando a la par en pulir estos tiempos.

El problema al que me estoy enfrentando actualmente es que en el paso de "Classify photos" me indica que no hay una regla para "classification" (ver imagen de abajo). De lo poco que entiendo de Make, este error me parece que indica que no reconoce la función, por llamarlo de alguna manera, o no encuentra su ubicación y por ende no puede completar la acción.
image

De momento pensé que me hacia falta alguna línea de código o algún archivo que no agregue al repo, pero no veo que podría ser. Me parece hasta un poco raro, porque el Dummy classifier no tiene nada más que el archivo Docker y Makefile y funciona. ¿Pudiera ser que me está faltando algún acceso a su repositorio? o ¿cuál crees que pudiera ser el problema?

Quedo al pendiente de tu respuesta.

nepito commented 6 months ago

Hola @CarlosTMX , nosotros también sentimos que vamos muy bien 🎉🥳🎉🥳🎉🥳.

Revisando este issue, consideramos que ya resolvimos el tema inicial. Es por eso que lo cerraremos.

Con respecto a las últimas dudas, ya tenemos todos los archivos, pero teníamos un error el Dockerfile.

Para resolver la duda con más detalle, le seguiremos en el pr:

En el issue #3 describimos cómo colaborar a traves de un pr.