Application d'imagerie médicale pour la fibrose pulmonaire
Application web d'intelligence artificielle pour le suivi de la fibrose pulmonaire, et segmentation 3D des poumons à partir de scanners
Introduction
Ce projet a été développé dans le cadre de la majeure IMAGE à l'EPITA et propose une solution d'intelligence artificielle pour accompagner les pneumologues dans le suivi de la fibrose pulmonaire, une maladie qui réduit progressivement la capacité respiratoire des patients.
Au lieu de faire des calculs manuels complexes, le médecin importe les scanners 3D de son patient sur la plateforme, et PulmoSight se charge de mesurer précisément le volume pulmonaire en 3D et d'estimer l'évolution de la capacité respiratoire sur un an grâce à des modèles prédictifs.
Le point de départ est un jeu de données médicales composé de scanners CT complets au format DICOM, où chaque patient est représenté par une série de coupes axiales des poumons :
Architecture logicielle
Pour transformer notre recherche algorithmique en un outil utilisable en clinique, nous avons mis en place une architecture logicielle basée sur des conteneurs Docker.
L'application est découpée en deux services distincts encapsulés dans des conteneurs Docker : un front-end dynamique en Next.js pour l'interface médecin, et un back-end en FastAPI (Python), afin de permettre au site de faire de gros calculs de reconstruction 3D.
Segmentation 3D des poumons
La première étape du traitement consiste à isoler les poumons du patient au milieu du scanner (qui contient aussi les os, le cœur ou la table d'examen).
Prétraitement des images
Avant toute analyse, les fichiers DICOM bruts sont convertis en unités Hounsfield (HU), une échelle standardisée qui exprime la densité des tissus (l'air étant à -1000 HU, l'eau à 0 HU). Un seuillage sur ces valeurs permet de ne garder que les zones correspondant à l'air pulmonaire :
Étapes de la segmentation
Notre programme applique ensuite une série d'opérations morphologiques pour extraire un masque 3D précis des poumons. L'image ci-dessous montre les 6 étapes successives du processus, de la coupe originale jusqu'au résultat final :
Ce masque permet d'extraire automatiquement deux indicateurs cruciaux : le volume pulmonaire total d'air et le pourcentage de tissus endommagés (fibrosés).
Prédiction de l'évolution respiratoire (Machine Learning)
Prédire la santé d'un patient nécessite non seulement de donner une tendance, mais aussi d'indiquer le niveau d'incertitude de cette prévision pour pouvoir guider un potentiel médecin en toute sécurité.
Nous avons entraîné un modèle de Machine Learning (XGBoost) qui croise les biomarqueurs extraits des scanners avec les données cliniques du patient (âge, historique, tabagisme). Notre modèle calcule des intervalles de confiance (à 80 % et 95 %) pour chaque semaine à venir :
Comparaison des modèles
Nous avons testé plusieurs algorithmes (XGBoost, Random Forest, SVR, Régression Linéaire, MLP) et mesuré deux métriques clés : l'erreur absolue moyenne (MAE) et la racine de l'erreur quadratique moyenne (RMSE). XGBoost s'est imposé comme le meilleur modèle, battant nettement la référence naïve :
Interface utilisateur
Tous ces calculs, bien que complexes, sont restitués de manière simple et intuitive sur un tableau de bord pensé pour les praticiens.
PulmoSight permet de centraliser le dossier du patient, et d'accéder facilement à la reconstruction 3D interactive des poumons (avec le volume exact en millilitres), à une jauge colorée indiquant la sévérité actuelle de la maladie (calculée selon les normes médicales GLI-2012), et à la courbe prédictive de la capacité respiratoire sur 52 semaines :
Score de maladie
Le score de maladie compare la capacité respiratoire prédite par notre modèle à la FVC optimale théorique (calculée depuis l'âge, la taille et le sexe du patient selon le standard GLI-2012). Une jauge graduée de 0 à 4 indique instantanément la sévérité :
Courbe prédictive
La courbe de prédiction affiche semaine par semaine la FVC estimée, accompagnée de son intervalle de confiance à 95 % et d'un seuil critique en rouge pour alerter le médecin :