HANOUZ Akram, JOUVIN Jules, JALAL Zakaria
DIA3
DISCLAIMER
This README was crafted with AI assistance.
Some LLM tools was used as an assistant to write some of the functions throughout the project.The LLM tools used are: Raptor mini, GPT-5.1 Codex, GPT-5.2, GPT-5.2 Codex
Every text and code generated by those tools has been verified and reviewed by HANOUZ Akram, JOUVIN Jules and JALAL Zakaria
Table of Contents
Les poids des différents modèles utilisés peuvent être retrouvés sur le drive suivant:
https://drive.google.com/drive/folders/1-gEu2oPO9F5EmUfNcMH-tjc8vzzKkHRx
Placez ce dossier weights dans la racine du projet.
Les datasets utilisés pour l'entrtraînement peuvent être retrouvé aux liens suivants (ils ne sont pas nécessaire pour lancer l'application):
- FoR Dataset (https://www.kaggle.com) (licence LGPLv3)
- CheXpert-v1.0-small (https://www.kaggle.com) (licence CC0 1.0)
Si vous souhaitez les spectogrames sous formes d'images, exécutez les 3 premières cellules du notebook training_models.ipynb
Toute les informations sur comment le dataset a été formé sont décrites sur le lien.
Créer un environement python virtuel (recommandé) et activez le:
python -m venv .venv
. .\.venv\Scripts\activate Intaller requirements.txt.
pip install -r requirements.txtInstaller torch. Choississez la version de CUDA compatible avec votre GPU. L'example ci-dessous utilise la 12.9.
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu129Puis depuis la racine du repo :
py -m streamlit run app.pyPré‑requis : Les poids doivent exister dans ./weights/ (les clés sont définies dans project/app.py).
Pré‑requis (LLM optionnel) : voir section LLM explanation (Ollama).
Ce repo contient un notebook d’entraînement (project/training_models.ipynb) et une app Streamlit project/app.py.
./weights/: poids des modèles PyTorch exportés (*.pt)../app.py: UI Streamlit./training_models.ipynb: entraînement des modèles (PyTorch) et sauvegarde des poids.
- Charge les modèles torchvision:
- VGG16/ResNet50/MobileNetV2 pour audio.
- AlexNet/DenseNet121 pour X‑ray.
- Restaure les poids depuis
./weights/*.pt. - Prédiction binaire via logit +
sigmoid.
- Audio
.wav→ image (mel‑spectrogram) → modèle image. - X‑ray (
png/jpg/jpeg) → modèle image.
- Audio : génère le spectrogramme comme dans le repo de référence (matplotlib → PNG → reload) pour obtenir un rendu visuel plus proche.
- X‑ray : conversion en grayscale puis RGB + normalisation ImageNet (voir
./training_models.ipynb).
- Grad‑CAM (pytorch‑grad‑cam) : couche cible adaptée pour X‑ray (ReLU final) et mode debug optionnel.
- LIME (lime‑image) : segmentation superpixels + perturbations.
- SHAP (masker image + superpixels) : affichage rouge/vert (positif/négatif).
- Rouge : régions qui poussent la prédiction vers la classe expliquée (contribution positive).
- Vert : régions qui la tirent dans l’autre sens (contribution négative).
La liste des XAI est definie par extension de fichier dans ./xai_config.py (ex: .png, .wav).
Une explication textuelle optionnelle peut être générée via Ollama (modèle local par défaut: gpt-oss:20b).
- Aucune image/audio n'est envoyé au LLM : l'explication est basée sur les probabilités prédites et des résumés numériques légers dérivés de Grad-CAM/LIME/SHAP.
- Aucun outil externe n'est appelé et aucune image/audio n'est transmise au modèle. Vous pouvez donc utiliser n'importe quel modèle local compatible avec Ollama (il n'est pas nécessaire de choisir un modèle « tool-enabled »).
Pré‑requis :
- Installer Ollama et démarrer le serveur local (par défaut
http://localhost:11434).ollama serve
- Télécharger le modèle que vous souhaitez utilisez. Exemple avec le modèle pas défaut :
ollama pull gpt-oss:20b
Utilisation dans l'app :
- Dans la sidebar : cocher Enable Ollama explanation et configurer
host+model. - Onglet Result → expander LLM explanation (Ollama) → bouton Generate.
- Des résumés textuelles des XAI sont optionnellement utilisés pour générer la réponse du LLM. Si vous les souhaitez, faites bien attention qu'ils ont fini d'être généré dans la section Compare.
Note technique : l'intégration Ollama est encapsulée dans ollama_llm.py.
Si vous voulez rentrainer les modèles, ouvrez et exécutez project/training_models.ipynb.
Les modèles sont sauvegardés dans ./weights/ et ensuite chargés par ./app.py.
- Les méthodes XAI peuvent donner des résultats différents (Grad‑CAM vs LIME vs SHAP) car elles n’expliquent pas exactement la même chose (gradients vs perturbations vs contributions moyennes).
- Pour Grad‑CAM X‑ray, une carte “vide” vient souvent d’une couche cible inadaptée (activations négatives + ReLU interne) :
project/app.pycible donc une couche ReLU proche de la fin du backbone.