Ce projet utilise un Vision Transformer (ViT) pour rĂ©soudre un problĂšme inverse en conception d'antennes : Ă partir d'une image reprĂ©sentant des spĂ©cifications de rayonnement (Gain, SLL, HPBW, Ξâ), le modĂšle prĂ©dit la configuration optimale d'un rĂ©seau d'antennes circulaire (nombre d'antennes par anneau).
L'objectif de cette premiÚre partie est de générer une seule configuration (un vecteur de 5 valeurs) pour une entrée donnée, en utilisant un encodeur ViT.
-
EntrĂ©e : Image 224Ă224 reprĂ©sentant les spĂ©cifications
- Gain du lobe principal (dB)
- Niveau des lobes secondaires - SLL (dB)
- Largeur du faisceau - HPBW (degrés)
- Angle de pointage Ξâ (degrĂ©s)
-
Sortie : Configuration d'antennes (5 valeurs)
- Nombre d'antennes dans chaque anneau (5 anneaux maximum)
- Chaque anneau peut contenir 0 Ă 10 antennes
antenna_vit_project/
â
âââ src/ # Code source
â âââ image_generator.py # GĂ©nĂ©ration d'images Ă partir des spĂ©cifications
â âââ vit_model.py # Architecture Vision Transformer
â âââ vit_dataset.py # Dataset PyTorch pour charger les donnĂ©es
â âââ vit_training.py # Script d'entraĂźnement
â âââ vit_test.py # Script de test et Ă©valuation
â
âââ data/ # DonnĂ©es du projet
â âââ Minput.npy # SpĂ©cifications (4, nb_samples)
â âââ Moutput.npy # Configurations (5, nb_samples)
â âââ Minput_training.npy # SpĂ©cifications d'entraĂźnement
â âââ Moutput_training.npy # Configurations d'entraĂźnement
â âââ Minput_test.npy # SpĂ©cifications de test
â âââ Moutput_test.npy # Configurations de test
â âââ training_images/ # Images d'entraĂźnement gĂ©nĂ©rĂ©es
â âââ test_images/ # Images de test gĂ©nĂ©rĂ©es
â
âââ models/ # ModĂšles sauvegardĂ©s
â âââ best_vit_antenna_model.pth # Meilleur modĂšle
â âââ final_vit_antenna_model.pth # ModĂšle final
â âââ checkpoint_epoch_*.pth # Checkpoints intermĂ©diaires
â
âââ results/ # RĂ©sultats et visualisations
âââ training_history.json # Historique d'entraĂźnement
âââ training_history.png # Courbes de perte
âââ error_distribution.png # Distribution des erreurs
âââ predictions_vs_targets.png # PrĂ©dictions vs valeurs rĂ©elles
âââ prediction_examples.png # Exemples de prĂ©dictions
âââ test_predictions.npz # PrĂ©dictions complĂštes
Assurez-vous d'avoir Python 3.8 ou supérieur installé.
cd antenna_vit_project
# Installation des dépendances essentielles
pip install torch torchvision
pip install numpy matplotlib pillow tqdmtorch(â„2.0) : Framework PyTorchtorchvision: Pour le modĂšle ViT prĂ©-entraĂźnĂ©numpy: Manipulation de donnĂ©esmatplotlib: Visualisationspillow(PIL) : Traitement d'imagestqdm: Barres de progression
Prérequis : Vous devez d'abord exécuter les scripts originaux pour générer les données :
# Dans le dossier parent (ViT gen/)
python3 dataset.py # GénÚre Minput.npy et Moutput.npy
python3 repartition_training_test.py # Divise en training/testEnsuite, copier les fichiers .npy générés dans le dossier antenna_vit_project/data/ :
cp Minput_training.npy antenna_vit_project/data/
cp Moutput_training.npy antenna_vit_project/data/
cp Minput_test.npy antenna_vit_project/data/
cp Moutput_test.npy antenna_vit_project/data/Convertir les spécifications numériques en images de diagrammes de rayonnement :
cd antenna_vit_project/src
python3 image_generator.pyCe script va :
- Charger
Minput_training.npyetMinput_test.npy - GĂ©nĂ©rer des images 224Ă224 pour chaque Ă©chantillon
- Sauvegarder dans
data/training_images/etdata/test_images/
Sortie attendue :
đš GĂ©nĂ©ration de XXXX images dans data/training_images
â
XXXX images générées avec succÚs!
đš GĂ©nĂ©ration de XXX images dans data/test_images
â
XXX images générées avec succÚs!
Lancer l'entraĂźnement du Vision Transformer :
python3 vit_training.pyConfiguration par défaut :
- Batch size : 16
- Epochs : 50
- Learning rate : 1e-4
- Optimizer : AdamW avec weight decay
- Scheduler : Cosine Annealing avec Warm Restarts
- ModÚle : ViT-B/16 pré-entraßné sur ImageNet
Pendant l'entraĂźnement, vous verrez :
Epoch 1/50 | Train Loss: 0.0234 | Val Loss: 0.0189 | Val MAE: 1.45 antennes
Epoch 2/50 | Train Loss: 0.0187 | Val Loss: 0.0156 | Val MAE: 1.23 antennes
â Nouveau meilleur modĂšle sauvegardĂ© (Val Loss: 0.0156)
...
Fichiers générés :
models/best_vit_antenna_model.pth: Meilleur modĂšle (validation loss minimale)models/final_vit_antenna_model.pth: ModĂšle finalresults/training_history.json: Historique d'entraĂźnementresults/training_history.png: Courbes de perte et MAE
Temps d'entraßnement estimé :
- CPU : ~2-4 heures (50 epochs)
- GPU : ~20-40 minutes (50 epochs)
Ăvaluer les performances du modĂšle sur l'ensemble de test :
python3 vit_test.pyCe script va :
- Charger le meilleur modĂšle (
best_vit_antenna_model.pth) - Faire des prédictions sur l'ensemble de test
- Calculer les métriques de performance
- Générer des visualisations
Métriques calculées :
- MAE (Mean Absolute Error) par anneau et globale
- RMSE (Root Mean Squared Error)
- Pourcentage de prédictions exactes
- Pourcentage d'erreurs †1 antenne
Visualisations générées :
error_distribution.png: Distribution des erreurs par anneaupredictions_vs_targets.png: Scatter plots prédictions vs vraies valeursprediction_examples.png: Exemples visuels de prédictions
Sortie attendue :
đ MĂTRIQUES DE PERFORMANCE
đŻ Erreur Absolue Moyenne (MAE):
Anneau 1: 0.85 antennes
Anneau 2: 0.92 antennes
...
Global: 0.88 antennes
â
Prédictions Exactes (aprÚs arrondi):
Anneau 1: 67.3%
...
Global: 28.5% (toutes exactes)
Ăditez vit_training.py, section config :
config = {
'batch_size': 16, # Réduire si mémoire insuffisante
'num_epochs': 50, # Augmenter pour plus de convergence
'learning_rate': 1e-4, # Réduire si instabilité
'weight_decay': 0.01, # Régularisation L2
'dropout': 0.1, # Dropout pour éviter le surapprentissage
'freeze_encoder': False, # True = entraĂźner seulement la tĂȘte
'num_workers': 2 # Parallélisme du chargement
}Ătape 1 : EntraĂźner seulement la tĂȘte
config['freeze_encoder'] = True
config['num_epochs'] = 10
config['learning_rate'] = 1e-3Ătape 2 : Fine-tuning complet
config['freeze_encoder'] = False
config['num_epochs'] = 40
config['learning_rate'] = 1e-5| CritĂšre | FFNN (Ancien) | ViT (Nouveau) |
|---|---|---|
| EntrĂ©e | Vecteur 4D | Image 224Ă224 |
| ParamĂštres | ~500 | ~85 millions |
| Pré-entraßnement | Non | Oui (ImageNet) |
| Interprétabilité | Faible | Moyenne (attention maps) |
| Temps d'entraĂźnement | Court (~minutes) | Long (~heures) |
| Extensibilité | Limitée | Excellente |
pip install torch torchvisionAssurez-vous d'avoir exécuté image_generator.py avant l'entraßnement.
Réduisez le batch_size dans vit_training.py :
config['batch_size'] = 8 # ou 4- Augmentez le nombre d'epochs (100 au lieu de 50)
- Essayez le mode
freeze_encoder=Trued'abord - Vérifiez la qualité des images générées
La partie 2 du projet visera Ă gĂ©nĂ©rer plusieurs configurations pour une mĂȘme entrĂ©e, en utilisant des approches gĂ©nĂ©ratives (VAE, GAN, ou Diffusion Models).
Idées pour la Partie 2 :
- Utiliser un décodeur variational aprÚs l'encodeur ViT
- Générer plusieurs vecteurs de configuration avec diversité
- Ajouter une contrainte de validité physique
- Vision Transformer (ViT) : Dosovitskiy et al., 2021
- PyTorch Vision : Documentation officielle
Projet développé dans le cadre d'une application de conception d'antennes par apprentissage profond.
- Les erreurs de linting (imports non résolus) sont normales avant l'installation des packages
- Le téléchargement du modÚle ViT pré-entraßné (~330 MB) se fera automatiquement au premier lancement
- Pour un entraĂźnement plus rapide, utilisez un GPU (CUDA)
â Bon dĂ©veloppement avec votre projet ViT ! đ