Intersection over Union (IoU)
L'intersezione sull'unione (IoU) misura quanto un riquadro previsto si sovrappone a quello reale, da 0 a 1. Formula, codice Python, soglie e loss basate su IoU.
L'intersezione su unione (IoU) misura la sovrapposizione tra due regioni: l'area che condividono divisa per l'area complessiva che coprono. Varia da 0 per regioni che non si toccano a 1 per regioni identiche ed è la stessa quantità nota in statistica come indice di Jaccard. Nel rilevamento di oggetti, l'IoU confronta un riquadro di delimitazione previsto con il riquadro di riferimento annotato e determina se una previsione è corretta, quali previsioni duplicate vengono rimosse e come vengono addestrate le previsioni dei riquadri.
Come si calcola l'IoU#
IoU = area di intersezione / area di unione, dove l'unione è l'area del riquadro A più l'area del riquadro B meno la loro intersezione, in modo che la regione condivisa venga conteggiata una sola volta. Per due riquadri allineati agli assi e rappresentati tramite coordinate degli angoli, l'intersezione è a sua volta un rettangolo delimitato dai bordi interni dei due riquadri; la sua larghezza o altezza viene impostata a zero se i riquadri non si sovrappongono.
# Boxes as [x1, y1, x2, y2] in pixels
label = [100, 100, 200, 200]
pred = [110, 110, 210, 210]
# Intersection rectangle, clamped to zero when the boxes do not overlap
w = max(0, min(label[2], pred[2]) - max(label[0], pred[0]))
h = max(0, min(label[3], pred[3]) - max(label[1], pred[1]))
intersection = w * h
# Union counts the overlap only once
area_label = (label[2] - label[0]) * (label[3] - label[1])
area_pred = (pred[2] - pred[0]) * (pred[3] - pred[1])
union = area_label + area_pred - intersection
print(f"IoU = {intersection} / {union} = {intersection / union:.3f}")Lo script stampa IoU = 8100 / 11900 = 0.681. Spostare di 10 pixel in ogni direzione un riquadro di 100 pixel riduce la sovrapposizione a 90 × 90 pixel e aumenta l'unione a 11.900, perciò uno spostamento del 10% costa quasi un terzo del punteggio. Poiché entrambe le aree si ridimensionano insieme, l'IoU è invariante rispetto alla scala: lo stesso disallineamento relativo produce lo stesso punteggio per un uccello di 20 pixel e un camion di 2.000 pixel. Un errore fisso in pixel penalizza quindi soprattutto gli oggetti piccoli; uno spostamento laterale di un solo pixel riduce l'IoU a 0,905 per un riquadro di 20 pixel e a 0,990 per un riquadro di 200 pixel.
Soglie IoU nella valutazione#
Una soglia di valutazione trasforma l'IoU in una decisione sì o no. Una previsione è un vero positivo quando la classe corrisponde e l'IoU con un riquadro di riferimento non ancora abbinato raggiunge la soglia; altrimenti è un falso positivo. Il benchmark PASCAL VOC usava 0,5, un valore meno permissivo di quanto sembri: due riquadri uguali spostati lateralmente di un terzo della loro larghezza hanno un'IoU esattamente pari a 0,5. Il benchmark COCO calcola la media dei risultati su dieci soglie, da 0,50 a 0,95; è così che la precisione media media (mAP) premia una localizzazione precisa.
IoU durante l'addestramento e il postprocessing#
- Funzioni di perdita per la regressione dei riquadri: i rilevatori addestrano le coordinate dei riquadri usando 1 − IoU o una sua variante, perché una funzione di perdita sulle coordinate grezze tratta allo stesso modo un errore di 10 pixel su riquadri piccoli e grandi. L'IoU semplice non fornisce alcun gradiente quando i riquadri non si sovrappongono, quindi la Generalized IoU (GIoU) aggiunge una penalità basata sul riquadro più piccolo che racchiude entrambi, mentre la Distance-IoU e la Complete IoU (DIoU, CIoU) aggiungono termini per la distanza tra i centri e il rapporto d'aspetto. YOLO26 addestra la testa dei riquadri con una funzione di perdita CIoU e usa inoltre la CIoU per decidere a quale oggetto annotato assegnare le previsioni durante l'addestramento.
- Soppressione dei massimi non locali (NMS): durante l'inferenza, un riquadro la cui IoU con un riquadro della stessa classe e con punteggio più alto supera una soglia viene considerato un duplicato e rimosso.
- Tracciamento degli oggetti: tracker come ByteTrack usano l'IoU tra le tracce esistenti e i nuovi rilevamenti come costo di abbinamento tra un fotogramma e l'altro.
IoU per altre forme#
Lo stesso rapporto si applica a qualsiasi coppia di regioni. La segmentazione calcola l'IoU delle maschere sugli insiemi di pixel: la segmentazione delle istanze la usa per abbinare le maschere previste alle etichette, mentre i benchmark di segmentazione semantica riportano la media tra le classi come mIoU. I riquadri ruotati richiedono un'intersezione poligonale o un'approssimazione gaussiana come ProbIoU; il rilevamento 3D calcola l'IoU tra parallelepipedi, nello spazio 3D completo o tramite la sovrapposizione delle loro impronte viste dall'alto.
IoU a confronto con le metriche correlate#
- Coefficiente di Dice: il doppio dell'intersezione diviso per la somma delle due aree. Ordina le previsioni nello stesso modo dell'IoU, perché Dice = 2 × IoU / (1 + IoU), ed è comune nella segmentazione di immagini mediche.
- Accuratezza: la percentuale di previsioni di classe corrette, che non dice nulla sulla posizione di un riquadro.
- mAP: una metrica riassuntiva a livello di rilevamento, basata sulle soglie IoU, che combina la localizzazione con precisione e richiamo tra le classi.
La relazione con Dice permette anche di convertire le soglie: un'IoU di 0,5 equivale a un punteggio Dice di 0,667 e un'IoU di 0,9 equivale a un punteggio Dice di 0,947.










