Pointer le dépôt vers l'organisation Forgejo openclassroom-ai.

This commit is contained in:
Grégoire Mureau 2026-09-09 23:41:00 +02:00
parent 86d1306196
commit 9fd8a6046b
2 changed files with 130 additions and 130 deletions

View file

@ -49,7 +49,7 @@ jobs:
run: | run: |
set -eu set -eu
REGISTRY="${GITHUB_SERVER_URL#https://}" REGISTRY="${GITHUB_SERVER_URL#https://}"
IMAGE="${REGISTRY}/grgmro/oc-p09-street-vision-poc" IMAGE="${REGISTRY}/openclassroom-ai/oc-p09-street-vision-poc"
SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)" SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)"
export DOCKER_BUILDKIT=0 export DOCKER_BUILDKIT=0
docker build \ docker build \
@ -73,7 +73,7 @@ jobs:
fi fi
echo "${DOCKER_HUB_TOKEN}" | docker login docker.io -u "${DOCKER_HUB_USER}" --password-stdin echo "${DOCKER_HUB_TOKEN}" | docker login docker.io -u "${DOCKER_HUB_USER}" --password-stdin
SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)" SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)"
SRC="${GITHUB_SERVER_URL#https://}/grgmro/oc-p09-street-vision-poc" SRC="${GITHUB_SERVER_URL#https://}/openclassroom-ai/oc-p09-street-vision-poc"
DST="docker.io/${DOCKER_HUB_USER}/street-vision-poc_api" DST="docker.io/${DOCKER_HUB_USER}/street-vision-poc_api"
docker tag "${SRC}:latest" "${DST}:latest" docker tag "${SRC}:latest" "${DST}:latest"
docker tag "${SRC}:latest" "${DST}:${SHORT_SHA}" docker tag "${SRC}:latest" "${DST}:${SHORT_SHA}"

256
README.MD
View file

@ -1,129 +1,129 @@
# Street Vision PoC - Segmentation Sémantique Urbaine # Street Vision PoC - Segmentation Sémantique Urbaine
**Source de vérité** : [Forgejo](https://git.gregoiremureau.com/grgmro/oc-p09-street-vision-poc) (auto-hébergé). **Source de vérité** : [Forgejo](https://git.gregoiremureau.com/openclassroom-ai/oc-p09-street-vision-poc) (auto-hébergé).
```bash ```bash
git clone https://git.gregoiremureau.com/grgmro/oc-p09-street-vision-poc.git git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p09-street-vision-poc.git
git clone https://git.gregoiremureau.com/grgmro/oc-p09-street-vision-poc.git git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p09-street-vision-poc.git
``` ```
Prod : https://api.gregoiremureau.com/ml/street-vision-poc/ Prod : https://api.gregoiremureau.com/ml/street-vision-poc/
Dataset : `./fetch-data.sh` (Cityscapes **hors** git). Dataset : `./fetch-data.sh` (Cityscapes **hors** git).
## 🎯 Description du Projet ## 🎯 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). **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). 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 ### 🔬 Contexte Technique
- **Dataset** : Cityscapes (2,975 images haute résolution annotées pixel-par-pixel) - **Dataset** : Cityscapes (2,975 images haute résolution annotées pixel-par-pixel)
- **Architectures comparées** : - **Architectures comparées** :
- **CNN traditionnel** : FPN + EfficientNet-B0/ResNet34 - **CNN traditionnel** : FPN + EfficientNet-B0/ResNet34
- **Vision Transformer** : SegFormer-B0/B1 - **Vision Transformer** : SegFormer-B0/B1
- **Résolutions d'évaluation** : 512×512 et 768×768 pixels - **Résolutions d'évaluation** : 512×512 et 768×768 pixels
- **Métrique principale** : Mean Intersection over Union (mIoU) - **Métrique principale** : Mean Intersection over Union (mIoU)
## 📊 Résultats Principaux ## 📊 Résultats Principaux
| **Modèle** | **mIoU** | **Paramètres** | **Taille** | **Performance** | | **Modèle** | **mIoU** | **Paramètres** | **Taille** | **Performance** |
|------------|----------|----------------|------------|-----------------| |------------|----------|----------------|------------|-----------------|
| **SegFormer-B1** | **79.98%** | 13.68M | 52MB | ⭐ **Meilleur** | | **SegFormer-B1** | **79.98%** | 13.68M | 52MB | ⭐ **Meilleur** |
| **FPN+ResNet34** | 79.22% | 23.16M | 88MB | 🔄 Baseline forte | | **FPN+ResNet34** | 79.22% | 23.16M | 88MB | 🔄 Baseline forte |
| **FPN+EfficientNet-B0** | 78.67% | 5.76M | 22MB | 💡 Compact | | **FPN+EfficientNet-B0** | 78.67% | 5.76M | 22MB | 💡 Compact |
| **SegFormer-B0** | 77.91% | 3.72M | 14MB | ⚡ Ultra-léger | | **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. **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 ### 🎯 Gains Significatifs par Classes Critiques
- **Human** : +1.78% IoU (sécurité critique) - **Human** : +1.78% IoU (sécurité critique)
- **Vehicle** : +1.05% IoU (obstacles mobiles) - **Vehicle** : +1.05% IoU (obstacles mobiles)
- **Object** : +0.56% IoU (signalétique urbaine) - **Object** : +0.56% IoU (signalétique urbaine)
## 🚀 Déploiement Rapide ## 🚀 Déploiement Rapide
### Docker Hub ### Docker Hub
L'application est containerisée et disponible sur Docker Hub : L'application est containerisée et disponible sur Docker Hub :
```bash ```bash
docker pull grgmdmn/street-vision-poc_api docker pull grgmdmn/street-vision-poc_api
# prod live : # prod live :
# https://api.gregoiremureau.com/ml/street-vision-poc/ # https://api.gregoiremureau.com/ml/street-vision-poc/
``` ```
### Configuration avec Docker Compose ### Configuration avec Docker Compose
1. Copiez le fichier d'exemple de configuration : 1. Copiez le fichier d'exemple de configuration :
```bash ```bash
cp docker-compose.yml.example docker-compose.yml cp docker-compose.yml.example docker-compose.yml
``` ```
2. Configurez les variables d'environnement dans `docker-compose.yml`. 2. Configurez les variables d'environnement dans `docker-compose.yml`.
3. Lancez l'application : 3. Lancez l'application :
```bash ```bash
docker-compose up -d docker-compose up -d
``` ```
4. Accédez à l'interface : `http://localhost:$(port)` 4. Accédez à l'interface : `http://localhost:$(port)`
## 🎮 Fonctionnalités de l'Interface ## 🎮 Fonctionnalités de l'Interface
### Dashboard Interactif ### Dashboard Interactif
- **Upload d'images** : Glisser-déposer d'images urbaines - **Upload d'images** : Glisser-déposer d'images urbaines
- **Double inférence** : Comparaison simultanée FPN vs SegFormer - **Double inférence** : Comparaison simultanée FPN vs SegFormer
- **Visualisation** : Masques de segmentation colorés par classe - **Visualisation** : Masques de segmentation colorés par classe
- **Métriques temps réel** : Temps d'inférence et scores de confiance - **Métriques temps réel** : Temps d'inférence et scores de confiance
- **Export** : Téléchargement des résultats de segmentation - **Export** : Téléchargement des résultats de segmentation
- **Accessibilité WCAG** : Interface conforme aux standards d'accessibilité - **Accessibilité WCAG** : Interface conforme aux standards d'accessibilité
### Analyse Exploratoire des Données ### Analyse Exploratoire des Données
- **Statistiques Cityscapes** : Distribution des classes, résolutions natives - **Statistiques Cityscapes** : Distribution des classes, résolutions natives
- **Graphiques interactifs** : Répartition pixel par méta-classe - **Graphiques interactifs** : Répartition pixel par méta-classe
- **Exemples annotés** : Visualisation échantillons du dataset - **Exemples annotés** : Visualisation échantillons du dataset
## 📈 Méthodologie d'Évaluation ## 📈 Méthodologie d'Évaluation
### Approche Comparative ### Approche Comparative
1. **Baseline CNN** : Réentraînement FPN+EfficientNet/ResNet aux résolutions supérieures 1. **Baseline CNN** : Réentraînement FPN+EfficientNet/ResNet aux résolutions supérieures
2. **Nouvelle approche** : Évaluation SegFormer avec attention globale 2. **Nouvelle approche** : Évaluation SegFormer avec attention globale
3. **Protocole rigoureux** : Validation croisée, métriques standardisées 3. **Protocole rigoureux** : Validation croisée, métriques standardisées
4. **Analyse par classe** : Performance détaillée sur 8 méta-classes urbaines 4. **Analyse par classe** : Performance détaillée sur 8 méta-classes urbaines
### Limites Identifiées ### Limites Identifiées
- **Résolution fixe** : Évaluation sans sliding window (vs protocole original) - **Résolution fixe** : Évaluation sans sliding window (vs protocole original)
- **Ressources limitées** : Tests uniquement sur SegFormer-B0/B1 - **Ressources limitées** : Tests uniquement sur SegFormer-B0/B1
- **Conditions contrôlées** : Dataset Cityscapes uniquement (météo favorable) - **Conditions contrôlées** : Dataset Cityscapes uniquement (météo favorable)
## 🔬 Insights Techniques ## 🔬 Insights Techniques
### Avantages SegFormer ### Avantages SegFormer
- **Attention globale** : Chaque pixel "voit" toute l'image simultanément - **Attention globale** : Chaque pixel "voit" toute l'image simultanément
- **Architecture plus légère** : Modèle compact avec moins de paramètres - **Architecture plus légère** : Modèle compact avec moins de paramètres
- **Robustesse contextuelle** : Meilleure gestion occlusions et objets complexes - **Robustesse contextuelle** : Meilleure gestion occlusions et objets complexes
- **Potentiel d'amélioration** : Versions B2-B5 promettraient des gains significatifs - **Potentiel d'amélioration** : Versions B2-B5 promettraient des gains significatifs
### Trade-offs Identifiés ### Trade-offs Identifiés
- **Vitesse CPU classique** : ~2× plus lent que FPN sur processeurs haute performance (Xeon, 9600X) - **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) - **Vitesse CPU économe** : 3× plus rapide sur processeurs économes en énergie (N100)
- **Optimisation GPU** : Architecture Transformer favorisée par accélération matérielle - **Optimisation GPU** : Architecture Transformer favorisée par accélération matérielle
## 📚 Références ## 📚 Références
- **Xie, E. et al.** (2021). *SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers*. NeurIPS 2021. - **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. - **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) - **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. **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.