Skip to content

aminebensaid66/VIT-Generative

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 Projet Vision Transformer pour Configuration d'Antennes Circulaires

📋 Description du Projet

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).

Objectif - Partie 1

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.

Spécifications Techniques

  • 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

📁 Structure du Projet

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

🚀 Installation des DĂ©pendances

1. Environnement Python

Assurez-vous d'avoir Python 3.8 ou supérieur installé.

2. Installer les packages requis

cd antenna_vit_project

# Installation des dépendances essentielles
pip install torch torchvision
pip install numpy matplotlib pillow tqdm

Dépendances complÚtes :

  • torch (≄2.0) : Framework PyTorch
  • torchvision : Pour le modĂšle ViT prĂ©-entraĂźnĂ©
  • numpy : Manipulation de donnĂ©es
  • matplotlib : Visualisations
  • pillow (PIL) : Traitement d'images
  • tqdm : Barres de progression

📖 Guide d'Utilisation

Étape 0 : PrĂ©parer les donnĂ©es initiales

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/test

Ensuite, 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/

Étape 1 : GĂ©nĂ©rer les Images

Convertir les spécifications numériques en images de diagrammes de rayonnement :

cd antenna_vit_project/src
python3 image_generator.py

Ce script va :

  • Charger Minput_training.npy et Minput_test.npy
  • GĂ©nĂ©rer des images 224×224 pour chaque Ă©chantillon
  • Sauvegarder dans data/training_images/ et data/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!

Étape 2 : Entraüner le Modùle ViT

Lancer l'entraĂźnement du Vision Transformer :

python3 vit_training.py

Configuration 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 final
  • results/training_history.json : Historique d'entraĂźnement
  • results/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)

Étape 3 : Tester et Évaluer le Modùle

Évaluer les performances du modùle sur l'ensemble de test :

python3 vit_test.py

Ce 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 anneau
  • predictions_vs_targets.png : Scatter plots prĂ©dictions vs vraies valeurs
  • prediction_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)

🔧 Configuration AvancĂ©e

Modifier les HyperparamĂštres

É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
}

Transfer Learning en Deux Étapes

É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

📊 Comparaison FFNN vs ViT

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

🐛 RĂ©solution de ProblĂšmes

Erreur : "Import torch could not be resolved"

pip install torch torchvision

Erreur : "Image introuvable"

Assurez-vous d'avoir exécuté image_generator.py avant l'entraßnement.

Erreur : "CUDA out of memory"

Réduisez le batch_size dans vit_training.py :

config['batch_size'] = 8  # ou 4

Performances faibles

  • Augmentez le nombre d'epochs (100 au lieu de 50)
  • Essayez le mode freeze_encoder=True d'abord
  • VĂ©rifiez la qualitĂ© des images gĂ©nĂ©rĂ©es

📈 Partie 2 (Future)

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

📚 RĂ©fĂ©rences


đŸ‘šâ€đŸ’» Auteurs

Projet développé dans le cadre d'une application de conception d'antennes par apprentissage profond.


📝 Notes

  • 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 ! 🚀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages