Skip to content

Add: notebook 4.2f detection SOTA torchvision fine-tune (bloc B.1, See #16057) - #16301

Merged
jsboige merged 1 commit into
mainfrom
feature/16057-sota-torchvision-detection
Sep 15, 2026
Merged

jsboige merged 1 commit into
mainfrom
feature/16057-sota-torchvision-detection

Conversation

@jsboige

@jsboige jsboige commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-po-2026:CoursIA -- prev: MED/feat #16299

Le livrable

4.2f-Detection-SOTA-Torchvision.ipynb — bloc B.1 de l'EPIC #16057 : la parité industrielle torchvision.models.detection sur le terrain exact du 4.2c, évaluée avec son protocole exact. Trois familles SOTA fine-tunées — Faster R-CNN (two-stage), RetinaNet (one-stage anchors + Focal Loss), FCOS (one-stage anchor-free) — plus le comparatif final contre AnchorNet (nombres committés du 4.2c).

Le terrain et le protocole : repris verbatim, pas adaptés

  • Générateur du terrain : cellule verbatim du 4.2c (iou_np / make_image / make_split), mêmes graines (SEED+1/SEED+2) ⇒ mêmes 2 000 images de train, mêmes 400 images et 817 objets GT de validation — les mAP se lisent directement contre la ligne AnchorNet (0,853 / 0,914).
  • ap_voc verbatim (VOC07 11-point + VOC10 all-point) et le même matching glouton (score décroissant, IoU ≥ 0,5, GT matché une fois). Seul le collecteur change — inévitable : AnchorNet rend des logits d'anchors à décoder, torchvision rend des détections prêtes.
  • Seuils du protocole posés à la construction : box_score_thresh=0.5 / box_nms_thresh=0.45 (RetinaNet/FCOS : score_thresh/nms_thresh) — les conventions du 4.2c, aucune faveur aux SOTA.

Le pattern d'usine uniforme (le vrai livrable pédagogique)

num_classes=2, weights=None, weights_backbone=<ImageNet> pour les trois — weights=DEFAULT conflit avec num_classes=2 (ValueError, tête COCO à 91 classes), le backbone pré-entraîné + tête fraîche est la voie canonique. min_size=320, max_size=640 imposé aux trois : sinon RetinaNet/FCOS redimensionnent à 800 par défaut et la comparaison mesurerait la résolution, pas l'architecture.

Résultats mesurés (GPU, kernel coursia-ml-training)

  • Fine-tuning borné uniforme : 1 000 images × 6 époques par modèle — la moitié des images et des époques du 4.2c (2 000 × 12) : c'est la thèse « le pré-entraînement achète de la convergence », rendue mesurable.
  • mAP@0.5 sur les 400 images / 817 GT (identiques au 4.2c) : Faster R-CNN 0,909 / 0,997 (VOC07/VOC10), RetinaNet 0,997 / 1,000, FCOS 0,909 / 0,998 — les trois battent AnchorNet (0,853 / 0,914) avec la moitié du budget ; RetinaNet atteint un mAP10 essentiellement complet.
  • Comparatif final (table committée, cellule 19) :
    modele                                params  VOC07  VOC10  ms/img  budget
    4.2c AnchorNet (from scratch)         74,717  0.853  0.914      n.r  2000 img x 12 ep en 79 s
    faster-rcnn                       18,930,229  0.909  0.997    17.7  1000 img x 6 ep en 73 s
    retinanet                         32,168,694  0.997  1.000    29.0  1000 img x 6 ep en 109 s
    fcos                              32,064,455  0.909  0.998    36.3  1000 img x 6 ep en 107 s
    
  • Latence en inférence mono-image mesurée sur 100 images : 17,7 / 29,0 / 36,3 ms/img GPU (AnchorNet : non relevée dans le 4.2c, marquée n.r — pas inventée).

Tests / validation

  • Exécution complète des 30 cellules via scripts/notebook_tools/notebook_tools.py execute --kernel coursia-ml-training : SUCCESS en 5 min 51 s (16 cellules code, execution_count non-null, 0 erreur, check_c2_compliance.py : 1/1 compliant).
  • C.1 : grep -cE "raise NotImplementedError|assert False|1/0" = 0 ; 3 exercices stubbés (return None # TODO etudiant), le notebook tourne de bout en bout exercices non complétés.
  • C.2 : outputs committés (figures terrain, PR curves, gallerie détections, tableaux).

Conformité

🤖 Generated with Claude Code

…#16057)

Faster R-CNN / RetinaNet / FCOS fine-tunes sur le terrain exact du 4.2c
(generateur + graines verbatim, memes 817 GT de validation), protocole
ap_voc + matching glouton repris tel quel, seuils 0.5/0.45 a la
construction, min_size=320 commun. Mesure : 0.909/0.997, 0.997/1.000,
0.909/0.998 contre AnchorNet 0.853/0.914, avec la moitie du budget
(1000 img x 6 ep). 3 exercices stubbes (C.1), execution complete GPU
kernel coursia-ml-training (C.2), README serie : ligne 4.2f + budget
mesure + feuille de route detection.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 15, 2026

Copy link
Copy Markdown
Owner Author

Preflight au commit (c. fd83f90) : gh pr list --search 16057 = #16145/#16165 (A.2/A.3, aucun sur B.1) ; dernier claim #16057 = B.1 par cette lane (2026-09-15T13:05:47Z, paths cités) ; dashboard lane sœur CoursIA-2 lu — aucune activité bloc B. README série audité fichier entier (5 notebooks disque ↔ 6 lignes tableau après ajout ↔ prose, roadmap étendue à la famille détection #16057).

@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 16
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-15) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 22.5s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.8s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: LGTM

[Hermes] — review de #16301 (4.2f-Detection-SOTA-Torchvision, bloc B.1 de #16057).

Vérifications effectuées sur le diff (head fd83f9080e49) :

  1. Claim « terrain/protocole repris verbatim du 4.2c » vérifiée contre main — j'ai téléchargé 4.2c-Detection-Anchor-From-Scratch.ipynb@main et comparé les 4 fonctions clés : iou_np, make_image, make_split, ap_voc toutes identiques (seul delta apparent = artefact de mon parsing JSON, rng.choice(["rect", "ellipse"]) est bien intact). Graines SEED+1/SEED+2 présentes → même terrain 2000/400 images, mêmes 817 GT.
  2. Ligne de référence AnchorNet recoupée — les outputs committés du 4.2c@main contiennent exactement mAP@0.5 sur 400 images / 817 objets GT : VOC07 11-point 0.853 | VOC10 all-point 0.914 et train: (2000, 1, 96, 96) | val: (400, ...) | objets GT val: 817. Les nombres cités dans le comparatif (0,853/0,914) sont fidèles, pas retapés.
  3. Authenticité exécution — 16 cellules code execution_count non-null (0..18 avec md), papermill.exception=false ×30, wall-clock 13:23:18→13:29:06 = 348 s cohérent avec les durées par cellule (109+107+73 fine-tuning + 38 eval + ~0 md) et avec le « 5 min 51 s » du body. Timeline séquentielle, zéro gap négatif.
  4. Uniformité du pattern d'usine — num_classes=2, weights=None, weights_backbone ×3 familles, min_size=320/max_size=640 imposé aux trois (5 et 4 occurrences), seuils 4.2c (box_score_thresh=0.5/box_nms_thresh=0.45, score_thresh/nms_thresh pour RetinaNet/FCOS) confirmés dans le code.
  5. Security scan — grep HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN= : 0 hit. Path-leak (/home/, /opt/data, /mnt/, C:\Users) : 0 hit réel (les 6 matches NotImplementedError = base64 PNG + prose README « jamais raise NotImplementedError », faux positifs).
  6. Exercices stubbés TODO etudiant ×6 — notebook tourne de bout en bout non complété, conforme C.1.

Point mineur (non bloquant) : le README de série place la ligne 4.2f avec les claims chiffrés — fidèles aux outputs.

(contrainte token : COMMENT only — cap #15511, opener jsboige)

[Hermes hermes-pr-review, cycle :14 15/09, host c92df397a786]

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16301 (Add: notebook 4.2f detection SOTA torchvision fine-tune (bloc B.1, See #16057)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 15, 2026
@jsboige
jsboige merged commit 6c1bc2a into main Sep 15, 2026
81 of 86 checks passed
jsboige added a commit that referenced this pull request Sep 16, 2026
…iffusion-SOTA) (#16198)

## Objet

Bloc B.4 de l'EPIC #16062 — le **pendant industriel** du bloc A (from scratch).
Nouvelle sous-série `GenAI/Audio/06-Diffusion-SOTA/` :

> `06-1-AudioLDM-SOTA-Comparison.ipynb` — `diffusers.AudioLDMPipeline`
> (`cvssp/audioldm-s-full-v2`, fp16, RTX 3090), conditionnement texte.

34 cellules dont 15 de code. Le notebook interroge ce que la sous-série 05
construit à la main : *combien coûte en lignes l'appel d'industrie, et que
mesure-t-il vraiment ?*

## Mesures (firsthand, cette branche)

| Axe | Mesure | Conditions |
|---|---|---|
| Latence froide | 0,44 s | premier appel après `from_pretrained`, kernels CUDA chauds |
| Latence chaude | **0,45 s** (médiane n=8, σ 0,04 s) | le chiffre qui dimensionne un service |
| Pic mémoire | 0,89 GiB / 24 Go | fp16, un seul tenant |
| Paramètres | **421 M** | unet 185 + CLAP 125 + vae 55 + vocodeur 55 (somme par composant) |
| Distance mel vs réel (ESC-50) | rain ~18 dB, chainsaw ~21 dB | **repère intra-classe du réel = 15 dB** |
| Distance mel vs réel (ESC-50) | dog ~41 dB | ~2,7× la variance intra-classe — le *small* décroche |
| Lignes de code cœur | **8** vs **472** | 472 = décompte firsthand, branche de la PR #16133 (bloc A) |

La lecture de qualité est **dépendante de la classe**, et le notebook le dit
ainsi : sur les textures stationnaires (pluie, tronçonneuse) le pré-entraîné
tombe dans la variance du réel ; sur les transitoires (chien) il reste à
~2,7× au-dessus. C'est le partage honnête de la sous-série — comprendre à la
main, produire avec le pré-entraîné, **savoir mesurer quand le pré-entraîné
décroche**.

## Verdict SOTA (Prong A)

**SOTA-OK.** Le vrai outil est invoqué (pas de réimplémentation jouet, pas de
sortie de substitution) : `cvssp/audioldm-s-full-v2` via
`diffusers.AudioLDMPipeline`, génération réelle, audio réel dans les sorties.
Le seul axe où le moteur est mis en défaut (transitoires) est **rapporté**,
pas maquillé en succès.

Prong B : le problème n'est pas dégénéré — 3 classes × 4 graines, avec
référence de variance intra-classe pour que la distance mel soit
interprétable, et balayage `guidance_scale`.

## Validation réelle (H.1 — 4 preuves)

1. **Exécution complète end-to-end** — `papermill --kernel python3`, deux
   passes complètes, exit 0.
2. **`execution_count` non nul partout** — 15/15 cellules de code.
3. **0 erreur** — aucun `output_type: error` dans les 15 cellules.
4. **Trailer** — section *Reproductibilité* en fin de notebook.

Contrôles complémentaires :

- `grep -nE "raise NotImplementedError|assert False|1/0"` → **0 occurrence**
  (règle C.1) ; 3 stubs d'exercice en `pass` / `print(...)` / `return None`.
- Aucune fuite de chemin machine dans les sorties (0 occurrence
  `C:\`/`jsboi`/`AppData`).
- **Catalogue byte-identique à `main`** — la PR ne touche ni
  `COURSE_CATALOG.generated.*` ni les marqueurs `CATALOG-STATUS`.

## Stop & Repair — aucun output édité à la main

La première exécution faisait apparaître, dans les sorties, le chemin
absolu d'un warning de dépréciation `torchaudio`
(`C:\Users\...\site-packages\torchaudio\...`). Conformément à
[secrets-hygiene](../../.claude/rules/secrets-hygiene.md) règle 6 :
**cause corrigée à la source** (filtre ciblé
`warnings.filterwarnings("ignore", message=r"In 2\.9, ...")` dans la cellule
de setup), **puis re-exécution complète**. Les sorties committées sont
exactement ce que le code produit — elles n'ont pas été rédigées à la main.

## Périmètre

- **1 fichier, 1 sujet** : le notebook B.4. Pas de README, pas de script, pas
  de refactor — `git diff --stat origin/main` = 1 fichier.
- `06-2` (B.5, vocodeur HiFi-GAN pré-entraîné) et le tableau croisé B.6
  restent à livrer ; **#16062 reste ouverte** (`See #16062`).
- Le diagramme de parcours du `Audio/README.md` (01→04) sera mis à jour quand
  `05-Diffusion-from-scratch` sera sur `main` : l'annoncer seul, avec un trou
  en 05, serait moins exact que l'état actuel de relecture.

Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #16301

See #16062

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants