Pointer le dépôt vers l'organisation Forgejo openclassroom-ai.
This commit is contained in:
parent
86d1306196
commit
9fd8a6046b
2 changed files with 130 additions and 130 deletions
4
.github/workflows/cd.yml
vendored
4
.github/workflows/cd.yml
vendored
|
|
@ -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
256
README.MD
|
|
@ -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.
|
||||||
Loading…
Add table
Reference in a new issue