Etiquetando
Ya tuvimos en el primer acercamiento a la actividad de etiquetado en el post Etiquetar. El eslabon mas debil. Donde se explico que es el etiquetado y porque no es una tarea a descuidar o restarle valor a la hora de iniciar un proyecto que requiera este tipo de datos.
En este nuevo post, voy a mostrarte usando la herramienta "LabelImg" como etiquetar, que es etiquetar y que representa. Vamos a hacerlo usando el formato especifico para la arquitectura YOLO en cualquiera de sus versiones. Basicamente porque es una de las mas faciles de entender para nuevos usuarios.
LabelImg.
Esta herramienta de codigo abierto, tiene una interfaz sencilla, esta escrita en python y es muy facil de usar. Si necesitas descargarlo aca podes.
No voy a dar un curso de uso respecto a LabelImg, no es el sentido de este articulo.
En cambio si te voy a mostrar que representa usar esta herramienta.
Pero no antes de decirte que es bastante mas comodo utilizar los atajos de teclado que ofrece la herramienta. Aca te dejo los atajos por si queres usarlos.
Ctrl + u | Carga todas las imagenes de un directorio |
Ctrl + r | Cambiar la ruta de destino de las anotaciones |
Ctrl + s | Guardar |
Ctrl + d | Copiar la etiqueta actual |
Ctrl + Shift + d | Borrar la imagen actual |
Space | Marcar la imagen como verificada (check) |
w | Crear un recuadro |
d | Siguiente imagen |
a | Imagen anterior |
del | Eliminar el recuadro seleccionado |
Ctrl++ | Acercamiento mediante zoom |
Ctrl-- | Alejamiento mediante zoom |
↑→↓← | Flechas para mover el recuadro |
Manos a la Obra.
Cuando decidimos que vamos a etiquetar dentro de nuestro proyecto. Si estamos usando un modelo YOLO para la deteccion de objetos en imagenes. Necesitamos crear de alguna manera, figuras que contengan cuatro (4) datos de forma precisa.
- La coordenada del eje X del centro del objeto a detectar.
- La coordenada del eje Y del centro del objeto a detectar.
- El ancho total del objeto a detectar.
- El alto total del objeto a detectar.
Para lograr obtener esta informacion requerimos en el caso de YOLO. Contar con la construccion de un recuadro o bounding box. En otras palabras de un cuadrado o rectangulo, que contenga en su interior el objeto que necesitamos detectar.
LabelImg es la herramienta que nos permite crear estos recuadros o bounding boxes.
Cuando nos ubicamos para dar inicio al dibujo de un bounding box, sobre una imagen. Podemos ver sobre el margen inferior derecho las coordenas en las que estamos posicionados dentro de toda la imagen respecto a ambos ejes tanto X como Y.
Y porque es importante saber esto? Bueno para resumirlo, es porque cuando guardamos esta deteccion, el resultado no seran las coordenadas en el extremo superior izquierdo del recuadro del auto azul como en este caso (139,261), la del extremo superior derecho (x, y), inferior izquierdo (x, y) e inferior derecho (x, y). En cambio, el resultado de la actividad de etiquetar usando LabelImg, va a mostrar el centro de las coordenadas X e Y del recuadro y ademas el ancho y alto del mismo.
Volviendo la informacion que se muestra en el extremo inferior derecho, datos meramente informativos y de interes visual. Que permiten comprender el sentido de la medicion. Es decir, cero de X, tiene su origen en la zona superior izquierda y desciende aumentando de valor hacia la zona inferior de la imagen. Mientras que en el eje Y, cero tiene su origen en el extremo superior izquierdo y aumenta hacia el extremo derecho.
Un dato de color a saber y tener en cuenta. Es que las detecciones por default, cuando se producen, mientras se ejecuta un modelo de red neuronal convolucional entrenado mediante YOLO. Tienen su medidas X e Y, en el centro de los Bounding Boxes o recuadros.
Cuando logramos generar el recuadro sobre el area de interes en la imagen. De acuerdo a nuestro objetivo, vamos a contar con la posibilidad de nombrar nuestra etiqueta bajo nuestros propios terminos. Por ejemplo, en la siguiente imagen podes ver que etiqueto mediante recuadros distintos, una serie de ruedas de vehiculos que se observan en la imagen cargada.
Vamos a destacar algunas situaciones que se pueden apreciar en la imagen:
- Primero. Que se puede generar mas de un bounding box en una misma imagen. Es decir que puedo tener como resultado mas de una linea representativa en el archivo .txt que se genera como resultado de la tarea de etiquetar.
- Segundo. Que al generar el bounding box, debemos asegurarnos, de intentar que en su interior solo quede el objeto que necesitamos detectar. Con la finalidad de de ofrecerle a nuestra red de deteccion YOLO. Solo datos que realmente muestren las caracteristicas, indentificativas del objeto de forma cierta y con el menor error posible.
Una vez que ya etiquetamos todas nuestras imagenes; Que por cierto tienen que ser en cantidad suficiente para permitirle a la red lograr resultados de calidad; vamos a obtener como resultado y en el directorio de salida seleccionado, una serie de archivos con formato .txt que contendran en su interior escrito renglon a renglon. El ID de la clase "rueda", las coordenadas de los ejes X e Y del centro del recuadro, el ancho del recuadro y el alto del recuadro.
Otro dato de color que podemos ver en la imagen de arriba, es que LabelImg por defecto genera el archivo.txt, ya "normalizado", respecto a los datos de los ejes, ancho y alto. Esta normalizacion es entre 0 y 1. Esto ayuda a la red a entrenarse de forma mas efectiva, acelerar la convergencia de aprendizaje, evitar la variabilidad excesiva de los datos, permitir a la red enfocarse en aprender patrones relevantes evitando diferencias de escala y mejora el rendimiento al generalizar mejor.
Otro archivo que obtenemos como resultado es un archivo llamado classes.txt, donde al final del mismo, veremos nuestra etiqueta creada.
Espero que esto te ayude a entender que representa usar una herramienta de etiquetado como LabelImg, entender ademas como se etiqueta y para que se etiqueta.
Saludos! y ya sabes no dudes en consultar a mi correo si tenes dudas.