Pointer le dépôt vers l'organisation Forgejo openclassroom-ai.
This commit is contained in:
parent
dd531ad3bb
commit
99e5907146
2 changed files with 291 additions and 291 deletions
4
.github/workflows/cd.yml
vendored
4
.github/workflows/cd.yml
vendored
|
|
@ -50,7 +50,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
set -eu
|
set -eu
|
||||||
REGISTRY="${GITHUB_SERVER_URL#https://}"
|
REGISTRY="${GITHUB_SERVER_URL#https://}"
|
||||||
IMAGE="${REGISTRY}/grgmro/oc-p08-street-vision"
|
IMAGE="${REGISTRY}/openclassroom-ai/oc-p08-street-vision"
|
||||||
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 \
|
||||||
|
|
@ -74,7 +74,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-p08-street-vision"
|
SRC="${GITHUB_SERVER_URL#https://}/openclassroom-ai/oc-p08-street-vision"
|
||||||
DST="docker.io/${DOCKER_HUB_USER}/street-vision_api"
|
DST="docker.io/${DOCKER_HUB_USER}/street-vision_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}"
|
||||||
|
|
|
||||||
578
README.MD
578
README.MD
|
|
@ -1,289 +1,289 @@
|
||||||
# 🚗 Segmentation Multi-Classes pour Véhicules Autonomes
|
# 🚗 Segmentation Multi-Classes pour Véhicules Autonomes
|
||||||
|
|
||||||
**Source de vérité** : [Forgejo](https://git.gregoiremureau.com/grgmro/oc-p08-street-vision) (auto-hébergé).
|
**Source de vérité** : [Forgejo](https://git.gregoiremureau.com/openclassroom-ai/oc-p08-street-vision) (auto-hébergé).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.gregoiremureau.com/grgmro/oc-p08-street-vision.git
|
git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p08-street-vision.git
|
||||||
git clone https://git.gregoiremureau.com/grgmro/oc-p08-street-vision.git
|
git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p08-street-vision.git
|
||||||
```
|
```
|
||||||
|
|
||||||
Prod : https://api.gregoiremureau.com/ml/street-vision/
|
Prod : https://api.gregoiremureau.com/ml/street-vision/
|
||||||
|
|
||||||
Dataset complet : `./fetch-data.sh` (Cityscapes **hors** git ; petit échantillon déjà dans `notebooks/content/data/`).
|
Dataset complet : `./fetch-data.sh` (Cityscapes **hors** git ; petit échantillon déjà dans `notebooks/content/data/`).
|
||||||
|
|
||||||
## 📋 Description du Projet
|
## 📋 Description du Projet
|
||||||
|
|
||||||
Ce projet développe un système de segmentation sémantique d'images de rue destiné aux véhicules autonomes. Il permet l'identification et la segmentation automatique de différents éléments urbains : véhicules, piétons, mobilier urbain, infrastructure routière, etc.
|
Ce projet développe un système de segmentation sémantique d'images de rue destiné aux véhicules autonomes. Il permet l'identification et la segmentation automatique de différents éléments urbains : véhicules, piétons, mobilier urbain, infrastructure routière, etc.
|
||||||
|
|
||||||
Le système s'inscrit dans une chaîne complète de vision par ordinateur embarquée pour l'automobile autonome, traitant les images en temps réel pour alimenter les systèmes de décision.
|
Le système s'inscrit dans une chaîne complète de vision par ordinateur embarquée pour l'automobile autonome, traitant les images en temps réel pour alimenter les systèmes de décision.
|
||||||
|
|
||||||
## 🗂️ Structure du Projet
|
## 🗂️ Structure du Projet
|
||||||
|
|
||||||
```
|
```
|
||||||
├── notebooks/
|
├── notebooks/
|
||||||
│ ├── p8_notebook.ipynb # Notebook principal d'entraînement des modèles
|
│ ├── p8_notebook.ipynb # Notebook principal d'entraînement des modèles
|
||||||
│ └── content/
|
│ └── content/
|
||||||
│ └── data/
|
│ └── data/
|
||||||
│ ├── new_images_to_predict/ # Images diverses pour tests d'inférence
|
│ ├── new_images_to_predict/ # Images diverses pour tests d'inférence
|
||||||
│ └── test_images_sample/ # Échantillon Cityscapes avec masques
|
│ └── test_images_sample/ # Échantillon Cityscapes avec masques
|
||||||
├── utils/
|
├── utils/
|
||||||
│ └── utils.py # Fonctions communes (prétraitement, chargement, inférence)
|
│ └── utils.py # Fonctions communes (prétraitement, chargement, inférence)
|
||||||
├── app/ # API et Interface Web
|
├── app/ # API et Interface Web
|
||||||
│ ├── main.py # API FastAPI avec routes de segmentation
|
│ ├── main.py # API FastAPI avec routes de segmentation
|
||||||
│ ├── streamlit_app.py # Interface web interactive
|
│ ├── streamlit_app.py # Interface web interactive
|
||||||
│ └── requirements.txt # Dépendances pour l'API et l'interface
|
│ └── requirements.txt # Dépendances pour l'API et l'interface
|
||||||
├── cityscapes_config.json # Configuration des classes Cityscapes
|
├── cityscapes_config.json # Configuration des classes Cityscapes
|
||||||
├── .env.example # Template de variables d'environnement
|
├── .env.example # Template de variables d'environnement
|
||||||
├── Dockerfile # Configuration Docker
|
├── Dockerfile # Configuration Docker
|
||||||
├── docker-compose.yml.example # Template Docker Compose
|
├── docker-compose.yml.example # Template Docker Compose
|
||||||
├── nginx.conf # Configuration reverse proxy
|
├── nginx.conf # Configuration reverse proxy
|
||||||
├── start.sh # Script de démarrage des services
|
├── start.sh # Script de démarrage des services
|
||||||
├── .dockerignore # Optimisation du build Docker
|
├── .dockerignore # Optimisation du build Docker
|
||||||
└── README.md
|
└── README.md
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note** : Les modèles entraînés sont stockés et versionnés via **MLFlow** avec artefacts sur **MinIO**, pas en local.
|
> **Note** : Les modèles entraînés sont stockés et versionnés via **MLFlow** avec artefacts sur **MinIO**, pas en local.
|
||||||
|
|
||||||
**État actuel du développement :**
|
**État actuel du développement :**
|
||||||
- ✅ **Entraînement des modèles** : Complet (notebook + MLFlow + MinIO)
|
- ✅ **Entraînement des modèles** : Complet (notebook + MLFlow + MinIO)
|
||||||
- ✅ **Fonctions d'inférence** : Développées et prêtes
|
- ✅ **Fonctions d'inférence** : Développées et prêtes
|
||||||
- ✅ **API FastAPI** : API complète avec endpoints de segmentation
|
- ✅ **API FastAPI** : API complète avec endpoints de segmentation
|
||||||
- ✅ **Interface Web** : Interface Streamlit pour upload et visualisation
|
- ✅ **Interface Web** : Interface Streamlit pour upload et visualisation
|
||||||
- ✅ **Déploiement** : Conteneurisation Docker complète + reverse proxy nginx
|
- ✅ **Déploiement** : Conteneurisation Docker complète + reverse proxy nginx
|
||||||
|
|
||||||
## 🏷️ Classes de Segmentation
|
## 🏷️ Classes de Segmentation
|
||||||
|
|
||||||
Le modèle identifie **8 catégories principales** :
|
Le modèle identifie **8 catégories principales** :
|
||||||
|
|
||||||
1. **Route** - Chaussée et surfaces roulantes
|
1. **Route** - Chaussée et surfaces roulantes
|
||||||
2. **Trottoir** - Zones piétonnes
|
2. **Trottoir** - Zones piétonnes
|
||||||
3. **Bâtiments** - Structures architecturales
|
3. **Bâtiments** - Structures architecturales
|
||||||
4. **Végétation** - Arbres, buissons, espaces verts
|
4. **Végétation** - Arbres, buissons, espaces verts
|
||||||
5. **Véhicules** - Voitures, camions, bus
|
5. **Véhicules** - Voitures, camions, bus
|
||||||
6. **Personnes** - Piétons, cyclistes
|
6. **Personnes** - Piétons, cyclistes
|
||||||
7. **Signalisation** - Panneaux, feux de circulation
|
7. **Signalisation** - Panneaux, feux de circulation
|
||||||
8. **Mobilier urbain** - Poteaux, barrières, abribus
|
8. **Mobilier urbain** - Poteaux, barrières, abribus
|
||||||
|
|
||||||
## 🧠 Architecture Technique
|
## 🧠 Architecture Technique
|
||||||
|
|
||||||
### Modèles Implémentés
|
### Modèles Implémentés
|
||||||
Utilisation de la bibliothèque **[segmentation_models](https://github.com/qubvel/segmentation_models)** de qubvel pour l'implémentation des architectures.
|
Utilisation de la bibliothèque **[segmentation_models](https://github.com/qubvel/segmentation_models)** de qubvel pour l'implémentation des architectures.
|
||||||
|
|
||||||
**Architectures principales :**
|
**Architectures principales :**
|
||||||
- **U-Net** : Architecture encoder-decoder classique
|
- **U-Net** : Architecture encoder-decoder classique
|
||||||
- **FPN** (Feature Pyramid Network) : Réseau à pyramide de caractéristiques
|
- **FPN** (Feature Pyramid Network) : Réseau à pyramide de caractéristiques
|
||||||
|
|
||||||
**Backbones testés :**
|
**Backbones testés :**
|
||||||
```python
|
```python
|
||||||
# Modèles avec backbones par défaut
|
# Modèles avec backbones par défaut
|
||||||
('U-Net', None) # Backbone U-Net intégré
|
('U-Net', None) # Backbone U-Net intégré
|
||||||
('FPN', None) # Backbone VGG16 par défaut
|
('FPN', None) # Backbone VGG16 par défaut
|
||||||
|
|
||||||
# Modèles avec backbones pré-entraînés (encodeurs gelés)
|
# Modèles avec backbones pré-entraînés (encodeurs gelés)
|
||||||
('U-Net', 'mobilenetv2')
|
('U-Net', 'mobilenetv2')
|
||||||
('U-Net', 'efficientnetb0')
|
('U-Net', 'efficientnetb0')
|
||||||
('FPN', 'mobilenetv2')
|
('FPN', 'mobilenetv2')
|
||||||
('FPN', 'efficientnetb0')
|
('FPN', 'efficientnetb0')
|
||||||
('FPN', 'resnet34')
|
('FPN', 'resnet34')
|
||||||
|
|
||||||
# Fine-tuning sélectif (encodeurs entraînables)
|
# Fine-tuning sélectif (encodeurs entraînables)
|
||||||
('U-Net', 'mobilenetv2')
|
('U-Net', 'mobilenetv2')
|
||||||
('FPN', 'efficientnetb0')
|
('FPN', 'efficientnetb0')
|
||||||
('FPN', 'resnet34')
|
('FPN', 'resnet34')
|
||||||
```
|
```
|
||||||
|
|
||||||
**Stratégies d'entraînement :**
|
**Stratégies d'entraînement :**
|
||||||
- **Encodeurs gelés** : Transfer learning avec features pré-entraînées figées
|
- **Encodeurs gelés** : Transfer learning avec features pré-entraînées figées
|
||||||
- **Fine-tuning** : Ajustement fin des encodeurs pré-entraînés
|
- **Fine-tuning** : Ajustement fin des encodeurs pré-entraînés
|
||||||
- **Entraînement from scratch** : Sans pré-entraînement (backbones par défaut)
|
- **Entraînement from scratch** : Sans pré-entraînement (backbones par défaut)
|
||||||
|
|
||||||
### Stack Technologique
|
### Stack Technologique
|
||||||
- **Framework** : Keras/TensorFlow
|
- **Framework** : Keras/TensorFlow
|
||||||
- **Architectures** : [segmentation_models](https://github.com/qubvel/segmentation_models) (qubvel)
|
- **Architectures** : [segmentation_models](https://github.com/qubvel/segmentation_models) (qubvel)
|
||||||
- **Gestion des expériences** : MLFlow
|
- **Gestion des expériences** : MLFlow
|
||||||
- **Stockage des artefacts** : MinIO (S3-compatible)
|
- **Stockage des artefacts** : MinIO (S3-compatible)
|
||||||
- **API** : FastAPI avec validation Pydantic
|
- **API** : FastAPI avec validation Pydantic
|
||||||
- **Interface** : Streamlit pour l'interaction utilisateur
|
- **Interface** : Streamlit pour l'interaction utilisateur
|
||||||
- **Reverse Proxy** : nginx pour routage API/Interface
|
- **Reverse Proxy** : nginx pour routage API/Interface
|
||||||
- **Déploiement** : Docker + NAS personnel *(solutions souveraines)*
|
- **Déploiement** : Docker + NAS personnel *(solutions souveraines)*
|
||||||
|
|
||||||
## 📊 Dataset
|
## 📊 Dataset
|
||||||
|
|
||||||
- **Source** : Cityscapes Dataset
|
- **Source** : Cityscapes Dataset
|
||||||
- **Organisation locale** :
|
- **Organisation locale** :
|
||||||
- `notebooks/content/data/test_images_sample/` : Échantillon avec masques de vérité pour tests d'inférence
|
- `notebooks/content/data/test_images_sample/` : Échantillon avec masques de vérité pour tests d'inférence
|
||||||
- `notebooks/content/data/new_images_to_predict/` : Images de test diverses pour validation
|
- `notebooks/content/data/new_images_to_predict/` : Images de test diverses pour validation
|
||||||
|
|
||||||
## 🚀 Installation et Configuration
|
## 🚀 Installation et Configuration
|
||||||
|
|
||||||
### Option 1: Déploiement Docker (Recommandé)
|
### Option 1: Déploiement Docker (Recommandé)
|
||||||
|
|
||||||
#### Configuration rapide
|
#### Configuration rapide
|
||||||
```bash
|
```bash
|
||||||
# Cloner le projet
|
# Cloner le projet
|
||||||
git clone https://git.gregoiremureau.com/grgmro/oc-p08-street-vision.git
|
git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p08-street-vision.git
|
||||||
cd oc-p08-street-vision
|
cd oc-p08-street-vision
|
||||||
|
|
||||||
# Copier et adapter la configuration
|
# Copier et adapter la configuration
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
cp docker-compose.yml.example docker-compose.yml
|
cp docker-compose.yml.example docker-compose.yml
|
||||||
|
|
||||||
# Éditer les variables d'environnement
|
# Éditer les variables d'environnement
|
||||||
nano .env
|
nano .env
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Variables d'environnement requises
|
#### Variables d'environnement requises
|
||||||
```bash
|
```bash
|
||||||
# Configuration du serveur
|
# Configuration du serveur
|
||||||
NGINX_PORT=8080
|
NGINX_PORT=8080
|
||||||
|
|
||||||
# Configuration MLflow
|
# Configuration MLflow
|
||||||
MLFLOW_TRACKING_URI=http://localhost:5000
|
MLFLOW_TRACKING_URI=http://localhost:5000
|
||||||
MLFLOW_S3_ENDPOINT_URL=http://localhost:9000
|
MLFLOW_S3_ENDPOINT_URL=http://localhost:9000
|
||||||
AWS_ACCESS_KEY_ID=your_access_key
|
AWS_ACCESS_KEY_ID=your_access_key
|
||||||
AWS_SECRET_ACCESS_KEY=your_secret_key
|
AWS_SECRET_ACCESS_KEY=your_secret_key
|
||||||
|
|
||||||
# URL de base de l'API (pour Streamlit)
|
# URL de base de l'API (pour Streamlit)
|
||||||
MULTISEG_API_BASE_URL=http://localhost:8080/api
|
MULTISEG_API_BASE_URL=http://localhost:8080/api
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Déploiement
|
#### Déploiement
|
||||||
```bash
|
```bash
|
||||||
# Construction et lancement
|
# Construction et lancement
|
||||||
docker-compose up --build
|
docker-compose up --build
|
||||||
|
|
||||||
# Ou en arrière-plan
|
# Ou en arrière-plan
|
||||||
docker-compose up -d --build
|
docker-compose up -d --build
|
||||||
|
|
||||||
# Accès à l'application
|
# Accès à l'application
|
||||||
# Interface web: http://localhost:8080
|
# Interface web: http://localhost:8080
|
||||||
# API docs: http://localhost:8080/api/docs
|
# API docs: http://localhost:8080/api/docs
|
||||||
# Health check: http://localhost:8080/health
|
# Health check: http://localhost:8080/health
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Test local sans docker-compose
|
#### Test local sans docker-compose
|
||||||
```bash
|
```bash
|
||||||
# Lancement avec port personnalisé
|
# Lancement avec port personnalisé
|
||||||
docker build -t multiseg-api .
|
docker build -t multiseg-api .
|
||||||
docker run -p 3000:3000 \
|
docker run -p 3000:3000 \
|
||||||
-e NGINX_PORT=3000 \
|
-e NGINX_PORT=3000 \
|
||||||
-e MLFLOW_TRACKING_URI=http://host.docker.internal:5000 \
|
-e MLFLOW_TRACKING_URI=http://host.docker.internal:5000 \
|
||||||
-e MULTISEG_API_BASE_URL=http://localhost:3000/api \
|
-e MULTISEG_API_BASE_URL=http://localhost:3000/api \
|
||||||
multiseg-api
|
multiseg-api
|
||||||
```
|
```
|
||||||
|
|
||||||
### Option 2: Installation Locale (Développement)
|
### Option 2: Installation Locale (Développement)
|
||||||
|
|
||||||
#### Pour l'expérimentation et l'entraînement
|
#### Pour l'expérimentation et l'entraînement
|
||||||
```bash
|
```bash
|
||||||
cd notebooks
|
cd notebooks
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Pour l'API uniquement
|
#### Pour l'API uniquement
|
||||||
```bash
|
```bash
|
||||||
cd app
|
cd app
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
|
||||||
# Lancement manuel des services
|
# Lancement manuel des services
|
||||||
# Terminal 1: FastAPI
|
# Terminal 1: FastAPI
|
||||||
uvicorn app.main:app --host 0.0.0.0 --port 8000
|
uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||||
|
|
||||||
# Terminal 2: Streamlit
|
# Terminal 2: Streamlit
|
||||||
streamlit run app/streamlit_app.py --server.port 8501
|
streamlit run app/streamlit_app.py --server.port 8501
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🌐 Utilisation de l'API
|
## 🌐 Utilisation de l'API
|
||||||
|
|
||||||
### Endpoints Principaux
|
### Endpoints Principaux
|
||||||
|
|
||||||
#### Segmentation d'image
|
#### Segmentation d'image
|
||||||
```bash
|
```bash
|
||||||
# Upload et segmentation via curl
|
# Upload et segmentation via curl
|
||||||
curl -X POST "http://localhost:8080/api/segment" \
|
curl -X POST "http://localhost:8080/api/segment" \
|
||||||
-F "file=@image.jpg" \
|
-F "file=@image.jpg" \
|
||||||
-F "model_name=unet_mobilenetv2" \
|
-F "model_name=unet_mobilenetv2" \
|
||||||
-F "confidence_threshold=0.5"
|
-F "confidence_threshold=0.5"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Informations sur les modèles
|
#### Informations sur les modèles
|
||||||
```bash
|
```bash
|
||||||
# Liste des modèles disponibles
|
# Liste des modèles disponibles
|
||||||
curl "http://localhost:8080/api/models"
|
curl "http://localhost:8080/api/models"
|
||||||
|
|
||||||
# Détails d'un modèle
|
# Détails d'un modèle
|
||||||
curl "http://localhost:8080/api/models/unet_mobilenetv2"
|
curl "http://localhost:8080/api/models/unet_mobilenetv2"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Monitoring
|
#### Monitoring
|
||||||
```bash
|
```bash
|
||||||
# Health check
|
# Health check
|
||||||
curl "http://localhost:8080/health"
|
curl "http://localhost:8080/health"
|
||||||
|
|
||||||
# Métriques API
|
# Métriques API
|
||||||
curl "http://localhost:8080/api/metrics"
|
curl "http://localhost:8080/api/metrics"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Interface Web
|
### Interface Web
|
||||||
|
|
||||||
L'interface Streamlit accessible sur `http://localhost:8080` permet :
|
L'interface Streamlit accessible sur `http://localhost:8080` permet :
|
||||||
- **Upload d'images** par glisser-déposer ou sélection
|
- **Upload d'images** par glisser-déposer ou sélection
|
||||||
- **Sélection du modèle** parmi les modèles disponibles
|
- **Sélection du modèle** parmi les modèles disponibles
|
||||||
- **Ajustement des paramètres** (seuil de confiance, etc.)
|
- **Ajustement des paramètres** (seuil de confiance, etc.)
|
||||||
- **Visualisation** des résultats avec overlay des segmentations
|
- **Visualisation** des résultats avec overlay des segmentations
|
||||||
- **Téléchargement** des masques de segmentation
|
- **Téléchargement** des masques de segmentation
|
||||||
|
|
||||||
## 🔧 Architecture de Déploiement
|
## 🔧 Architecture de Déploiement
|
||||||
|
|
||||||
### Structure des Services
|
### Structure des Services
|
||||||
```
|
```
|
||||||
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
||||||
│ nginx:8080 │────│ FastAPI:8000 │────│ MLFlow/MinIO │
|
│ nginx:8080 │────│ FastAPI:8000 │────│ MLFlow/MinIO │
|
||||||
│ (Reverse Proxy)│ │ (API Backend) │ │ (Model Storage) │
|
│ (Reverse Proxy)│ │ (API Backend) │ │ (Model Storage) │
|
||||||
└─────────┬───────┘ └──────────────────┘ └─────────────────┘
|
└─────────┬───────┘ └──────────────────┘ └─────────────────┘
|
||||||
│
|
│
|
||||||
┌─────────▼───────┐
|
┌─────────▼───────┐
|
||||||
│ Streamlit:8501 │
|
│ Streamlit:8501 │
|
||||||
│ (Web Interface) │
|
│ (Web Interface) │
|
||||||
└─────────────────┘
|
└─────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
### Volumes et Persistance
|
### Volumes et Persistance
|
||||||
- **Modèles** : Téléchargés depuis MLFlow/MinIO au démarrage
|
- **Modèles** : Téléchargés depuis MLFlow/MinIO au démarrage
|
||||||
- **Uploads temporaires** : Stockage en mémoire (pas de persistance)
|
- **Uploads temporaires** : Stockage en mémoire (pas de persistance)
|
||||||
- **Logs** : Accessibles via `docker-compose logs`
|
- **Logs** : Accessibles via `docker-compose logs`
|
||||||
|
|
||||||
### Monitoring et Logs
|
### Monitoring et Logs
|
||||||
```bash
|
```bash
|
||||||
# Logs en temps réel
|
# Logs en temps réel
|
||||||
docker-compose logs -f
|
docker-compose logs -f
|
||||||
|
|
||||||
# Logs d'un service spécifique
|
# Logs d'un service spécifique
|
||||||
docker-compose logs -f multiseg-api
|
docker-compose logs -f multiseg-api
|
||||||
|
|
||||||
# Métriques de performance
|
# Métriques de performance
|
||||||
curl http://localhost:8080/api/metrics
|
curl http://localhost:8080/api/metrics
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🔮 Améliorations Futures
|
## 🔮 Améliorations Futures
|
||||||
|
|
||||||
### Modèles et Performance
|
### Modèles et Performance
|
||||||
- **Prétraitement adaptatif** : Prétraitement spécifique à chaque backbone au lieu de la normalisation générique
|
- **Prétraitement adaptatif** : Prétraitement spécifique à chaque backbone au lieu de la normalisation générique
|
||||||
- **Optimisation temps réel** : Amélioration des performances d'inférence pour déploiement embarqué
|
- **Optimisation temps réel** : Amélioration des performances d'inférence pour déploiement embarqué
|
||||||
- **Résolution d'entraînement améliorée** : L'API accepte toutes les résolutions d'images, mais l'entraînement a été effectué sur des images redimensionnées à 224x224. Un réentraînement sur des résolutions supérieures (512x512, 1024x1024) pourrait améliorer la précision en capturant plus de détails fins, au prix d'une augmentation des besoins en puissance de calcul
|
- **Résolution d'entraînement améliorée** : L'API accepte toutes les résolutions d'images, mais l'entraînement a été effectué sur des images redimensionnées à 224x224. Un réentraînement sur des résolutions supérieures (512x512, 1024x1024) pourrait améliorer la précision en capturant plus de détails fins, au prix d'une augmentation des besoins en puissance de calcul
|
||||||
- **Transfer learning ciblé** : Utilisation de backbones pré-entraînés sur Mapillary Vistas
|
- **Transfer learning ciblé** : Utilisation de backbones pré-entraînés sur Mapillary Vistas
|
||||||
|
|
||||||
### Infrastructure et Déploiement
|
### Infrastructure et Déploiement
|
||||||
- **Scaling horizontal** : Support Kubernetes pour déploiement multi-instances
|
- **Scaling horizontal** : Support Kubernetes pour déploiement multi-instances
|
||||||
- **Cache intelligent** : Mise en cache des prédictions pour images similaires
|
- **Cache intelligent** : Mise en cache des prédictions pour images similaires
|
||||||
- **API Gateway** : Intégration d'un gateway pour authentification et rate limiting
|
- **API Gateway** : Intégration d'un gateway pour authentification et rate limiting
|
||||||
- **Monitoring avancé** : Intégration Prometheus/Grafana pour métriques détaillées
|
- **Monitoring avancé** : Intégration Prometheus/Grafana pour métriques détaillées
|
||||||
|
|
||||||
### Données et Généralisation
|
### Données et Généralisation
|
||||||
- **Généralisation des conditions** : Extension au-delà des conditions urbaines de Cityscapes
|
- **Généralisation des conditions** : Extension au-delà des conditions urbaines de Cityscapes
|
||||||
- **Segmentation des personnes** : Amélioration de l'IoU via data augmentation (IA générative)
|
- **Segmentation des personnes** : Amélioration de l'IoU via data augmentation (IA générative)
|
||||||
- **Datasets additionnels** : Intégration de datasets complémentaires pour robustesse
|
- **Datasets additionnels** : Intégration de datasets complémentaires pour robustesse
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Projet développé dans une approche de souveraineté technologique, privilégiant les solutions open-source et l'hébergement sur infrastructure personnelle.*
|
*Projet développé dans une approche de souveraineté technologique, privilégiant les solutions open-source et l'hébergement sur infrastructure personnelle.*
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue