# 🚗 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.ipynb # Notebook principal d'entraĂźnement des modĂšles │ └── 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) ├── app/ # API et Interface Web │ ├── main.py # API FastAPI avec routes de segmentation │ ├── streamlit_app.py # Interface web interactive │ └── requirements.txt # DĂ©pendances pour l'API et l'interface ├── cityscapes_config.json # Configuration des classes Cityscapes ├── .env.example # Template de variables d'environnement ├── Dockerfile # Configuration Docker ├── docker-compose.yml.example # Template Docker Compose ├── nginx.conf # Configuration reverse proxy ├── start.sh # Script de dĂ©marrage des services ├── .dockerignore # Optimisation du build Docker └── 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** : API complĂšte avec endpoints de segmentation - ✅ **Interface Web** : Interface Streamlit pour upload et visualisation - ✅ **DĂ©ploiement** : Conteneurisation Docker complĂšte + reverse proxy nginx ## đŸ·ïž 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 avec validation Pydantic - **Interface** : Streamlit pour l'interaction utilisateur - **Reverse Proxy** : nginx pour routage API/Interface - **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 ### Option 1: DĂ©ploiement Docker (RecommandĂ©) #### Configuration rapide ```bash # Cloner le projet git clone https://github.com/GrgMdmn/OpenClassrooms_AI_Projects.git cd OpenClassrooms_AI_Projects/Project_8 # Copier et adapter la configuration cp .env.example .env cp docker-compose.yml.example docker-compose.yml # Éditer les variables d'environnement nano .env ``` #### Variables d'environnement requises ```bash # Configuration du serveur NGINX_PORT=8080 # Configuration MLflow MLFLOW_TRACKING_URI=http://localhost:5000 MLFLOW_S3_ENDPOINT_URL=http://localhost:9000 AWS_ACCESS_KEY_ID=your_access_key AWS_SECRET_ACCESS_KEY=your_secret_key # URL de base de l'API (pour Streamlit) MULTISEG_API_BASE_URL=http://localhost:8080/api ``` #### DĂ©ploiement ```bash # Construction et lancement docker-compose up --build # Ou en arriĂšre-plan docker-compose up -d --build # AccĂšs Ă  l'application # Interface web: http://localhost:8080 # API docs: http://localhost:8080/api/docs # Health check: http://localhost:8080/health ``` #### Test local sans docker-compose ```bash # Lancement avec port personnalisĂ© docker build -t multiseg-api . docker run -p 3000:3000 \ -e NGINX_PORT=3000 \ -e MLFLOW_TRACKING_URI=http://host.docker.internal:5000 \ -e MULTISEG_API_BASE_URL=http://localhost:3000/api \ multiseg-api ``` ### Option 2: Installation Locale (DĂ©veloppement) #### Pour l'expĂ©rimentation et l'entraĂźnement ```bash cd notebooks pip install -r requirements.txt ``` #### Pour l'API uniquement ```bash cd app pip install -r requirements.txt # Lancement manuel des services # Terminal 1: FastAPI uvicorn app.main:app --host 0.0.0.0 --port 8000 # Terminal 2: Streamlit streamlit run app/streamlit_app.py --server.port 8501 ``` ## 🌐 Utilisation de l'API ### Endpoints Principaux #### Segmentation d'image ```bash # Upload et segmentation via curl curl -X POST "http://localhost:8080/api/segment" \ -F "file=@image.jpg" \ -F "model_name=unet_mobilenetv2" \ -F "confidence_threshold=0.5" ``` #### Informations sur les modĂšles ```bash # Liste des modĂšles disponibles curl "http://localhost:8080/api/models" # DĂ©tails d'un modĂšle curl "http://localhost:8080/api/models/unet_mobilenetv2" ``` #### Monitoring ```bash # Health check curl "http://localhost:8080/health" # MĂ©triques API curl "http://localhost:8080/api/metrics" ``` ### Interface Web L'interface Streamlit accessible sur `http://localhost:8080` permet : - **Upload d'images** par glisser-dĂ©poser ou sĂ©lection - **SĂ©lection du modĂšle** parmi les modĂšles disponibles - **Ajustement des paramĂštres** (seuil de confiance, etc.) - **Visualisation** des rĂ©sultats avec overlay des segmentations - **TĂ©lĂ©chargement** des masques de segmentation ## 🔧 Architecture de DĂ©ploiement ### Structure des Services ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ nginx:8080 │────│ FastAPI:8000 │────│ MLFlow/MinIO │ │ (Reverse Proxy)│ │ (API Backend) │ │ (Model Storage) │ └─────────┬───────┘ └──────────────────┘ └─────────────────┘ │ ┌─────────▌───────┐ │ Streamlit:8501 │ │ (Web Interface) │ └─────────────────┘ ``` ### Volumes et Persistance - **ModĂšles** : TĂ©lĂ©chargĂ©s depuis MLFlow/MinIO au dĂ©marrage - **Uploads temporaires** : Stockage en mĂ©moire (pas de persistance) - **Logs** : Accessibles via `docker-compose logs` ### Monitoring et Logs ```bash # Logs en temps rĂ©el docker-compose logs -f # Logs d'un service spĂ©cifique docker-compose logs -f multiseg-api # MĂ©triques de performance curl http://localhost:8080/api/metrics ``` ## 🔼 AmĂ©liorations Futures ### ModĂšles et Performance - **PrĂ©traitement adaptatif** : PrĂ©traitement spĂ©cifique Ă  chaque backbone au lieu de la normalisation gĂ©nĂ©rique - **Optimisation temps rĂ©el** : AmĂ©lioration des performances d'infĂ©rence pour dĂ©ploiement embarquĂ© - **RĂ©solution d'entraĂźnement amĂ©liorĂ©e** : L'API accepte toutes les rĂ©solutions d'images, mais l'entraĂźnement a Ă©tĂ© effectuĂ© sur des images redimensionnĂ©es Ă  224x224. Un rĂ©entraĂźnement sur des rĂ©solutions supĂ©rieures (512x512, 1024x1024) pourrait amĂ©liorer la prĂ©cision en capturant plus de dĂ©tails fins, au prix d'une augmentation des besoins en puissance de calcul - **Transfer learning ciblĂ©** : Utilisation de backbones prĂ©-entraĂźnĂ©s sur Mapillary Vistas ### Infrastructure et DĂ©ploiement - **Scaling horizontal** : Support Kubernetes pour dĂ©ploiement multi-instances - **Cache intelligent** : Mise en cache des prĂ©dictions pour images similaires - **API Gateway** : IntĂ©gration d'un gateway pour authentification et rate limiting - **Monitoring avancĂ©** : IntĂ©gration Prometheus/Grafana pour mĂ©triques dĂ©taillĂ©es ### DonnĂ©es et GĂ©nĂ©ralisation - **GĂ©nĂ©ralisation des conditions** : Extension au-delĂ  des conditions urbaines de Cityscapes - **Segmentation des personnes** : AmĂ©lioration de l'IoU via data augmentation (IA gĂ©nĂ©rative) - **Datasets additionnels** : IntĂ©gration de datasets complĂ©mentaires pour robustesse --- *Projet dĂ©veloppĂ© dans une approche de souverainetĂ© technologique, privilĂ©giant les solutions open-source et l'hĂ©bergement sur infrastructure personnelle.*