Metrica Intersection over Union (IoU) – Cos'è e perché è importante?

Intersection over Union (IoU) – Cos'è e perché è importante?

Intersection over Union (IoU) – Cos'è e perché è importante?

Intersection over Union (IoU) è una metrica chiave in computer vision utilizzata per valutare la qualità delle predizioni di un modello di object detection. Essa misura la sovrapposizione tra la bounding box predetta dal modello e la bounding box reale (ground truth).

📏 Come si calcola IoU?

IoU è definita come il rapporto tra l'area dell'intersezione e l'area dell'unione tra le due bounding box:

IoU = Area dell'Intersezione / Area dell'Unione

Dove:

  • L’intersezione è l’area comune tra la bounding box predetta e la ground truth.
  • L’unione è la somma delle due aree, sottraendo l’intersezione per evitare duplicati.

🔹 Valori tipici di IoU

  • IoU = 0 → Nessuna sovrapposizione
  • IoU tra 0 e 0.5 → Predizione scarsa
  • IoU tra 0.5 e 0.7 → Predizione accettabile
  • IoU > 0.7 → Predizione molto buona

🎯 Perché è importante IoU?

IoU è fondamentale in diversi compiti di object detection, tra cui:

  • Valutazione delle prestazioni di modelli come Faster R-CNN, SSD e YOLO.
  • Non-Maximum Suppression (NMS) → Filtraggio delle predizioni duplicate.
  • Mean Average Precision (mAP) → Misurazione della precisione media di un modello.

🏆 Esempio di utilizzo in pratica (Python & OpenCV)

Un semplice esempio per calcolare IoU tra due bounding box:


import cv2
import numpy as np

def iou(boxA, boxB):
    # Coordinate delle bounding box
    xA = max(boxA[0], boxB[0])
    yA = max(boxA[1], boxB[1])
    xB = min(boxA[2], boxB[2])
    yB = min(boxA[3], boxB[3])

    # Calcolo area intersezione
    interArea = max(0, xB - xA) * max(0, yB - yA)

    # Calcolo area unione
    boxAArea = (boxA[2] - boxA[0]) * (boxA[3] - boxA[1])
    boxBArea = (boxB[2] - boxB[0]) * (boxB[3] - boxB[1])
    unionArea = boxAArea + boxBArea - interArea

    # Calcolo IoU
    return interArea / float(unionArea)

# Esempio di bounding box (x1, y1, x2, y2)
box_pred = [50, 50, 200, 200]
box_true = [100, 100, 250, 250]

iou_score = iou(box_pred, box_true)
print(f"IoU Score: {iou_score:.2f}")
    

🎯 Conclusione

IoU è una metrica essenziale per valutare l'accuratezza della object detection. Se vuoi approfondire, prova a esplorare metriche avanzate come Mean Average Precision (mAP) che si basano su IoU per il calcolo della performance complessiva di un modello! 🚀

Commenti

Post popolari in questo blog

SSD (Single Shot MultiBox Detector)

Instance Segmentation: Cos'è e Come Funziona

U-Net: Architettura per la Segmentazione di Immagini