# 🚗 Segmentation Multi-Classes pour VĂ©hicules Autonomes ## 📋 Description du Projet Ce projet dĂ©veloppe un systĂšme de segmentation sĂ©mantique d'images de rue destinĂ© aux vĂ©hicules autonomes. Il permet l'identification et la segmentation automatique de diffĂ©rents Ă©lĂ©ments urbains : vĂ©hicules, piĂ©tons, mobilier urbain, infrastructure routiĂšre, etc. Le systĂšme s'inscrit dans une chaĂźne complĂšte de vision par ordinateur embarquĂ©e pour l'automobile autonome, traitant les images en temps rĂ©el pour alimenter les systĂšmes de dĂ©cision. ## đŸ—‚ïž Structure du Projet ``` ├── notebooks/ │ ├── p8_notebook.py # Notebook principal d'entraĂźnement des modĂšles │ ├── requirements.txt # DĂ©pendances pour l'entraĂźnement et expĂ©rimentation │ └── content/ │ └── data/ │ ├── new_images_to_predict/ # Images diverses pour tests d'infĂ©rence │ └── test_images_sample/ # Échantillon Cityscapes avec masques ├── utils/ │ └── utils.py # Fonctions communes (prĂ©traitement, chargement, infĂ©rence) ├── api/ # [En dĂ©veloppement] API FastAPI │ └── requirements.txt # DĂ©pendances lĂ©gĂšres pour l'API uniquement ├── .env # Variables d'environnement (MLFlow, MinIO) └── README.md ``` > **Note** : Les modĂšles entraĂźnĂ©s sont stockĂ©s et versionnĂ©s via **MLFlow** avec artefacts sur **MinIO**, pas en local. **État actuel du dĂ©veloppement :** - ✅ **EntraĂźnement des modĂšles** : Complet (notebook + MLFlow + MinIO) - ✅ **Fonctions d'infĂ©rence** : DĂ©veloppĂ©es et prĂȘtes - 🔄 **API FastAPI** : En cours de dĂ©veloppement - 🔄 **DĂ©ploiement** : Conteneurisation Docker + NAS personnel ## đŸ·ïž Classes de Segmentation Le modĂšle identifie **8 catĂ©gories principales** : 1. **Route** - ChaussĂ©e et surfaces roulantes 2. **Trottoir** - Zones piĂ©tonnes 3. **BĂątiments** - Structures architecturales 4. **VĂ©gĂ©tation** - Arbres, buissons, espaces verts 5. **VĂ©hicules** - Voitures, camions, bus 6. **Personnes** - PiĂ©tons, cyclistes 7. **Signalisation** - Panneaux, feux de circulation 8. **Mobilier urbain** - Poteaux, barriĂšres, abribus ## 🧠 Architecture Technique ### ModĂšles ImplĂ©mentĂ©s Utilisation de la bibliothĂšque **[segmentation_models](https://github.com/qubvel/segmentation_models)** de qubvel pour l'implĂ©mentation des architectures. **Architectures principales :** - **U-Net** : Architecture encoder-decoder classique - **FPN** (Feature Pyramid Network) : RĂ©seau Ă  pyramide de caractĂ©ristiques **Backbones testĂ©s :** ```python # ModĂšles avec backbones par dĂ©faut ('U-Net', None) # Backbone U-Net intĂ©grĂ© ('FPN', None) # Backbone VGG16 par dĂ©faut # ModĂšles avec backbones prĂ©-entraĂźnĂ©s (encodeurs gelĂ©s) ('U-Net', 'mobilenetv2') ('U-Net', 'efficientnetb0') ('FPN', 'mobilenetv2') ('FPN', 'efficientnetb0') ('FPN', 'resnet34') # Fine-tuning sĂ©lectif (encodeurs entraĂźnables) ('U-Net', 'mobilenetv2') ('FPN', 'efficientnetb0') ('FPN', 'resnet34') ``` **StratĂ©gies d'entraĂźnement :** - **Encodeurs gelĂ©s** : Transfer learning avec features prĂ©-entraĂźnĂ©es figĂ©es - **Fine-tuning** : Ajustement fin des encodeurs prĂ©-entraĂźnĂ©s - **EntraĂźnement from scratch** : Sans prĂ©-entraĂźnement (backbones par dĂ©faut) ### Stack Technologique - **Framework** : Keras/TensorFlow - **Architectures** : [segmentation_models](https://github.com/qubvel/segmentation_models) (qubvel) - **Gestion des expĂ©riences** : MLFlow - **Stockage des artefacts** : MinIO (S3-compatible) - **API** : FastAPI *(en dĂ©veloppement)* - **DĂ©ploiement** : Docker + NAS personnel *(solutions souveraines)* ## 📊 Dataset - **Source** : Cityscapes Dataset - **Organisation locale** : - `notebooks/content/data/test_images_sample/` : Échantillon avec masques de vĂ©ritĂ© pour tests d'infĂ©rence - `notebooks/content/data/new_images_to_predict/` : Images de test diverses pour validation ## 🚀 Installation et Configuration ### Installation ```bash git clone https://github.com/GrgMdmn/OpenClassrooms_AI_Projects.git cd OpenClassrooms_AI_Projects/Project_8 # Pour l'expĂ©rimentation et l'entraĂźnement cd notebooks pip install -r requirements.txt # Pour l'API uniquement (plus lĂ©ger) cd api pip install -r requirements.txt ``` ### Configuration MLFlow et MinIO CrĂ©er un fichier `.env` Ă  la racine du projet : ```bash MLFLOW_TRACKING_URI=http://localhost:5000 # mlflow url MLFLOW_S3_ENDPOINT_URL=http://localhost:9000 # minio url AWS_ACCESS_KEY_ID=your_access_key # minio login AWS_SECRET_ACCESS_KEY=your_secret_key # minio password ``` Le chargement des variables se fait via `python-dotenv` dans le notebook et l'API. ## 🌐 API et DĂ©ploiement ### API FastAPI (En dĂ©veloppement) L'API utilisera les fonctions de `utils.py` et sera dĂ©ployĂ©e via Docker sur NAS personnel pour maintenir la souverainetĂ© des donnĂ©es. ## 🔼 AmĂ©liorations Futures - **PrĂ©traitement adaptatif** : PrĂ©traitement spĂ©cifique Ă  chaque backbone au lieu de la normalisation gĂ©nĂ©rique (division par 255) - **GĂ©nĂ©ralisation des conditions** : Extension au-delĂ  des conditions urbaines de Cityscapes (mĂ©tĂ©o, environnements variĂ©s) - **Optimisation temps rĂ©el** : Évaluation et amĂ©lioration des performances d'infĂ©rence - **RĂ©solution variable** : Support de tailles d'images variables au-delĂ  du format fixe 224x224 - **Transfer learning ciblĂ©** : Utilisation de backbones prĂ©-entraĂźnĂ©s sur Mapillary Vistas plutĂŽt qu'ImageNet pour un meilleur alignement domaine - **Segmentation des personnes** : AmĂ©lioration de l'IoU sur les humains via data augmentation (IA gĂ©nĂ©rative) - **Limitation du dataset** : Les performances similaires entre modĂšles suggĂšrent une limite liĂ©e Ă  la qualitĂ©/diversitĂ© des donnĂ©es d'entraĂźnement --- *Projet dĂ©veloppĂ© dans une approche de souverainetĂ© technologique, privilĂ©giant les solutions open-source et l'hĂ©bergement sur infrastructure personnelle.*