STAGE DE RECHERCHE / IUCT-ONCOPOLE / 08–09/2026
Stage de recherche au laboratoire d'anatomopathologie de l'Institut Universitaire du Cancer de Toulouse (IUCT-Oncopole). J'ai conçu de bout en bout un pipeline d'apprentissage profond qui analyse des lames microscopiques numérisées et distingue un lymphome folliculaire, un cancer des ganglions, d'une hyperplasie folliculaire bénigne, pour fournir au pathologiste un second avis dès la coloration standard.
GITHUB Code du projetPipeline Python / PyTorch complet Voir le code → PDF Rapport de stage47 pages · pipeline, MIL, double encodeur, résultats Télécharger →Au microscope, l'hyperplasie folliculaire (réaction bénigne du ganglion) et le lymphome folliculaire (cancer) présentent tous deux des follicules sur la coloration standard H&E. Les distinguer est difficile, même pour un pathologiste, en particulier pour les lymphomes de bas grade : il faut souvent des marquages complémentaires (immunohistochimie BCL2). L'objectif était de savoir si une IA peut trancher à partir de la seule lame H&E, en prenant la lame entière en entrée et en rendant un diagnostic avec un score de confiance.
Une lame numérisée (Whole Slide Image) pèse jusqu'à 4 Go : plus de 900 Go de données au total, traitées sur un portable RTX 5090 sous WSL2/Ubuntu. Le pipeline enchaîne quatre étapes, identiques quel que soit le jeu de données :
La méthode a d'abord été mise au point et validée sur un premier jeu (591 lames, lymphome de Hodgkin, plus facile à détecter), puis appliquée telle quelle au jeu cible (651 lames, lymphome folliculaire) : seules les données changent.
Première approche : classer chaque patch indépendamment puis faire voter les patchs. Simple, mais une tumeur concentrée dans quelques zones est noyée dans la masse de patchs sains. J'ai donc implémenté un MIL (Multiple Instance Learning) à attention : le réseau reçoit tous les patchs d'une lame, apprend à donner un poids à chacun selon son importance, et classe la moyenne pondérée. Une petite zone tumorale peut ainsi suffire à faire basculer la décision.
# MIL à attention : une seule décision pour toute la lame h = encoder(patches) # 1536 → 256, ReLU, Dropout a = softmax(attention(h), dim=0) # un poids par patch, somme = 1 z = (a * h).sum(dim=0) # vecteur de la lame logits = classifier(z) # FH / FL
Résultats sur le jeu de validation de la méthode (lymphome de Hodgkin, 118 lames de test) :
| Approche | Accuracy | AUC |
|---|---|---|
| Vote majoritaire · ResNet50 | 0,746 | 0,866 |
| Vote majoritaire · H-optimus-0 | 0,864 | 0,956 |
| MIL à attention · H-optimus-1 | 0,932 | 0,977 |
| MIL multi-échelle 20× + 5× | 0,949 | 0,984 |
Le passage au MIL fait surtout bondir le rappel des lymphomes : le vote majoritaire en ratait 12 sur 67, le MIL seulement 3. Les poids d'attention permettent en plus de tracer des cartes de chaleur qui montrent où le modèle regarde sur la lame, ce qui rend ses décisions interprétables pour le médecin.
En analysant les erreurs et les cartes d'attention, j'ai constaté que le modèle 20× (H-optimus-1) est le meilleur sur les biopsies, petits prélèvements où seul le détail cellulaire compte, alors que le modèle multi-échelle 20× + 5× (Virchow2) l'emporte sur les pièces chirurgicales, où l'architecture des follicules est lisible à faible grossissement. J'ai donc conçu un modèle à double encodeur qui choisit le réseau selon le type de prélèvement.
| Métrique (130 lames de test) | H-optimus-1 20× | Virchow2 20× + 5× | Double encodeur |
|---|---|---|---|
| Accuracy | 0,946 | 0,931 | 0,962 |
| AUC | 0,992 | 0,984 | 0,989 |
| Rappel lymphome | 0,933 | 0,960 | 0,973 |
| Erreurs | 7 | 9 | 5 |
| Lymphomes manqués (/75) | 5 | 3 | 2 |
Le double encodeur ne commet que 5 erreurs sur 130 lames et ne rate que 2 lymphomes sur 75. Ce score reste à confirmer par validation croisée, l'idée étant née de l'analyse d'un même ensemble de test.
J'ai présenté mes résultats au Dr Charlotte Syrykh, médecin anatomopathologiste, et examiné avec elle les lames mal classées. Les erreurs restantes sont toutes des cas cliniquement ambigus (maladie de Castleman, lymphomes de bas grade sur ganglion nécrosé). Sur l'une d'elles, mal classée par tous mes modèles, c'est en réalité le diagnostic de référence qui était erroné : le modèle avait raison.
Une analyse complémentaire montre que l'information utile est concentrée dans très peu de dimensions : avec 10 features sur 1536, une simple régression logistique atteint déjà une AUC de 0,945, et 100 features suffisent à égaler le vecteur complet. De quoi envisager des modèles plus légers. La suite logique serait une interface où le médecin dépose une lame et obtient un diagnostic avec son niveau de confiance. Ce travail s'inscrit dans la thèse de Stéphane Treillard sur la classification des lymphomes par IA.
Python / PyTorch / scikit-learn / OpenSlide / AtlasPatch / SAM2 / H-optimus / Virchow2 / h5py / Matplotlib
← Retour au portfolio