9.10.4 EP09_04 🟡 Intersection sur Union (IoU) et Suppression des Non-Maximums (NMS)
Les modèles de détection d’objets peuvent produire plusieurs boîtes englobantes candidates pour un même objet, avec différentes positions et scores de confiance. L’étape de post-traitement chargée d’éliminer ces détections redondantes est la Suppression des Non-Maximums (NMS), dont l’opération fondamentale utilise la métrique de l’Intersection sur Union (IoU).
La NMS utilise cette mesure pour décider quelles boîtes doivent être conservées. En général, la boîte avec la plus haute confiance est sélectionnée en premier ; ensuite, les boîtes qui présentent une IoU supérieure à un certain seuil avec la boîte sélectionnée sont considérées comme redondantes et supprimées. Le processus est répété jusqu’à ce qu’il ne reste plus de boîtes candidates.
Dans cet exercice, vous devrez implémenter l’algorithme de NMS à partir de zéro, en calculant l’IoU entre les boîtes et en appliquant successivement le critère de sélection et de suppression pour produire l’ensemble final de détections.
9.10.4.1 📋 Directives d’implémentation
Entrée : Lire l’entier \(N\) (nombre de boîtes candidates) et le seuil réel \(\tau\) (seuil d’IoU pour la suppression), sur la même ligne.
Boîtes : Lire \(N\) lignes, chacune avec cinq valeurs réelles :
x1 y1 x2 y2 scoreoù \((x_1,y_1)\) représente le coin supérieur gauche, \((x_2,y_2)\) le coin inférieur droit et
scorele score de confiance.Intersection sur Union : Pour deux boîtes \(A\) et \(B\),
\[ IoU(A,B)= \frac{\operatorname{Aire}(A\cap B)} {\operatorname{Aire}(A\cup B)}. \]
L’aire d’intersection doit être calculée à partir du chevauchement des intervalles en \(x\) et en \(y\). S’il n’y a pas de chevauchement, l’aire d’intersection est nulle.
Algorithme glouton de NMS :
Trier les boîtes par
scoredécroissant. En cas d’égalité, conserver l’ordre original de lecture.Sélectionner la boîte avec le score le plus élevé parmi les boîtes restantes et l’ajouter à l’ensemble de sortie.
Calculer l’IoU entre la boîte sélectionnée et toutes les boîtes encore restantes. Supprimer les boîtes pour lesquelles
\[ \text{IoU} > \tau. \]
- Répéter les étapes (b) et (c) jusqu’à ce qu’il ne reste plus de boîtes.
Sortie : Pour chaque boîte conservée, dans l’ordre où elle a été sélectionnée, imprimer son indice original (position de lecture, commençant à \(0\)) et son
score, formaté avec 4 décimales. À la fin, imprimer :Total conservées : X
9.10.4.2 📌 Contraintes de calcul
- Suppression stricte : seules les boîtes avec \(\text{IoU} > \tau\) sont supprimées. Les boîtes avec \(\text{IoU} = \tau\) sont conservées.
- Indices originaux : la sortie fait référence à la position où chaque boîte a été lue dans l’entrée (commençant à \(0\)), et non à sa position après le tri.
- Tri stable : en cas de
scoreégaux, l’ordre original de lecture doit être préservé. - Rectangles alignés sur les axes : toutes les boîtes sont spécifiées par deux coins, avec \(x_1 < x_2\) et \(y_1 < y_2\) garantis en entrée.
- Coordonnées et scores : les valeurs réelles peuvent être positives ou négatives, selon les limites définies par l’entrée, mais les dimensions des boîtes sont toujours positives.
9.10.4.3 🧠 Fondements théoriques
| Élément | Rôle dans le post-traitement de détection |
|---|---|
| IoU | Quantifie le chevauchement spatial entre deux boîtes ; \(\text{IoU}=1\) pour des boîtes identiques et \(\text{IoU}=0\) pour des boîtes sans chevauchement |
| Tri par confiance | Fait en sorte que la boîte avec le plus grand score soit analysée en premier |
| Seuil \(\tau\) | Définit la quantité de chevauchement nécessaire pour qu’une boîte soit considérée comme redondante |
| Suppression | Supprime les boîtes qui présentent un grand chevauchement avec une boîte déjà sélectionnée |
| Boîtes distantes | Ont une IoU proche de zéro et, en général, ne sont pas supprimées par cette règle |
9.10.4.4 🧩 Méthodes de morph.py qui peuvent aider
mm.IoU(boxA, boxB)— calcule la métrique d’IoU, mais attend les boîtes au format \((x,y,w,h)\), c’est-à-dire coin supérieur gauche, largeur et hauteur. L’entrée de cet exercice utilise le format \((x_1,y_1,x_2,y_2)\). La conversion est directe :\[ w=x_2-x_1,\qquad h=y_2-y_1. \]
L’utilisation de cette fonction est facultative. L’objectif principal de l’exercice est d’implémenter correctement le processus de sélection et de suppression de la NMS.
9.10.4.5 📦 Spécification d’entrée et de sortie (VPL)
Entrée :
- Ligne 1 : entier \(N\) et réel \(\tau\).
- \(N\) lignes suivantes : \(x_1\ y_1\ x_2\ y_2\ \text{score}\).
Sortie :
- Une ligne par boîte conservée, dans l’ordre de sélection :
indice score. - Dernière ligne :
Total conservées : X.
%%writefile EP09_04.py
# Code PythonOverwriting EP09_04.py
TestSuite("EP09_04.py").run()✔️ EP09_04.cases existe déjà dans casos/
📋 3 cas chargé(s) depuis casos/EP09_04.cases
🔍 Test de Python : EP09_04.py
⚠️ EP09_04.py : fichier vide (moins de 3 lignes). Tests ignorés.