Classification automatique de races de chiens à partir d'images utilisant le Deep Learning et le Transfer Learning.
Portfolio Notice : Ce repository est une version portfolio d'une mission freelance réalisée pour SantéVet entre juin et septembre 2024. Pour cette mission, le modèle a d'abord été développé et validé sur le Stanford Dogs Dataset (référence académique), puis fine-tuné sur les données propriétaires de SantéVet. Pour des raisons de confidentialité, seule la version entraînée sur données publiques est présentée ici.
| Attribute | Details |
|---|---|
| Client | SantéVet |
| Mission Type | Freelance - Machine Learning & Computer Vision |
| Period | June - September 2024 |
| Role | ML Engineer |
SantéVet est le leader français de l'assurance santé animale. L'entreprise souhaitait automatiser l'identification des races de chiens à partir des photos uploadées par les clients lors de la souscription. Les primes d'assurance variant selon la race (prédispositions génétiques à certaines pathologies), une identification précise est cruciale pour la tarification.
- Accélérer le processus de souscription
- Réduire les erreurs de tarification
- Améliorer l'expérience client (moins de formulaires)
- Identifier automatiquement les races à risque
| Métrique | Objectif | Résultat |
|---|---|---|
| Top-1 Accuracy | - | ~75% |
| Top-3 Accuracy | >85% | ~90% |
| Temps d'inférence | <500ms | < 500ms |
| Races supportées | 100+ | 120 |
- Redimensionnement : Normalisation à 224×224 pixels
- Prétraitement :
- Auto-contraste (égalisation adaptative)
- Égalisation d'histogramme
- Débruitage Non-Local Means
- Normalisation : Mise à l'échelle [0, 1]
Approche hybride combinant Transfer Learning et Machine Learning classique :
┌─────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE HYBRIDE │
└─────────────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ IMAGE │ │ ResNet50V2 │ │ SVM │
│ INPUT │ ──── │ (ImageNet) │ ──── │ (RBF Kernel)│
│ 224x224 │ │ Features │ │ 120 classes │
└──────────┘ └──────────────┘ └──────────────┘
│ │ │
▼ ▼ ▼
Preprocessing 2048-dim vector Probabilities
- Extracteur de features : ResNet50V2 pré-entraîné sur ImageNet
- Classificateur : SVM avec noyau RBF et probabilités calibrées
| Choix | Raison |
|---|---|
| ResNet50V2 | Excellent compromis performance/vitesse |
| Transfer Learning | Pas assez de données pour entraîner from scratch |
| SVM | Plus robuste que softmax avec peu de données par classe |
| Probabilités calibrées | Confiance fiable pour le business |
santevet-dog-classification/
├── README.md # Ce fichier
├── CONFIDENTIALITY.md # Note sur la confidentialité
├── app/
│ └── streamlit_app.py # Application web interactive
├── assets/ # Visuels pour la documentation
├── notebooks/
│ └── exploration.ipynb # Exploration et entraînement
├── src/
│ └── dog_breed_classifier/
│ ├── preprocessing.py # Fonctions de prétraitement
│ ├── model.py # Définition du modèle
│ ├── predict.py # Script de prédiction
│ └── train.py # Script d'entraînement
├── models/ # Modèles entraînés (non versionnés)
├── tests/ # Tests unitaires
├── requirements.txt # Dépendances Python
└── pyproject.toml # Configuration du package
- Python 3.9+
- GPU recommandé pour l'entraînement (CUDA compatible)
# Cloner le repository
git clone https://github.com/ThomasMeb/santevet-dog-classification.git
cd santevet-dog-classification
# Créer un environnement virtuel
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
.\venv\Scripts\activate # Windows
# Installer les dépendances
pip install -r requirements.txtLes données ne sont pas incluses dans le repository (~800MB). Téléchargez-les depuis Kaggle :
# 1. Configurer l'API Kaggle (une seule fois)
pip install kaggle
# Télécharger kaggle.json depuis https://www.kaggle.com/settings
mkdir -p ~/.kaggle && mv ~/Downloads/kaggle.json ~/.kaggle/
chmod 600 ~/.kaggle/kaggle.json
# 2. Télécharger les données (~800MB)
./scripts/download_data.shOu téléchargez manuellement depuis Stanford Dogs Dataset.
python src/predict.py --image chemin/vers/image.jpgExemple de sortie :
Les 3 races les plus probables sont:
- Golden Retriever (0.87)
- Labrador Retriever (0.08)
- Flat-Coated Retriever (0.03)
Lancez l'application web interactive pour tester le classificateur :
streamlit run app/streamlit_app.pyL'application propose :
- Upload d'images de chiens
- Prédictions top-3 avec scores de confiance
- Mode démo avec prédictions simulées (si modèles non disponibles)
- Interface utilisateur intuitive
Pour réentraîner le modèle avec vos propres données :
python src/train.py --data-dir chemin/vers/dataset --epochs 50Cette version portfolio utilise le Stanford Dogs Dataset :
- 20,580 images
- 120 races de chiens
- Images annotées avec bounding boxes
Le modèle a ensuite été fine-tuné sur les données propriétaires de SantéVet (non incluses).
| Catégorie | Technologies |
|---|---|
| Deep Learning | TensorFlow, Keras |
| Machine Learning | scikit-learn |
| Computer Vision | OpenCV, Pillow, scikit-image |
| Data Processing | NumPy, Pandas |
| Visualisation | Matplotlib, Seaborn |
| Web App | Streamlit |
- Deep Learning : Conception et optimisation de pipelines CNN
- Transfer Learning : Adaptation de modèles pré-entraînés (ResNet50V2)
- Computer Vision : Prétraitement avancé d'images
- MLOps : Pipeline de données, gestion des modèles
- Python : Code propre, modulaire et documenté
Thomas Mebarki Data Scientist & Machine Learning Engineer
- GitHub : @ThomasMeb
- LinkedIn : Thomas Mebarki
- Email : thomas.mebarki@protonmail.com
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Mission réalisée pour SantéVet entre juin et septembre 2024
Version portfolio entraînée sur Stanford Dogs Dataset