Dans le cadre du module Info 907 – Reconnaissance des formes et analyse d’images et de mon cursus en Master 2 Informatique (IA) à l’Université de Reims Champagne Ardenne, ce projet universitaire avait pour objectif de concevoir et d’expérimenter une application de classification d’images médicales, à partir d’images issues de l’imagerie médicale.
L’étude s’inscrit dans un contexte de vision par ordinateur, une branche de l’intelligence artificielle qui vise à permettre à une machine de comprendre et d’analyser des images, de la même manière qu’un humain interprète une scène visuelle.
Le cœur du projet repose sur l’utilisation du Vision Transformer (ViT), un modèle récent de deep learning, et sur l’évaluation de l’impact d’un pré-traitement par diffusion anisotrope, une technique de traitement d’image destinée à améliorer la qualité des données avant leur analyse par un modèle d’apprentissage automatique.
Contexte et objectifs du projet
L’imagerie médicale (IRM, échographie, scanner…) génère des images complexes, souvent bruitées, avec des contrastes variables et des structures difficiles à distinguer. Contrairement aux images classiques (photos, objets du quotidien), les images médicales présentent plusieurs défis :
- Présence de bruit (artefacts visuels),
- Contours parfois flous,
- Faible contraste entre tissus,
- Importance critique de la précision (erreur médicale possible).
L’objectif du projet était multiple :
- Comprendre les principes fondamentaux du deep learning appliqué à l’image,
- Etudier le fonctionnement d’un Vision Transformer,
- Expérimenter un pré-traitement avancé des images,
- Comparer les performances du modèle avec et sans diffusion anisotrope,
- Développer une application complète et reproductible.
Vision Transformer : définition et principes de base
Le Vision Transformer (ViT) est un modèle de deep learning dérivé des Transformers, des architectures initialement conçues pour le traitement du langage naturel (NLP), comme la traduction automatique ou l’analyse de texte.
Traditionnellement, les tâches de vision par ordinateur reposaient sur les réseaux de neurones convolutionnels (CNN), spécialisés dans l’analyse locale des images (zones proches les unes des autres).
ViT adopte une approche différente :
Il traite une image comme une séquence, de la même manière qu’une phrase est traitée comme une suite de mots.
Découpage de l’image en patchs
Plutôt que de traiter l’image entière d’un seul bloc, ViT commence par la découper en patchs.
Un patch est un petit carré de l’image (par exemple 16×16 pixels).
Chaque patch est ensuite :
- Aplati (transformé en vecteur),
- Projeté dans un espace numérique via une couche linéaire.
Ces vecteurs deviennent l’équivalent des mots dans une phrase.
Le mécanisme d’attention : cœur du Vision Transformer
L’auto-attention est un mécanisme qui permet à un modèle de déterminer quelles parties de l’entrée sont les plus importantes par rapport aux autres.
Dans ViT, cela signifie que le modèle apprend à :
- identifier quels patchs sont importants,
- comprendre les relations globales dans l’image,
- se concentrer sur les zones pertinentes (par exemple une tumeur).
Le mécanisme repose sur trois éléments :
- Query (Q) : ce que l’on cherche,
- Key (K) : ce que chaque patch représente,
- Value (V) : l’information associée à chaque patch.
Le calcul d’attention attribue un poids à chaque relation entre patchs.
Têtes d’attention multiples
Chaque couche du transformeur contient plusieurs têtes d’attention.
Chaque tête analyse l’image sous un angle différent :
- Contours,
- Textures,
- Zones de contraste,
- Structures globales.
Cela permet au modèle de construire une compréhension riche et multi-niveaux de l’image.
Étude de la littérature scientifique
Avant toute implémentation, une analyse de travaux existants a été menée afin de situer le projet dans un contexte scientifique crédible.
Segmentation multi-agents en IRM cérébrale
L’article “A stochastic multi-agent approach for medical-image segmentation”
présente une méthode basée sur un système multi-agents.
Un système multi-agents est un ensemble d’entités autonomes qui coopèrent pour résoudre un problème complexe.
Dans ce cas :
- chaque agent analyse une partie de l’image,
- les agents coopèrent pour segmenter une tumeur,
- la méthode s’adapte aux variations d’intensité.
Cette étude met en évidence l’importance de stratégies adaptatives en imagerie médicale.
Deep learning et échographie pulmonaire
L’article “Deep Learning for Detection and Localization of B-Lines in Lung Ultrasound”
traite de la détection automatique des lignes B, des artefacts visuels caractéristiques de certaines pathologies pulmonaires.
Les auteurs montrent que :
- l’analyse de séquences d’images est plus performante que l’analyse image par image,
- les CNN restent très compétitifs,
- le Vision Transformer est prometteur mais encore perfectible.
Cette analyse a renforcé l’idée que le pré-traitement des images est crucial.
Choix et description du dataset
Le dataset utilisé est Brain MRI Images for Brain Tumor Detection, disponible sur Kaggle et Hugging Face.
Pourquoi ce dataset ?
- Images IRM de bonne qualité,
- Deux classes clairement définies :
- présence de tumeur,
- absence de tumeur,
- Dataset largement utilisé, facilitant la comparaison.
Même si le volume est limité (253 images), la qualité permet un apprentissage pertinent.
Préparation des données pour l’apprentissage
Avant l’entraînement, les données doivent être correctement organisées.
Un script Python a été développé pour :
- parcourir les dossiers d’images,
- séparer les données en jeu d’entraînement et jeu de test,
- appliquer un ratio 80 % / 20 %.
Le jeu d’entraînement sert à apprendre.
Le jeu de test sert à évaluer les performances.
Cette séparation est essentielle pour éviter le sur-apprentissage (overfitting).
Environnement de développement et contraintes mémoire
Le projet a été développé sous WSL 2 – Ubuntu 22.04, afin de bénéficier :
- d’un environnement Linux,
- d’une compatibilité optimale avec PyTorch,
- d’une meilleure gestion des dépendances.
Problème rencontré : saturation mémoire
Lors des premiers entraînements, le programme s’arrêtait brutalement avec le message : Killed
Cela signifie que le système a interrompu le processus par manque de mémoire.
L’outil htop a permis de visualiser en temps réel la consommation mémoire et de confirmer le diagnostic.
Ajustement de la mémoire WSL 2
Pour résoudre le problème, un fichier .wslconfig a été configuré afin d’augmenter la mémoire allouée :
[wsl2] memory=32GB
On redémarre ensuite la WSL 2.
wsl --shutdown
Installation et exécution de l’application
Le projet est hébergé sur GitLab et comprend :
- Le code source,
- Les scripts d’exécution,
- Le dataset.
L’installation se fait via un script unique :
sh run.sh
Ce script :
- Installe les dépendances,
- Configure l’environnement,
- Démarre l’application.
Les paramètres sont centralisés dans le fichier Settings.py.
Pré-traitement des images et diffusion anisotrope
Qu’est-ce que le pré-traitement ?
Le pré-traitement désigne l’ensemble des opérations appliquées aux images avant l’apprentissage du modèle, afin d’améliorer la qualité des données.
Cela inclut :
- Redimensionnement,
- Normalisation,
- Augmentation de données.
Définition de la diffusion anisotrope
La diffusion anisotrope est une technique de traitement d’image visant à :
- Réduire le bruit,
- Préserver les contours importants.
Contrairement à un flou classique, elle lisse les zones homogènes tout en conservant les bords.
Dans ce projet, une diffusion anisotrope de type Perona-Malik est utilisée via OpenCV.
Implémentation dans le projet
La classe CustomDataLoader :
- Charge les images,
- Applique les transformations,
- Applique la diffusion anisotrope si l’option est activée,
- Crée les DataLoaders PyTorch.
Un mode de test permet de comparer visuellement une image avant / après diffusion, validant ainsi l’intérêt du pré-traitement.
Bibliographie
LIENS INTERNET :
https://www.v7labs.com/blog/vision-transformer-guide#h2
Projet Kaggle – Brain Tumor Classification – https://www.kaggle.com/code/abdullahkhan098/brain-tumor-classification
Projet GitHub – Vision Transformer based Food Classification – https://github.com/kamrul-brur/Vision-Transformer-based-Food-Classification?fbclid=IwAR0DheMN84LhgOC1O4iOldA7m6QPxxcBy6iEz5NAy6QTMJIG5Xl1UzpitNw
Projet GitHub – Image Classification Vision Transformer – https://github.com/miladfa7/Image-Classification-Vision-Transformer/tree/master/notebooks?fbclid=IwAR1N6G4dYIW7PVz94GJTs2N4gm_uqzKlidmv2s32mlQEyvGNFpipxKFSHOE
Projet GitHub – Flower Image Classification using Vision Trasnformer – https://github.com/nikhilroxtomar/Flower-Image-Classification-using-Vision-Transformer/blob/main/vit.py?fbclid=IwAR0p6CD7I7i6iMgnE71xKkQhKMwWS5TH33yAhzFjIjlcpTw1Sg7XmjnKhVU
DOCUMENTS:
Mohamed T. Bennai, Zahia Guessoum, Smaine Mazouzi, Stéphane Cormier, Mohamed Mezghiche – A stochastic multi-agent approach for medical-image segmentation: Application to tumor segmentation in brain MR images
Ruben T. Lucassen , Mohammad H. Jafari , Nicole M. Duggan , Nick Jowkar, Alireza Mehrtash , Chanel Fischetti , Denie Bernier, Kira Prentice, Erik P. Duhaime , Mike Jin , Purang Abolmaesumi , Senior Member, IEEE, Friso G. Heslinga , Mitko Veta , Maria A. Duran-Mendicuti, Sarah Frisken , Paul B. Shyn , Alexandra J. Golby, Edward Boyer, William M. Wells, Andrew J. Goldsmith, and Tina Kapur , Member, IEEE- Deep Learning for Detection and Localization of B-Lines in Lung Ultrasound