Intersection over Union (IoU)
L’intersection sur l’union (IoU) mesure, de 0 à 1, le chevauchement entre un cadre prédit et le cadre réel. Découvre la formule, le code Python, les seuils et les fonctions de perte fondées sur l’IoU.
L’intersection sur union (IoU) mesure le chevauchement de deux régions : la surface qu’elles partagent divisée par la surface totale qu’elles couvrent ensemble. Sa valeur va de 0 pour des régions sans chevauchement à 1 pour des régions identiques ; en statistique, cette même grandeur est appelée indice de Jaccard. En détection d’objets, l’IoU compare une boîte englobante prédite à la boîte de référence étiquetée. Elle détermine si une prédiction est considérée comme correcte, quelles prédictions en double sont supprimées et comment les prédictions de boîtes sont entraînées.
Calcul de l’IoU#
IoU = aire de l’intersection / aire de l’union, où l’union correspond à l’aire de la boîte A plus celle de la boîte B moins leur intersection, de sorte que la région commune n’est comptée qu’une fois. Pour deux boîtes alignées sur les axes et définies par leurs coins, l’intersection est elle-même un rectangle délimité par les bords intérieurs des deux boîtes. Sa largeur ou sa hauteur est ramenée à zéro si les boîtes ne se chevauchent pas.
# 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}")Le script affiche IoU = 8100 / 11900 = 0.681. Décaler une boîte de 100 pixels de 10 pixels dans chaque direction réduit le chevauchement à 90 × 90 pixels et augmente l’union à 11 900 ; un décalage de 10 % coûte donc presque un tiers du score. Comme les deux aires sont mises à l’échelle de la même manière, l’IoU est invariante à l’échelle : un même désalignement relatif donne le même score pour un oiseau de 20 pixels et un camion de 2 000 pixels. Une erreur fixe en pixels pénalise donc davantage les petits objets ; un décalage latéral d’un pixel fait ainsi baisser l’IoU à 0.905 pour une boîte de 20 pixels et à 0.990 pour une boîte de 200 pixels.
Seuils d’IoU dans l’évaluation#
Un seuil d’évaluation transforme l’IoU en décision binaire. Une prédiction est un vrai positif si sa classe correspond et si son IoU avec une boîte de référence qui n’a pas encore été associée atteint le seuil ; sinon, c’est un faux positif. La référence PASCAL VOC utilisait 0.5, un seuil moins strict qu’il n’y paraît : deux boîtes identiques décalées latéralement d’un tiers de leur largeur ont un IoU exactement égal à 0.5. La référence COCO calcule la moyenne des résultats sur dix seuils allant de 0.50 à 0.95 ; c’est ainsi que la précision moyenne (mAP) valorise la précision de localisation.
IoU dans l’entraînement et le post-traitement#
- Pertes de régression des boîtes : les détecteurs entraînent les coordonnées des boîtes avec 1 − IoU ou une variante de cette métrique, car une perte appliquée aux coordonnées brutes traite de la même façon une erreur de 10 pixels sur une petite ou une grande boîte. L’IoU simple ne fournit aucun gradient lorsque les boîtes ne se chevauchent pas. L’IoU généralisée (GIoU) ajoute donc une pénalité basée sur la plus petite boîte englobant les deux, tandis que l’IoU de distance et l’IoU complète (DIoU, CIoU) ajoutent des termes pour la distance entre les centres et le rapport d’aspect. YOLO26 entraîne sa tête de prédiction des boîtes avec une perte CIoU et utilise également le CIoU pour déterminer à quel objet étiqueté associer chaque prédiction pendant l’entraînement.
- Suppression non maximale (NMS) : à l’inférence, une boîte dont l’IoU avec une boîte de score supérieur de la même classe dépasse un seuil est considérée comme un doublon et supprimée.
- Suivi d’objets : des systèmes de suivi comme ByteTrack utilisent l’IoU entre les pistes existantes et les nouvelles détections comme coût d’association d’une image à l’autre.
IoU pour d’autres formes#
Le même rapport s’applique à toute paire de régions. La segmentation calcule l’IoU des masques sur des ensembles de pixels : la segmentation d’instances l’utilise pour associer les masques prédits aux étiquettes, tandis que les références de segmentation sémantique indiquent sa moyenne sur les classes, appelée mIoU. Les boîtes orientées nécessitent une intersection polygonale ou une approximation gaussienne comme ProbIoU. La détection 3D calcule l’IoU entre des cuboïdes, en 3D complet ou en mesurant le chevauchement de leur empreinte vue de dessus.
IoU et métriques apparentées#
- Coefficient Dice : deux fois l’intersection divisée par la somme des deux aires. Il classe les prédictions dans le même ordre que l’IoU, car Dice = 2 × IoU / (1 + IoU), et il est courant en segmentation d’images médicales.
- Précision : proportion de prédictions de classe correctes, qui ne dit rien sur l’emplacement d’une boîte.
- mAP : résumé au niveau de la détection fondé sur des seuils d’IoU, qui combine localisation, précision et rappel pour l’ensemble des classes.
La relation avec Dice permet également de convertir les seuils : un IoU de 0.5 équivaut à un score Dice de 0.667, et un IoU de 0.9 à un score Dice de 0.947.










