Projet de classification d'images utilisant PyTorch pour distinguer les feuilles lisses des feuilles dentées.
- Accuracy: ~88%
- Precision: ~92%
- Recall: ~83%
- F1-Score: ~87%
- AUC-ROC: ~95%
Ce projet implémente un CNN (Convolutional Neural Network) pour classifier automatiquement des images de feuilles en deux catégories:
- 🌿 Feuilles Lisses : Bords réguliers et arrondis
- 🍁 Feuilles Dentées : Bords dentelés et irréguliers
Feuilles-Segementation/
├── data/
│ └── feuilles_plantes/ # Dataset (dente/ et lisse/)
├── src/
│ ├── __init__.py
│ ├── data.py # Gestion des données
│ ├── model.py # Architecture CNN
│ ├── train.py # Entraînement
│ ├── evaluate.py # Évaluation et métriques
│ └── predict.py # Prédictions
├── scripts/
│ ├── train_model.py # Script d'entraînement
│ └── evaluate_model.py # Script d'évaluation
├── web_app/
│ └── app.py # Application Streamlit
├── models/
│ └── best_model.pth # Modèle entraîné (généré)
├── results/
│ ├── metrics.json # Métriques (généré)
│ ├── confusion_matrix.png # Visualisations (générées)
│ ├── roc_curve.png
│ └── precision_recall.png
├── notebooks/
│ └── TP_Etudiants_Classification_Feuille.ipynb
├── requirements.txt
└── README.md
Les données ne sont PAS incluses dans ce repository !
Le dataset est hébergé sur Google Drive (trop volumineux pour GitHub)
🔗 CLIQUEZ ICI POUR TÉLÉCHARGER LES DONNÉES
Après téléchargement, suivez ces étapes :
- Téléchargez le dossier complet depuis Google Drive
- Extrayez le fichier (si compressé)
- Placez le dossier
feuilles_plantesà la racine du projet
Structure attendue :
Feuilles-Segementation/
├── feuilles_plantes/ ⬅️ PLACEZ LE DOSSIER ICI
│ └── feuilles_plantes/
│ ├── dente/ (images de feuilles dentées)
│ └── lisse/ (images de feuilles lisses)
├── src/
├── scripts/
├── web_app/
└── README.md
Pour vérifier que le dataset est correctement installé :
# Le dossier doit exister
ls feuilles_plantes/feuilles_plantes/
# Vous devriez voir : dente/ et lisse/- Classes : 2 (dentée, lisse)
- Nombre d'images : ~6,900 images
- Format : Images RGB (JPG/PNG)
- Taille après extraction : ~500 MB
- Split automatique : 70% train, 15% val, 15% test (stratifié)
⚠️ Sans ces données, vous ne pourrez pas entraîner le modèle !
AVANT DE COMMENCER : Assurez-vous d'avoir téléchargé les données (voir section ci-dessus) !
- Python 3.8 ou supérieur
- pip
- Dataset depuis Google Drive (voir section précédente)
pip install -r requirements.txttorch>=2.0.0- Framework de deep learningtorchvision>=0.15.0- Vision computer avec PyTorchnumpy>=1.24.0- Calcul numériquematplotlib>=3.7.0- Visualisationsscikit-learn>=1.3.0- Métriques de performancestreamlit>=1.28.0- Application webPillow>=10.0.0- Traitement d'images
Pour entraîner le modèle depuis zéro:
python scripts/train_model.pyParamètres par défaut:
- Époques: 10
- Learning rate: 1e-3
- Batch size (train): 32
- Batch size (eval): 64
- Split: 70% train, 15% val, 15% test
Le modèle entraîné sera sauvegardé dans models/best_model.pth.
Pour évaluer le modèle sur l'ensemble de test:
python scripts/evaluate_model.pyGénère:
- Métriques complètes (JSON)
- Matrice de confusion
- Courbe ROC
- Courbe Precision-Recall
Les résultats sont sauvegardés dans le dossier results/.
Pour lancer l'interface web interactive:
streamlit run web_app/app.pyL'application permet de:
- Charger une image de feuille
- Obtenir une prédiction en temps réel
- Visualiser les probabilités par classe
- Afficher la confiance de la prédiction
Exemple de code pour faire une prédiction:
from src.model import load_model
from src.predict import predict_single_image
# Charger le modèle
model = load_model("models/best_model.pth")
classes = ['dente', 'lisse']
# Prédire
predicted_class, confidence, all_probas = predict_single_image(
model, "path/to/image.jpg", classes
)
print(f"Classe: {predicted_class}")
print(f"Confiance: {confidence:.2%}")
print(f"Probabilités: {all_probas}")Architecture CNN compacte composée de:
Total de paramètres: ~2.1M
- Source: Images de feuilles botaniques
- Classes: 2 (dentée, lisse)
- Format: Images RGB de tailles variables (redimensionnées à 128×128)
- Split: 70% train, 15% validation, 15% test (stratifié)
Entraînement:
- Redimensionnement: 128×128
- Augmentation: Flip horizontal aléatoire (p=0.5)
- Normalisation ImageNet
Validation/Test:
- Redimensionnement: 128×128
- Normalisation ImageNet
Si vous rencontrez des problèmes:
- Vérifiez que toutes les dépendances sont installées
- Assurez-vous que le dataset est dans le bon dossier
- Vérifiez les chemins dans les scripts
Pour signaler un bug, créez une issue sur GitHub mohamed.