Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

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

Impacto en resultados

Impacto en resultados: Non-Maximum Suppression (NMS) en Detección de Objetos

Introducción

La detección de objetos es un campo crucial dentro de la visión por computadora y la inteligencia artificial. Una vez que se han aplicado modelos como R-CNN, SSD o YOLO a una imagen para detectar y clasificar objetos, el proceso de postprocesado es fundamental para refinar las predicciones y obtener resultados más precisos y útiles. Non-Maximum Suppression (NMS) es uno de los métodos más utilizados en este proceso. NMS ayuda a eliminar superpuestas o falsas alarmas en las detecciones, mejorando la calidad final del modelo.

Explicación principal con ejemplos

NMS funciona eliminando las predicciones que tienen una probabilidad menor y que se superponen con otras predicciones de mayor confianza. La lógica detrás de NMS es simple: si dos cajas tienen mucho en común, solo uno de ellos puede ser correcto o relevante.

En el siguiente ejemplo, supongamos que tenemos las siguientes predicciones para una imagen:

| ID | Coordenadas | Clase | Probabilidad | |----|-------------|-------|--------------| | 1 | (50, 50, 80, 90) | Auto | 0.75 | | 2 | (40, 40, 70, 80) | Auto | 0.65 | | 3 | (45, 45, 75, 85) | Auto | 0.60 | | 4 | (120, 120, 160, 190) | Casa | 0.80 |

Primero, NMS calcularía el Intersection over Union (IoU) entre cada par de cajas:

  • IoU(1, 2): 0.73
  • IoU(1, 3): 0.65
  • IoU(2, 3): 0.84

Si establecemos un umbral de IoU (p. ej., 0.5), NMS eliminaría la predicción con menor probabilidad en cada par que supera ese umbral:

  1. Auto:
  • Elimina ID 2, pues IoU(1, 2) > 0.5 y probabilidad de 2 es menor.
  1. Casa:
  • No hay superposiciones, así que ninguna predicción se elimina.

Finalmente, las predicciones sobrevivientes son:

| ID | Coordenadas | Clase | Probabilidad | |----|-------------|-------|--------------| | 1 | (50, 50, 80, 90) | Auto | 0.75 | | 4 | (120, 120, 160, 190) | Casa | 0.80 |

Ejemplo de implementación en Python

A continuación se muestra un ejemplo práctico usando la biblioteca torch:

import torch

def non_max_suppression(predictions, iou_threshold=0.5):
    boxes = predictions[:, :4]
    scores = predictions[:, 4:]
    
    keep_boxes = []
    while len(boxes) > 0:
        max_index = torch.argmax(scores)
        box = boxes[max_index]
        score = scores[max_index]
        
        if not any([iou(box, b) >= iou_threshold for b in keep_boxes]):
            keep_boxes.append(max_index)
        
        # Elimina las cajas que superponen con la caja elegida
        predictions = torch.cat((predictions[:max_index], predictions[max_index+1:]))
    
    return predictions[keep_boxes]

def iou(box1, box2):
    x1_min = min(box1[0], box2[0])
    y1_min = min(box1[1], box2[1])
    x1_max = max(box1[2], box2[2])
    y1_max = max(box1[3], box2[3])

    inter_area = (x1_max - x1_min) * (y1_max - y1_min)
    
    box1_area = (box1[2] - box1[0]) * (box1[3] - box1[1])
    box2_area = (box2[2] - box2[0]) * (box2[3] - box2[1])

    iou_value = inter_area / (box1_area + box2_area - inter_area)
    
    return iou_value

Errores típicos / trampas

  1. Umbral IoU incorrecto: Un umbral IoU demasiado bajo puede resultar en muchas superposiciones no eliminadas, mientras que uno alto podría ser muy conservador.
  2. Desbalance de clases en datos de entrenamiento: Si hay desequilibrios entre clases, el NMS podría favorecer una clase específica sobre otra.
  3. Negligencia del contexto visual: El NMS no considera el contexto visual o la relación entre objetos, lo que puede llevar a malas decisiones.

Checklist accionable

  1. Validar y ajustar el umbral IoU: Experimente con diferentes umbrales para encontrar uno óptimo.
  2. Corregir desequilibrios de clases en datos: Asegúrese de que los datos de entrenamiento y validación sean equilibrados.
  3. Incluir contexto visual en validaciones: Utilice técnicas como la relación entre objetos para mejorar el NMS.
  4. Implementar cross-validation: Asegúrese de realizar una validación cruzada para evitar sobreajuste.
  5. Monitoreo continuo del desempeño: Mantenga un registro de las métricas durante y después del entrenamiento.

Cierre con "Siguientes pasos"

  1. Explorar técnicas avanzadas de postprocesado: Aprenda a utilizar técnicas como NMS con nms_thresholds personalizados.
  2. Integrar modelos preentrenados: Utilice modelos preentrenados como base para su tarea específica y aplique NMS adecuadamente.
  3. Optimización en tiempo real: Si su aplicación requiere una detección en tiempo real, explore formas de optimizar el NMS sin comprometer la precisión.

¡Y recuerde siempre validar sus modelos con datos reales para asegurar que estén preparados para el mundo real!

Contacto

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