Classification d'images radiographiques thoraciques (pneumonie / normal) par réseau de neurones convolutif, implémenté en PyTorch.
Projet académique, module Deep Learning.
Dataset Chest X-Ray Images (Pneumonia), disponible publiquement sur Kaggle : https://www.kaggle.com/datasets/paultimothymooney/chest-xray-pneumonia
Le dataset n'est pas versionné dans ce dépôt. Après téléchargement, le placer ainsi :
archive/chest_xray/
├── train/
│ ├── NORMAL/
│ └── PNEUMONIA/
├── val/
└── test/
DEEPLEARNING/
├── pneumonia-pytorch-LOCAL.ipynb # Notebook principal : entraînement et évaluation
├── pneumonia_detector_3.py # Script d'inférence
├── generate_html.py # Génération du rapport HTML
├── rapport_dl.html # Rapport
└── Pneumonia_Detection.pptx # Présentation
python -m venv venv
venv\Scripts\activate
pip install torch torchvision pandas matplotlib scikit-learnPuis exécuter pneumonia-pytorch-LOCAL.ipynb.
CNN de type VGG, 8 couches convolutives (3×3, padding 1) organisées en blocs
64 → 128 → 256 → 512 canaux, séparés par des MaxPool2d(2,2).
| Paramètre | Valeur |
|---|---|
| Époques | 15 |
| Batch size | 16 (train), 8 (validation / test) |
| Jeu | Accuracy | Loss |
|---|---|---|
| Entraînement (époque 15) | 98,18 % | 0,0502 |
| Test (624 images) | 87,50 % | 0,6550 |
Baseline classe majoritaire : 62,50 % : le jeu de test contient 390 images PNEUMONIA pour 234 NORMAL ; un modèle répondant systématiquement « pneumonie » atteindrait 62,5 %. Le modèle apporte donc un gain réel de 25 points, mais l'accuracy seule reste insuffisante pour juger un classifieur médical déséquilibré.
Ces résultats sont à lire avec trois réserves, assumées explicitement :
- Le jeu de validation ne contient que 16 images (8 NORMAL / 8 PNEUMONIA), limite connue du dataset Kaggle. L'accuracy de validation ne peut varier que par pas de 1/16, et reste figée à 0,875 de l'époque 9 à l'époque 15. Toute sélection de modèle fondée sur ce signal est peu fiable.
- Écart entraînement/test de ~11 points (98,2 % contre 87,5 %) : surapprentissage net, non corrigé ici.
- Accuracy seule : en classification médicale déséquilibrée, le rappel sur la classe PNEUMONIA (patients malades manqués) et la précision sur NORMAL sont les métriques décisives. Matrice de confusion, précision, rappel et F1 restent à calculer.
| Split | NORMAL | PNEUMONIA | Total |
|---|---|---|---|
| train | 1 341 | 3 875 | 5 216 |
| val | 8 | 8 | 16 |
| test | 234 | 390 | 624 |
Les poids entraînés (Pneumonia_model.pt, 1.5 GB) ne sont pas versionnés, ils
dépassent la limite de 100 MB par fichier de GitHub. Le modèle se régénère en
exécutant le notebook.
Amjad AAYD