← Retour au portfolio

STAGE DE RECHERCHE / IUCT-ONCOPOLE / 08–09/2026

Détection de lymphomes par intelligence artificielle

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 →

Le problème médical

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.

Un pipeline réutilisable

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 :

  • Découpage en patchs : segmentation du tissu par SAM2 via AtlasPatch, puis découpage en patchs de 256 × 256 pixels aux grossissements 20× et 5× (jusqu'à 6,9 millions de patchs par jeu).
  • Encodage : chaque patch est transformé en vecteur de features par un modèle de fondation, d'abord ResNet50 (images naturelles), puis des Vision Transformers spécialisés en pathologie : H-optimus-0, H-optimus-1 et Virchow2.
  • Découpage par patient : séparation entraînement / validation / test (60/20/20) avec StratifiedGroupKFold, pour qu'aucun patient ne se retrouve à la fois à l'entraînement et au test (pas de fuite de données).
  • Classification de la lame entière par un réseau de neurones (PyTorch, AdamW), avec arrêt anticipé et réduction adaptative du taux d'apprentissage.

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.

Du vote majoritaire au MIL à attention

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) :

ApprocheAccuracyAUC
Vote majoritaire · ResNet500,7460,866
Vote majoritaire · H-optimus-00,8640,956
MIL à attention · H-optimus-10,9320,977
MIL multi-échelle 20× + 5×0,9490,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.

Lymphome folliculaire : le double encodeur

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
Accuracy0,9460,9310,962
AUC0,9920,9840,989
Rappel lymphome0,9330,9600,973
Erreurs795
Lymphomes manqués (/75)532

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.

Des erreurs relues avec une pathologiste

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.

Pour aller plus loin

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