Repository navigation
Add: notebook 4.2f detection SOTA torchvision fine-tune (bloc B.1, See #16057) - #16301
Conversation
…#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>
|
Preflight au commit (c. fd83f90) : |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
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) :
- 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@mainet comparé les 4 fonctions clés :iou_np,make_image,make_split,ap_voctoutes identiques (seul delta apparent = artefact de mon parsing JSON,rng.choice(["rect", "ellipse"])est bien intact). GrainesSEED+1/SEED+2présentes → même terrain 2000/400 images, mêmes 817 GT. - 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.914ettrain: (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. - Authenticité exécution — 16 cellules code
execution_countnon-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. - Uniformité du pattern d'usine —
num_classes=2, weights=None, weights_backbone×3 familles,min_size=320/max_size=640imposé aux trois (5 et 4 occurrences), seuils 4.2c (box_score_thresh=0.5/box_nms_thresh=0.45,score_thresh/nms_threshpour RetinaNet/FCOS) confirmés dans le code. - 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 matchesNotImplementedError= base64 PNG + prose README « jamais raise NotImplementedError », faux positifs). - 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]
Path-collision (organ #13359/#13615)Cette PR #16301 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
…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)
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é industrielletorchvision.models.detectionsur 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
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_vocverbatim (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.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=DEFAULTconflit avecnum_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=640imposé 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)n.r— pas inventée).Tests / validation
scripts/notebook_tools/notebook_tools.py execute --kernel coursia-ml-training: SUCCESS en 5 min 51 s (16 cellules code,execution_countnon-null, 0 erreur,check_c2_compliance.py: 1/1 compliant).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.Conformité
See #16057(B.1 livré ; B.2 ultralytics reste, A.2 Add: notebook 4.2d detection anchor-free from scratch (bloc A.2, See #16057) #16145 / A.3 Add: notebook 4.2e — détection from scratch, la Focal Loss (Bloc A.3 #16057) #16165 en cours ailleurs).gh pr list --search 16057= Add: notebook 4.2d detection anchor-free from scratch (bloc A.2, See #16057) #16145/Add: notebook 4.2e — détection from scratch, la Focal Loss (Bloc A.3 #16057) #16165/feat(ml,#16241): mesure CPU dédiée notebook 4.2e Focal Loss — 10 s total, dont 1,3 s pour les 2 entraînements × 30 époques #16251/fix(detect,#16221): extend markdown-rendering guard to JSON-dumped source entries #16240/fix(guard,#16194): l'advisory BASE-NOT-MAIN nomme la couverture CI perdue #16281 (aucun sur B.1) ; seul claim B.1 = le mien (c.2026-09-15T13:05:47Z) ; lane sœur vérifiée.🤖 Generated with Claude Code