Aller au contenu

Phase 2 : Entraînement (Pratique)

Vous avez la théorie. Il est temps de mettre les mains dans le code. Cette page vous guide à travers les outils concrets pour entraîner vos modèles : d'abord les Notebooks (prototypage rapide), puis la structure PyTorch Lab (production sur cluster).

Notebooks vs PyTorch Lab

Les notebooks sont conçus pour être faciles à exécuter et à comprendre. Ils sont idéaux pour les premiers tests et le prototypage rapide. La structure PyTorch Lab, quant à elle, est conçue pour être robuste et scalable. Elle permet de gérer des sessions d'entraînement à grande échelle sur un cluster de calcul.


1. Notebooks

Le dossier NotebookLAB/Notebooks/ contient 4 Jupyter Notebooks, chacun dédié à une tâche spécifique du workflow.

struct_notebook

I. Exploration des Données :

Ce notebook est votre point d'entrée pour comprendre vos données avant de les donner à manger au réseau. Il permet de :

  • Charger les fichiers binaires (.bin) et afficher les images des 3 caméras.
  • Visualiser la distribution des angles de braquage (Histogrammes).
  • Vérifier la synchronisation Caméras / Télémétrie.

C'est l'outil de diagnostic essentiel pour détecter les données corrompues ou déséquilibrées.

II. Entraînement Baseline :

Ce notebook implémente le workflow complet pour le modèle PilotNetResNet9Ch (la Baseline). Il couvre :

  • Le chargement du Dataset avec le DataLoader custom.
  • La définition du modèle avec le "Hack des 9 canaux".
  • La boucle d'entraînement avec affichage des courbes de Loss.

Idéal pour un premier test rapide avant de passer à l'échelle.

III. Entraînement Spatial :

Même structure que le précédent, mais pour le modèle PilotNetTransformer (Spatial Attention). Permet de comparer les performances et le temps de convergence par rapport à la Baseline.

IV. Entraînement Multi-Vues :

Le notebook le plus avancé, dédié au MultiCameraTransformer (View Attention). C'est ici qu'on teste la fusion inter-caméras par Attention.

Configuration Requise : Chemin d'Accès

Les notebooks utilisent des chemins relatifs vers ../Data/ et ../Resources/. Pour que cela fonctionne, vous devez déplacer le notebook que vous exécutez à la racine de NotebookLAB/ (au même niveau que Data/, Resources/, Models/). Alternative : Modifiez les chemins en dur dans les premières cellules.


2. PyTorch Lab

Le pytorch_lab est la version "industrielle" de nos notebooks. Il est conçu pour être exécuté sur le cluster de calcul DCE via SLURM, mais fonctionne aussi en local.

Structure du Projet

pytorch_lab/
├── config.yaml               # Configuration d'entraînement
├── config-sample.yaml        # Exemple de config
├── submit-slurm.py           # Script de soumission SLURM
├── logs/                     # Logs TensorBoard + Checkpoints
└── src/torchtmpl/
    ├── main.py               # Point d'entrée (train/test)
    ├── data.py               # DataLoader & Balancing
    ├── models/               # Architectures (ResNet, Transformer...)
    ├── optim.py              # Loss & Optimizer factory
    ├── utils.py              # Early Stopping, Checkpoints
    └── export.py             # Export vers ONNX

I. Configuration (config.yaml)

Tout est centralisé dans un seul fichier YAML. Voici l'explication de chaque paramètre :

Section data (Données)

Paramètre Description
root_dir Chemin absolu vers le dossier contenant les fichiers .bin
csv_path Chemin vers le CSV listant tous les fichiers valides
train_csv Chemin vers le CSV du split d'entraînement
val_csv Chemin vers le CSV du split de validation
test_csv Chemin vers le CSV du split de test
batch_size Nombre d'échantillons par batch (32 recommandé)
num_workers Nombre de processus parallèles pour le chargement (8 pour GPU)
valid_ratio Ratio de validation (ignoré si val_csv est fourni)
balance_prob Probabilité de garder une ligne droite (0.8 = on supprime 20%)
balance_threshold Seuil steering pour considérer un virage (0.3 rad)
oversample_factor Facteur de duplication des virages (2 = doublés)

Section Entraînement

Paramètre Description
nepochs Nombre maximum d'époques (8-50 selon la taille du dataset)
patience Nombre d'époques sans amélioration avant arrêt (Early Stopping)
min_delta Amélioration minimale pour considérer un progrès (0.0001)

Section logging

Paramètre Description
logdir Dossier de sauvegarde des logs (TensorBoard) et checkpoints

Section loss

Paramètre Description
name Fonction de perte : SmoothL1Loss (recommandé) ou MSELoss

Section optimizer

Paramètre Description
algo Algorithme : Adam (recommandé), SGD
lr Learning Rate (0.0001 par défaut)
weight_decay Régularisation L2 (0.0001 par défaut)

Section model

Paramètre Description
class Architecture : PilotNetResNet9Ch, PilotNetTransformer, MultiCameraTransformerModel
pretrained Charger les poids ImageNet (true/false)
d_model Dimension du Transformer (256, ignoré pour ResNet)
nhead Nombre de têtes d'attention (4, ignoré pour ResNet)
num_layers Nombre de couches Transformer (2, ignoré pour ResNet)
dropout Taux de dropout (0.1, ignoré pour ResNet)

II. Modules Sources

Avant de lancer l'entraînement complet, il est utile de comprendre (et tester) chaque composant individuellement.

A. data.py (Datasets)

Ce module gère tout le pipeline de données :

  • Lecture des fichiers binaires (.bin) via Lazy Loading.
  • Génération de l'index global (dataset_index.csv) pour mapper chaque frame.
  • Application du Undersampling (lignes droites) et Oversampling (virages).
  • Création des DataLoader PyTorch prêts à l'emploi.

Test Standalone

Vous pouvez exécuter data.py seul pour vérifier le chargement :

python -m torchtmpl.data
(Cela chargera les DataLoaders, affichera les stats d'équilibrage, et validera l'intégrité des données.)

B. models/ (Architectures)

Ce dossier contient les 3 architectures neuronales documentées dans la partie Théorie :

  • ResNetPilot.pyPilotNetResNet9Ch (Baseline).
  • ResNetTransformer.pyPilotNetTransformer (Spatial Attention).
  • TransformerMultiCam.pyMultiCameraTransformerModel (View Attention).
  • __init__.py → Factory build_model(cfg) qui instancie le bon modèle selon config.yaml.

Test Standalone

Vous pouvez tester l'instanciation d'un modèle :

python -m torchtmpl.models
(Cela instanciera chaque modèle et affichera un résumé de l'architecture.)

C. main.py (Orchestration)

C'est le chef d'orchestre. Il :

  1. Lit le fichier config.yaml.
  2. Appelle data.py pour créer les DataLoaders.
  3. Appelle models/ pour instancier le réseau.
  4. Lance la boucle d'entraînement (train/validation).
  5. Gère l'Early Stopping et la sauvegarde du meilleur modèle.

Test Standalone

On ne lance pas main.py seul (il a besoin d'arguments). Mais on peut vérifier l'import :

python -c "from torchtmpl import main; print('OK')"

III. Lancer l'Entraînement

Depuis la racine pytorch_lab/ :

# Activer l'environnement virtuel
source /chemin/vers/votre/venv/bin/activate

# Lancer l'entraînement
python -m torchtmpl.main config.yaml train

Les logs et le meilleur modèle (best_model.pt) seront sauvegardés dans le dossier défini par logging.logdir.

IV. SLURM / DCE

Sur le cluster, le script submit-slurm.py automatise tout :

  1. Il vérifie que tous vos fichiers sont commités (aucune modification locale tolérée).
  2. Il crée un job SLURM qui copie le code dans TMPDIR pour isolation.
  3. Il lance python -m torchtmpl.main config.yaml train.
# Commit obligatoire
git add -A && git commit -m "Lancement training"

# Soumettre le job
python submit-slurm.py config.yaml

SLURM

Surveiller les Logs

Les sorties du job sont dans logslurms/slurm-XXXXX.out. Les métriques TensorBoard sont dans le dossier logs/.

SLURM

Une fois le job terminé, vous pouvez récupérer vos résultats (modèles .pt, logs TensorBoard) depuis le dossier Experiments/logs/ défini dans config.yaml. Les modèles entraînés y sont sauvegardés automatiquement, prêts à être exportés ou analysés.

# Visualiser les courbes d'entraînement
tensorboard --logdir=/chemin/vers/Experiments/logs/

V. Exporter le Modèle (ONNX)

Une fois l'entraînement terminé, exportez le meilleur modèle vers ONNX :

python -m torchtmpl.export config.yaml logs/NomDuModel/best_model.pt output.onnx

Le fichier output.onnx est prêt à être déployé dans ROS (Phase 3).