Skip to content

ThomasMeb/Classifier_Images_Chiens

Repository files navigation

SantéVet - Dog Breed Classification

Python TensorFlow scikit-learn OpenCV

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.


Mission Context

Attribute Details
Client SantéVet
Mission Type Freelance - Machine Learning & Computer Vision
Period June - September 2024
Role ML Engineer

About SantéVet

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.

Business Value

  • 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

Objectifs & Résultats

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

Approche Technique

Pipeline de Traitement d'Images

  1. Redimensionnement : Normalisation à 224×224 pixels
  2. Prétraitement :
    • Auto-contraste (égalisation adaptative)
    • Égalisation d'histogramme
    • Débruitage Non-Local Means
  3. Normalisation : Mise à l'échelle [0, 1]

Architecture du Modèle

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

Pourquoi cette architecture ?

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

Structure du Projet

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

Installation

Prérequis

  • Python 3.9+
  • GPU recommandé pour l'entraînement (CUDA compatible)

Installation des dépendances

# 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.txt

Data Setup

Les 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.sh

Ou téléchargez manuellement depuis Stanford Dogs Dataset.


Utilisation

Prédiction sur une image

python src/predict.py --image chemin/vers/image.jpg

Exemple de sortie :

Les 3 races les plus probables sont:
- Golden Retriever (0.87)
- Labrador Retriever (0.08)
- Flat-Coated Retriever (0.03)

Demo Interactive (Streamlit)

Lancez l'application web interactive pour tester le classificateur :

streamlit run app/streamlit_app.py

L'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

Entraînement (optionnel)

Pour réentraîner le modèle avec vos propres données :

python src/train.py --data-dir chemin/vers/dataset --epochs 50

Dataset

Cette 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).


Technologies Utilisées

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

Compétences Démontrées

  • 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é

Auteur

Thomas Mebarki Data Scientist & Machine Learning Engineer


Licence

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published