Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Detección de objetos, Unidad 8 — Postprocesado de detecciones, 8.1 — Non-Maximum Suppression (NMS) ·

Umbral de IoU

Umbral de IoU: Comprendiendo y Aplicando Non-Maximum Suppression (NMS) en Detección de Objetos

Introducción

En la detección de objetos, después de que una red neuronal genere múltiples cajas de interés potenciales, surge la necesidad de eliminar las cajas duplicadas o redundantes. Esto es donde Non-Maximum Suppression (NMS) entra en juego. NMS es un algoritmo que ayuda a seleccionar solo las mejores detecciones, eliminando las cajas de interés que se superponen con otras y tienen una confianza más baja.

La clave para NMS está en el Umbral de IoU (Intersection over Union), que mide cuánto se sobrepondrán dos cajas. Este valor se usa para decidir si eliminar o mantener una detección. En este artículo, profundizaremos en cómo funciona NMS, cuándo y cómo aplicarlo correctamente.

Explicación Principal con Ejemplos

¿Cómo Funciona NMS?

NMS opera eliminando las cajas de interés que tienen un IoU alto con otras cajas ya seleccionadas. El proceso general es el siguiente:

  1. Ordenar Cajas por Confianza: Las cajas se ordenan según su confianza en orden descendente.
  2. Seleccionar la Mejor Caja: Selecciona la primera caja (la más confiada).
  3. Comparar con Otras Cajas: Compara esta caja con todas las demás cajas restantes y calcula su IoU.
  4. Eliminar Duplicados: Si el IoU es mayor que un umbral, se elimina esa caja.

Ejemplo de Código

A continuación, presentamos un ejemplo simple en Python utilizando la biblioteca opencv-python para ilustrar cómo aplicar NMS:

import cv2

# Supongamos que tenemos una lista de cajas con sus respectivas coordenadas y confianzas
boxes = [[x1, y1, x2, y2], [x3, y3, x4, y4], ...]
scores = [0.95, 0.85, 0.75, ...]

# Aplicar NMS con umbral IoU de 0.5
nms_boxes = cv2.dnn.NMSBoxes(boxes, scores, score_threshold=0.5, nms_threshold=0.5)

print("Cajas sobrevivientes después de NMS:", nms_boxes)

Ejemplo Gráfico

A continuación se muestra un gráfico simplificado para ilustrar el proceso:

!Gráfico de ejemplo

Errores Típicos / Trampas

  1. Umbral IoU Inadecuado: Utilizar un umbral de IoU muy bajo puede resultar en la eliminación de cajas correctas que tienen alguna superposición con otras cajas. Por el contrario, un umbral demasiado alto puede dejar cajas incorrectas.
  1. Seleccionar la Mejor Caja Incorrectamente: Algunos algoritmos de detección pueden no ordenar las cajas correctamente según su confianza. Esto puede llevar a que se eliminen cajas más precisas antes de otras menos precisas.
  1. No Tener en Cuenta la Orientación de las Cajas: NMS normalmente se aplica a cajas con forma rectangulares, pero algunos algoritmos pueden generar cajas con formas distintas (como el YOLOv3). No tener en cuenta esto puede resultar en malas eliminaciones.

Checklist Accionable

  1. Verificar y Configurar Umbral IoU: Ajusta tu umbral de IoU según el dominio del problema.
  2. Ordenar Cajas Correctamente: Asegúrate de que las cajas estén ordenadas por confianza antes de aplicar NMS.
  3. Validar en Diversas Configuraciones: Prueba diferentes umbrales y configuraciones para ver qué funciona mejor en tu caso de uso específico.
  4. Considerar Formas de Cajas Diferentes: Asegúrate de que tu implementación de NMS funcione correctamente con cualquier forma de caja que genere tu algoritmo de detección.
  5. Optimizar Rendimiento: Utiliza optimizaciones como nms_dpu en OpenCV para mejorar el rendimiento.

Cierre

La aplicación correcta del umbral de IoU es crucial en el postprocesado de detecciones de objetos, ya que ayuda a eliminar cajas redundantes y mejorar la precisión general de las predicciones. Al seguir los pasos anteriores y tomar en cuenta las trampas comunes, podrás aplicar NMS de manera efectiva en tus proyectos de detección de objetos.

Siguientes Pasos

  • Explorar Otros Métodos Postprocesamiento: Aprende sobre otros algoritmos como Non-Maximum Suppression with Soft-NMS para mejorar aún más la precisión.
  • Implementar en Proyectos Reales: Aplica NMS y otros postprocesamientos a tus propios proyectos de detección de objetos para obtener resultados prácticos.
  • Participar en Competencias: Participa en competencias de CVPR o Kaggle para mejorar tus habilidades en detección de objetos.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).