Skip to content

[ML/Vision] Détection d'objets from scratch : IoU/mAP, anchor-free minimal, comparatif #16057

Description

@jsboige

Contexte pédagogique

Notre série Vision (ML/DataScienceWithAgents/04-Vision/) couvre :

  • 4.1 Convolution (edge detection, Sobel/Prewitt, kernels gaussiens)
  • 4.2 Réseaux convolutifs (LeNet-like, VGG-block, ResNet-block, transfer learning)
  • 4.2b Convolution avancée (détection de contours Canny from scratch vs skimage, segmentation simple)
  • 4.3 Architectures modernes (ResNet, DenseNet, EfficientNet en panorama + transfer)

Ce qui manque : la détection d'objets (localisation + classification), pas la classification seule. C'est un pilier historique et industriel :

  • Two-stage : R-CNN → Fast R-CNN → Faster R-CNN (region proposal + classification)
  • One-stage anchor-based : YOLO, SSD, RetinaNet (Focal Loss)
  • One-stage anchor-free : CenterNet, FCOS (keypoints ou center-based)

Aucune de ces familles n'est couverte. Le 4.2b fait de la détection de contours (Canny), pas de la détection d'objets.

Acceptance

Bloc A — from scratch (le geste fondateur)

  1. Notebook Detection-Anchor-from-scratch : maillage d'anchor boxes sur feature map (taille, ratios, scales), calcul IoU, label assignment (seuils pos/neg), sampling (1:3 pos:neg), loss from scratch (localisation L1 sur (x, y, w, h) normalisé, classification cross-entropy bi-class), NMS (greedy, IoU threshold), mAP calculation (VOC07 11-point et VOC10 all-point) à la main. Sans torchvision.models.detection, sans ultralytics.
  2. Notebook Detection-AnchorFree-from-scratch : CenterNet-like (heatmap + offset + size), keypoint loss (focal modifiée), gaussiennes autour des centres, decoding, NMS centroid-based. Démontre l'alternative anchor-free et ses avantages (pas de tuning d'anchors).
  3. Notebook Detection-FocalLoss-from-scratch : dérivation de la Focal Loss (γ, α), comparaison cross-entropy vs focal sur déséquilibre extrême (1000 neg : 1 pos), visualisation de l'effet sur les gradients. Démontre pourquoi la simple CE échoue dans ce régime.

Bloc B — geste SOTA / lib complémentaire (le pendant industriel)

  1. Notebook Detection-SOTA-torchvision : torchvision.models.detection (Faster R-CNN, RetinaNet, FCOS) sur PASCAL VOC / COCO mini, comparatif précision mAP / vitesse inférence / taille modèle vs le modèle from scratch (Bloc A.1) sur le même dataset réduit. Justification : torchvision est l'implémentation SOTA de référence PyTorch, utilisée en production.
  2. Notebook Detection-SOTA-ultralytics : ultralytics (YOLOv8/YOLO11) sur le même dataset réduit, comparaison mAP/vitesse/FLOPs. Justification : YOLO est le standard industriel pour l'inférence temps réel.
  3. Comparaison explicite Bloc A vs Bloc B : tableau récapitulatif — mAP, latence (FPS), taille mémoire, lignes de code, capacité multi-scale. Justifie le pourquoi du from scratch (compréhension de NMS/anchors/loss) et le quand du SOTA (production, COCO complet).

Branchement pédagogique

À rattacher à ML/DataScienceWithAgents/04-Vision/ : créer 4.4-Object-Detection-from-scratch/ (3 notebooks A) + 4.5-Object-Detection-SOTA/ (2 notebooks B). Le 4.2b (contours Canny) reste distinct (segmentation, pas détection).

Cohérence maison

  • Notebooks en français, exécutables de bout en bout avec outputs, ≥3 exercices par notebook
  • Dataset réduit : PASCAL VOC 2007 subset (5-10 classes, 500-1000 images) ou synthetic shapes (rectangles/cercles générés) pour rester CPU-compatible
  • Stack Bloc A : PyTorch + numpy, pas de torchvision.models.detection (seulement torchvision.ops.nms pour validation référence), pas d'ultralytics
  • Stack Bloc B : torchvision.models.detection + ultralytics

Scope disjoint

  • Pas de segmentation sémantique (Mask R-CNN, U-Net) — autre issue, hors scope
  • Pas de détection 3D / point cloud — hors scope ML/Vision 2D
  • Pas de tracking (SORT, DeepSORT) — au-delà de la détection
  • Pas d'élargissement silencieux du 4.2b (détection de contours ≠ détection d'objets)

Notes

  • Le pattern "from scratch → SOTA" est exactement celui du 3.1 (Retropropagation from scratch) → 3.2 (Optimisateurs PyTorch), et du 4.2 (Conv from scratch) → 4.2b (Conv skimage comparatif). On continue la tradition.
  • Si une ramification .NET s'avère pertinente (ML.NET n'a pas de détection mature), Python seul avec justification.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions