From 9fd8a6046b7e4ad4eba3606b1cf25ebfa87ad7f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Mureau?= Date: Wed, 9 Sep 2026 23:41:00 +0200 Subject: [PATCH] =?UTF-8?q?Pointer=20le=20d=C3=A9p=C3=B4t=20vers=20l'organ?= =?UTF-8?q?isation=20Forgejo=20openclassroom-ai.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cd.yml | 4 +- README.MD | 256 +++++++++++++++++++-------------------- 2 files changed, 130 insertions(+), 130 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 1b55b2e..ddb82c1 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -49,7 +49,7 @@ jobs: run: | set -eu 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)" export DOCKER_BUILDKIT=0 docker build \ @@ -73,7 +73,7 @@ jobs: fi echo "${DOCKER_HUB_TOKEN}" | docker login docker.io -u "${DOCKER_HUB_USER}" --password-stdin 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" docker tag "${SRC}:latest" "${DST}:latest" docker tag "${SRC}:latest" "${DST}:${SHORT_SHA}" diff --git a/README.MD b/README.MD index 4b3a2d9..cddde2d 100644 --- a/README.MD +++ b/README.MD @@ -1,129 +1,129 @@ -# 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é). - -```bash -git clone https://git.gregoiremureau.com/grgmro/oc-p09-street-vision-poc.git -git clone https://git.gregoiremureau.com/grgmro/oc-p09-street-vision-poc.git -``` - -Prod : https://api.gregoiremureau.com/ml/street-vision-poc/ - -Dataset : `./fetch-data.sh` (Cityscapes **hors** git). - -## 🎯 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 -# prod live : -# https://api.gregoiremureau.com/ml/street-vision-poc/ -``` - -### 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 + +**Source de vérité** : [Forgejo](https://git.gregoiremureau.com/openclassroom-ai/oc-p09-street-vision-poc) (auto-hébergé). + +```bash +git clone https://git.gregoiremureau.com/openclassroom-ai/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/ + +Dataset : `./fetch-data.sh` (Cityscapes **hors** git). + +## 🎯 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 +# prod live : +# https://api.gregoiremureau.com/ml/street-vision-poc/ +``` + +### 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. \ No newline at end of file