# Radiacode 103 — Pipeline d'identification automatique d'isotopes ## Etat d'avancement | Etape | Statut | Detail | |-------|--------|--------| | Build Docker | Fait | train + detect + web | | Generation spectres synthetiques | Fait | 50 000 echantillons (1D, 4.2 Go) | | Entrainement VegaModel | Fait | 100 epochs, val loss 0.0051, val acc 99.89% | | Modele sauvegarde | Fait | `models/vega_best.pt` (395 Mo), 82 isotopes | | Capture background 24h | Fait | Background mesure disponible | | Detection continue | Fait | Moniteur avec soustraction du background | | Dashboard web | Fait | FastAPI + Chart.js, 4 onglets (spectre, background, CPS, historique) | | Background realiste (entrainement) | Fait | Continuum CsI(Tl) + hybride mesuré/synthétique | | Canal de debordement exclu | Fait | 1023 canaux (ch 1023 overflow exclu) | ## Prochaines etapes - [ ] Re-entrainer le modele avec le background realiste CsI(Tl) + hybridation du background mesure - [ ] Tester avec une source radioactive connue (Cs-137) - [ ] Nettoyer les checkpoints d'epochs dans `models/` (garder seulement `vega_best.pt`, `vega_isotope_index.txt`) - [ ] Transfer vers Pi 4 pour la production - [ ] Ajouter la courbe de continuum CsI(Tl) sur l'interface web background ## Bugs corriges - `spectrum.duration` retourne un `timedelta`, pas un `float` -> utilise `.total_seconds()` - Generation de spectres 2D (time x channels) causait un OOM a ~210 echantillons -> generation 1D cumulative - PyTorch 2.4 ne supporte pas sm_120 (Blackwell/RTX 5060 Ti) -> PyTorch 2.7.0 + CUDA 12.8 - DataParallel incompatible entre GPU d'architectures differentes (4060 Ti Ada + 5060 Ti Blackwell) -> mono-GPU - `radiacode` depend de `bluepy` (BLE) qui ne compile pas dans `python:3.11-slim` -> ajoute `build-essential libglib2.0-dev` - Volume `./data` monte en read-only dans detect -> passe en read-write pour le snapshot JSON - Canal 1023 (overflow bin) affiche comme un pic a 3039 keV -> exclus de l'affichage (NUM_CHANNELS=1023) - Lissage Gaussien du background creait un artefact aux bords -> normalisation locale du noyau au lieu de reinjecter data[i] - Background d'entrainement exponentiel ne ressemblait pas au spectre CsI(Tl) reel -> remplace par modele realiste (bosse asymetrique a 110 keV + queue Compton) - Ajout de l'entrainement hybride : 70% background mesure + 30% synthetique quand `background_24h.npy` est disponible