Translation into Spanish of an interesting article by Peter Warden, CTO of Jetpac Inc, author of “The Public Data Handbook” and “The Big Data Glossary for O鈥橰eilly”, builder of “Open Heat Map”, the “Data Science Toolkit”, and other interesting open source projects.
A free translation by Chema, a Spain-based translator specializing in English to Spanish translations
An original text written by Peter Warden, originally published in
https://petewarden.com/2022/02/21/non-max-suppressions-how-do-they-work/
* * *
Llevo casi una d茅cada trabajando con redes neuronales para realizar procesos de reconocimiento de im谩genes, pero debo admitir que nunca entend铆 bien c贸mo se generan algunas cosas, como por ejemplo los cuadros delimitadores. No ten铆a una buena imagen mental de c贸mo funcionaba todo, y las funciones de referencia siempre me parecieron bastante intimidantes. En muchos casos esto no importa, el proceso de conversi贸n lo manejan las capas internas dentro de un modelo y el desarrollador de la aplicaci贸n no necesita preocuparse por lo que sucede debajo del cap贸. Sin embargo, recientemente he empezado a trabajar con algunas redes que esperan que la conversi贸n se maneje externamente, por lo que he tenido que escribir c贸digo desde cero para realizar la traducci贸n.
Esto me ha obligado a entender los detalles, y para asegurarme de tener una buena comprensi贸n y tener algo a lo que referirme en el futuro, he decidido redactar esta publicaci贸n y crear un Python Colab demostr谩ndolo todo, paso a paso. Estoy usando un modelo de ejemplo del incre铆ble framework MediaPipe (que maneja toda la conversi贸n por s铆 mismo, si est谩 en una plataforma que lo admite), y he escrito un c贸digo de referencia para explicar el flujo de trabajo para pasar de tensores sin procesar a un conjunto limpio de cuadros delimitadores. En particular, siento que finalmente entend铆 la “supresi贸n no m谩xima (NMS)”, que result贸 ser mucho menos intimidante de lo que tem铆a.
Recomiendo trabajar a trav茅s de聽Colab para lograr una mejor comprensi贸n, pero el resumen es que la mayor铆a de las redes neuronales dise帽adas para producir cuadros delimitadores usan una cuadr铆cula de puntos l铆mite en la imagen como base. Cada punto de anclaje est谩 asociado a un valor , junto con las compensaciones x e y, el ancho, la altura y cualquier otra coordenada caracter铆stica (como las posiciones de la nariz o los ojos). Todas estas coordenadas se dan en relaci贸n con puntos l铆mite normalizados entre 0,0 y 1,0, donde 1,0 es el tama帽o de la imagen. Hay una puntuaci贸n y un conjunto de coordenadas para cada punto l铆mite, por lo que en el caso del modelo de cara que estoy usando en el cuaderno, hay 48 columnas y 48 filas de anclas, separadas por 4 p铆xeles en una imagen de 192 脳 192, lo que supone 2.304 inputs.
Hay dos resultados posibles para el modelo, el primero en formato (1, 2304, 16), con 8 pares de coordenadas (x, y) para cada punto l铆mite; el segundo en formato (1, 2304, 1), con la puntuaci贸n de cada punto l铆mite. Para este modelo, los primeros dos pares de coordenadas son el origen del cuadro delimitador y su ancho y alto. Los otros seis son las posiciones de puntos de referencia faciales como la boca o la nariz. La primera etapa de la decodificaci贸n es convertirlos de posiciones relativas en coordenadas absolutas agregando los or铆genes de anclaje correspondientes. Esto genera diversas ventanas o cuadros delimitadores solapados, cada uno asociado con una puntuaci贸n.
El pr贸ximo desaf铆o es reducir este conjunto de cuadros superpuestos a uno solo para cada detecci贸n de objetos reales. Ah铆 es donde entra en juego el algoritmo de supresi贸n no m谩xima.
El paso inicial es clasificar primero los cuadros con las puntuaciones m谩s altas. Despu茅s de eso, encontramos todos los cuadros que se solapan significativamente y los fusionamos. Los m茅todos exactos que usamos para determinar si la superposici贸n es significativa se pueden ver en la funci贸n overlap_similarity().
El proceso de fusi贸n implica simplemente tomar el cuadro con la puntuaci贸n m谩s alta de un conjunto superpuesto (unweighted_non_max_suppression()
o promediar todos los cuadros y caracter铆sticas en un conjunto, ponderado por su puntuaci贸n (weighted_non_max_suppression()
. Y as铆 es como funciona la supresi贸n no m谩xima.