Initial commit of scripts
This commit is contained in:
parent
59a126cf49
commit
6bdda85438
17 changed files with 5353 additions and 5353 deletions
212
.dockerignore
212
.dockerignore
|
|
@ -1,106 +1,106 @@
|
|||
# Notebooks de développement mais GARDER les samples
|
||||
notebooks/*.ipynb
|
||||
notebooks/p8_notebook.ipynb
|
||||
notebooks/requirements.txt
|
||||
.ipynb_checkpoints/
|
||||
# GARDER: notebooks/content/data/test_images_sample/ (nécessaire pour l'app)
|
||||
|
||||
# Environment files (variables passées via docker run ou compose)
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Python cache et build files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
pip-wheel-metadata/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# Virtual environments
|
||||
venv/
|
||||
env/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
.venv/
|
||||
|
||||
# IDE et editor files
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Git files
|
||||
.git/
|
||||
.gitignore
|
||||
.gitattributes
|
||||
|
||||
# Documentation
|
||||
*.md
|
||||
!README.MD
|
||||
docs/
|
||||
documentation/
|
||||
|
||||
# Test files
|
||||
tests/
|
||||
test_*/
|
||||
*_test.py
|
||||
debug_*.py
|
||||
pytest.ini
|
||||
tox.ini
|
||||
.coverage
|
||||
.pytest_cache/
|
||||
|
||||
# Jupyter notebook outputs
|
||||
*.nbconvert
|
||||
|
||||
# Fichiers temporaires
|
||||
.cache/
|
||||
.tmp/
|
||||
tmp/
|
||||
temp/
|
||||
*.tmp
|
||||
*.temp
|
||||
*.log
|
||||
logs/
|
||||
|
||||
# OS generated files
|
||||
.DS_Store?
|
||||
ehthumbs.db
|
||||
Icon?
|
||||
|
||||
# MLflow artifacts locaux (seront téléchargés depuis le registry)
|
||||
mlruns/
|
||||
mlruns.backup/
|
||||
mlartifacts/
|
||||
|
||||
# Backup files
|
||||
*.bak
|
||||
*.backup
|
||||
|
||||
# Large datasets (samples nécessaires sont gardés)
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
# Notebooks de développement mais GARDER les samples
|
||||
notebooks/*.ipynb
|
||||
notebooks/p8_notebook.ipynb
|
||||
notebooks/requirements.txt
|
||||
.ipynb_checkpoints/
|
||||
# GARDER: notebooks/content/data/test_images_sample/ (nécessaire pour l'app)
|
||||
|
||||
# Environment files (variables passées via docker run ou compose)
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Python cache et build files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
pip-wheel-metadata/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# Virtual environments
|
||||
venv/
|
||||
env/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
.venv/
|
||||
|
||||
# IDE et editor files
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Git files
|
||||
.git/
|
||||
.gitignore
|
||||
.gitattributes
|
||||
|
||||
# Documentation
|
||||
*.md
|
||||
!README.MD
|
||||
docs/
|
||||
documentation/
|
||||
|
||||
# Test files
|
||||
tests/
|
||||
test_*/
|
||||
*_test.py
|
||||
debug_*.py
|
||||
pytest.ini
|
||||
tox.ini
|
||||
.coverage
|
||||
.pytest_cache/
|
||||
|
||||
# Jupyter notebook outputs
|
||||
*.nbconvert
|
||||
|
||||
# Fichiers temporaires
|
||||
.cache/
|
||||
.tmp/
|
||||
tmp/
|
||||
temp/
|
||||
*.tmp
|
||||
*.temp
|
||||
*.log
|
||||
logs/
|
||||
|
||||
# OS generated files
|
||||
.DS_Store?
|
||||
ehthumbs.db
|
||||
Icon?
|
||||
|
||||
# MLflow artifacts locaux (seront téléchargés depuis le registry)
|
||||
mlruns/
|
||||
mlruns.backup/
|
||||
mlartifacts/
|
||||
|
||||
# Backup files
|
||||
*.bak
|
||||
*.backup
|
||||
|
||||
# Large datasets (samples nécessaires sont gardés)
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
|
|
|
|||
82
.env.example
82
.env.example
|
|
@ -1,41 +1,41 @@
|
|||
# =============================================================================
|
||||
# Configuration du serveur
|
||||
# =============================================================================
|
||||
# Port sur lequel nginx écoute (défaut: 8080 pour compatibilité Cloud Run)
|
||||
NGINX_PORT=8080
|
||||
|
||||
# =============================================================================
|
||||
# Configuration MLflow (pour le versioning et le téléchargement des modèles)
|
||||
# =============================================================================
|
||||
# URI du serveur MLflow de tracking
|
||||
MLFLOW_TRACKING_URI=http://localhost:5000
|
||||
|
||||
# URL du stockage S3/MinIO pour les artefacts MLflow
|
||||
MLFLOW_S3_ENDPOINT_URL=http://localhost:9000
|
||||
|
||||
# Clés d'accès S3/MinIO
|
||||
AWS_ACCESS_KEY_ID=minio_access_key
|
||||
AWS_SECRET_ACCESS_KEY=minio_secret_key
|
||||
|
||||
# =============================================================================
|
||||
# Configuration email (optionnel - pour les notifications)
|
||||
# =============================================================================
|
||||
# Serveur SMTP
|
||||
SMTP_SERVER=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
|
||||
# Identifiants email
|
||||
SMTP_EMAIL=noreply@yourcompany.com
|
||||
SMTP_PASSWORD=your_app_password
|
||||
SMTP_FROM_ALIAS=Multi-Segmentation API
|
||||
|
||||
# Email de l'administrateur (destinataire des notifications)
|
||||
ADMIN_EMAIL=admin@yourcompany.com
|
||||
|
||||
# =============================================================================
|
||||
# Configuration de l'API
|
||||
# =============================================================================
|
||||
# URL de base de l'API (utilisée par Streamlit pour faire les appels)
|
||||
# En développement local: http://localhost:8080/api
|
||||
# En production: https://your-domain.com/api
|
||||
MULTISEG_API_BASE_URL=http://localhost:8080/api
|
||||
# =============================================================================
|
||||
# Configuration du serveur
|
||||
# =============================================================================
|
||||
# Port sur lequel nginx écoute (défaut: 8080 pour compatibilité Cloud Run)
|
||||
NGINX_PORT=8080
|
||||
|
||||
# =============================================================================
|
||||
# Configuration MLflow (pour le versioning et le téléchargement des modèles)
|
||||
# =============================================================================
|
||||
# URI du serveur MLflow de tracking
|
||||
MLFLOW_TRACKING_URI=http://localhost:5000
|
||||
|
||||
# URL du stockage S3/MinIO pour les artefacts MLflow
|
||||
MLFLOW_S3_ENDPOINT_URL=http://localhost:9000
|
||||
|
||||
# Clés d'accès S3/MinIO
|
||||
AWS_ACCESS_KEY_ID=minio_access_key
|
||||
AWS_SECRET_ACCESS_KEY=minio_secret_key
|
||||
|
||||
# =============================================================================
|
||||
# Configuration email (optionnel - pour les notifications)
|
||||
# =============================================================================
|
||||
# Serveur SMTP
|
||||
SMTP_SERVER=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
|
||||
# Identifiants email
|
||||
SMTP_EMAIL=noreply@yourcompany.com
|
||||
SMTP_PASSWORD=your_app_password
|
||||
SMTP_FROM_ALIAS=Multi-Segmentation API
|
||||
|
||||
# Email de l'administrateur (destinataire des notifications)
|
||||
ADMIN_EMAIL=admin@yourcompany.com
|
||||
|
||||
# =============================================================================
|
||||
# Configuration de l'API
|
||||
# =============================================================================
|
||||
# URL de base de l'API (utilisée par Streamlit pour faire les appels)
|
||||
# En développement local: http://localhost:8080/api
|
||||
# En production: https://your-domain.com/api
|
||||
MULTISEG_API_BASE_URL=http://localhost:8080/api
|
||||
|
|
|
|||
88
Dockerfile
88
Dockerfile
|
|
@ -1,44 +1,44 @@
|
|||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install system dependencies (ajout de git pour segmentation_models)
|
||||
RUN apt-get update && \
|
||||
apt-get install -y nginx curl gettext-base git && \
|
||||
# Pour OpenCV si nécessaire
|
||||
apt-get install -y libglib2.0-0 libsm6 libxext6 libxrender-dev libgomp1 && \
|
||||
adduser --system --no-create-home --group www-data || true && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy app/ d'abord pour avoir requirements.txt
|
||||
COPY app/ ./app/
|
||||
|
||||
# Install requirements depuis le bon chemin
|
||||
RUN pip install --no-cache-dir -r app/requirements.txt
|
||||
|
||||
# ✅ CORRECTION: Copy start.sh AVANT les permissions
|
||||
COPY start.sh ./start.sh
|
||||
|
||||
# Copy du reste après installation (optimise les layers Docker)
|
||||
COPY utils/ ./utils/
|
||||
COPY cityscapes_config.json .
|
||||
COPY notebooks/content/data/test_images_sample/ ./notebooks/content/data/test_images_sample/
|
||||
COPY notebooks/content/data/train_images_sample/ ./notebooks/content/data/train_images_sample/
|
||||
|
||||
# Copy nginx config
|
||||
COPY nginx.conf /etc/nginx/nginx.conf.template
|
||||
|
||||
# ✅ CORRECTION: Setup permissions APRÈS avoir copié start.sh + correction fins de ligne
|
||||
RUN mkdir -p /var/log/nginx /var/lib/nginx /run && \
|
||||
sed -i 's/\r$//' ./start.sh && \
|
||||
chmod +x ./start.sh
|
||||
|
||||
# Environment variables
|
||||
ENV NGINX_PORT=8080
|
||||
ENV MULTISEG_API_BASE_URL=http://localhost:8080/api
|
||||
|
||||
EXPOSE $NGINX_PORT
|
||||
|
||||
# ✅ CORRECTION: Chemin cohérent (./start.sh au lieu de /app/start.sh)
|
||||
CMD ["./start.sh"]
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install system dependencies (ajout de git pour segmentation_models)
|
||||
RUN apt-get update && \
|
||||
apt-get install -y nginx curl gettext-base git && \
|
||||
# Pour OpenCV si nécessaire
|
||||
apt-get install -y libglib2.0-0 libsm6 libxext6 libxrender-dev libgomp1 && \
|
||||
adduser --system --no-create-home --group www-data || true && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy app/ d'abord pour avoir requirements.txt
|
||||
COPY app/ ./app/
|
||||
|
||||
# Install requirements depuis le bon chemin
|
||||
RUN pip install --no-cache-dir -r app/requirements.txt
|
||||
|
||||
# ✅ CORRECTION: Copy start.sh AVANT les permissions
|
||||
COPY start.sh ./start.sh
|
||||
|
||||
# Copy du reste après installation (optimise les layers Docker)
|
||||
COPY utils/ ./utils/
|
||||
COPY cityscapes_config.json .
|
||||
COPY notebooks/content/data/test_images_sample/ ./notebooks/content/data/test_images_sample/
|
||||
COPY notebooks/content/data/train_images_sample/ ./notebooks/content/data/train_images_sample/
|
||||
|
||||
# Copy nginx config
|
||||
COPY nginx.conf /etc/nginx/nginx.conf.template
|
||||
|
||||
# ✅ CORRECTION: Setup permissions APRÈS avoir copié start.sh + correction fins de ligne
|
||||
RUN mkdir -p /var/log/nginx /var/lib/nginx /run && \
|
||||
sed -i 's/\r$//' ./start.sh && \
|
||||
chmod +x ./start.sh
|
||||
|
||||
# Environment variables
|
||||
ENV NGINX_PORT=8080
|
||||
ENV MULTISEG_API_BASE_URL=http://localhost:8080/api
|
||||
|
||||
EXPOSE $NGINX_PORT
|
||||
|
||||
# ✅ CORRECTION: Chemin cohérent (./start.sh au lieu de /app/start.sh)
|
||||
CMD ["./start.sh"]
|
||||
|
|
|
|||
230
README.MD
230
README.MD
|
|
@ -1,116 +1,116 @@
|
|||
# Street Vision PoC - Segmentation Sémantique Urbaine
|
||||
|
||||
## 🎯 Description du Projet
|
||||
|
||||
**Street Vision PoC** est une preuve de concept démontrant l'amélioration des performances de segmentation sémantique urbaine en comparant les architectures CNN traditionnelles (FPN) aux approches Transformer modernes (SegFormer).
|
||||
|
||||
Ce projet évalue empiriquement le potentiel des **Vision Transformers** pour la compréhension de scènes urbaines complexes, avec un focus sur les classes critiques pour la sécurité (piétons, véhicules, signalétique).
|
||||
|
||||
### 🔬 Contexte Technique
|
||||
|
||||
- **Dataset** : Cityscapes (2,975 images haute résolution annotées pixel-par-pixel)
|
||||
- **Architectures comparées** :
|
||||
- **CNN traditionnel** : FPN + EfficientNet-B0/ResNet34
|
||||
- **Vision Transformer** : SegFormer-B0/B1
|
||||
- **Résolutions d'évaluation** : 512×512 et 768×768 pixels
|
||||
- **Métrique principale** : Mean Intersection over Union (mIoU)
|
||||
|
||||
## 📊 Résultats Principaux
|
||||
|
||||
| **Modèle** | **mIoU** | **Paramètres** | **Taille** | **Performance** |
|
||||
|------------|----------|----------------|------------|-----------------|
|
||||
| **SegFormer-B1** | **79.98%** | 13.68M | 52MB | ⭐ **Meilleur** |
|
||||
| **FPN+ResNet34** | 79.22% | 23.16M | 88MB | 🔄 Baseline forte |
|
||||
| **FPN+EfficientNet-B0** | 78.67% | 5.76M | 22MB | 💡 Compact |
|
||||
| **SegFormer-B0** | 77.91% | 3.72M | 14MB | ⚡ Ultra-léger |
|
||||
|
||||
**Analyse comparative** : SegFormer-B1 et FPN+ResNet34 atteignent des performances similaires (~79-80% mIoU), mais SegFormer-B1 présente l'avantage d'être plus compact et probablement plus rapide sur GPU. Les versions SegFormer-B2 à B5 promettraient des gains significatifs, mais mes contraintes matérielles n'ont pas permis leur évaluation.
|
||||
|
||||
### 🎯 Gains Significatifs par Classes Critiques
|
||||
|
||||
- **Human** : +1.78% IoU (sécurité critique)
|
||||
- **Vehicle** : +1.05% IoU (obstacles mobiles)
|
||||
- **Object** : +0.56% IoU (signalétique urbaine)
|
||||
|
||||
## 🚀 Déploiement Rapide
|
||||
|
||||
### Docker Hub
|
||||
|
||||
L'application est containerisée et disponible sur Docker Hub :
|
||||
|
||||
```bash
|
||||
docker pull grgmdmn/street-vision-poc_api
|
||||
```
|
||||
|
||||
### Configuration avec Docker Compose
|
||||
|
||||
1. Copiez le fichier d'exemple de configuration :
|
||||
```bash
|
||||
cp docker-compose.yml.example docker-compose.yml
|
||||
```
|
||||
|
||||
2. Configurez les variables d'environnement dans `docker-compose.yml`.
|
||||
|
||||
3. Lancez l'application :
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. Accédez à l'interface : `http://localhost:$(port)`
|
||||
|
||||
## 🎮 Fonctionnalités de l'Interface
|
||||
|
||||
### Dashboard Interactif
|
||||
|
||||
- **Upload d'images** : Glisser-déposer d'images urbaines
|
||||
- **Double inférence** : Comparaison simultanée FPN vs SegFormer
|
||||
- **Visualisation** : Masques de segmentation colorés par classe
|
||||
- **Métriques temps réel** : Temps d'inférence et scores de confiance
|
||||
- **Export** : Téléchargement des résultats de segmentation
|
||||
- **Accessibilité WCAG** : Interface conforme aux standards d'accessibilité
|
||||
|
||||
### Analyse Exploratoire des Données
|
||||
|
||||
- **Statistiques Cityscapes** : Distribution des classes, résolutions natives
|
||||
- **Graphiques interactifs** : Répartition pixel par méta-classe
|
||||
- **Exemples annotés** : Visualisation échantillons du dataset
|
||||
|
||||
## 📈 Méthodologie d'Évaluation
|
||||
|
||||
### Approche Comparative
|
||||
|
||||
1. **Baseline CNN** : Réentraînement FPN+EfficientNet/ResNet aux résolutions supérieures
|
||||
2. **Nouvelle approche** : Évaluation SegFormer avec attention globale
|
||||
3. **Protocole rigoureux** : Validation croisée, métriques standardisées
|
||||
4. **Analyse par classe** : Performance détaillée sur 8 méta-classes urbaines
|
||||
|
||||
### Limites Identifiées
|
||||
|
||||
- **Résolution fixe** : Évaluation sans sliding window (vs protocole original)
|
||||
- **Ressources limitées** : Tests uniquement sur SegFormer-B0/B1
|
||||
- **Conditions contrôlées** : Dataset Cityscapes uniquement (météo favorable)
|
||||
|
||||
## 🔬 Insights Techniques
|
||||
|
||||
### Avantages SegFormer
|
||||
|
||||
- **Attention globale** : Chaque pixel "voit" toute l'image simultanément
|
||||
- **Architecture plus légère** : Modèle compact avec moins de paramètres
|
||||
- **Robustesse contextuelle** : Meilleure gestion occlusions et objets complexes
|
||||
- **Potentiel d'amélioration** : Versions B2-B5 promettraient des gains significatifs
|
||||
|
||||
### Trade-offs Identifiés
|
||||
|
||||
- **Vitesse CPU classique** : ~2× plus lent que FPN sur processeurs haute performance (Xeon, 9600X)
|
||||
- **Vitesse CPU économe** : 3× plus rapide sur processeurs économes en énergie (N100)
|
||||
- **Optimisation GPU** : Architecture Transformer favorisée par accélération matérielle
|
||||
|
||||
## 📚 Références
|
||||
|
||||
- **Xie, E. et al.** (2021). *SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers*. NeurIPS 2021.
|
||||
- **Cordts, M. et al.** (2016). *The Cityscapes Dataset for Semantic Urban Scene Understanding*. CVPR 2016.
|
||||
- **Segmentation Models PyTorch** - [Framework d'implémentation utilisé](https://github.com/qubvel/segmentation_models.pytorch)
|
||||
|
||||
---
|
||||
|
||||
# Street Vision PoC - Segmentation Sémantique Urbaine
|
||||
|
||||
## 🎯 Description du Projet
|
||||
|
||||
**Street Vision PoC** est une preuve de concept démontrant l'amélioration des performances de segmentation sémantique urbaine en comparant les architectures CNN traditionnelles (FPN) aux approches Transformer modernes (SegFormer).
|
||||
|
||||
Ce projet évalue empiriquement le potentiel des **Vision Transformers** pour la compréhension de scènes urbaines complexes, avec un focus sur les classes critiques pour la sécurité (piétons, véhicules, signalétique).
|
||||
|
||||
### 🔬 Contexte Technique
|
||||
|
||||
- **Dataset** : Cityscapes (2,975 images haute résolution annotées pixel-par-pixel)
|
||||
- **Architectures comparées** :
|
||||
- **CNN traditionnel** : FPN + EfficientNet-B0/ResNet34
|
||||
- **Vision Transformer** : SegFormer-B0/B1
|
||||
- **Résolutions d'évaluation** : 512×512 et 768×768 pixels
|
||||
- **Métrique principale** : Mean Intersection over Union (mIoU)
|
||||
|
||||
## 📊 Résultats Principaux
|
||||
|
||||
| **Modèle** | **mIoU** | **Paramètres** | **Taille** | **Performance** |
|
||||
|------------|----------|----------------|------------|-----------------|
|
||||
| **SegFormer-B1** | **79.98%** | 13.68M | 52MB | ⭐ **Meilleur** |
|
||||
| **FPN+ResNet34** | 79.22% | 23.16M | 88MB | 🔄 Baseline forte |
|
||||
| **FPN+EfficientNet-B0** | 78.67% | 5.76M | 22MB | 💡 Compact |
|
||||
| **SegFormer-B0** | 77.91% | 3.72M | 14MB | ⚡ Ultra-léger |
|
||||
|
||||
**Analyse comparative** : SegFormer-B1 et FPN+ResNet34 atteignent des performances similaires (~79-80% mIoU), mais SegFormer-B1 présente l'avantage d'être plus compact et probablement plus rapide sur GPU. Les versions SegFormer-B2 à B5 promettraient des gains significatifs, mais mes contraintes matérielles n'ont pas permis leur évaluation.
|
||||
|
||||
### 🎯 Gains Significatifs par Classes Critiques
|
||||
|
||||
- **Human** : +1.78% IoU (sécurité critique)
|
||||
- **Vehicle** : +1.05% IoU (obstacles mobiles)
|
||||
- **Object** : +0.56% IoU (signalétique urbaine)
|
||||
|
||||
## 🚀 Déploiement Rapide
|
||||
|
||||
### Docker Hub
|
||||
|
||||
L'application est containerisée et disponible sur Docker Hub :
|
||||
|
||||
```bash
|
||||
docker pull grgmdmn/street-vision-poc_api
|
||||
```
|
||||
|
||||
### Configuration avec Docker Compose
|
||||
|
||||
1. Copiez le fichier d'exemple de configuration :
|
||||
```bash
|
||||
cp docker-compose.yml.example docker-compose.yml
|
||||
```
|
||||
|
||||
2. Configurez les variables d'environnement dans `docker-compose.yml`.
|
||||
|
||||
3. Lancez l'application :
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. Accédez à l'interface : `http://localhost:$(port)`
|
||||
|
||||
## 🎮 Fonctionnalités de l'Interface
|
||||
|
||||
### Dashboard Interactif
|
||||
|
||||
- **Upload d'images** : Glisser-déposer d'images urbaines
|
||||
- **Double inférence** : Comparaison simultanée FPN vs SegFormer
|
||||
- **Visualisation** : Masques de segmentation colorés par classe
|
||||
- **Métriques temps réel** : Temps d'inférence et scores de confiance
|
||||
- **Export** : Téléchargement des résultats de segmentation
|
||||
- **Accessibilité WCAG** : Interface conforme aux standards d'accessibilité
|
||||
|
||||
### Analyse Exploratoire des Données
|
||||
|
||||
- **Statistiques Cityscapes** : Distribution des classes, résolutions natives
|
||||
- **Graphiques interactifs** : Répartition pixel par méta-classe
|
||||
- **Exemples annotés** : Visualisation échantillons du dataset
|
||||
|
||||
## 📈 Méthodologie d'Évaluation
|
||||
|
||||
### Approche Comparative
|
||||
|
||||
1. **Baseline CNN** : Réentraînement FPN+EfficientNet/ResNet aux résolutions supérieures
|
||||
2. **Nouvelle approche** : Évaluation SegFormer avec attention globale
|
||||
3. **Protocole rigoureux** : Validation croisée, métriques standardisées
|
||||
4. **Analyse par classe** : Performance détaillée sur 8 méta-classes urbaines
|
||||
|
||||
### Limites Identifiées
|
||||
|
||||
- **Résolution fixe** : Évaluation sans sliding window (vs protocole original)
|
||||
- **Ressources limitées** : Tests uniquement sur SegFormer-B0/B1
|
||||
- **Conditions contrôlées** : Dataset Cityscapes uniquement (météo favorable)
|
||||
|
||||
## 🔬 Insights Techniques
|
||||
|
||||
### Avantages SegFormer
|
||||
|
||||
- **Attention globale** : Chaque pixel "voit" toute l'image simultanément
|
||||
- **Architecture plus légère** : Modèle compact avec moins de paramètres
|
||||
- **Robustesse contextuelle** : Meilleure gestion occlusions et objets complexes
|
||||
- **Potentiel d'amélioration** : Versions B2-B5 promettraient des gains significatifs
|
||||
|
||||
### Trade-offs Identifiés
|
||||
|
||||
- **Vitesse CPU classique** : ~2× plus lent que FPN sur processeurs haute performance (Xeon, 9600X)
|
||||
- **Vitesse CPU économe** : 3× plus rapide sur processeurs économes en énergie (N100)
|
||||
- **Optimisation GPU** : Architecture Transformer favorisée par accélération matérielle
|
||||
|
||||
## 📚 Références
|
||||
|
||||
- **Xie, E. et al.** (2021). *SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers*. NeurIPS 2021.
|
||||
- **Cordts, M. et al.** (2016). *The Cityscapes Dataset for Semantic Urban Scene Understanding*. CVPR 2016.
|
||||
- **Segmentation Models PyTorch** - [Framework d'implémentation utilisé](https://github.com/qubvel/segmentation_models.pytorch)
|
||||
|
||||
---
|
||||
|
||||
**Note** : Cette preuve de concept démontre le potentiel des architectures Transformer pour la segmentation urbaine, tout en soulignant l'importance des ressources computationnelles pour exploiter pleinement leurs capacités.
|
||||
216
app/README.MD
216
app/README.MD
|
|
@ -1,108 +1,108 @@
|
|||
|
||||
# Dashboard de Comparaison de Modèles
|
||||
|
||||
## Conformité aux Exigences
|
||||
|
||||
### Analyse Exploratoire des Données Non Structurées (Images)
|
||||
|
||||
**Présentation d'exemples d'images selon les catégories :**
|
||||
- Visualisation d'images du dataset Cityscapes organisées par 8 méta-classes de segmentation
|
||||
- Sélection interactive d'images d'entraînement et de test avec prévisualisation
|
||||
- Interface de navigation par catégories avec noms d'affichage conviviaux
|
||||
|
||||
**Comptage et répartition des données :**
|
||||
- Graphiques en secteurs (pie charts) détaillant la répartition des 25,000 images Cityscapes
|
||||
- Visualisation de l'utilisation projet : 80% train / 20% validation / 100% test
|
||||
- Graphique de distribution des classes dans le dataset d'entraînement
|
||||
- Tableaux récapitulatifs avec statistiques détaillées par split
|
||||
|
||||
**Transformations des images :**
|
||||
- Démonstration interactive du preprocessing : redimensionnement et normalisation
|
||||
- Visualisation des augmentations de données aléatoires (rotation, flip, luminosité, etc.)
|
||||
- Comparaison avant/après transformations avec alignement visuel
|
||||
- Documentation complète des 6 types d'augmentations possibles
|
||||
|
||||
### Sélection de Données d'Entrée
|
||||
|
||||
**Interface de sélection multiple :**
|
||||
- Liste déroulante pour images test Cityscapes avec informations sur la vérité terrain
|
||||
- Upload de fichiers personnels (JPEG, PNG) avec validation de format
|
||||
- Prévisualisation des images sélectionnées avant traitement
|
||||
- Gestion des erreurs et feedback utilisateur en temps réel
|
||||
|
||||
### Résultats de Prédiction
|
||||
|
||||
**Comparaison complète de modèles :**
|
||||
- Affichage côte à côte des prédictions des deux meilleurs modèles
|
||||
- Visualisations avec image originale, masques prédits et vérité terrain
|
||||
- Détection et mise en évidence des erreurs de segmentation
|
||||
- Statistiques détaillées par classe avec pourcentages et nombre de pixels
|
||||
|
||||
**Métriques de performance :**
|
||||
- Temps d'inférence comparatif avec analyse de vitesse
|
||||
- Scores de performance (mIoU, Accuracy) par modèle
|
||||
- IoU par classe pour analyse fine des performances
|
||||
- Graphiques comparatifs interactifs des résultats
|
||||
|
||||
### Déploiement Cloud
|
||||
|
||||
**Architecture déployée :**
|
||||
- Application FastAPI pour l'API de comparaison de modèles
|
||||
- Interface Streamlit pour le dashboard utilisateur
|
||||
- Déploiement sur infrastructure cloud avec haute disponibilité
|
||||
- Gestion automatique des ressources et montée en charge
|
||||
|
||||
### Accessibilité WCAG
|
||||
|
||||
**Conformité aux critères essentiels :**
|
||||
|
||||
#### Contraste des Couleurs (WCAG AA)
|
||||
- Palette de couleurs avec ratios de contraste ≥ 4.1:1 pour éléments graphiques
|
||||
- Ratios de contraste ≥ 4.5:1 pour le texte sur fond
|
||||
- 8 couleurs principales validées : bleu (#0066CC), rouge (#CC0000), vert (#006600), etc.
|
||||
- Remplacement des dégradés par des couleurs unies à contraste élevé
|
||||
|
||||
#### Alternatives Textuelles
|
||||
- Descriptions alternatives détaillées pour tous les graphiques générées automatiquement
|
||||
- Textes explicatifs pour chaque visualisation (pie charts, bar charts)
|
||||
- Labels ARIA appropriés pour les éléments interactifs
|
||||
- Documentation textuelle complète des transformations d'images
|
||||
|
||||
#### Indication Non-Couleur Uniquement
|
||||
- Motifs et hachures complémentaires aux couleurs (optionnel via checkbox)
|
||||
- 6 motifs différents : diagonales, verticales, horizontales, points, croix
|
||||
- Différenciation par forme et texture en plus des couleurs
|
||||
- Bordures et contours renforcés pour la distinction visuelle
|
||||
|
||||
#### Navigation Clavier
|
||||
- CSS focus visible avec contours bleus (#0066CC) de 2px
|
||||
- Support complet de la navigation par tabulation
|
||||
- Indicateurs visuels clairs pour les éléments focusés
|
||||
- Respect de l'ordre logique de navigation
|
||||
|
||||
#### Tableaux de Données Accessibles
|
||||
- Tableaux structurés complémentaires à tous les graphiques
|
||||
- En-têtes appropriés avec scope et descriptions
|
||||
- Données exportables et lisibles par lecteurs d'écran
|
||||
- Configuration responsive pour tous les écrans
|
||||
|
||||
**Fonctionnalités d'assistance intégrées :**
|
||||
- Checkbox "Activer les motifs (accessibilité visuelle)" pour personnalisation
|
||||
- Descriptions automatiques des graphiques avec statistiques complètes
|
||||
- Interface adaptable aux besoins des utilisateurs en situation de handicap
|
||||
- Documentation complète des fonctionnalités d'accessibilité via endpoint `/accessibility-info`
|
||||
|
||||
## Architecture Technique
|
||||
|
||||
**Stack technologique :**
|
||||
- Backend : FastAPI + PyTorch pour l'inférence des modèles
|
||||
- Frontend : Streamlit avec composants accessibles
|
||||
- Visualisations : Matplotlib avec palettes WCAG
|
||||
- API REST documentée avec validation Pydantic
|
||||
- Gestion d'état optimisée pour les comparaisons de modèles
|
||||
|
||||
**Performance et fiabilité :**
|
||||
- Temps d'inférence optimisés (< 1 seconde par image)
|
||||
- Gestion mémoire efficace avec fermeture automatique des figures
|
||||
- Validation des formats et tailles de fichiers
|
||||
- Nettoyage automatique des fichiers temporaires
|
||||
|
||||
# Dashboard de Comparaison de Modèles
|
||||
|
||||
## Conformité aux Exigences
|
||||
|
||||
### Analyse Exploratoire des Données Non Structurées (Images)
|
||||
|
||||
**Présentation d'exemples d'images selon les catégories :**
|
||||
- Visualisation d'images du dataset Cityscapes organisées par 8 méta-classes de segmentation
|
||||
- Sélection interactive d'images d'entraînement et de test avec prévisualisation
|
||||
- Interface de navigation par catégories avec noms d'affichage conviviaux
|
||||
|
||||
**Comptage et répartition des données :**
|
||||
- Graphiques en secteurs (pie charts) détaillant la répartition des 25,000 images Cityscapes
|
||||
- Visualisation de l'utilisation projet : 80% train / 20% validation / 100% test
|
||||
- Graphique de distribution des classes dans le dataset d'entraînement
|
||||
- Tableaux récapitulatifs avec statistiques détaillées par split
|
||||
|
||||
**Transformations des images :**
|
||||
- Démonstration interactive du preprocessing : redimensionnement et normalisation
|
||||
- Visualisation des augmentations de données aléatoires (rotation, flip, luminosité, etc.)
|
||||
- Comparaison avant/après transformations avec alignement visuel
|
||||
- Documentation complète des 6 types d'augmentations possibles
|
||||
|
||||
### Sélection de Données d'Entrée
|
||||
|
||||
**Interface de sélection multiple :**
|
||||
- Liste déroulante pour images test Cityscapes avec informations sur la vérité terrain
|
||||
- Upload de fichiers personnels (JPEG, PNG) avec validation de format
|
||||
- Prévisualisation des images sélectionnées avant traitement
|
||||
- Gestion des erreurs et feedback utilisateur en temps réel
|
||||
|
||||
### Résultats de Prédiction
|
||||
|
||||
**Comparaison complète de modèles :**
|
||||
- Affichage côte à côte des prédictions des deux meilleurs modèles
|
||||
- Visualisations avec image originale, masques prédits et vérité terrain
|
||||
- Détection et mise en évidence des erreurs de segmentation
|
||||
- Statistiques détaillées par classe avec pourcentages et nombre de pixels
|
||||
|
||||
**Métriques de performance :**
|
||||
- Temps d'inférence comparatif avec analyse de vitesse
|
||||
- Scores de performance (mIoU, Accuracy) par modèle
|
||||
- IoU par classe pour analyse fine des performances
|
||||
- Graphiques comparatifs interactifs des résultats
|
||||
|
||||
### Déploiement Cloud
|
||||
|
||||
**Architecture déployée :**
|
||||
- Application FastAPI pour l'API de comparaison de modèles
|
||||
- Interface Streamlit pour le dashboard utilisateur
|
||||
- Déploiement sur infrastructure cloud avec haute disponibilité
|
||||
- Gestion automatique des ressources et montée en charge
|
||||
|
||||
### Accessibilité WCAG
|
||||
|
||||
**Conformité aux critères essentiels :**
|
||||
|
||||
#### Contraste des Couleurs (WCAG AA)
|
||||
- Palette de couleurs avec ratios de contraste ≥ 4.1:1 pour éléments graphiques
|
||||
- Ratios de contraste ≥ 4.5:1 pour le texte sur fond
|
||||
- 8 couleurs principales validées : bleu (#0066CC), rouge (#CC0000), vert (#006600), etc.
|
||||
- Remplacement des dégradés par des couleurs unies à contraste élevé
|
||||
|
||||
#### Alternatives Textuelles
|
||||
- Descriptions alternatives détaillées pour tous les graphiques générées automatiquement
|
||||
- Textes explicatifs pour chaque visualisation (pie charts, bar charts)
|
||||
- Labels ARIA appropriés pour les éléments interactifs
|
||||
- Documentation textuelle complète des transformations d'images
|
||||
|
||||
#### Indication Non-Couleur Uniquement
|
||||
- Motifs et hachures complémentaires aux couleurs (optionnel via checkbox)
|
||||
- 6 motifs différents : diagonales, verticales, horizontales, points, croix
|
||||
- Différenciation par forme et texture en plus des couleurs
|
||||
- Bordures et contours renforcés pour la distinction visuelle
|
||||
|
||||
#### Navigation Clavier
|
||||
- CSS focus visible avec contours bleus (#0066CC) de 2px
|
||||
- Support complet de la navigation par tabulation
|
||||
- Indicateurs visuels clairs pour les éléments focusés
|
||||
- Respect de l'ordre logique de navigation
|
||||
|
||||
#### Tableaux de Données Accessibles
|
||||
- Tableaux structurés complémentaires à tous les graphiques
|
||||
- En-têtes appropriés avec scope et descriptions
|
||||
- Données exportables et lisibles par lecteurs d'écran
|
||||
- Configuration responsive pour tous les écrans
|
||||
|
||||
**Fonctionnalités d'assistance intégrées :**
|
||||
- Checkbox "Activer les motifs (accessibilité visuelle)" pour personnalisation
|
||||
- Descriptions automatiques des graphiques avec statistiques complètes
|
||||
- Interface adaptable aux besoins des utilisateurs en situation de handicap
|
||||
- Documentation complète des fonctionnalités d'accessibilité via endpoint `/accessibility-info`
|
||||
|
||||
## Architecture Technique
|
||||
|
||||
**Stack technologique :**
|
||||
- Backend : FastAPI + PyTorch pour l'inférence des modèles
|
||||
- Frontend : Streamlit avec composants accessibles
|
||||
- Visualisations : Matplotlib avec palettes WCAG
|
||||
- API REST documentée avec validation Pydantic
|
||||
- Gestion d'état optimisée pour les comparaisons de modèles
|
||||
|
||||
**Performance et fiabilité :**
|
||||
- Temps d'inférence optimisés (< 1 seconde par image)
|
||||
- Gestion mémoire efficace avec fermeture automatique des figures
|
||||
- Validation des formats et tailles de fichiers
|
||||
- Nettoyage automatique des fichiers temporaires
|
||||
|
|
|
|||
1666
app/main.py
1666
app/main.py
File diff suppressed because it is too large
Load diff
|
|
@ -1,71 +1,71 @@
|
|||
# =============================================================================
|
||||
# Multi-Class Segmentation API - Requirements
|
||||
# =============================================================================
|
||||
|
||||
# ===== CORE WEB FRAMEWORK =====
|
||||
fastapi==0.115.14
|
||||
uvicorn==0.35.0
|
||||
starlette==0.46.2
|
||||
pydantic==2.11.7
|
||||
pydantic_core==2.33.2
|
||||
python-multipart==0.0.20 # uploads FastAPI
|
||||
|
||||
# ===== STREAMLIT =====
|
||||
streamlit==1.46.1
|
||||
altair==5.5.0 # utilisé par Streamlit
|
||||
blinker==1.9.0 # dépendance Streamlit
|
||||
|
||||
# ===== HTTP CLIENTS =====
|
||||
requests==2.32.4
|
||||
httpx==0.28.1 # utilisé en interne par FastAPI
|
||||
httpcore==1.0.9
|
||||
h11==0.16.0
|
||||
|
||||
# ===== MACHINE LEARNING CORE (PyTorch) =====
|
||||
torch==2.8.0 # version stable PyTorch
|
||||
torchvision==0.23.0 # utile pour les modèles pré-entraînés
|
||||
torchaudio==2.8.0 # optionnel (mais recommandé pour compatibilité PyTorch)
|
||||
segmentation-models-pytorch==0.5.0
|
||||
albumentations==2.0.8
|
||||
# version PyTorch de ToTensor
|
||||
albumentations[imgaug,opencv]
|
||||
|
||||
numpy>=1.24.0,<2.0.0
|
||||
scipy==1.16.0
|
||||
scikit-learn==1.7.0
|
||||
|
||||
# ===== COMPUTER VISION =====
|
||||
pillow==11.3.0
|
||||
opencv-python-headless==4.9.0.80
|
||||
scikit-image==0.25.2
|
||||
imageio==2.37.0
|
||||
|
||||
# ===== DATA SCIENCE =====
|
||||
pandas==2.3.0
|
||||
matplotlib==3.10.3
|
||||
networkx==3.5
|
||||
tifffile==2025.6.11
|
||||
lazy_loader==0.4
|
||||
|
||||
# ===== MLFLOW & MODEL REGISTRY =====
|
||||
mlflow==3.2.0
|
||||
mlflow-skinny==3.2.0
|
||||
mlflow-tracing==3.2.0
|
||||
|
||||
# ===== AWS/S3 SUPPORT =====
|
||||
boto3==1.39.2
|
||||
botocore==1.39.2
|
||||
s3transfer==0.13.0
|
||||
|
||||
# ===== UTILITIES =====
|
||||
click==8.2.1
|
||||
tqdm==4.67.1
|
||||
joblib==1.5.1
|
||||
python-dateutil
|
||||
packaging
|
||||
typing_extensions==4.14.0
|
||||
|
||||
# ===== MATPLOTLIB ADDONS =====
|
||||
cycler==0.12.1
|
||||
fonttools==4.58.5
|
||||
plotly==5.24.1
|
||||
# =============================================================================
|
||||
# Multi-Class Segmentation API - Requirements
|
||||
# =============================================================================
|
||||
|
||||
# ===== CORE WEB FRAMEWORK =====
|
||||
fastapi==0.115.14
|
||||
uvicorn==0.35.0
|
||||
starlette==0.46.2
|
||||
pydantic==2.11.7
|
||||
pydantic_core==2.33.2
|
||||
python-multipart==0.0.20 # uploads FastAPI
|
||||
|
||||
# ===== STREAMLIT =====
|
||||
streamlit==1.46.1
|
||||
altair==5.5.0 # utilisé par Streamlit
|
||||
blinker==1.9.0 # dépendance Streamlit
|
||||
|
||||
# ===== HTTP CLIENTS =====
|
||||
requests==2.32.4
|
||||
httpx==0.28.1 # utilisé en interne par FastAPI
|
||||
httpcore==1.0.9
|
||||
h11==0.16.0
|
||||
|
||||
# ===== MACHINE LEARNING CORE (PyTorch) =====
|
||||
torch==2.8.0 # version stable PyTorch
|
||||
torchvision==0.23.0 # utile pour les modèles pré-entraînés
|
||||
torchaudio==2.8.0 # optionnel (mais recommandé pour compatibilité PyTorch)
|
||||
segmentation-models-pytorch==0.5.0
|
||||
albumentations==2.0.8
|
||||
# version PyTorch de ToTensor
|
||||
albumentations[imgaug,opencv]
|
||||
|
||||
numpy>=1.24.0,<2.0.0
|
||||
scipy==1.16.0
|
||||
scikit-learn==1.7.0
|
||||
|
||||
# ===== COMPUTER VISION =====
|
||||
pillow==11.3.0
|
||||
opencv-python-headless==4.9.0.80
|
||||
scikit-image==0.25.2
|
||||
imageio==2.37.0
|
||||
|
||||
# ===== DATA SCIENCE =====
|
||||
pandas==2.3.0
|
||||
matplotlib==3.10.3
|
||||
networkx==3.5
|
||||
tifffile==2025.6.11
|
||||
lazy_loader==0.4
|
||||
|
||||
# ===== MLFLOW & MODEL REGISTRY =====
|
||||
mlflow==3.2.0
|
||||
mlflow-skinny==3.2.0
|
||||
mlflow-tracing==3.2.0
|
||||
|
||||
# ===== AWS/S3 SUPPORT =====
|
||||
boto3==1.39.2
|
||||
botocore==1.39.2
|
||||
s3transfer==0.13.0
|
||||
|
||||
# ===== UTILITIES =====
|
||||
click==8.2.1
|
||||
tqdm==4.67.1
|
||||
joblib==1.5.1
|
||||
python-dateutil
|
||||
packaging
|
||||
typing_extensions==4.14.0
|
||||
|
||||
# ===== MATPLOTLIB ADDONS =====
|
||||
cycler==0.12.1
|
||||
fonttools==4.58.5
|
||||
plotly==5.24.1
|
||||
|
|
|
|||
3778
app/streamlit_app.py
3778
app/streamlit_app.py
File diff suppressed because it is too large
Load diff
|
|
@ -1,63 +1,63 @@
|
|||
{
|
||||
"class_groups": {
|
||||
"flat": ["road", "sidewalk", "parking", "rail track"],
|
||||
"human": ["person", "rider"],
|
||||
"vehicle": ["car", "truck", "bus", "train", "motorcycle", "bicycle", "caravan", "trailer"],
|
||||
"construction": ["building", "wall", "fence", "guard rail", "bridge", "tunnel"],
|
||||
"object": ["pole", "pole group", "traffic sign", "traffic light"],
|
||||
"nature": ["vegetation", "terrain"],
|
||||
"sky": ["sky"],
|
||||
"void": ["unlabeled", "ego vehicle", "rectification border", "out of roi", "static", "dynamic", "ground"]
|
||||
},
|
||||
"cityscapes_mapping": {
|
||||
"0": 7, "1": 7, "2": 7, "3": 7, "4": 7, "5": 7, "6": 7,
|
||||
"7": 0, "8": 0, "9": 0, "10": 0,
|
||||
"11": 3, "12": 3, "13": 3, "14": 3, "15": 3, "16": 3,
|
||||
"17": 4, "18": 4, "19": 4, "20": 4,
|
||||
"21": 5, "22": 5,
|
||||
"23": 6,
|
||||
"24": 1, "25": 1,
|
||||
"26": 2, "27": 2, "28": 2, "29": 2, "30": 2, "31": 2, "32": 2, "33": 2
|
||||
},
|
||||
"id_to_label": {
|
||||
"0": "unlabeled",
|
||||
"1": "ego vehicle",
|
||||
"2": "rectification border",
|
||||
"3": "out of roi",
|
||||
"4": "static",
|
||||
"5": "dynamic",
|
||||
"6": "ground",
|
||||
"7": "road",
|
||||
"8": "sidewalk",
|
||||
"9": "parking",
|
||||
"10": "rail track",
|
||||
"11": "building",
|
||||
"12": "wall",
|
||||
"13": "fence",
|
||||
"14": "guard rail",
|
||||
"15": "bridge",
|
||||
"16": "tunnel",
|
||||
"17": "pole",
|
||||
"18": "pole group",
|
||||
"19": "traffic light",
|
||||
"20": "traffic sign",
|
||||
"21": "vegetation",
|
||||
"22": "terrain",
|
||||
"23": "sky",
|
||||
"24": "person",
|
||||
"25": "rider",
|
||||
"26": "car",
|
||||
"27": "truck",
|
||||
"28": "bus",
|
||||
"29": "caravan",
|
||||
"30": "trailer",
|
||||
"31": "train",
|
||||
"32": "motorcycle",
|
||||
"33": "bicycle"
|
||||
},
|
||||
"group_colors": [
|
||||
[128, 64, 128], [220, 20, 60], [0, 0, 142], [70, 70, 70],
|
||||
[220, 220, 0], [107, 142, 35], [70, 130, 180], [0, 0, 0]
|
||||
],
|
||||
"group_names": ["flat", "human", "vehicle", "construction", "object", "nature", "sky", "void"]
|
||||
}
|
||||
{
|
||||
"class_groups": {
|
||||
"flat": ["road", "sidewalk", "parking", "rail track"],
|
||||
"human": ["person", "rider"],
|
||||
"vehicle": ["car", "truck", "bus", "train", "motorcycle", "bicycle", "caravan", "trailer"],
|
||||
"construction": ["building", "wall", "fence", "guard rail", "bridge", "tunnel"],
|
||||
"object": ["pole", "pole group", "traffic sign", "traffic light"],
|
||||
"nature": ["vegetation", "terrain"],
|
||||
"sky": ["sky"],
|
||||
"void": ["unlabeled", "ego vehicle", "rectification border", "out of roi", "static", "dynamic", "ground"]
|
||||
},
|
||||
"cityscapes_mapping": {
|
||||
"0": 7, "1": 7, "2": 7, "3": 7, "4": 7, "5": 7, "6": 7,
|
||||
"7": 0, "8": 0, "9": 0, "10": 0,
|
||||
"11": 3, "12": 3, "13": 3, "14": 3, "15": 3, "16": 3,
|
||||
"17": 4, "18": 4, "19": 4, "20": 4,
|
||||
"21": 5, "22": 5,
|
||||
"23": 6,
|
||||
"24": 1, "25": 1,
|
||||
"26": 2, "27": 2, "28": 2, "29": 2, "30": 2, "31": 2, "32": 2, "33": 2
|
||||
},
|
||||
"id_to_label": {
|
||||
"0": "unlabeled",
|
||||
"1": "ego vehicle",
|
||||
"2": "rectification border",
|
||||
"3": "out of roi",
|
||||
"4": "static",
|
||||
"5": "dynamic",
|
||||
"6": "ground",
|
||||
"7": "road",
|
||||
"8": "sidewalk",
|
||||
"9": "parking",
|
||||
"10": "rail track",
|
||||
"11": "building",
|
||||
"12": "wall",
|
||||
"13": "fence",
|
||||
"14": "guard rail",
|
||||
"15": "bridge",
|
||||
"16": "tunnel",
|
||||
"17": "pole",
|
||||
"18": "pole group",
|
||||
"19": "traffic light",
|
||||
"20": "traffic sign",
|
||||
"21": "vegetation",
|
||||
"22": "terrain",
|
||||
"23": "sky",
|
||||
"24": "person",
|
||||
"25": "rider",
|
||||
"26": "car",
|
||||
"27": "truck",
|
||||
"28": "bus",
|
||||
"29": "caravan",
|
||||
"30": "trailer",
|
||||
"31": "train",
|
||||
"32": "motorcycle",
|
||||
"33": "bicycle"
|
||||
},
|
||||
"group_colors": [
|
||||
[128, 64, 128], [220, 20, 60], [0, 0, 142], [70, 70, 70],
|
||||
[220, 220, 0], [107, 142, 35], [70, 130, 180], [0, 0, 0]
|
||||
],
|
||||
"group_names": ["flat", "human", "vehicle", "construction", "object", "nature", "sky", "void"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,47 +1,47 @@
|
|||
version: '3.8'
|
||||
|
||||
services:
|
||||
street-vision-api:
|
||||
# ✅ PRODUCTION: Image depuis Docker Hub
|
||||
image: grgmdmn/street-vision_api:latest
|
||||
|
||||
container_name: street_vision_api
|
||||
|
||||
ports:
|
||||
- "${NGINX_PORT:-8080}:${NGINX_PORT:-8080}" # Port nginx configurable
|
||||
|
||||
environment:
|
||||
# Configuration du port nginx
|
||||
NGINX_PORT: "${NGINX_PORT:-8080}"
|
||||
|
||||
# Configuration MLflow pour le suivi des modèles
|
||||
MLFLOW_TRACKING_URI: "${MLFLOW_TRACKING_URI}" # ex: https://mlflow.domain.com
|
||||
MLFLOW_S3_ENDPOINT_URL: "${MLFLOW_S3_ENDPOINT_URL}" # ex: url MinIO ou S3
|
||||
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}" # clé ID S3
|
||||
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}" # clé secrète S3
|
||||
|
||||
# Configuration email pour notifications (optionnel)
|
||||
SMTP_SERVER: "${SMTP_SERVER:-}" # serveur SMTP
|
||||
SMTP_PORT: "${SMTP_PORT:-587}" # port SMTP (ex: 587)
|
||||
SMTP_EMAIL: "${SMTP_EMAIL:-}" # email expéditeur
|
||||
SMTP_PASSWORD: "${SMTP_PASSWORD:-}" # mot de passe SMTP
|
||||
SMTP_FROM_ALIAS: "${SMTP_FROM_ALIAS:-Street Vision API}" # alias (optionnel)
|
||||
ADMIN_EMAIL: "${ADMIN_EMAIL:-}" # email admin destinataire
|
||||
|
||||
# URL de base de l'API (utilisée par Streamlit pour rediriger vers FastAPI)
|
||||
MULTISEG_API_BASE_URL: "${MULTISEG_API_BASE_URL}" # ex: https://vision.domain.com/api
|
||||
|
||||
# Pour une mise à jour automatique par watchtower
|
||||
labels:
|
||||
com.centurylinklabs.watchtower.enable: "true"
|
||||
|
||||
# Seulement si vous avez un reverse proxy server
|
||||
# networks:
|
||||
# - swag
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
# Seulement si vous avez un reverse proxy server
|
||||
# networks:
|
||||
# swag:
|
||||
# external: true
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
street-vision-api:
|
||||
# ✅ PRODUCTION: Image depuis Docker Hub
|
||||
image: grgmdmn/street-vision_api:latest
|
||||
|
||||
container_name: street_vision_api
|
||||
|
||||
ports:
|
||||
- "${NGINX_PORT:-8080}:${NGINX_PORT:-8080}" # Port nginx configurable
|
||||
|
||||
environment:
|
||||
# Configuration du port nginx
|
||||
NGINX_PORT: "${NGINX_PORT:-8080}"
|
||||
|
||||
# Configuration MLflow pour le suivi des modèles
|
||||
MLFLOW_TRACKING_URI: "${MLFLOW_TRACKING_URI}" # ex: https://mlflow.domain.com
|
||||
MLFLOW_S3_ENDPOINT_URL: "${MLFLOW_S3_ENDPOINT_URL}" # ex: url MinIO ou S3
|
||||
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}" # clé ID S3
|
||||
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}" # clé secrète S3
|
||||
|
||||
# Configuration email pour notifications (optionnel)
|
||||
SMTP_SERVER: "${SMTP_SERVER:-}" # serveur SMTP
|
||||
SMTP_PORT: "${SMTP_PORT:-587}" # port SMTP (ex: 587)
|
||||
SMTP_EMAIL: "${SMTP_EMAIL:-}" # email expéditeur
|
||||
SMTP_PASSWORD: "${SMTP_PASSWORD:-}" # mot de passe SMTP
|
||||
SMTP_FROM_ALIAS: "${SMTP_FROM_ALIAS:-Street Vision API}" # alias (optionnel)
|
||||
ADMIN_EMAIL: "${ADMIN_EMAIL:-}" # email admin destinataire
|
||||
|
||||
# URL de base de l'API (utilisée par Streamlit pour rediriger vers FastAPI)
|
||||
MULTISEG_API_BASE_URL: "${MULTISEG_API_BASE_URL}" # ex: https://vision.domain.com/api
|
||||
|
||||
# Pour une mise à jour automatique par watchtower
|
||||
labels:
|
||||
com.centurylinklabs.watchtower.enable: "true"
|
||||
|
||||
# Seulement si vous avez un reverse proxy server
|
||||
# networks:
|
||||
# - swag
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
# Seulement si vous avez un reverse proxy server
|
||||
# networks:
|
||||
# swag:
|
||||
# external: true
|
||||
|
|
|
|||
|
|
@ -1,230 +1,230 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Cahier des Charges Dashboard</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.container {
|
||||
background: white;
|
||||
border-radius: 15px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 15px 35px rgba(0,0,0,0.1);
|
||||
max-width: 950px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
color: #2c3e50;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
text-align: center;
|
||||
color: #7f8c8d;
|
||||
font-size: 16px;
|
||||
margin-bottom: 25px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 20px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
th {
|
||||
background: linear-gradient(135deg, #3498db, #2980b9);
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-size: 13px;
|
||||
text-transform: uppercase;
|
||||
padding: 15px 12px;
|
||||
text-align: center;
|
||||
border: 2px solid white;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 12px;
|
||||
border: 2px solid #ecf0f1;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.category {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
color: white;
|
||||
font-size: 13px;
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.exploratoire {
|
||||
background: linear-gradient(135deg, #e74c3c, #c0392b);
|
||||
}
|
||||
|
||||
.comparaison {
|
||||
background: linear-gradient(135deg, #f39c12, #d68910);
|
||||
}
|
||||
|
||||
.accessibilite {
|
||||
background: linear-gradient(135deg, #27ae60, #229954);
|
||||
}
|
||||
|
||||
.technique {
|
||||
background: linear-gradient(135deg, #8e44ad, #7d3c98);
|
||||
}
|
||||
|
||||
.requirement {
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
.implementation {
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
color: #2c3e50;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.tech-stack {
|
||||
margin-top: 20px;
|
||||
background: linear-gradient(135deg, #f8f9fa, #e9ecef);
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
border-left: 5px solid #6c757d;
|
||||
}
|
||||
|
||||
.tech-stack h3 {
|
||||
color: #495057;
|
||||
margin-top: 0;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.tech-items {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.tech-item {
|
||||
background: #6c757d;
|
||||
color: white;
|
||||
padding: 5px 12px;
|
||||
border-radius: 15px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="title">Cahier des Charges Dashboard Interactif</div>
|
||||
<div class="subtitle">Spécifications et implémentation - Projet DataSpace</div>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 20%;">Catégorie</th>
|
||||
<th style="width: 45%;">Exigences Projet</th>
|
||||
<th style="width: 35%;">Implémentation</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="category exploratoire">ANALYSE EXPLORATOIRE</td>
|
||||
<td class="requirement">
|
||||
• Visualisation contenu dataset<br>
|
||||
• Analyses statistiques describe()<br>
|
||||
• 2+ graphiques interactifs<br>
|
||||
• Distribution des classes
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Streamlit + Plotly interactif<br>
|
||||
Métriques dataset Cityscapes<br>
|
||||
Distribution pixel-wise classes<br>
|
||||
Graphiques responsive
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="category comparaison">COMPARAISON MODÈLES</td>
|
||||
<td class="requirement">
|
||||
• Sélection données entrée<br>
|
||||
• Upload images personnalisées<br>
|
||||
• Prédiction temps réel<br>
|
||||
• Affichage résultats comparatifs
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Interface upload + dropdown<br>
|
||||
Inférence FPN vs SegFormer<br>
|
||||
Visualisation masques côte-à-côte<br>
|
||||
Métriques temps d'exécution
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="category accessibilite">ACCESSIBILITÉ WCAG</td>
|
||||
<td class="requirement">
|
||||
• Critères WCAG essentiels<br>
|
||||
• Contraste couleurs<br>
|
||||
• Navigation clavier<br>
|
||||
• Labels descriptifs
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Palette couleurs accessibles<br>
|
||||
Alt-text images générées<br>
|
||||
Semantic HTML structure<br>
|
||||
Focus indicators
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="category technique">DÉPLOIEMENT CLOUD</td>
|
||||
<td class="requirement">
|
||||
• Application déployée online<br>
|
||||
• Interface responsive<br>
|
||||
• Performance acceptable<br>
|
||||
• Code source accessible
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Serveur NAS personnel (Intel N100)<br>
|
||||
Streamlit containerisé<br>
|
||||
Optimisation modèles CPU<br>
|
||||
Repository GitHub documenté
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="tech-stack">
|
||||
<h3>🛠️ Stack Technique</h3>
|
||||
<div class="tech-items">
|
||||
<div class="tech-item">FastAPI</div>
|
||||
<div class="tech-item">Streamlit</div>
|
||||
<div class="tech-item">PyTorch</div>
|
||||
<div class="tech-item">Plotly</div>
|
||||
<div class="tech-item">PIL/OpenCV</div>
|
||||
<div class="tech-item">Docker</div>
|
||||
<div class="tech-item">Intel N100</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Cahier des Charges Dashboard</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.container {
|
||||
background: white;
|
||||
border-radius: 15px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 15px 35px rgba(0,0,0,0.1);
|
||||
max-width: 950px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
color: #2c3e50;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
text-align: center;
|
||||
color: #7f8c8d;
|
||||
font-size: 16px;
|
||||
margin-bottom: 25px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 20px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
th {
|
||||
background: linear-gradient(135deg, #3498db, #2980b9);
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-size: 13px;
|
||||
text-transform: uppercase;
|
||||
padding: 15px 12px;
|
||||
text-align: center;
|
||||
border: 2px solid white;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 12px;
|
||||
border: 2px solid #ecf0f1;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.category {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
color: white;
|
||||
font-size: 13px;
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.exploratoire {
|
||||
background: linear-gradient(135deg, #e74c3c, #c0392b);
|
||||
}
|
||||
|
||||
.comparaison {
|
||||
background: linear-gradient(135deg, #f39c12, #d68910);
|
||||
}
|
||||
|
||||
.accessibilite {
|
||||
background: linear-gradient(135deg, #27ae60, #229954);
|
||||
}
|
||||
|
||||
.technique {
|
||||
background: linear-gradient(135deg, #8e44ad, #7d3c98);
|
||||
}
|
||||
|
||||
.requirement {
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
.implementation {
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
color: #2c3e50;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.tech-stack {
|
||||
margin-top: 20px;
|
||||
background: linear-gradient(135deg, #f8f9fa, #e9ecef);
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
border-left: 5px solid #6c757d;
|
||||
}
|
||||
|
||||
.tech-stack h3 {
|
||||
color: #495057;
|
||||
margin-top: 0;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.tech-items {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.tech-item {
|
||||
background: #6c757d;
|
||||
color: white;
|
||||
padding: 5px 12px;
|
||||
border-radius: 15px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="title">Cahier des Charges Dashboard Interactif</div>
|
||||
<div class="subtitle">Spécifications et implémentation - Projet DataSpace</div>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 20%;">Catégorie</th>
|
||||
<th style="width: 45%;">Exigences Projet</th>
|
||||
<th style="width: 35%;">Implémentation</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="category exploratoire">ANALYSE EXPLORATOIRE</td>
|
||||
<td class="requirement">
|
||||
• Visualisation contenu dataset<br>
|
||||
• Analyses statistiques describe()<br>
|
||||
• 2+ graphiques interactifs<br>
|
||||
• Distribution des classes
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Streamlit + Plotly interactif<br>
|
||||
Métriques dataset Cityscapes<br>
|
||||
Distribution pixel-wise classes<br>
|
||||
Graphiques responsive
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="category comparaison">COMPARAISON MODÈLES</td>
|
||||
<td class="requirement">
|
||||
• Sélection données entrée<br>
|
||||
• Upload images personnalisées<br>
|
||||
• Prédiction temps réel<br>
|
||||
• Affichage résultats comparatifs
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Interface upload + dropdown<br>
|
||||
Inférence FPN vs SegFormer<br>
|
||||
Visualisation masques côte-à-côte<br>
|
||||
Métriques temps d'exécution
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="category accessibilite">ACCESSIBILITÉ WCAG</td>
|
||||
<td class="requirement">
|
||||
• Critères WCAG essentiels<br>
|
||||
• Contraste couleurs<br>
|
||||
• Navigation clavier<br>
|
||||
• Labels descriptifs
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Palette couleurs accessibles<br>
|
||||
Alt-text images générées<br>
|
||||
Semantic HTML structure<br>
|
||||
Focus indicators
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="category technique">DÉPLOIEMENT CLOUD</td>
|
||||
<td class="requirement">
|
||||
• Application déployée online<br>
|
||||
• Interface responsive<br>
|
||||
• Performance acceptable<br>
|
||||
• Code source accessible
|
||||
</td>
|
||||
<td class="implementation">
|
||||
Serveur NAS personnel (Intel N100)<br>
|
||||
Streamlit containerisé<br>
|
||||
Optimisation modèles CPU<br>
|
||||
Repository GitHub documenté
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="tech-stack">
|
||||
<h3>🛠️ Stack Technique</h3>
|
||||
<div class="tech-items">
|
||||
<div class="tech-item">FastAPI</div>
|
||||
<div class="tech-item">Streamlit</div>
|
||||
<div class="tech-item">PyTorch</div>
|
||||
<div class="tech-item">Plotly</div>
|
||||
<div class="tech-item">PIL/OpenCV</div>
|
||||
<div class="tech-item">Docker</div>
|
||||
<div class="tech-item">Intel N100</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,295 +1,295 @@
|
|||
# Note Méthodologique : Preuve de concept SegFormer vs FPN
|
||||
|
||||
## Dataset retenu
|
||||
|
||||
### Cityscapes Dataset : Référence en Segmentation Urbaine
|
||||
|
||||
Le **Cityscapes Dataset** constitue la référence internationale pour l'évaluation des algorithmes de segmentation sémantique en environnement urbain. Développé par l'Université de Tübingen et Mercedes-Benz, ce dataset comprend **25,000 images** haute résolution (2048×1024 pixels) capturées dans 50 villes allemandes et suisses.
|
||||
|
||||
**Composition du dataset :**
|
||||
- **Train** : 2,975 images finement annotées
|
||||
- **Validation** : 500 images avec annotations de référence
|
||||
- **Test** : 1,525 images (annotations non-publiques)
|
||||
- **Coarse** : 20,000 images avec annotations grossières
|
||||
|
||||
**Architecture de classes hiérarchique :**
|
||||
Le dataset organise 34 classes détaillées en **8 méta-classes** pour la segmentation :
|
||||
|
||||
| Méta-classe | Classes incluses | Importance |
|
||||
|-------------|------------------|------------|
|
||||
| **Flat** | Route, trottoir, parkings | Navigation de base |
|
||||
| **Human** | Piéton, cycliste | **Sécurité critique** |
|
||||
| **Vehicle** | Voiture, camion, bus, train | Obstacles dynamiques |
|
||||
| **Construction** | Bâtiment, mur, clôture, pont | Structure urbaine |
|
||||
| **Object** | Poteau, feu, panneau | Signalétique |
|
||||
| **Nature** | Végétation, terrain | Environnement |
|
||||
| **Sky** | Ciel | Contexte |
|
||||
| **Void** | Zones non-définies | Exclusion |
|
||||
|
||||
**Particularité méthodologique critique :**
|
||||
Contrairement au protocole original préservant le ratio 2:1 natif (2048×1024), nos expérimentations utilisent des **images carrées (1:1)** aux résolutions 512×512 et 768×768. Cette déformation géométrique, motivée par les contraintes GPU T4, permet d'analyser l'impact du ratio d'image sur les différentes philosophies architecturales (CNN vs Transformer).
|
||||
|
||||
---
|
||||
|
||||
## Les concepts de l'algorithme récent
|
||||
|
||||
### SegFormer : Architecture Transformer Vision-Optimisée Temps Réel
|
||||
|
||||
**SegFormer** représente une avancée dans la segmentation sémantique en introduisant une architecture **Transformer** spécifiquement conçue pour l'efficacité computationnelle, contrairement aux approches Transformer classiques gourmandes en ressources.
|
||||
|
||||
### Innovations Architecturales Clés
|
||||
|
||||
**1. Encodeur Hiérarchique Sans Encodage Positionnel**
|
||||
|
||||
L'encodeur SegFormer **abandonne les encodages positionnels** au profit d'une architecture hiérarchique qui capture naturellement les relations spatiales :
|
||||
|
||||
$$\text{Feature Maps} = \{F_1, F_2, F_3, F_4\}$$
|
||||
|
||||
avec résolutions $\{\frac{H}{4}, \frac{H}{8}, \frac{H}{16}, \frac{H}{32}\}$
|
||||
|
||||
**Efficient Self-Attention :**
|
||||
Réduction de complexité par sous-échantillonnage des clés :
|
||||
|
||||
$$\text{Attention}(Q,K,V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
|
||||
|
||||
avec complexité réduite de $\mathcal{O}(N^2)$ à $\mathcal{O}\left(\frac{N^2}{R}\right)$ où $R$ est le facteur de réduction.
|
||||
|
||||
**2. Mix-FFN : Hybridation CNN-Transformer**
|
||||
|
||||
Innovation clé : intégration de **convolutions 3×3** dans les couches Feed-Forward :
|
||||
|
||||
$$\text{Mix-FFN}(x) = \text{MLP}(\text{GELU}(\text{Conv}_{3×3}(\text{MLP}(x)) + x))$$
|
||||
|
||||
Cette approche permet :
|
||||
- **Élimination totale des encodages positionnels**
|
||||
- **Capture locale + compréhension globale** simultanées
|
||||
- **Robustesse aux variations de résolution** d'entrée
|
||||
|
||||
**3. Décodeur MLP Ultra-Léger**
|
||||
|
||||
Simplification drastique vs décodeurs complexes traditionnels :
|
||||
|
||||
$$\text{Seg} = \text{MLP}\left(\text{Concat}[\text{Upsample}(F_1), F_2, F_3, F_4]\right)$$
|
||||
|
||||
**Avantages :**
|
||||
- **Réduction massive des paramètres** : Focus sur l'encodeur performant
|
||||
- **Inférence accélérée** : Décodeur 10× plus rapide que ASPP/PSP
|
||||
- **Architecture unifiée** : Traitement multi-échelle sans modules ad-hoc
|
||||
|
||||
### Positionnement Temps Réel vs État de l'Art
|
||||
|
||||
**Analyse critique du benchmark original :**
|
||||
Le papier SegFormer révèle que **SegFormer-B0** (3.7M paramètres) atteint **75.3% mIoU** sur Cityscapes à résolution réduite (côté court 768px), égalant **DeepLabv3+ + MobileNetV2** (75.2% mIoU) à résolution pleine. Cette **efficacité computationnelle supérieure** constitue l'argument central de notre hypothèse de recherche.
|
||||
|
||||
**Hypothèse de transfert :**
|
||||
Si DeepLabv3+ surpasse théoriquement FPN, alors SegFormer-B0 devrait également surpasser notre baseline FPN+EfficientNetB0 (78.67% mIoU), particulièrement à 768×768 pixels.
|
||||
|
||||
---
|
||||
|
||||
## La modélisation
|
||||
|
||||
### Méthodologie Expérimentale Adaptée
|
||||
|
||||
**Contraintes et adaptations :**
|
||||
Notre protocole d'évaluation diffère substantiellement du papier original pour s'adapter aux contraintes pratiques :
|
||||
|
||||
**Configuration matérielle :**
|
||||
- **Plateforme** : Google Colab Pro avec GPU T4 (15Go VRAM)
|
||||
- **Framework** : Migration TensorFlow/Keras → PyTorch + Segmentation Models PyTorch
|
||||
- **Contraintes** : Plan payant avec unités de calcul limitées
|
||||
|
||||
**Déformation géométrique :**
|
||||
- **Protocole original** : Préservation ratio 2:1 natif Cityscapes
|
||||
- **Notre protocole** : Déformation vers ratio 1:1 (images carrées)
|
||||
- **Résolutions testées** : 512×512 et 768×768 pixels
|
||||
- **Impact attendu** : Analyse différentielle CNN vs Transformer sous contrainte géométrique
|
||||
|
||||
### Preprocessing et Modèles Pré-entraînés
|
||||
|
||||
**Modèles SegFormer (pré-entraînés ADE20K) :**
|
||||
- **SegFormer-B0** : `segformer-b0-512x512-ade-160k` (3.7M paramètres)
|
||||
- **SegFormer-B1** : `segformer-b1-512x512-ade-160k` (13.7M paramètres, exploration scaling)
|
||||
|
||||
**Modèles FPN (pré-entraînés ImageNet) :**
|
||||
- **FPN+ResNet34** : 23.16M paramètres
|
||||
- **FPN+EfficientNet-B0** : 5.76M paramètres (baseline de référence @224x224 : 74.6% mIoU)
|
||||
|
||||
### Configuration d'Entraînement Optimisée
|
||||
|
||||
**Configuration SegFormer :**
|
||||
- **Loss Function** : Jaccard Loss pour optimisation IoU directe
|
||||
- **Optimiseur** : AdamW (lr=1e-4, weight_decay=1e-4, spécialisé Transformers)
|
||||
- **Scheduler** : Cosine Annealing (convergence douce, min_lr=1e-6)
|
||||
- **Epochs** : Maximum 30 avec early stopping (patience=5)
|
||||
|
||||
**Configuration FPN :**
|
||||
- **Loss Function** : Focal + Jaccard Loss combinées (poids 1:1)
|
||||
- **Optimiseur** : Adam (lr=1.5e-4, weight_decay=1e-5, optimisé CNN)
|
||||
- **Scheduler** : ReduceLROnPlateau (adaptation réactive, patience=4)
|
||||
- **Epochs** : Maximum 20 avec early stopping (patience=7)
|
||||
|
||||
**Stratégie d'entraînement :**
|
||||
Entraînement séquentiel des 4 modèles principaux à 512×512, puis scaling à 768×768 pour analyse comparative résolution/performance.
|
||||
|
||||
---
|
||||
|
||||
## Une synthèse des résultats
|
||||
|
||||

|
||||
*Fig.1: Mean IoU et Accuracy par expérience*
|
||||
|
||||
### Performance Comparative : SegFormer vs FPN sous Contrainte Géométrique
|
||||
|
||||
**Résultats principaux (mIoU sur Cityscapes Validation) :**
|
||||
|
||||
| **Modèle** | **mIoU** | **Gain vs Baseline** | **Paramètres** | **Taille** | **Temps CPU** |
|
||||
|------------|----------|----------------------|----------------|------------|---------------|
|
||||
| **SegFormer-B1** | **79.98%** | **+1.31%** | **13.68M** | **52MB** | **1.39s** |
|
||||
| **FPN+ResNet34** | **79.22%** | **+0.55%** | **23.16M** | **88MB** | **0.73s** |
|
||||
| **FPN+EfficientNet-B0** | **78.67%** | *baseline* | **5.76M** | **22MB** | **0.48s** |
|
||||
| **SegFormer-B0** | **77.91%** | **-0.76%** | **3.72M** | **14MB** | **0.87s** |
|
||||
|
||||
*Temps d'inférence : CPU Intel Xeon @ 2.20GHz (2 vCPUs) Google Colab*
|
||||
|
||||
### Révélations Critiques : Impact du Ratio d'Image
|
||||
|
||||
**Résultat majeur inattendu :**
|
||||
Contrairement aux prédictions du benchmark original, **SegFormer-B0 sous-performe face aux baselines FPN** sur images carrées (77.91% vs 78.67% mIoU). Cette observation révèle une **sensibilité architecturale différentielle** aux déformations géométriques.
|
||||
|
||||
**Hypothèse explicative - Robustesse géométrique :**
|
||||
|
||||
1. **CNN (FPN)** : Les convolutions avec leurs kernels fixes et pooling local gèrent naturellement les déformations géométriques
|
||||
2. **Transformer (SegFormer)** : L'attention globale, optimisée sur ratio 2:1 natif, souffre de la perte d'information spatiale lors de la déformation 1:1
|
||||
3. **Scaling architectural** : SegFormer-B1 compense cette limitation par sa capacité supérieure (+1.31% mIoU)
|
||||
|
||||
### Analyse Détaillée par Classes Sémantiques
|
||||
|
||||

|
||||
*Fig.2: IoU et Δ IoU par Classe entre SegFormer-B1 et FPN-ResNet34*
|
||||
|
||||
**Performance par méta-classes Cityscapes :**
|
||||
|
||||
| **Classe** | **SegFormer-B1** | **FPN+ResNet34** | **Gain** | **Analyse** |
|
||||
|------------|-------------------|-------------------|----------|-------------|
|
||||
| **Flat** | **93.35%** | **93.38%** | **-0.03%** | Performance équivalente |
|
||||
| **Human** | **71.13%** | **69.35%** | **+1.78%** | ⭐ **Attention globale critique** |
|
||||
| **Vehicle** | **88.80%** | **87.75%** | **+1.05%** | ⭐ **Contexte multi-échelle** |
|
||||
| **Construction** | **85.94%** | **85.06%** | **+0.88%** | Structures complexes |
|
||||
| **Object** | **49.24%** | **48.68%** | **+0.56%** | ⭐ **Signalétique petite taille** |
|
||||
| **Nature** | **89.14%** | **88.13%** | **+1.01%** | Textures variées |
|
||||
| **Sky** | **92.35%** | **91.67%** | **+0.68%** | Régions homogènes |
|
||||
| **Void** | **69.89%** | **69.76%** | **+0.13%** | Zones ambiguës |
|
||||
|
||||
**Patterns d'amélioration SegFormer-B1 :**
|
||||
- **Classes sécuritaires critiques** (Human +1.78%, Vehicle +1.05%) : Validation de l'attention globale pour objets contextuels
|
||||
- **Objets petite taille** (Object +0.56%) : Meilleure capture multi-échelle vs convolutions locales
|
||||
- **Performance équivalente** sur surfaces homogènes (Flat -0.03%)
|
||||
|
||||
### Performance Surprenante vs Benchmark Original
|
||||
|
||||
**Observation contre-intuitive :**
|
||||
Nos modèles atteignent des performances **supérieures au papier original** malgré la contrainte géométrique @768x768 :
|
||||
- **SegFormer-B0 : 77.91%** vs 75.3%
|
||||
- **FPN baselines : 78.67-79.22%** vs DeepLabV3+ 75.2%
|
||||
- **SegFormer-B1 : 79.98%** vs ~76-78% (en effectuant un scaling grossier B0→B1 en se basant sur l'écart de performances de B0-->B5)
|
||||
|
||||
|
||||
**Hypothèses explicatives :**
|
||||
1. **Optimisation du ratio 1:1** : Réduction de l'aire d'image (×2) concentre l'information spatiale
|
||||
2. **Optimisation d'hyperparamètres** : Par exemple, utilisation de fonctions de perte Jaccard (+ Focal) ? Non mentionné dans SegFormer (2021) ni DeepLabV3 (2018)
|
||||
3. **Encodeurs** : EfficientNetB0 à peine plus long que MobileNetV2 et performances au-dessus. ResNet34 au-dessus également mais plus lourd (peut-être pertinent en temps réel...?)
|
||||
3. **Framework PyTorch** : Optimisations modernes vs implémentations TensorFlow du papier DeepLabV3+ (2018)
|
||||
|
||||
---
|
||||
|
||||
## L'analyse de la feature importance globale et locale du nouveau modèle
|
||||
|
||||
### Limitations Méthodologiques de l'Explicabilité Transformer
|
||||
|
||||
L'analyse d'explicabilité des architectures Transformer pour la segmentation dense représente un **défi technique majeur** dépassant le cadre de cette preuve de concept. Les mécanismes d'attention multi-têtes, Mix-FFN, et fusion hiérarchique créent des interactions complexes difficiles à décomposer causalement.
|
||||
|
||||
### Insights Architecturaux via Patterns de Performance
|
||||
|
||||
**Analyse indirecte par performance différentielle :**
|
||||
|
||||
Bien que l'explicabilité fine soit inaccessible, les patterns de performance révèlent les mécanismes sous-jacents :
|
||||
|
||||
1. **Attention globale validée** : Gains significatifs sur classes contextuelles (Human +1.78%, Vehicle +1.05%) suggèrent une **compréhension scénique** supérieure aux CNN
|
||||
2. **Sensibilité géométrique** : Sous-performance SegFormer-B0 vs FPN sur images déformées révèle une **dépendance aux relations spatiales natives**
|
||||
3. **Scaling architectural efficace** : Bond B0→B1 (+2.07% mIoU) confirme l'efficacité du scaling Transformer
|
||||
|
||||
**Limitation fondamentale :**
|
||||
Les cartes d'attention ne correspondent pas nécessairement à l'importance causale réelle. Une explicabilité rigoureuse nécessiterait des approches spécialisées comme **Deep Taylor Decomposition** ou **Integrated Gradients** adaptées aux architectures hybrides CNN-Transformer.
|
||||
|
||||
---
|
||||
|
||||
## Limites et améliorations possibles
|
||||
|
||||
### Limitations Expérimentales Critiques
|
||||
|
||||
**1. Contraintes Protocolaires Majeures**
|
||||
- **Déformation géométrique forcée** : Ratio 2:1→1:1 non-représentatif du déploiement réel
|
||||
- **Résolutions limitées** : GPU T4 contraint l'exploration des résolutions supérieures (>768px). Augmentation importante de l'utilisation de VRAM et réduction drastique du `batch_size` --> entraînements plus longs (plus d'époques)
|
||||
- **Framework migration** : TensorFlow→PyTorch peut introduire des biais de comparaison
|
||||
- **Métriques d'évaluation** : Temps d'inférence CPU non-représentatifs du déploiement GPU optimisé
|
||||
|
||||
**2. Généralisation Limitée**
|
||||
- **Dataset unique** : Évaluation exclusive sur Cityscapes urbain allemand
|
||||
- **Conditions météo** : Uniquement conditions favorables (pas de nuit/intempéries)
|
||||
- **Scaling incomplet** : SegFormer-B2+ non-testés faute de ressources computationnelles
|
||||
|
||||
### Améliorations Prioritaires Identifiées
|
||||
|
||||
**1. Robustesse Protocolaire**
|
||||
- **Préservation ratio natif** : Tests sur images 2:1 sans déformation géométrique (contraintes budgétaires/temps limitant cette approche)
|
||||
- **Résolutions supérieures** : Évaluation à 1024×512 ou résolutions natives pour validation écologique
|
||||
- **Evaluation multi-dataset** : Validation BDD100K, Mapillary Vistas pour généralisation
|
||||
|
||||
**2. Scaling Architectural Complet**
|
||||
- **SegFormer variants complets** : B2, B3, B4 pour validation des gains à tous les niveaux de complexité vs papier original
|
||||
- **Évaluation différentielle** : Déterminer si les améliorations observées sont spécifiques aux modèles légers (B0-B1) ou généralisables aux variants lourds
|
||||
- **Optimisations déploiement** : TensorRT, quantization FP16/INT8 pour inférence temps réel selon niveau de complexité
|
||||
|
||||
**3. Analyse Causale Approfondie**
|
||||
1. **Prototypage rapide** : SegFormer-B1 comme référence architecturale moderne pour projets nécessitant performance maximale
|
||||
2. **Contraintes embarquées** : FPN+EfficientNet-B0 optimal pour déploiement edge ultra-contraint à 768×768, avec évaluation requise à résolutions supérieures pour validation complète
|
||||
3. **Adaptabilité clients** : Gamme SegFormer (B0-B1+) offrant scaling performance/ressources selon besoins spécifiques
|
||||
|
||||
### Perspectives de Déploiement Pratique
|
||||
|
||||
**Applications industrielles validées :**
|
||||
1. **Prototypage rapide** : SegFormer-B1 comme référence architecturale moderne pour projets nécessitant performance maximale
|
||||
2. **Contraintes embarquées** : FPN+EfficientNet-B0 optimal pour déploiement edge ultra-contraint à 768×768, avec évaluation requise à résolutions supérieures pour validation complète
|
||||
3. **Adaptabilité clients** : Gamme SegFormer (B0-B1+) offrant scaling performance/ressources selon besoins spécifiques
|
||||
|
||||
**ROI technique contextuel :**
|
||||
Cette preuve de concept valide l'intérêt des architectures Transformer tout en révélant leurs **sensibilités pratiques** (ratio d'image, scaling nécessaire). L'approche constitue une **base méthodologique** solide pour futurs développements production avec contraintes réelles explicitées.
|
||||
|
||||
---
|
||||
|
||||
## Conclusion Méthodologique
|
||||
|
||||
### Contribution Analytique Principale
|
||||
|
||||
Cette étude apporte une **perspective complémentaire critique** aux évaluations académiques standard en révélant :
|
||||
|
||||
1. **Impact géométrique différentiel** : Sensibilité CNN vs Transformer aux déformations d'image
|
||||
2. **Scaling architectural requis** : Nécessité SegFormer-B1+ pour surpasser baselines CNN établies en ratio 1:1
|
||||
3. **Trade-offs pratiques** : Compromis performance/efficacité sous contraintes réelles
|
||||
|
||||
### Validation des Hypothèses de Recherche
|
||||
|
||||
**Hypothèses confirmées :**
|
||||
- ✅ **SegFormer-B1 surpasse FPN** (+1.31% mIoU) avec efficacité paramétrique supérieure
|
||||
- ✅ **Amélioration classes critiques** validée (Human +1.78%, Vehicle +1.05%)
|
||||
- ✅ **Architecture Transformer viable** pour segmentation temps réel avec scaling approprié
|
||||
|
||||
**Hypothèses infirmées :**
|
||||
- ❌ **SegFormer-B0 sous-performant** vs FPN sur images 1:1
|
||||
- ❌ **Robustesse géométrique** Transformer surestimée vs CNN
|
||||
|
||||
### Positionnement Scientifique
|
||||
|
||||
Cette preuve de concept se distingue par son **réalisme méthodologique** : elle expose les limitations pratiques des architectures d'avant-garde sous contraintes déploiement réelles, offrant une analyse **nuancée et reproductible** aux équipes techniques devant opérer des choix architecturaux informés.
|
||||
|
||||
# Note Méthodologique : Preuve de concept SegFormer vs FPN
|
||||
|
||||
## Dataset retenu
|
||||
|
||||
### Cityscapes Dataset : Référence en Segmentation Urbaine
|
||||
|
||||
Le **Cityscapes Dataset** constitue la référence internationale pour l'évaluation des algorithmes de segmentation sémantique en environnement urbain. Développé par l'Université de Tübingen et Mercedes-Benz, ce dataset comprend **25,000 images** haute résolution (2048×1024 pixels) capturées dans 50 villes allemandes et suisses.
|
||||
|
||||
**Composition du dataset :**
|
||||
- **Train** : 2,975 images finement annotées
|
||||
- **Validation** : 500 images avec annotations de référence
|
||||
- **Test** : 1,525 images (annotations non-publiques)
|
||||
- **Coarse** : 20,000 images avec annotations grossières
|
||||
|
||||
**Architecture de classes hiérarchique :**
|
||||
Le dataset organise 34 classes détaillées en **8 méta-classes** pour la segmentation :
|
||||
|
||||
| Méta-classe | Classes incluses | Importance |
|
||||
|-------------|------------------|------------|
|
||||
| **Flat** | Route, trottoir, parkings | Navigation de base |
|
||||
| **Human** | Piéton, cycliste | **Sécurité critique** |
|
||||
| **Vehicle** | Voiture, camion, bus, train | Obstacles dynamiques |
|
||||
| **Construction** | Bâtiment, mur, clôture, pont | Structure urbaine |
|
||||
| **Object** | Poteau, feu, panneau | Signalétique |
|
||||
| **Nature** | Végétation, terrain | Environnement |
|
||||
| **Sky** | Ciel | Contexte |
|
||||
| **Void** | Zones non-définies | Exclusion |
|
||||
|
||||
**Particularité méthodologique critique :**
|
||||
Contrairement au protocole original préservant le ratio 2:1 natif (2048×1024), nos expérimentations utilisent des **images carrées (1:1)** aux résolutions 512×512 et 768×768. Cette déformation géométrique, motivée par les contraintes GPU T4, permet d'analyser l'impact du ratio d'image sur les différentes philosophies architecturales (CNN vs Transformer).
|
||||
|
||||
---
|
||||
|
||||
## Les concepts de l'algorithme récent
|
||||
|
||||
### SegFormer : Architecture Transformer Vision-Optimisée Temps Réel
|
||||
|
||||
**SegFormer** représente une avancée dans la segmentation sémantique en introduisant une architecture **Transformer** spécifiquement conçue pour l'efficacité computationnelle, contrairement aux approches Transformer classiques gourmandes en ressources.
|
||||
|
||||
### Innovations Architecturales Clés
|
||||
|
||||
**1. Encodeur Hiérarchique Sans Encodage Positionnel**
|
||||
|
||||
L'encodeur SegFormer **abandonne les encodages positionnels** au profit d'une architecture hiérarchique qui capture naturellement les relations spatiales :
|
||||
|
||||
$$\text{Feature Maps} = \{F_1, F_2, F_3, F_4\}$$
|
||||
|
||||
avec résolutions $\{\frac{H}{4}, \frac{H}{8}, \frac{H}{16}, \frac{H}{32}\}$
|
||||
|
||||
**Efficient Self-Attention :**
|
||||
Réduction de complexité par sous-échantillonnage des clés :
|
||||
|
||||
$$\text{Attention}(Q,K,V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
|
||||
|
||||
avec complexité réduite de $\mathcal{O}(N^2)$ à $\mathcal{O}\left(\frac{N^2}{R}\right)$ où $R$ est le facteur de réduction.
|
||||
|
||||
**2. Mix-FFN : Hybridation CNN-Transformer**
|
||||
|
||||
Innovation clé : intégration de **convolutions 3×3** dans les couches Feed-Forward :
|
||||
|
||||
$$\text{Mix-FFN}(x) = \text{MLP}(\text{GELU}(\text{Conv}_{3×3}(\text{MLP}(x)) + x))$$
|
||||
|
||||
Cette approche permet :
|
||||
- **Élimination totale des encodages positionnels**
|
||||
- **Capture locale + compréhension globale** simultanées
|
||||
- **Robustesse aux variations de résolution** d'entrée
|
||||
|
||||
**3. Décodeur MLP Ultra-Léger**
|
||||
|
||||
Simplification drastique vs décodeurs complexes traditionnels :
|
||||
|
||||
$$\text{Seg} = \text{MLP}\left(\text{Concat}[\text{Upsample}(F_1), F_2, F_3, F_4]\right)$$
|
||||
|
||||
**Avantages :**
|
||||
- **Réduction massive des paramètres** : Focus sur l'encodeur performant
|
||||
- **Inférence accélérée** : Décodeur 10× plus rapide que ASPP/PSP
|
||||
- **Architecture unifiée** : Traitement multi-échelle sans modules ad-hoc
|
||||
|
||||
### Positionnement Temps Réel vs État de l'Art
|
||||
|
||||
**Analyse critique du benchmark original :**
|
||||
Le papier SegFormer révèle que **SegFormer-B0** (3.7M paramètres) atteint **75.3% mIoU** sur Cityscapes à résolution réduite (côté court 768px), égalant **DeepLabv3+ + MobileNetV2** (75.2% mIoU) à résolution pleine. Cette **efficacité computationnelle supérieure** constitue l'argument central de notre hypothèse de recherche.
|
||||
|
||||
**Hypothèse de transfert :**
|
||||
Si DeepLabv3+ surpasse théoriquement FPN, alors SegFormer-B0 devrait également surpasser notre baseline FPN+EfficientNetB0 (78.67% mIoU), particulièrement à 768×768 pixels.
|
||||
|
||||
---
|
||||
|
||||
## La modélisation
|
||||
|
||||
### Méthodologie Expérimentale Adaptée
|
||||
|
||||
**Contraintes et adaptations :**
|
||||
Notre protocole d'évaluation diffère substantiellement du papier original pour s'adapter aux contraintes pratiques :
|
||||
|
||||
**Configuration matérielle :**
|
||||
- **Plateforme** : Google Colab Pro avec GPU T4 (15Go VRAM)
|
||||
- **Framework** : Migration TensorFlow/Keras → PyTorch + Segmentation Models PyTorch
|
||||
- **Contraintes** : Plan payant avec unités de calcul limitées
|
||||
|
||||
**Déformation géométrique :**
|
||||
- **Protocole original** : Préservation ratio 2:1 natif Cityscapes
|
||||
- **Notre protocole** : Déformation vers ratio 1:1 (images carrées)
|
||||
- **Résolutions testées** : 512×512 et 768×768 pixels
|
||||
- **Impact attendu** : Analyse différentielle CNN vs Transformer sous contrainte géométrique
|
||||
|
||||
### Preprocessing et Modèles Pré-entraînés
|
||||
|
||||
**Modèles SegFormer (pré-entraînés ADE20K) :**
|
||||
- **SegFormer-B0** : `segformer-b0-512x512-ade-160k` (3.7M paramètres)
|
||||
- **SegFormer-B1** : `segformer-b1-512x512-ade-160k` (13.7M paramètres, exploration scaling)
|
||||
|
||||
**Modèles FPN (pré-entraînés ImageNet) :**
|
||||
- **FPN+ResNet34** : 23.16M paramètres
|
||||
- **FPN+EfficientNet-B0** : 5.76M paramètres (baseline de référence @224x224 : 74.6% mIoU)
|
||||
|
||||
### Configuration d'Entraînement Optimisée
|
||||
|
||||
**Configuration SegFormer :**
|
||||
- **Loss Function** : Jaccard Loss pour optimisation IoU directe
|
||||
- **Optimiseur** : AdamW (lr=1e-4, weight_decay=1e-4, spécialisé Transformers)
|
||||
- **Scheduler** : Cosine Annealing (convergence douce, min_lr=1e-6)
|
||||
- **Epochs** : Maximum 30 avec early stopping (patience=5)
|
||||
|
||||
**Configuration FPN :**
|
||||
- **Loss Function** : Focal + Jaccard Loss combinées (poids 1:1)
|
||||
- **Optimiseur** : Adam (lr=1.5e-4, weight_decay=1e-5, optimisé CNN)
|
||||
- **Scheduler** : ReduceLROnPlateau (adaptation réactive, patience=4)
|
||||
- **Epochs** : Maximum 20 avec early stopping (patience=7)
|
||||
|
||||
**Stratégie d'entraînement :**
|
||||
Entraînement séquentiel des 4 modèles principaux à 512×512, puis scaling à 768×768 pour analyse comparative résolution/performance.
|
||||
|
||||
---
|
||||
|
||||
## Une synthèse des résultats
|
||||
|
||||

|
||||
*Fig.1: Mean IoU et Accuracy par expérience*
|
||||
|
||||
### Performance Comparative : SegFormer vs FPN sous Contrainte Géométrique
|
||||
|
||||
**Résultats principaux (mIoU sur Cityscapes Validation) :**
|
||||
|
||||
| **Modèle** | **mIoU** | **Gain vs Baseline** | **Paramètres** | **Taille** | **Temps CPU** |
|
||||
|------------|----------|----------------------|----------------|------------|---------------|
|
||||
| **SegFormer-B1** | **79.98%** | **+1.31%** | **13.68M** | **52MB** | **1.39s** |
|
||||
| **FPN+ResNet34** | **79.22%** | **+0.55%** | **23.16M** | **88MB** | **0.73s** |
|
||||
| **FPN+EfficientNet-B0** | **78.67%** | *baseline* | **5.76M** | **22MB** | **0.48s** |
|
||||
| **SegFormer-B0** | **77.91%** | **-0.76%** | **3.72M** | **14MB** | **0.87s** |
|
||||
|
||||
*Temps d'inférence : CPU Intel Xeon @ 2.20GHz (2 vCPUs) Google Colab*
|
||||
|
||||
### Révélations Critiques : Impact du Ratio d'Image
|
||||
|
||||
**Résultat majeur inattendu :**
|
||||
Contrairement aux prédictions du benchmark original, **SegFormer-B0 sous-performe face aux baselines FPN** sur images carrées (77.91% vs 78.67% mIoU). Cette observation révèle une **sensibilité architecturale différentielle** aux déformations géométriques.
|
||||
|
||||
**Hypothèse explicative - Robustesse géométrique :**
|
||||
|
||||
1. **CNN (FPN)** : Les convolutions avec leurs kernels fixes et pooling local gèrent naturellement les déformations géométriques
|
||||
2. **Transformer (SegFormer)** : L'attention globale, optimisée sur ratio 2:1 natif, souffre de la perte d'information spatiale lors de la déformation 1:1
|
||||
3. **Scaling architectural** : SegFormer-B1 compense cette limitation par sa capacité supérieure (+1.31% mIoU)
|
||||
|
||||
### Analyse Détaillée par Classes Sémantiques
|
||||
|
||||

|
||||
*Fig.2: IoU et Δ IoU par Classe entre SegFormer-B1 et FPN-ResNet34*
|
||||
|
||||
**Performance par méta-classes Cityscapes :**
|
||||
|
||||
| **Classe** | **SegFormer-B1** | **FPN+ResNet34** | **Gain** | **Analyse** |
|
||||
|------------|-------------------|-------------------|----------|-------------|
|
||||
| **Flat** | **93.35%** | **93.38%** | **-0.03%** | Performance équivalente |
|
||||
| **Human** | **71.13%** | **69.35%** | **+1.78%** | ⭐ **Attention globale critique** |
|
||||
| **Vehicle** | **88.80%** | **87.75%** | **+1.05%** | ⭐ **Contexte multi-échelle** |
|
||||
| **Construction** | **85.94%** | **85.06%** | **+0.88%** | Structures complexes |
|
||||
| **Object** | **49.24%** | **48.68%** | **+0.56%** | ⭐ **Signalétique petite taille** |
|
||||
| **Nature** | **89.14%** | **88.13%** | **+1.01%** | Textures variées |
|
||||
| **Sky** | **92.35%** | **91.67%** | **+0.68%** | Régions homogènes |
|
||||
| **Void** | **69.89%** | **69.76%** | **+0.13%** | Zones ambiguës |
|
||||
|
||||
**Patterns d'amélioration SegFormer-B1 :**
|
||||
- **Classes sécuritaires critiques** (Human +1.78%, Vehicle +1.05%) : Validation de l'attention globale pour objets contextuels
|
||||
- **Objets petite taille** (Object +0.56%) : Meilleure capture multi-échelle vs convolutions locales
|
||||
- **Performance équivalente** sur surfaces homogènes (Flat -0.03%)
|
||||
|
||||
### Performance Surprenante vs Benchmark Original
|
||||
|
||||
**Observation contre-intuitive :**
|
||||
Nos modèles atteignent des performances **supérieures au papier original** malgré la contrainte géométrique @768x768 :
|
||||
- **SegFormer-B0 : 77.91%** vs 75.3%
|
||||
- **FPN baselines : 78.67-79.22%** vs DeepLabV3+ 75.2%
|
||||
- **SegFormer-B1 : 79.98%** vs ~76-78% (en effectuant un scaling grossier B0→B1 en se basant sur l'écart de performances de B0-->B5)
|
||||
|
||||
|
||||
**Hypothèses explicatives :**
|
||||
1. **Optimisation du ratio 1:1** : Réduction de l'aire d'image (×2) concentre l'information spatiale
|
||||
2. **Optimisation d'hyperparamètres** : Par exemple, utilisation de fonctions de perte Jaccard (+ Focal) ? Non mentionné dans SegFormer (2021) ni DeepLabV3 (2018)
|
||||
3. **Encodeurs** : EfficientNetB0 à peine plus long que MobileNetV2 et performances au-dessus. ResNet34 au-dessus également mais plus lourd (peut-être pertinent en temps réel...?)
|
||||
3. **Framework PyTorch** : Optimisations modernes vs implémentations TensorFlow du papier DeepLabV3+ (2018)
|
||||
|
||||
---
|
||||
|
||||
## L'analyse de la feature importance globale et locale du nouveau modèle
|
||||
|
||||
### Limitations Méthodologiques de l'Explicabilité Transformer
|
||||
|
||||
L'analyse d'explicabilité des architectures Transformer pour la segmentation dense représente un **défi technique majeur** dépassant le cadre de cette preuve de concept. Les mécanismes d'attention multi-têtes, Mix-FFN, et fusion hiérarchique créent des interactions complexes difficiles à décomposer causalement.
|
||||
|
||||
### Insights Architecturaux via Patterns de Performance
|
||||
|
||||
**Analyse indirecte par performance différentielle :**
|
||||
|
||||
Bien que l'explicabilité fine soit inaccessible, les patterns de performance révèlent les mécanismes sous-jacents :
|
||||
|
||||
1. **Attention globale validée** : Gains significatifs sur classes contextuelles (Human +1.78%, Vehicle +1.05%) suggèrent une **compréhension scénique** supérieure aux CNN
|
||||
2. **Sensibilité géométrique** : Sous-performance SegFormer-B0 vs FPN sur images déformées révèle une **dépendance aux relations spatiales natives**
|
||||
3. **Scaling architectural efficace** : Bond B0→B1 (+2.07% mIoU) confirme l'efficacité du scaling Transformer
|
||||
|
||||
**Limitation fondamentale :**
|
||||
Les cartes d'attention ne correspondent pas nécessairement à l'importance causale réelle. Une explicabilité rigoureuse nécessiterait des approches spécialisées comme **Deep Taylor Decomposition** ou **Integrated Gradients** adaptées aux architectures hybrides CNN-Transformer.
|
||||
|
||||
---
|
||||
|
||||
## Limites et améliorations possibles
|
||||
|
||||
### Limitations Expérimentales Critiques
|
||||
|
||||
**1. Contraintes Protocolaires Majeures**
|
||||
- **Déformation géométrique forcée** : Ratio 2:1→1:1 non-représentatif du déploiement réel
|
||||
- **Résolutions limitées** : GPU T4 contraint l'exploration des résolutions supérieures (>768px). Augmentation importante de l'utilisation de VRAM et réduction drastique du `batch_size` --> entraînements plus longs (plus d'époques)
|
||||
- **Framework migration** : TensorFlow→PyTorch peut introduire des biais de comparaison
|
||||
- **Métriques d'évaluation** : Temps d'inférence CPU non-représentatifs du déploiement GPU optimisé
|
||||
|
||||
**2. Généralisation Limitée**
|
||||
- **Dataset unique** : Évaluation exclusive sur Cityscapes urbain allemand
|
||||
- **Conditions météo** : Uniquement conditions favorables (pas de nuit/intempéries)
|
||||
- **Scaling incomplet** : SegFormer-B2+ non-testés faute de ressources computationnelles
|
||||
|
||||
### Améliorations Prioritaires Identifiées
|
||||
|
||||
**1. Robustesse Protocolaire**
|
||||
- **Préservation ratio natif** : Tests sur images 2:1 sans déformation géométrique (contraintes budgétaires/temps limitant cette approche)
|
||||
- **Résolutions supérieures** : Évaluation à 1024×512 ou résolutions natives pour validation écologique
|
||||
- **Evaluation multi-dataset** : Validation BDD100K, Mapillary Vistas pour généralisation
|
||||
|
||||
**2. Scaling Architectural Complet**
|
||||
- **SegFormer variants complets** : B2, B3, B4 pour validation des gains à tous les niveaux de complexité vs papier original
|
||||
- **Évaluation différentielle** : Déterminer si les améliorations observées sont spécifiques aux modèles légers (B0-B1) ou généralisables aux variants lourds
|
||||
- **Optimisations déploiement** : TensorRT, quantization FP16/INT8 pour inférence temps réel selon niveau de complexité
|
||||
|
||||
**3. Analyse Causale Approfondie**
|
||||
1. **Prototypage rapide** : SegFormer-B1 comme référence architecturale moderne pour projets nécessitant performance maximale
|
||||
2. **Contraintes embarquées** : FPN+EfficientNet-B0 optimal pour déploiement edge ultra-contraint à 768×768, avec évaluation requise à résolutions supérieures pour validation complète
|
||||
3. **Adaptabilité clients** : Gamme SegFormer (B0-B1+) offrant scaling performance/ressources selon besoins spécifiques
|
||||
|
||||
### Perspectives de Déploiement Pratique
|
||||
|
||||
**Applications industrielles validées :**
|
||||
1. **Prototypage rapide** : SegFormer-B1 comme référence architecturale moderne pour projets nécessitant performance maximale
|
||||
2. **Contraintes embarquées** : FPN+EfficientNet-B0 optimal pour déploiement edge ultra-contraint à 768×768, avec évaluation requise à résolutions supérieures pour validation complète
|
||||
3. **Adaptabilité clients** : Gamme SegFormer (B0-B1+) offrant scaling performance/ressources selon besoins spécifiques
|
||||
|
||||
**ROI technique contextuel :**
|
||||
Cette preuve de concept valide l'intérêt des architectures Transformer tout en révélant leurs **sensibilités pratiques** (ratio d'image, scaling nécessaire). L'approche constitue une **base méthodologique** solide pour futurs développements production avec contraintes réelles explicitées.
|
||||
|
||||
---
|
||||
|
||||
## Conclusion Méthodologique
|
||||
|
||||
### Contribution Analytique Principale
|
||||
|
||||
Cette étude apporte une **perspective complémentaire critique** aux évaluations académiques standard en révélant :
|
||||
|
||||
1. **Impact géométrique différentiel** : Sensibilité CNN vs Transformer aux déformations d'image
|
||||
2. **Scaling architectural requis** : Nécessité SegFormer-B1+ pour surpasser baselines CNN établies en ratio 1:1
|
||||
3. **Trade-offs pratiques** : Compromis performance/efficacité sous contraintes réelles
|
||||
|
||||
### Validation des Hypothèses de Recherche
|
||||
|
||||
**Hypothèses confirmées :**
|
||||
- ✅ **SegFormer-B1 surpasse FPN** (+1.31% mIoU) avec efficacité paramétrique supérieure
|
||||
- ✅ **Amélioration classes critiques** validée (Human +1.78%, Vehicle +1.05%)
|
||||
- ✅ **Architecture Transformer viable** pour segmentation temps réel avec scaling approprié
|
||||
|
||||
**Hypothèses infirmées :**
|
||||
- ❌ **SegFormer-B0 sous-performant** vs FPN sur images 1:1
|
||||
- ❌ **Robustesse géométrique** Transformer surestimée vs CNN
|
||||
|
||||
### Positionnement Scientifique
|
||||
|
||||
Cette preuve de concept se distingue par son **réalisme méthodologique** : elle expose les limitations pratiques des architectures d'avant-garde sous contraintes déploiement réelles, offrant une analyse **nuancée et reproductible** aux équipes techniques devant opérer des choix architecturaux informés.
|
||||
|
||||
L'approche constitue une **base technique solide** pour futurs développements industriels nécessitant des compromis éclairés entre innovation architecturale et contraintes opérationnelles.
|
||||
|
|
@ -1,77 +1,77 @@
|
|||
# Plan Prévisionnel - Preuve de Concept Segmentation Sémantique
|
||||
|
||||
**Projet** : Amélioration de la segmentation sémantique temps réel avec SegFormer
|
||||
|
||||
---
|
||||
|
||||
## Dataset Retenu
|
||||
|
||||
**Cityscapes** : Dataset de référence pour la segmentation sémantique de scènes urbaines comprenant 2975 images haute résolution (2048×1024) annotées pixel par pixel. Les images sont capturées dans **50 villes allemandes différentes** avec **34 classes principales** que nous regroupons en **8 catégories pertinentes** (flat, vehicle, human, construction, object, nature, sky, void).
|
||||
|
||||
**Particularité méthodologique** : Les images seront testées aux résolutions 512×512 et 768×768 avec **déformation du ratio d'origine** (passage de 2:1 à 1:1) pour optimiser les contraintes computationnelles GPU T4. Cette modification permettra d'analyser l'impact du ratio d'image sur les différentes architectures.
|
||||
|
||||
---
|
||||
|
||||
## Modèle Envisagé
|
||||
|
||||
### Algorithme : SegFormer (Focus Temps Réel)
|
||||
|
||||
**Justifications du choix :**
|
||||
SegFormer (Xie et al., 2021) représente une approche Transformer vision-optimisée pour la segmentation sémantique. **L'analyse du benchmark Cityscapes révèle que SegFormer-B0 égale les performances de DeepLabv3+** (75.3% vs 75.2% mIoU) tout en fonctionnant à **résolution réduite** (côté court 768px vs résolution pleine). Cette efficacité computationnelle supérieure suggère un potentiel d'amélioration face à notre baseline FPN, DeepLabv3+ étant théoriquement plus performant que FPN.
|
||||
|
||||
**Objectif et hypothèses de recherche :**
|
||||
1. **SegFormer-B0** devrait surpasser FPN+EfficientNetB0 (78.67% mIoU baseline) grâce à l'attention globale native
|
||||
2. **SegFormer-B1** permettra d'explorer le scaling architectural (non documenté dans le papier original)
|
||||
3. **Impact du ratio d'image** : Analyser comment la déformation 2:1→1:1 affecte les architectures CNN vs Transformer
|
||||
|
||||
**Contraintes et adaptations :**
|
||||
- Migration framework obligatoire : TensorFlow/Keras → PyTorch pour accès aux modèles SegFormer récents
|
||||
- Résolutions contraintes par GPU T4 : 512×512 et 768×768 maximum
|
||||
- Protocole différent du papier original : images carrées vs rectangulaires natives
|
||||
|
||||
---
|
||||
|
||||
## Références Bibliographiques
|
||||
|
||||
1. **Xie, E., Wang, W., Yu, Z., et al.** (2021). *SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers*. NeurIPS 2021. [Architecture Transformer de référence]
|
||||
|
||||
2. **Chen, L.C., Zhu, Y., Papandreou, G., et al.** (2018). *Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation*. ECCV 2018. [Baseline comparative DeepLabv3+]
|
||||
|
||||
3. **Cordts, M., Omran, M., Ramos, S., et al.** (2016). *The Cityscapes Dataset for Semantic Urban Scene Understanding*. CVPR 2016. [Dataset de référence]
|
||||
|
||||
---
|
||||
|
||||
## Explication de la Démarche de Test
|
||||
|
||||
### Méthode Baseline
|
||||
**FPN + EfficientNetB0/ResNet34** : Réentraînement des modèles du projet précédent aux nouvelles résolutions 512×512 et 768×768 avec déformation du ratio d'image. Performance baseline FPN+EfficientNetB0 : 78.67% mIoU (baseline de référence).
|
||||
|
||||
### Méthode de Test SegFormer
|
||||
**Évaluation comparative temps réel** :
|
||||
1. **SegFormer-B0** : Modèle compact ciblé (3.7M paramètres) pour validation du concept temps réel
|
||||
2. **SegFormer-B1** : Exploration scaling architectural (13.7M paramètres) non documenté dans le papier
|
||||
3. **Comparaison 512×512 vs 768×768** : Trade-off résolution/performance sur images déformées
|
||||
4. **Analyse différentielle** : Impact du ratio d'image 1:1 vs 2:1 natif Cityscapes
|
||||
|
||||
**Métriques d'évaluation** :
|
||||
- Mean IoU (métrique principale) et accuracy pixel-wise
|
||||
- Performance par classe sémantique (focus classes critiques : Human, Vehicle)
|
||||
- Temps d'inférence CPU/GPU pour validation déploiement pratique
|
||||
|
||||
### Preuve de Concept
|
||||
**Interface Streamlit** déployée sur serveur NAS personnel (CPU Intel N100) permettant :
|
||||
- Upload d'images urbaines avec **inférence comparative multi-modèles**
|
||||
- **Visualisation côte-à-côte** : FPN+ResNet34 vs SegFormer-B1 (meilleurs représentants)
|
||||
- Affichage temps d'inférence réel et métriques de performance détaillées
|
||||
- **Analyse exploratoire dataset** : Distribution classes, statistiques pixel-wise interactives
|
||||
|
||||
**Hypothèses de validation** :
|
||||
1. **SegFormer-B1 > FPN baselines** malgré contraintes ratio d'image
|
||||
2. **SegFormer-B0 vs FPN** : Révélation possible de limitations Transformer sur images déformées
|
||||
3. **Performances générales** potentiellement supérieures au papier original grâce à l'optimisation ratio 1:1
|
||||
|
||||
**Code réutilisé** : Framework `segmentation_models_pytorch` pour les implémentations. **Application originale** : protocole d'évaluation sur images carrées et analyse comparative CNN vs Transformer sous contraintes géométriques spécifiques.
|
||||
|
||||
---
|
||||
|
||||
# Plan Prévisionnel - Preuve de Concept Segmentation Sémantique
|
||||
|
||||
**Projet** : Amélioration de la segmentation sémantique temps réel avec SegFormer
|
||||
|
||||
---
|
||||
|
||||
## Dataset Retenu
|
||||
|
||||
**Cityscapes** : Dataset de référence pour la segmentation sémantique de scènes urbaines comprenant 2975 images haute résolution (2048×1024) annotées pixel par pixel. Les images sont capturées dans **50 villes allemandes différentes** avec **34 classes principales** que nous regroupons en **8 catégories pertinentes** (flat, vehicle, human, construction, object, nature, sky, void).
|
||||
|
||||
**Particularité méthodologique** : Les images seront testées aux résolutions 512×512 et 768×768 avec **déformation du ratio d'origine** (passage de 2:1 à 1:1) pour optimiser les contraintes computationnelles GPU T4. Cette modification permettra d'analyser l'impact du ratio d'image sur les différentes architectures.
|
||||
|
||||
---
|
||||
|
||||
## Modèle Envisagé
|
||||
|
||||
### Algorithme : SegFormer (Focus Temps Réel)
|
||||
|
||||
**Justifications du choix :**
|
||||
SegFormer (Xie et al., 2021) représente une approche Transformer vision-optimisée pour la segmentation sémantique. **L'analyse du benchmark Cityscapes révèle que SegFormer-B0 égale les performances de DeepLabv3+** (75.3% vs 75.2% mIoU) tout en fonctionnant à **résolution réduite** (côté court 768px vs résolution pleine). Cette efficacité computationnelle supérieure suggère un potentiel d'amélioration face à notre baseline FPN, DeepLabv3+ étant théoriquement plus performant que FPN.
|
||||
|
||||
**Objectif et hypothèses de recherche :**
|
||||
1. **SegFormer-B0** devrait surpasser FPN+EfficientNetB0 (78.67% mIoU baseline) grâce à l'attention globale native
|
||||
2. **SegFormer-B1** permettra d'explorer le scaling architectural (non documenté dans le papier original)
|
||||
3. **Impact du ratio d'image** : Analyser comment la déformation 2:1→1:1 affecte les architectures CNN vs Transformer
|
||||
|
||||
**Contraintes et adaptations :**
|
||||
- Migration framework obligatoire : TensorFlow/Keras → PyTorch pour accès aux modèles SegFormer récents
|
||||
- Résolutions contraintes par GPU T4 : 512×512 et 768×768 maximum
|
||||
- Protocole différent du papier original : images carrées vs rectangulaires natives
|
||||
|
||||
---
|
||||
|
||||
## Références Bibliographiques
|
||||
|
||||
1. **Xie, E., Wang, W., Yu, Z., et al.** (2021). *SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers*. NeurIPS 2021. [Architecture Transformer de référence]
|
||||
|
||||
2. **Chen, L.C., Zhu, Y., Papandreou, G., et al.** (2018). *Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation*. ECCV 2018. [Baseline comparative DeepLabv3+]
|
||||
|
||||
3. **Cordts, M., Omran, M., Ramos, S., et al.** (2016). *The Cityscapes Dataset for Semantic Urban Scene Understanding*. CVPR 2016. [Dataset de référence]
|
||||
|
||||
---
|
||||
|
||||
## Explication de la Démarche de Test
|
||||
|
||||
### Méthode Baseline
|
||||
**FPN + EfficientNetB0/ResNet34** : Réentraînement des modèles du projet précédent aux nouvelles résolutions 512×512 et 768×768 avec déformation du ratio d'image. Performance baseline FPN+EfficientNetB0 : 78.67% mIoU (baseline de référence).
|
||||
|
||||
### Méthode de Test SegFormer
|
||||
**Évaluation comparative temps réel** :
|
||||
1. **SegFormer-B0** : Modèle compact ciblé (3.7M paramètres) pour validation du concept temps réel
|
||||
2. **SegFormer-B1** : Exploration scaling architectural (13.7M paramètres) non documenté dans le papier
|
||||
3. **Comparaison 512×512 vs 768×768** : Trade-off résolution/performance sur images déformées
|
||||
4. **Analyse différentielle** : Impact du ratio d'image 1:1 vs 2:1 natif Cityscapes
|
||||
|
||||
**Métriques d'évaluation** :
|
||||
- Mean IoU (métrique principale) et accuracy pixel-wise
|
||||
- Performance par classe sémantique (focus classes critiques : Human, Vehicle)
|
||||
- Temps d'inférence CPU/GPU pour validation déploiement pratique
|
||||
|
||||
### Preuve de Concept
|
||||
**Interface Streamlit** déployée sur serveur NAS personnel (CPU Intel N100) permettant :
|
||||
- Upload d'images urbaines avec **inférence comparative multi-modèles**
|
||||
- **Visualisation côte-à-côte** : FPN+ResNet34 vs SegFormer-B1 (meilleurs représentants)
|
||||
- Affichage temps d'inférence réel et métriques de performance détaillées
|
||||
- **Analyse exploratoire dataset** : Distribution classes, statistiques pixel-wise interactives
|
||||
|
||||
**Hypothèses de validation** :
|
||||
1. **SegFormer-B1 > FPN baselines** malgré contraintes ratio d'image
|
||||
2. **SegFormer-B0 vs FPN** : Révélation possible de limitations Transformer sur images déformées
|
||||
3. **Performances générales** potentiellement supérieures au papier original grâce à l'optimisation ratio 1:1
|
||||
|
||||
**Code réutilisé** : Framework `segmentation_models_pytorch` pour les implémentations. **Application originale** : protocole d'évaluation sur images carrées et analyse comparative CNN vs Transformer sous contraintes géométriques spécifiques.
|
||||
|
||||
---
|
||||
|
||||
**Note méthodologique** : Cette approche permet d'analyser les trade-offs pratiques architecture/performance dans un contexte de contraintes réelles (hardware limité, déformation d'images), offrant une perspective complémentaire aux évaluations académiques standard.
|
||||
114
nginx.conf
114
nginx.conf
|
|
@ -1,57 +1,57 @@
|
|||
# This reverse proxy configuration aims to make calls to different services running under different ports (Streamlit :8501 and FastAPI :8000) by calling only one port : the nginx one (configurable via NGINX_PORT)
|
||||
# The NGINX_PORT has to be opened (Dockerfile) and used by app.py (streamlit) in order to make right calls.
|
||||
worker_processes 1;
|
||||
|
||||
events { worker_connections 1024; }
|
||||
|
||||
http {
|
||||
# ✅ AJOUT: Limite d'upload augmentée
|
||||
client_max_body_size 200M; # Permet uploads jusqu'à 200MB
|
||||
|
||||
server {
|
||||
listen ${NGINX_PORT};
|
||||
|
||||
# ✅ AJOUT: Timeouts pour gros fichiers
|
||||
client_body_timeout 60s;
|
||||
client_header_timeout 60s;
|
||||
keepalive_timeout 60s;
|
||||
send_timeout 60s;
|
||||
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8000/;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# ✅ AJOUT: Timeouts pour uploads
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
proxy_send_timeout 300s;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8501/;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# ✅ AJOUT: Timeouts pour Streamlit uploads
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
proxy_send_timeout 300s;
|
||||
}
|
||||
|
||||
location /health {
|
||||
return 200 'OK';
|
||||
add_header Content-Type text/plain;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# This reverse proxy configuration aims to make calls to different services running under different ports (Streamlit :8501 and FastAPI :8000) by calling only one port : the nginx one (configurable via NGINX_PORT)
|
||||
# The NGINX_PORT has to be opened (Dockerfile) and used by app.py (streamlit) in order to make right calls.
|
||||
worker_processes 1;
|
||||
|
||||
events { worker_connections 1024; }
|
||||
|
||||
http {
|
||||
# ✅ AJOUT: Limite d'upload augmentée
|
||||
client_max_body_size 200M; # Permet uploads jusqu'à 200MB
|
||||
|
||||
server {
|
||||
listen ${NGINX_PORT};
|
||||
|
||||
# ✅ AJOUT: Timeouts pour gros fichiers
|
||||
client_body_timeout 60s;
|
||||
client_header_timeout 60s;
|
||||
keepalive_timeout 60s;
|
||||
send_timeout 60s;
|
||||
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8000/;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# ✅ AJOUT: Timeouts pour uploads
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
proxy_send_timeout 300s;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8501/;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# ✅ AJOUT: Timeouts pour Streamlit uploads
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
proxy_send_timeout 300s;
|
||||
}
|
||||
|
||||
location /health {
|
||||
return 200 'OK';
|
||||
add_header Content-Type text/plain;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
104
start.sh
104
start.sh
|
|
@ -1,52 +1,52 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Set default port si non fourni
|
||||
export NGINX_PORT=${NGINX_PORT:-8080}
|
||||
export MULTISEG_API_BASE_URL=${MULTISEG_API_BASE_URL:-http://localhost:$NGINX_PORT/api}
|
||||
|
||||
echo "=== Multi-Segmentation API Docker Startup ==="
|
||||
echo "NGINX_PORT: $NGINX_PORT"
|
||||
echo "API_BASE_URL: $MULTISEG_API_BASE_URL"
|
||||
|
||||
# Substitute environment variables dans nginx config
|
||||
envsubst '${NGINX_PORT}' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
|
||||
|
||||
# S'assurer que les répertoires nginx sont accessibles
|
||||
mkdir -p /var/cache/nginx /var/run/nginx /var/log/nginx
|
||||
chown -R www-data:www-data /var/cache/nginx /var/run/nginx /var/log/nginx
|
||||
|
||||
# Créer le dossier uploads temporaire
|
||||
mkdir -p /tmp/uploads
|
||||
|
||||
echo "Starting FastAPI server..."
|
||||
uvicorn app.main:app --host 0.0.0.0 --port 8000 --loop asyncio &
|
||||
|
||||
echo "Starting Streamlit app..."
|
||||
streamlit run app/streamlit_app.py \
|
||||
--server.port 8501 \
|
||||
--server.address 0.0.0.0 \
|
||||
--server.enableXsrfProtection false \
|
||||
--server.enableCORS false \
|
||||
--server.headless true \
|
||||
&
|
||||
|
||||
# Vérifier que FastAPI est prêt
|
||||
echo "Waiting for FastAPI to be ready..."
|
||||
until curl -s http://127.0.0.1:8000/health > /dev/null; do
|
||||
echo " FastAPI not ready yet, waiting..."
|
||||
sleep 2
|
||||
done
|
||||
echo "✅ FastAPI is ready!"
|
||||
|
||||
# Vérifier que Streamlit est prêt
|
||||
echo "Waiting for Streamlit to be ready..."
|
||||
until curl -s http://127.0.0.1:8501 > /dev/null; do
|
||||
echo " Streamlit not ready yet, waiting..."
|
||||
sleep 2
|
||||
done
|
||||
echo "✅ Streamlit is ready!"
|
||||
|
||||
echo "🚀 Launching NGINX reverse proxy on port $NGINX_PORT..."
|
||||
nginx -c /etc/nginx/nginx.conf -g 'daemon off;'
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Set default port si non fourni
|
||||
export NGINX_PORT=${NGINX_PORT:-8080}
|
||||
export MULTISEG_API_BASE_URL=${MULTISEG_API_BASE_URL:-http://localhost:$NGINX_PORT/api}
|
||||
|
||||
echo "=== Multi-Segmentation API Docker Startup ==="
|
||||
echo "NGINX_PORT: $NGINX_PORT"
|
||||
echo "API_BASE_URL: $MULTISEG_API_BASE_URL"
|
||||
|
||||
# Substitute environment variables dans nginx config
|
||||
envsubst '${NGINX_PORT}' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
|
||||
|
||||
# S'assurer que les répertoires nginx sont accessibles
|
||||
mkdir -p /var/cache/nginx /var/run/nginx /var/log/nginx
|
||||
chown -R www-data:www-data /var/cache/nginx /var/run/nginx /var/log/nginx
|
||||
|
||||
# Créer le dossier uploads temporaire
|
||||
mkdir -p /tmp/uploads
|
||||
|
||||
echo "Starting FastAPI server..."
|
||||
uvicorn app.main:app --host 0.0.0.0 --port 8000 --loop asyncio &
|
||||
|
||||
echo "Starting Streamlit app..."
|
||||
streamlit run app/streamlit_app.py \
|
||||
--server.port 8501 \
|
||||
--server.address 0.0.0.0 \
|
||||
--server.enableXsrfProtection false \
|
||||
--server.enableCORS false \
|
||||
--server.headless true \
|
||||
&
|
||||
|
||||
# Vérifier que FastAPI est prêt
|
||||
echo "Waiting for FastAPI to be ready..."
|
||||
until curl -s http://127.0.0.1:8000/health > /dev/null; do
|
||||
echo " FastAPI not ready yet, waiting..."
|
||||
sleep 2
|
||||
done
|
||||
echo "✅ FastAPI is ready!"
|
||||
|
||||
# Vérifier que Streamlit est prêt
|
||||
echo "Waiting for Streamlit to be ready..."
|
||||
until curl -s http://127.0.0.1:8501 > /dev/null; do
|
||||
echo " Streamlit not ready yet, waiting..."
|
||||
sleep 2
|
||||
done
|
||||
echo "✅ Streamlit is ready!"
|
||||
|
||||
echo "🚀 Launching NGINX reverse proxy on port $NGINX_PORT..."
|
||||
nginx -c /etc/nginx/nginx.conf -g 'daemon off;'
|
||||
|
|
|
|||
1314
utils/utils.py
1314
utils/utils.py
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue