TNI+VO · Exercice de Programmation

EP09_04 — 🟡 Intersection sur Union (IoU) et Suppression des Non-Maximums (NMS)

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

  1. 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.

  2. Boîtes : Lire \(N\) lignes, chacune avec cinq valeurs réelles :

    x1 y1 x2 y2 score

    où \((x_1,y_1)\) représente le coin supérieur gauche, \((x_2,y_2)\) le coin inférieur droit et score le score de confiance.

  3. 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.

  4. Algorithme glouton de NMS :

    1. Trier les boîtes par score décroissant. En cas d’égalité, conserver l’ordre original de lecture.

    2. Sélectionner la boîte avec le score le plus élevé parmi les boîtes restantes et l’ajouter à l’ensemble de sortie.

    3. 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. \]

    1. Répéter les étapes (b) et (c) jusqu’à ce qu’il ne reste plus de boîtes.
  5. 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.
🎮 Simulateur : IoU et suppression non maximale 🟡 SNM
Boîte sélectionnée Boîte conservée Boîte supprimée Boîte candidate
5
0.50
Défaut
🎯 Visualisation des boîtes
📋 Étapes de la SNM
Figure 9.46: Simulateur EP09_04 : IoU et suppression des non-maximums (NMS)
%%writefile EP09_04.py
# Code Python
Overwriting 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.