Module 4 — Ancres, suppression des non-maxima et seuils
Les modules 2 et 3 ont présenté deux familles de détecteurs. Aucune des deux n'est utilisable brute : les milliers de boîtes qui sortent doivent être filtrées et désambiguïsées. Ce module explique les trois mécanismes qui décident du visage réel du détecteur — les ancres, la suppression des non-maxima et les deux seuils — et pourquoi jouer sur l'un sans comprendre les autres donne systématiquement de mauvais résultats.
Ce qu'est une ancre
Une ancre est un rectangle de référence à une position et à des dimensions fixées. Le détecteur ne prédit pas une boîte à partir de zéro : il prédit une correction par rapport à l'ancre.
Sur une carte de caractéristiques 20 × 20, on pose typiquement neuf ancres par cellule : trois tailles (petite, moyenne, grande) et trois rapports d'aspect (carré, allongé horizontalement, allongé verticalement). Cela fait 3 600 ancres pour une seule échelle. Un modèle multi-échelle en cumule plusieurs dizaines de milliers.
Chaque ancre reçoit deux prédictions :
- Une correction à appliquer à l'ancre.
- Un score de confiance par classe.
La correction typique est :
Les exponentielles garantissent que la largeur et la hauteur restent positives, quelle que soit la valeur prédite.
Détecteurs sans ancre
Les modèles sans ancre — FCOS, CenterNet, YOLOv8 — prédisent directement la boîte par cellule. À chaque position de la grille, le modèle prédit un centre, une largeur, une hauteur et une classe. Cela évite le choix arbitraire des tailles d'ancre, qui variait sensiblement d'un jeu à l'autre.
Le prix est un travail de conception un peu plus fin sur les échelles couvertes par chaque niveau du réseau. YOLOv8 assigne, à chaque position, un objet à un niveau selon sa taille : les grandes voitures sont vues à un niveau grossier, les piétons lointains à un niveau fin. Sans cette répartition, un niveau doit couvrir toutes les tailles et devient un compromis médiocre partout.
La suppression des non-maxima, pas à pas
Après les prédictions, un même objet est souvent couvert par dix à cent boîtes proches. La suppression des non-maxima (NMS) ne garde que la meilleure et supprime les redondantes. L'algorithme tient en cinq lignes :
import numpy as np
def iou(a, b):
x1 = max(a[0], b[0]); y1 = max(a[1], b[1])
x2 = min(a[2], b[2]); y2 = min(a[3], b[3])
inter = max(0, x2 - x1) * max(0, y2 - y1)
union = (a[2]-a[0])*(a[3]-a[1]) + (b[2]-b[0])*(b[3]-b[1]) - inter
return inter / union if union > 0 else 0.0
def nms(boites, scores, seuil_iou=0.5):
ordre = np.argsort(scores)[::-1]
gardees = []
while len(ordre) > 0:
i = ordre[0]
gardees.append(i)
ordre = [j for j in ordre[1:] if iou(boites[i], boites[j]) < seuil_iou]
return gardees
Lecture pas à pas :
- Trier les boîtes par score décroissant.
- Prendre la première, la garder.
- Supprimer toutes celles dont l'IoU avec la gardée dépasse le seuil.
- Recommencer avec la suivante encore en liste.
La NMS est appliquée par classe dans presque toutes les implémentations : deux boîtes qui se chevauchent mais portent des classes différentes coexistent, ce qui est ce qu'on veut sur une voiture et son piéton à côté.
Deux seuils qui décident de tout
Après la NMS, deux seuils règlent le compromis entre précision et rappel :
- Le seuil de confiance : on ne conserve que les boîtes dont le score dépasse . Un élevé donne peu de faux positifs mais rate les objets peu visibles.
- Le seuil d'IoU de NMS : deux boîtes gardent leur redondance quand leur IoU dépasse . Un élevé garde plus de boîtes, ce qui augmente le rappel au prix de doublons.
Leurs effets se combinent, et l'erreur classique consiste à les régler séparément.
| Situation | Action |
|---|---|
| Trop de faux positifs | augmenter |
| Objets manqués | diminuer |
| Doubles détections sur un même objet | diminuer |
| Deux objets collés fusionnés | augmenter |
Sur le carrefour, deux motos en file l'une derrière l'autre à 10 mètres d'écart peuvent se chevaucher visuellement. Un à 0,45 par défaut tend à les fusionner en une seule détection ; monter à 0,6 les préserve, au prix de doublons ponctuels sur les grandes voitures.
Précision et rappel : les définitions à réciter
À un seuil donné, une détection est un vrai positif si elle correspond à une boîte de vérité avec un IoU au-dessus d'un seuil de validation (souvent 0,5 pour la mAP à 0,5). Sinon c'est un faux positif. Une boîte de vérité qui n'est appariée à aucune détection est un faux négatif.
Balayer de 1 à 0 et tracer précision contre rappel donne la courbe précision-rappel, qui est la base des métriques du module 5.
Soft-NMS et alternatives
La NMS supprime brutalement les boîtes redondantes. Soft-NMS les pénalise proportionnellement à leur chevauchement, ce qui aide sur les scènes très denses (foules, essaims d'objets) où plusieurs vrais objets ont un IoU proche du seuil. Les détecteurs comme DETR vont plus loin en supprimant complètement la NMS : ils prédisent un ensemble de boîtes avec une perte de Hungarian matching qui évite les doublons dès l'apprentissage.
Pour la majorité des projets, la NMS standard reste la valeur par défaut raisonnable. Passer à Soft-NMS se justifie sur un jeu où les objets se touchent régulièrement.
Un seuil de confiance écrit en dur dans le script d'évaluation biaise la précision et le rappel : la métrique standard mAP les calcule sur toute la plage de . Ne fixez jamais dans l'évaluation ; ce seuil n'est utile qu'à l'inférence en production. Confondre les deux fait apparaître des variations de mAP qui ne reflètent que le seuil choisi.
Sur votre jeu de validation, mesurez la précision et le rappel pour chaque couple . Un tableau 3 × 3 vous donne en un regard le compromis effectif de votre détecteur, ce qu'aucun chiffre unique ne peut faire.
En résumé
- Une ancre est un rectangle de référence dont le modèle apprend une correction, alors qu'un détecteur sans ancre prédit directement la boîte à chaque position — YOLOv8, FCOS et CenterNet sont sans ancre.
- La NMS trie les boîtes par score puis élimine celles dont l'IoU dépasse un seuil, par classe, jusqu'à épuisement. Sans elle, une voiture est détectée dix fois.
- Le seuil de confiance contrôle précision et rappel globaux ; le seuil d'IoU de la NMS contrôle la coexistence de deux objets proches. Les deux se règlent ensemble, jamais séparément.
- L'évaluation standard balaie sur toute la plage ; fixer dans le script d'évaluation invalide la mAP et fait croire à des variations qui n'en sont pas.
Module suivant : les métriques de détection — IoU calculé à la main, courbe précision-rappel, AP par classe, mAP à 0,5 et 0,5-0,95, et lecture d'un rapport COCO.