Heoshua décroche la 2ᵉ place au 3LC Multi-Vehicle Detection Challenge
2ᵉ place sur Kaggle dans un challenge data-centric où le modèle est gelé : seule la qualité des données compte. De 0.543 à 0.928, et un premier modèle open-source à la clé.
Heoshua décroche la 2ᵉ place au 3LC Multi-Vehicle Detection Challenge sur Kaggle — 192 équipes, un modèle gelé, et une seule question : jusqu'où peut-on aller en ne touchant qu'aux données ?
Une compétition à l'envers
D'habitude, on optimise le modèle. Ici, tout était verrouillé : YOLOv8n entraîné from scratch, entrée en 640px, pas d'ensemble, pas de TTA, pas de pseudo-labeling, pas de données externes. L'architecture, les poids de départ, la taille d'image — figés pour tout le monde.
Le seul levier autorisé, c'est la donnée. Nettoyer les labels, corriger le découpage train/val, rééquilibrer l'échantillonnage. C'est le pari du data-centric AI : quand le modèle ne bouge plus, c'est la qualité des données qui fait la différence.
Ce que « 2ᵉ place » veut dire — sans arrondir
Soyons précis. Sur le leaderboard privé brut, notre score de 0.92016 nous plaçait 14ᵉ sur 192. Mais ce challenge n'était pas une simple course au score.
Pour être éligible à un prix, une soumission devait franchir une barre stricte : formulaire d'évaluation rendu à temps, dépôt de code accessible, usage réel de 3LC, et conformité totale aux règles (from scratch, 640px, pas d'ensemble ni de TTA). Beaucoup de scores plus élevés ne franchissaient pas cette barre. Parmi les soumissions éligibles, classées ensuite au score privé, nous finissons 2ᵉ.
2ᵉ — AYITEY Kodjo Josué. « Travail data-centric bien documenté, et une performance solide récurrente. » — annonce officielle des hôtes
Autrement dit : la rigueur est le classement. Un bon score qui ne respecte pas la discipline data-centric ne comptait pas. C'est exactement l'esprit de la compétition — et le nôtre.
Le parcours : de 0.543 à 0.928
Itération Ce qui change LB public baseline starter, 10 époques 0.543 v3 labels revus à la main via une grille de revue 0.755 v5 découpage séquence + poids d'échantillonnage 3LC 0.927 v7 pondération par difficulté (clusters d'embeddings) 0.927 v12 (final) ré-entraînement sur 100 % des données annotées 0.928Chaque bond vient d'un type de levier différent — et tous s'appuient sur les primitives de 3LC.
Réviser les labels au lieu de leur faire confiance. La première idée — accepter automatiquement toute prédiction très confiante comme un label manquant — a fait baisser le score. La confiance du modèle seule n'est pas un signal fiable. La vraie solution : une grille HTML qui remonte, à partir des prédictions calculées par 3LC, uniquement les boîtes ambiguës à faire trancher par un humain. Résultat : +0.21 d'un coup.
Rendre la validation honnête. Le jeu UA-DETRAC partage 99 séquences sur 100 entre train et val — des images quasi-identiques fuient d'un côté à l'autre. Un découpage par séquence (train et val disjoints), plus les poids d'échantillonnage par ligne de 3LC pour les classes rares, ont soulevé le LB de +0.17 en une seule itération.
Oversampler les régions difficiles, pas les classes. L'erreur ne se répartit pas uniformément dans une classe : elle se concentre dans le contre-jour, la nuit, les occlusions. En clusterisant les embeddings d'images calculés par 3LC (HDBSCAN) et en pondérant par difficulté visuelle, v7 a pris la tête.
Les échecs qui comptent
Le plus instructif n'a rapporté aucun point. Pousser une seule classe faible (les vans) a fait monter la validation — et baisser le leaderboard. Un modèle qui sur-prédit une classe à frontière ambiguë génère des faux positifs, que la métrique punit plus fort que le gain de rappel.
Ce qui a rendu ce piège visible — et bon marché à tester — c'est le découpage honnête : quand un gain en validation ne se transfère pas au LB, c'est un signal en soi. Le data-centric, ce n'est pas seulement « éditer des labels ». C'est pouvoir faire confiance à sa mesure, et tester une hypothèse pour le prix d'un seul entraînement.
Choisir sans se faire piéger
Le score public ne porte que sur ~40 % du test. Choisir ses deux soumissions finales sur le seul score public, c'est le piège qu'un esprit data-centric doit éviter. On a modélisé le décrochage public→privé à partir de la précédente compétition des mêmes hôtes : le public surestime toujours le privé, et le rang se réordonne durement.
D'où deux finalistes aux modes d'échec opposés : v12 (100 % des données, pari du signal maximal) et v10 multi-scale (validation honnête + augmentation robuste). L'un survit quelle que soit la façon dont le split privé casse. C'est de l'analyse de métriques, pas de la superstition.
Le modèle est ouvert
Le modèle, le code et le parcours complet sont publics :
- Démo en direct — mvdc-heoshua.streamlit.app : détection sur vos propres images/vidéos, courbes d'entraînement, et le parcours data-centric en FR/EN.
- Code source — github.com/yehoshua0/3lc-mvdc : pipeline complet, grille de revue, découpage séquence, mining d'erreurs de labels.
- Résultats officiels — l'annonce des hôtes sur Kaggle.
C'est notre premier modèle open-source entraîné pour un cas d'usage réel — et la première pierre d'une série. Les compétitions prouvent la méthode ; les modèles la rendent utile.
Big things start small.