Retour au projet

PathOS : gradation du cancer de la prostate à partir de lames entières (mémoire de Master)

Un système de recherche qui classe des lames de biopsie de prostate en classes ISUP, localise les motifs de Gleason et signale l'architecture cribriforme, derrière une interface de relecture où le pathologiste prend la décision. Prototype de recherche, pas un outil clinique.

Vue d'ensemble

PathOS est mon projet de fin d'études de Master à l'Université d'Alger 1 (Ingénierie des Systèmes Informatiques Intelligents, 2025-2026), noté 17,75/20. Il comprend trois modèles et une interface prototype. Le premier prédit le grade ISUP d'une lame entière par apprentissage à instances multiples sur des caractéristiques Virchow2 gelées. Le deuxième segmente les motifs de Gleason pixel par pixel. Le troisième détecte l'architecture cribriforme, un motif associé à un moins bon pronostic, dans les régions de Gleason 4. L'interface présente les trois comme des suggestions et laisse la décision au pathologiste.

Problème

Une image de lame entière est à l'échelle du gigapixel et ne porte qu'une seule étiquette au niveau de la lame : le modèle doit donc trouver les rares régions qui comptent sans annotations au niveau des patchs. Les patchs flous, pliés ou vides peuvent capter l'attention et fausser le grade. La gradation ISUP est ordinale, c'est pourquoi le travail utilise une perte ordinale et évalue avec le kappa pondéré quadratique plutôt qu'avec la simple exactitude.

Contexte

Un mémoire de Master à deux, rédigé avec Chawki Ahmed Ramzi Belhaddad et encadré par un directeur académique, avec l'accompagnement clinique d'un médecin co-encadrant du CHU Parnet. L'hôpital n'a pas encore de scanner de lames entières, aucune lame locale n'a donc été utilisée : chaque expérience s'appuie sur des jeux de données publics, et l'interface est un prototype construit autour d'eux.

Données

PANDA : 10 616 lames de biopsie publiques issues de deux centres (Radboud et Karolinska), étiquetées au niveau de la lame et regroupées par patient pour qu'aucun patient n'apparaisse à la fois à l'entraînement et à l'évaluation. SICAPv2 : 155 lames d'un hôpital de Valence, utilisées comme test externe pour la gradation et comme source des patchs cribriformes (4 494 patchs de Gleason 4 issus de 83 lames, environ 17 % cribriformes). CrowdGleason : 232 lames de test de Grenade, avec des grades de lame déduits des étiquettes de Gleason au niveau des patchs. La segmentation utilise les 5 060 lames de Radboud qui portent des masques au pixel près, réparties 80/20 par lame. Les deux jeux externes proviennent du même consortium de recherche espagnol, ce qui limite la portée de leur accord.

Mon rôle

Co-auteur du mémoire, avec Chawki Ahmed Ramzi Belhaddad. Le rapport présente les trois modèles et le prototype comme un seul projet conjoint et ne le répartit pas entre nous deux ; je le décris donc comme conjoint plutôt que de revendiquer une part.

Objectifs

  • Prédire le grade ISUP au niveau de la lame à partir d'une seule étiquette de lame, sans annotation de patchs
  • Montrer d'où vient un grade, et montrer où le modèle se trompe autant que là où il a raison
  • Localiser les motifs de Gleason au pixel près et signaler l'architecture cribriforme, le détail plus fin que recherche un pathologiste
  • Tester si le filtre d'artefacts aide, avec des intervalles de confiance plutôt qu'un seul meilleur essai
  • Envelopper les modèles dans un workflow où la décision humaine, sa justification et sa piste d'audit restent centrales

Décisions techniques

  • Lire les lames SVS/TIFF/NDPI avec OpenSlide, séparer le tissu par segmentation HSV-Otsu et le découper en patchs de 256 px conservés comme un registre de coordonnées plutôt que comme des dossiers de patchs sur disque
  • Encoder les patchs avec un modèle de fondation en pathologie gelé (Virchow2, 1280-d), avec une normalisation de coloration Macenko sur GPU ; HistoEncoder a été gardé comme témoin à une seule graine
  • Agréger avec TransMIL et entraîner avec la perte ordinale CORAL ; ABMIL a été évalué comme alternative plus légère
  • Évaluer sur un découpage fixe avec un ensemble de cinq graines et en validation croisée à cinq plis avec prédictions hors pli, et utiliser un bootstrap apparié pour chaque comparaison de variantes du filtre
  • Segmenter les motifs de Gleason avec un U-Net sur un encodeur ResNet-34 préentraîné, avec un échantillonnage par quotas pour compenser la rareté des patchs de Gleason 5
  • Détecter l'architecture cribriforme uniquement dans les patchs de Gleason 4, avec les pixels hors Gleason 4 peints en blanc avant l'extraction de caractéristiques, à l'aide de caractéristiques PhiKoN et d'une petite tête MLP
  • Garder la sortie de l'IA étiquetée comme suggestion dans l'interface, exiger une justification pour tout écart par rapport à elle, et le journaliser

Architecture

Lame brute -> segmentation du tissu avec OpenSlide et patchs de 256 px -> embeddings Virchow2 gelés -> filtre d'artefacts -> TransMIL avec perte CORAL -> grade ISUP au niveau de la lame et attention. Un U-Net segmente les motifs de Gleason au pixel près et CribriNet signale l'architecture cribriforme dans les régions de Gleason 4. Les trois sorties alimentent une interface de relecture où le pathologiste accepte, modifie ou rejette la suggestion et signe le rapport.

Pipeline de gradation de lames entières

une étiquette par lame gigapixel
RÉDUIREWSISVS / TIFF / NDPI~10⁹ pixelsOpenSlidelecteur de patchsHSV-Otsutissu vs fondfiltre d'artefactsvariance + médiane / MADécarte flou + plispatchsEMBEDDING · GELÉMacenkonormalisation GPUHistoEncoder384-d · témoinVirchow21280-d · principalTransMIL · CORALattention sur le sacsacgrade ISUP6 classes · QWKcarte d'attentionreprojetée sur la lamemontrée au relecteurattentionCONTEXTEMémoire de Master, avec Chawki Ahmed Ramzi Belhaddad · dépôt privéPANDA, VALIDATION CROISÉE 5 PLIS0,9227 QWK
Une lame représente des milliards de pixels pour un seul grade ISUP : le plus gros du travail consiste donc à décider quoi écarter. Un filtre d'artefacts (variance spatiale et test de norme médiane/MAD) retire les patchs flous, pliés ou de fond avant qu'ils ne diluent le sac, et le mémoire le teste avec des intervalles de confiance : avec Virchow2, il n'apporte aucun gain significatif. Les poids d'attention ressortent de l'autre côté, ce qui transforme un nombre en quelque chose qu'un pathologiste peut désigner du doigt.

Captures d'écran de l'étude de cas

8 vues
L'interface de relecture PathOS : la biopsie avec la superposition de Gleason issue du modèle de segmentation, et le panneau de suggestion. Le panneau précise que la sortie est une aide à la décision, jamais le diagnostic final, et signale quand le grade et la segmentation divergent.
La même lame avec la vue d'attention : chaque patch est coloré selon le poids que lui a donné le modèle de grade, pour que le relecteur voie d'où vient la suggestion.
La liste de travail, avec des lames de test. Un dossier reste en attente de relecture jusqu'à ce qu'un pathologiste le signe ; la suggestion ne clôt jamais un dossier toute seule.
La plateforme autour des modèles : interface web et API, workflows durables d'import, de prétraitement, d'inférence et d'agrégation, un worker d'inférence Python, et le stockage des lames et des résultats. Les libellés sont en français, comme dans le mémoire.
Jeu de test fixe PANDA (1 061 lames), 0,9134 QWK. La plupart des erreurs tombent entre grades adjacents, surtout ISUP 1 et 2. Les libellés des axes sont en français, comme dans le mémoire.
L'attention sur trois biopsies de test : deux grades corrects (ISUP 3 et 4) et une erreur de grade adjacent (ISUP 1 réel, 2 prédit), conservée parce que les échecs font partie de la preuve.
Segmentation de Gleason face aux masques du pathologue : une région Gleason 3 correcte, une erreur de grade adjacent, et un foyer Gleason 5 prédit en 4, la classe sur laquelle toutes les variantes ont buté.
Le filtre d'artefacts sur les embeddings Virchow2 : patchs signalés pour une faible variance spatiale et une norme atypique. Il en signale environ 0,5 %, et le mémoire constate qu'il n'apporte aucun gain significatif avec Virchow2.

Fonctionnalités clés

  • Visionneuse de lames avec superpositions de Gleason et d'attention et panneau de suggestion avec probabilités par classe
  • Panneau de décision : accepter, modifier ou rejeter, avec une justification obligatoire et une piste d'audit
  • Rapport structuré par dossier, modifiable avant la signature du pathologiste
  • Liste de travail et import par lots de lames, avec des workflows durables pour le prétraitement et l'inférence

Défis

  • Étiquettes bruitées : les étiquettes d'entraînement de PANDA proviennent de comptes rendus cliniques courants, le plafond est donc la variabilité inter-pathologistes de la gradation de Gleason elle-même
  • Gleason 5 : le motif est rare (moins de 1 % des patchs), morphologiquement varié et gradé de façon incohérente selon les pathologistes. Rien de ce qui a été essayé ne l'a fait passer au-delà d'environ 0,58 de Dice
  • Détection cribriforme : peu d'exemples positifs, des étiquettes au niveau du patch alors que la structure peut être coupée par le bord du patch, et un patch seul offre un contexte limité
  • Un résultat négatif à rapporter : le filtre d'artefacts, l'idée autour de laquelle la première partie du travail a été construite, n'aide pas avec Virchow2, et le mémoire le dit

Tableau de résultats

Gradation ISUP au niveau de la lame, kappa pondéré quadratique, modèle entraîné sur PANDA avec le filtre robuste complet. SICAPv2 et CrowdGleason sont des jeux externes sans réentraînement ; le chiffre CrowdGleason correspond à l'ensemble à cinq plis avec masques seuls (0,8080 avec le filtre complet).
ÉvaluationLamesQWK
PANDA, validation croisée à cinq plis (hors pli)10 6160,9227 ± 0,0046
PANDA, jeu de test fixe (ensemble de cinq graines)1 0610,9134
SICAPv2, externe, sans réentraînement1550,8772
CrowdGleason, externe, sans réentraînement2320,8109

Résultats

  • Au seuil ISUP 2, qui sépare la surveillance active du traitement, le modèle sur découpage fixe atteint 92,6 % de sensibilité (478/516) et 94,5 % de spécificité (515/545) ; la plupart des faux négatifs sont des lames ISUP 2 prédites en 1
  • La segmentation de Gleason atteint 0,753 de Dice moyen et 0,706 de Dice équilibré clinique sur 5 060 lames. Le passage d'un encodeur entraîné de zéro à un ResNet-34 préentraîné et à l'ensemble complet des lames a été le plus grand gain ; une variante multi-échelle était moins bonne et est rapportée comme résultat négatif
  • La détection cribriforme atteint 0,904 d'AUC et 0,661 de F1 avec la tête MLP retenue. Un SVM sur les mêmes caractéristiques a obtenu un peu mieux (0,918 d'AUC, 0,662 de F1) ; le MLP a été gardé parce qu'il produit une probabilité qui alimente directement les cartes de chaleur
  • Le filtre d'artefacts n'apporte aucun gain significatif : tous les intervalles bootstrap sur PANDA et CrowdGleason incluent zéro. Le mémoire l'attribue aux register tokens de Virchow2 et au fait que le filtre ne signale qu'environ 0,5 % des patchs, sous les 20 % d'abandon de patchs utilisés à l'entraînement
  • Le score à cinq plis sur PANDA se situe près des 0,916 QWK publiés pour H-ViT, bien que les protocoles diffèrent (validation croisée ici, test Kaggle officiel là-bas) ; la comparaison n'est donc qu'indicative

Limites

  • Prototype de recherche : aucune validation clinique, aucune prétention diagnostique, et ce n'est pas un dispositif médical
  • La validation croisée se fait au sein de PANDA, elle mesure donc la stabilité, pas la robustesse entre centres ; les jeux externes sont petits (155 et 232 lames) avec de larges intervalles de confiance, et tous deux viennent du même consortium espagnol
  • Les grades de lame de CrowdGleason sont déduits des étiquettes de patchs, ce qui ajoute une incertitude absente des autres jeux, et il ne contient presque aucun grade intermédiaire, si bien que son F1 macro est faible par construction
  • Un modèle entraîné avec CORAL et sans filtre n'a pas été lancé sur les mêmes cinq plis, donc le 0,9227 ne peut pas être attribué à la perte plutôt qu'au filtre
  • Les poids d'attention ne sont pas des explications causales ; des tokens à forte norme issus de régions sans tissu peuvent les attirer, donc les cartes de chaleur demandent une relecture d'expert avant que quiconque s'y fie
  • Pas encore d'étude avec des pathologistes, et l'interface n'a fonctionné que sur des lames publiques et de test

Ce que j'ai appris

  • Indiquer le protocole à côté de chaque chiffre : le même modèle fait 0,9134 sur un découpage et 0,9227 en validation croisée, et choisir le meilleur de sept essais isolés le surestimerait
  • Un résultat qui réfute sa propre hypothèse mérite d'être publié, mais seulement avec le mécanisme et les intervalles de confiance qui l'expliquent
  • En contexte clinique, c'est l'interface qui décide si un modèle est utilisable : l'étiquette de suggestion, la justification obligatoire et la piste d'audit comptent autant que le kappa

Améliorations futures

  • Validation sur des cohortes d'autres centres, scanners et colorations, puis une étude avec des pathologistes sur la qualité des décisions et la variabilité inter-observateurs
  • Plus d'exemples cribriformes et des étiquettes de patchs plus propres, puis une agrégation au niveau de la lame des patchs de Gleason 4 au lieu de les classer isolément
  • Des scores de confiance calibrés et des estimations d'incertitude avant tout usage clinique
  • Une comparaison multi-graines de Virchow2, HistoEncoder et d'autres encodeurs de pathologie, et un témoin CORAL sans filtre sur les mêmes cinq plis