Reconocimiento de Objetos: introducción y visión general (con Tensorflow)
Introducción
Aunque el reconocimiento de objetos era una tarea relativamente avanzada hasta hace poco, los avances en el campo de las redes de aprendizaje profundo han facilitado enormemente esta tarea y la han hecho mucho más rápida en términos de rendimiento. Las técnicas actuales más avanzadas en aprendizaje automático son lo suficientemente rápidas como para analizar videos y transmisiones en tiempo real, y no requieren conjuntos de datos extremadamente grandes para entrenar las redes neuronales que las sustentan. De hecho, como señalamos en las guías, existen muchos modelos preentrenados disponibles en internet que pueden ser fácilmente incorporados en el modelo de detección de objetos que desees desarrollar. Un enfoque típico para la detección de objetos suele seguir una secuencia de etapas: primero, se aplican algoritmos para identificar y localizar posibles objetos en una imagen. Una vez que se han detectado las áreas de interés, se emplean modelos de aprendizaje automático o redes neuronales para clasificar estos objetos en categorías específicas. Este proceso implica entrenar los modelos con grandes cantidades de datos etiquetados, permitiendo que el sistema aprenda a reconocer patrones y características distintivas de cada objeto. Finalmente, los resultados se analizan y, en ocasiones, se ajustan para mejorar la precisión y reducir los falsos positivos. Los marcos típicos de detección de objetos funcionan de la siguiente manera. El primer paso es generar una región de interés utilizando un algoritmo especializado. Estas regiones consisten en cajas delimitadoras alrededor del objeto de interés, y múltiples instancias de ellas típicamente cubren toda la imagen. Una vez que se crean las cajas delimitadoras, se extraen características visuales para cada caja identificada. En este paso, el modelo revisa la presencia de objetos que podrían haber sido predefinidos basándose en ciertas características visuales. Finalmente, el modelo combina las cajas delimitadoras superpuestas para obtener cajas delimitadoras distintas, en un proceso llamado "supresión de no máximos".
Detección de objetos frente a clasificación de imágenes
Aunque estos dos conceptos parecen similares, el modo en que procesan imágenes es bastante distinto, al igual que sus aplicaciones. Un clasificador de imágenes se utiliza para verificar si una imagen corresponde a una cierta categoría. Por ejemplo, identificará si la imagen es de un 'gato' o un 'perro'. En cambio, un algoritmo de detección de objetos está diseñado para localizar la posición de varios objetos en una imagen objetivo; podría identificar 2 gatos y 3 perros en una sola imagen.
Los dos conceptos no son excluyentes. Si tu objetivo es verificar si una imagen pertenece a cierta categoría, a veces el objeto en cuestión es demasiado pequeño en comparación con la totalidad de la imagen. En estos casos, puede ser conveniente realizar primero la detección de objetos y luego aplicar la clasificación de imágenes.
Por ejemplo, al trabajar con placas de circuito y detectar si tienen algún defecto, podría parecer inicialmente un problema de clasificación, ya que se trata de determinar si están correctas o incorrectas. No obstante, dado que los defectos en las placas pueden ser muy pequeños, es más conveniente usar el reconocimiento de objetos y crear un conjunto de datos para entrenarlo de antemano. Tal como ocurre al clasificar tipos de hongos o vidrio en scikit-learn, la precisión para identificar las sutilezas del conjunto de datos es fundamental.
Un modelo de clasificación de imágenes está diseñado para generar características de la imagen utilizando varios métodos de aprendizaje profundo. Generalmente, las características resultantes son agregados de la imagen original, lo cual no siempre es lo que se busca. Por el contrario, la detección de objetos te permite analizar la imagen con mayor detalle y buscar patrones a un nivel más minucioso.
Datos necesarios para entrenar modelos de reconocimiento de objetos
Se requiere de datos para crear un modelo de reconocimiento de objetos, y no cualquier tipo de datos. Se necesita específicamente datos etiquetados, que consisten en imágenes con cajas delimitadoras predefinidas, junto con etiquetas y coordenadas. Cuando tienes una imagen, debes proporcionarle al modelo las coordenadas x e y, así como la clase del objeto que te interesa, para que el modelo sepa qué tipo de objeto está ubicado en qué parte de la imagen.
No es sorprendente que cada vez que se discute un problema de reconocimiento de objetos surja la pregunta: ¿Cuántas imágenes etiquetadas se necesitan para entrenar adecuadamente la red? Si bien esta es una buena pregunta, quizás sea más importante considerar el alcance del modelo y reflexionar sobre cómo se va a utilizar.
Se recomienda contar con un conjunto de datos amplio para trabajar, idealmente con más de cien o incluso mil imágenes etiquetadas. Además, estas imágenes deben ser representativas, y los números mencionados son por cada clase de objeto. Para quienes se aventuran en proyectos de aprendizaje automático que involucran análisis de imágenes, comprender la aplicación de estas técnicas en contextos similares puede ser más accesible al explorar recursos como Detección de personas en secuencias de video usando Python, OpenCV y aprendizaje profundo. Asimismo, el término representativas en este contexto significa que las imágenes deben coincidir con los tipos de escenarios y casos de uso que se tienen en mente desde el inicio del proyecto.
Por ejemplo, un modelo de detección de señales de tráfico necesitará imágenes de las mismas señales en distintas condiciones meteorológicas, de lo contrario tu aplicación podría no funcionar como esperas. Al igual que con cualquier otro algoritmo de aprendizaje automático, no esperes resultados milagrosos de tus modelos, ya que solo son tan buenos como la cantidad de datos con los que fueron entrenados.
Generación de propuestas de región
Para que el modelo pueda identificar áreas de interés en una imagen, se pueden utilizar varios algoritmos diferentes. Uno de ellos se llama "búsqueda selectiva", y se define como un enfoque basado en la agrupación. Esto significa que el algoritmo intenta agrupar píxeles siguiendo un patrón y luego genera propuestas de regiones basándose en los grupos resultantes.
Existen otros métodos que intentan extraer características visuales más complejas de la imagen para generar regiones. Además, también puedes optar por un algoritmo de fuerza bruta que omite el análisis y simplemente escanea la imagen de arriba a abajo con el mayor detalle posible. Sin embargo, este enfoque no considera las características de la imagen.
Como era de esperarse, hay un equilibrio que debe considerarse al elegir el método deseado para la generación de propuestas de regiones, concretamente en cuanto al número total de regiones en comparación con la complejidad computacional. Es lógico pensar que con más regiones hay más posibilidades de detectar el objeto deseado. Por otro lado, esta tarea es muy costosa en términos de complejidad computacional. Además, podrías perder la capacidad de realizar la detección de objetos en tiempo real, lo cual es una desventaja importante para ciertos casos de uso.
Aun así, existen situaciones en las que este enfoque puede funcionar si conoces los detalles de antemano. Por ejemplo, al buscar peatones en una imagen, puedes reducir significativamente la cantidad de áreas de interés, ya que suelen tener una proporción de 1.5. Esto te permite ignorar otras proporciones y aumentar notablemente la velocidad de ejecución de tu modelo.
Extrayendo las características deseadas
Dado que a menudo trabajas con imágenes de diferentes tamaños, la extracción de características está diseñada para reducir cada imagen a un conjunto fijo de características visuales, eliminando así el problema. De hecho, la mayoría de los modelos de clasificación de imágenes están diseñados para utilizar métodos muy efectivos de extracción de características visuales.
El objetivo de estos modelos es extraer características para determinar a qué clase pertenece una imagen, y existen diversas metodologías para ello. Se pueden utilizar métodos de histogramas, aprendizaje profundo e incluso filtros, aunque todos conducen al mismo resultado final.
Un marco de detección de objetos generalmente se diseña utilizando modelos de clasificación de imágenes preentrenados, porque de esta manera se pueden extraer características visuales relevantes para tu caso de uso a partir de una variedad de conjuntos de datos generales. Existen muchos de estos conjuntos de datos disponibles en internet, como MS CoCo, que te permite entrenar un modelo en características genéricas. Se recomienda experimentar con diferentes enfoques, especialmente si deseas mejorar el modelo y adaptarlo mejor a tus necesidades específicas.
Cómo funciona la supresión de no máximos
En resumen, el algoritmo de supresión de no máximos te permite unir detecciones superpuestas en una imagen en una sola caja delimitadora. Este paso es crucial si tus imágenes suelen contener muchos objetos diferentes. Sin embargo, es importante mencionar que la SNM puede requerir un poco de ajuste de hiperparámetros para funcionar correctamente con tu modelo.
Métricas utilizadas para la evaluación
El reconocimiento de objetos se puede evaluar mediante varias métricas, siendo una de las más comunes el "mAP" o "media de precisión promedio". Esta métrica varía de 0 a 100, donde los valores más altos se consideran mejores. Sin embargo, es importante señalar que estos valores no indican la precisión de la clasificación.
En términos sencillos, este procedimiento asigna a cada caja delimitadora una puntuación que indica la probabilidad de contener un objeto. Luego, se genera una curva de precisión-revocación (PR, por sus siglas en inglés) para cada clase al variar el umbral de puntuación. La precisión media se calcula como el área bajo la curva PR. Finalmente, se calcula el mAP obteniendo la AP para cada clase y promediando todos los valores obtenidos para las clases disponibles.
Para determinar la detección, el modelo analiza la "intersección sobre la unión", conocida como IoU o solapamiento. Este valor de IoU debe superar un umbral específico para que la detección se considere un verdadero positivo. Un umbral común es 0.5, lo que explica por qué se utiliza frecuentemente la notación [email protected] para referirse al IoU en este proceso.
La API de Detección de Tensorflow
Explora el funcionamiento interno de los algoritmos SSD y Faster R-CNN para comprender cómo se implementan en la API de Detección de TensorFlow de Google.
Para empezar, es necesario aclarar algunos conceptos básicos antes de avanzar. Por lo tanto, es crucial comprender el funcionamiento esencial de SSD y Faster R-CNN, ya que son los algoritmos que impulsan la API de Detección de Tensorflow.
Finalmente, podemos examinar cómo Tensorflow utiliza estos conceptos para lograr sus resultados. Para empezar, lo destacable del Tensorflow Detection API es que integra muchas de las ideas mencionadas anteriormente en un único paquete, y además permite cambiar fácilmente entre diferentes métodos. Utilizando la API, es posible definir un modelo de detección de objetos mediante archivos de configuración específicos, mientras que Tensorflow se encarga de organizar todo lo demás.
La carpeta Protos
Dado que la API admite una gran variedad de componentes diferentes, se recomienda revisar la carpeta "protos", donde se encuentran todas las definiciones importantes de funciones. Algunas de ellas incluyen también protos de preprocesamiento, como ssd, eval y faster_rcnn.
El modelo SSD (Detección de Caja Multibox de Un Solo Disparo)
En 2016, investigadores de Google presentaron el modelo SSD, el cual emplea una única red neuronal profunda que combina la extracción de características con propuestas regionales para identificar y detectar objetos. Si estás interesado en crear tu propio sistema de aprendizaje profundo para experimentar con modelos como SSD, el artículo Construyendo tu propia máquina de aprendizaje profundo en 2023: algunas reflexiones ofrece ideas prácticas.
Para empezar, se utilizan múltiples cajas predeterminadas con diferentes escalas y proporciones en los mapas de características. Luego, las imágenes pasan por una red de clasificación de imágenes, donde se calculan los mapas de características y se extraen las características de cada caja delimitadora en un solo paso. Cada categoría de objeto también recibe un puntaje en cada caja predeterminada. Después de eso, se calculan los desplazamientos de ajuste para cada caja, de modo que se ajusten mejor a la verdad fundamental.
Para manejar diferentes escalas de objetos, distintos campos receptivos se corresponden con diferentes mapas de características en la red convolucional. Gracias a esto, se realiza el trabajo con una sola red, lo que permite velocidades de procesamiento rápidas, como 59 fotogramas por segundo para una entrada de 300 x 300.
Uso de diferentes archivos de configuración
Dado que hay varios parámetros importantes que considerar al trabajar con la arquitectura SSD, vamos a analizar algunos archivos de configuración de ejemplo y profundizar en cada uno de ellos.
Para empezar, no todas las redes de clasificación son iguales, ya que cada una de ellas tiene ciertas fortalezas y debilidades. Por ejemplo, mientras que la arquitectura de ResNet permite una alta precisión general, la red InceptionV3 está diseñada para una mejor detección de objetos a múltiples escalas. Además, existe también la red MobileNet, que está entrenada para funcionar con muy pocos recursos computacionales.
Para comprender mejor las ventajas y desventajas de elegir una red sobre otra, puedes analizar su desempeño con ImageNet y considerar el número total de parámetros utilizados para entrenar el conjunto de datos original. En la sección "feature_extractor" encontrarás más información sobre el extractor de características.
En segundo lugar, es fundamental tener en cuenta los parámetros relacionados con las proporciones y los cuadros predeterminados. Los datos etiquetados presentan una variedad de proporciones y escalas para los cuadros de delimitación, pero los mejores resultados se logran al considerar el caso de uso específico. Además, es importante asegurarse de que la red no realice trabajo innecesario fuera de las escalas y proporciones deseadas.
Estos parámetros se pueden ajustar en la sección "ssd_anchor_generator", aunque es importante tener en cuenta que ampliar el rango de escalas y proporciones puede mejorar el rendimiento, pero solo en determinadas situaciones y con beneficios decrecientes.
Las dos secciones adicionales que necesitan tu atención antes de entrenar el modelo son “image_resizer” y “data_augmentation_options”. Trabajar con imágenes de gran tamaño tiene desventajas en cuanto al rendimiento, pero es beneficioso si se trata de objetos pequeños que son difíciles de detectar. Además, si trabajas con diferentes escalas, la augmentación de datos es un paso esencial en el contexto de SSD. Por último, también puedes ajustar el archivo de configuración "train_config" para definir el tamaño del lote y la tasa de aprendizaje. Los valores de estos parámetros dependen del tamaño de tu conjunto de datos, y es importante evitar el sobreajuste.
El modelo Faster R-CNN
A diferencia de SSD, el modelo Faster R-CNN fue desarrollado por Microsoft y, como su nombre sugiere, se basa en el R-CNN, con mejoras en el rendimiento. Como antecedente, el R-CNN detecta objetos mediante un enfoque de múltiples fases, utilizando una búsqueda selectiva para generar propuestas de regiones. Estas regiones se procesan a través de una red de clasificación, tras lo cual se emplea un SVM para clasificar las diferentes regiones.
Por otro lado, Faster R-CNN es un enfoque de extremo a extremo, ya que utiliza una Red de Propuestas de Regiones (RPN) en lugar de las cajas delimitadoras predeterminadas para generar el conjunto fijo de regiones. Además, esta RPN logra propuestas de regiones prácticamente sin costo adicional al utilizar las características convolucionales obtenidas de la red de clasificación de imágenes. Las puntuaciones de objetividad y los límites de los objetos se predicen en cada posición mediante una red completamente convolucional, es decir, la RPN.
A pesar de estas diferencias, tanto el SSD como el RPN tienen una estructura bastante similar, ya que las predicciones de las cajas delimitadoras no se generan de la nada. Sin embargo, una red RPN toma los mapas de características y desliza una ventana sobre ellos, mientras que los conjuntos de propuestas se calculan a diversas proporciones y escalas mediante la ventana deslizante en cada ancla o ubicación. Los resultados son cajas delimitadoras ajustadas, al igual que con SSD.
En otras palabras, lo que hace una RPN es dirigir la atención de la red hacia áreas que parecen prometedoras o interesantes. Todos los componentes están integrados en un solo sistema, aunque el entrenamiento puede realizarse en varias etapas o de manera integral.
Casos de uso para Faster R-CNN
No hay diferencias significativas entre SSD y Faster R-CNN en cuanto a los detalles de uso. Sin embargo, es importante mencionar que si buscas un mejor rendimiento en mAP, generalmente Faster R-CNN supera a SSD, aunque esto requiere sacrificar más poder de cómputo.
En cuanto a las secciones relevantes sobre Fast R-CNN, puedes revisar la configuración de “first_stage_anchor_generator”, donde encontrarás las definiciones de los anclajes generados por el RPN. Si deseas ajustar el modelo para detectar objetos más pequeños, puedes modificar el parámetro de “stride”, que controla los pasos de la ventana deslizante.
Por último, los desarrolladores de Faster R-CNN sugieren utilizarlo en conjuntos de datos más pequeños, aunque esto no es una regla estricta.
Reflexiones finales
Aunque estas arquitecturas son las más populares en la detección de objetos, existen otras que también logran resultados similares. Sin embargo, no todas están integradas en la API de Detección de Tensorflow todavía, aunque podrían añadirse en el futuro.
Compartir