Detección de objetos de extremo a extremo con Coincidencia de plantillas mediante Python

Cómo implementar la detección de objetos personalizada con coincidencia de plantillas. ¡No se necesitan datos anotados!

 coincidencia de plantillas de detección de objetos
Detección de objetos con coincidencia de plantillas para detectar componentes

En la actualidad, los algoritmos de detección de objetos de última generación (algoritmos destinados a detectar objetos en imágenes) utilizan redes neuronales como Yolov4.

 salida de detección de objetos
Una salida de detección de objetos

La coincidencia de plantillas es una técnica en el procesamiento digital de imágenes para encontrar pequeñas partes de una imagen que coincida con una imagen de plantilla. Es una solución mucho más simple que una red neuronal para realizar la detección de objetos. Además, viene con los siguientes beneficios:

  • sin necesidad de anotar datos (una tarea que requiere mucho tiempo y es obligatoria para entrenar redes neuronales)
  • los cuadros delimitadores son más precisos
  • sin necesidad de GPU

En mi experiencia, combinar una red neuronal como Yolov4 y la detección de objetos con la coincidencia de plantillas aquí es una buena manera de mejorar considerablemente el rendimiento de su red neuronal.

¿Qué es la coincidencia de plantillas?

Cuando se utiliza la coincidencia de plantillas OpenCV, la plantilla se desliza píxel por píxel en la imagen. Para cada posición, se calcula una métrica de similitud entre la imagen de la plantilla y la parte de la imagen que recupera:

ejemplo de coincidencia de plantillas
Uso de coincidencia de plantillas para detectar ID francés en documentos escaneados

Si la métrica de similitud es lo suficientemente alta para un píxel, ¡este píxel es probablemente la esquina superior izquierda de un objeto que coincida con su plantilla!

En consecuencia, puede lograr la detección de objetos con coincidencia de plantilla solo si los objetos que intenta detectar son lo suficientemente similares, casi idénticos, dentro de una clase. Aún puede incluir más plantillas para abordar las variaciones de objetos (tamaño, color, orientación). Pero aumentará el tiempo de predicción.

A primera vista, parece muy restrictivo. Pero muchos casos de uso de detección de objetos se pueden abordar con la coincidencia de plantillas:

  • Identificación en documentos escaneados
  • espacio de estacionamiento vacío de una cámara fija
  • componentes de una línea de montaje…

Un ejemplo práctico

Un buen caso de uso para la detección de objetos mediante la coincidencia de plantillas es detectar componentes en circuitos impresos, como este:

circuito impreso-unsplash
Un circuito impreso-Foto de Umberto en Unsplash

Podríamos imaginar una línea de montaje produciendo tales circuitos. Imaginemos que algunos circuitos fabricados carecen de componentes y, por lo tanto, son defectuosos. Podríamos proponer instalar una cámara al final del sendero y disparar cada circuito, para filtrar los productos defectuosos. ¡Podemos lograr esto con la detección de objetos con coincidencia de plantillas!

En aras de la simplicidad, nos centraremos en la detección de algunos componentes.

Un primer componente que aparece dos veces:

componente de coincidencia de plantillas-1
Componente 1

Este aparece cuatro veces:

componente de coincidencia de plantillas-2
Componente 2

Y este tercero aparece seis veces:

componente de coincidencia de plantillas-3
Componente 3

Finalmente, elegimos estas tres imágenes como plantillas. En consecuencia, la complejidad de este caso de uso se reduce: detectaremos fácilmente al menos los objetos elegidos como plantillas.

Detección básica de objetos con coincidencia de plantillas

Definición de plantillas

En primer lugar, definimos plantillas desde:

  • una ruta de imagen,
  • una etiqueta,
  • un color (para visualización de resultados: color de cuadros delimitadores y etiquetas),
  • y un umbral coincidente.

En segundo lugar, consideramos que todos los píxeles que tienen una métrica de similitud por encima de este umbral indican una detección para esta plantilla.

Aquí están las plantillas de definición de código:

Definición de plantillas

Detección de objetos con coincidencia de plantillas

Luego, hacemos un bucle sobre las plantillas para realizar la detección de objetos con coincidencia de plantillas para cada plantilla. Debido a que estamos utilizando un umbral, seleccionamos una métrica de similitud normalizada (TM_CCOEFF_NORMED) al aplicar la coincidencia de plantillas. Por lo tanto, podemos elegir un umbral entre 0 y 1:

Detección de objetos con coincidencia de plantilla

Consideramos que cada píxel que tiene una puntuación de similitud por encima del umbral de plantilla es la esquina superior izquierda de un objeto (con la altura, el ancho y la etiqueta de la plantilla).

Visualizar objetos detectados

A continuación, trazamos los cuadros delimitadores previstos de esta detección de objetos con la coincidencia de plantillas en la imagen de entrada:

Mostrar resultados de detección de objetos

Finalmente, obtenemos los siguientes resultados:

 coincidencia de plantillas-objetos duplicados detectados
Objetos duplicados detectados

Como indica el grosor de las cajas (en verde, amarillo y rojo), cada objeto se ha detectado varias veces.

Eliminar duplicados

¿Por qué obtuvimos detecciones duplicadas? Como se explicó anteriormente, la coincidencia de plantillas OpenCV devuelve una matriz 2D que tiene la dimensión de la imagen de entrada (una celda, y por lo tanto una puntuación de similitud, para cada píxel de imagen de entrada).

Por lo tanto, si se detecta un objeto en una ubicación, lo más probable es que todos los píxeles circundantes tengan la misma puntuación de similitud y, por lo tanto, se consideren como otras esquinas superiores izquierdas del objeto.

Para resolver este problema, ordenaremos todas las detecciones disminuyendo los valores coincidentes. Luego, elegiremos si validar o no cada detección. Validamos la detección si no se superpone demasiado con ninguna de las detecciones ya validadas. Finalmente, determinamos que dos detecciones se superponen si la Intersección sobre la Unión de sus cajas delimitadoras está por encima de un umbral dado. Este proceso se denomina Supresión No Máxima.

Aquí hay una explicación visual de lo que es Intersección sobre Unión (IoU) :

Intersección sobre Unión

Así es como lo implementé (el método de cálculo de pagarés junto con más explicaciones se pueden encontrar aquí):

Supresión no máxima

Y luego, solo agregué estas dos líneas después del bucle de detección:

Aplicar NMS

Como resultado, obtenemos:

objetos detectados deduplicados
Objetos detectados deduplicados

¡Mucho más limpio! Ahora vemos claramente que todos los primeros y terceros componentes se detectan sin falsos positivos (precisión y recuperación de 1).

ahora queremos reducir el número de falsos positivos para el componente 2. La forma más fácil es aumentar el umbral coincidente para la plantilla utilizada para esta etiqueta.

Elegir hiperparámetros

Por supuesto, es mejor calcular métricas de detección de objetos en varias imágenes para elegir hiperparámetros (umbral de coincidencia de plantilla y umbral de supresión No máximo). Por ahora, simplemente podemos aumentar el umbral para el componente 2:

Elija umbrales coincidentes de plantilla

Y obtendremos:

última salida
Salida final

Ahora solo tenemos dos falsos positivos para el componente 2, en lugar de docenas (precisión de 2/3, recuperación de 1)! Además, los componentes 1 y 2 todavía se detectan perfectamente (precisión y recuperación de 1).

Para mejorar nuestros resultados pudimos:

  • incluir plantillas para los componentes confundidos con el componente 2.
  • pruebe varias métricas de similitud
  • anote algunas imágenes para calcular métricas de detección y realice una búsqueda de cuadrícula en estos parámetros.

Resumen

Hemos logrado la detección de objetos con coincidencia de plantillas mediante:

  • definir al menos una plantilla para cada objeto (cuantas más plantillas tenga para un objeto, mayor será su recuperación y su precisión baja)
  • usar el método de coincidencia de plantillas OpenCV en la imagen para cada plantilla
  • teniendo en cuenta que cada píxel que tiene una puntuación de similitud por encima de un umbral de plantilla es la esquina superior izquierda de un objeto (con la altura, el ancho y la etiqueta de esta plantilla)
  • aplicar supresión No Máxima de las detecciones obtenidas
  • ¡elegir umbrales de plantilla para mejorar la precisión de detección!

¡Eso es todo!

¿Está buscando Expertos en Reconocimiento de imágenes? No dude en ponerse en contacto con nosotros!

You might also like

Deja una respuesta

Tu dirección de correo electrónico no será publicada.