Morphométrie automatisée par IA et traitement d'images
Mon module du projet BlueRevolution (ENIB, Lab-STICC, Ifremer) : masques réalisés avec SAM, images synthétiques étiquetées et U-Net qui séparent nématodes et copépodes des débris sur des photos de microscope, pour alimenter la chaîne de morphométrie de l'équipe.
Projet d'équipe de six étudiants. J'ai réalisé le générateur de données synthétiques et le module de segmentation ; le reste de la plateforme (détection de la queue et de l'œsophage avec YOLO, classifieurs d'espèce, couleur, texture et gonades, morphométrie et application Streamlit) a été construit par l'équipe.
- Python
- PyTorch
- PyTorch Lightning
- U-Net
- Segment Anything (SAM)
- OpenCV
- TorchMetrics
- TensorBoard
- Synthetic data
Objectif
Les biologistes mesurent à la main chaque nématode et chaque copépode sur des photos de microscope (longueur, largeur, queue, œsophage) pour étudier l'effet des pressions humaines et climatiques, comme le dragage, la pêche et le réchauffement des océans, sur les sols marins. L'organisme est mêlé à des débris, et annoter des masques pour entraîner un modèle prend plus de temps que mesurer les animaux. L'objectif de ce module est de fournir des masques binaires de l'organisme, débris exclus, qui alimentent l'extraction de caractéristiques géométriques de l'équipe.
État initial
Les images de microscopie mêlent souvent l'organisme cible à des débris attachés. Les premières paires image–masque ont rendu cette ambiguïté explicite : le modèle doit apprendre une silhouette propre de l'organisme pour que les caractéristiques géométriques ne soient pas polluées par les déchets.

Créer les masques avec SAM
Dessiner les masques à la main était la partie la plus lente ; j'ai donc utilisé Segment Anything (SAM, ViT-H) comme outil interactif dans un notebook Colab. Pour chaque photo, je clique un à trois points : des points verts sur l'organisme et des points rouges sur les débris à exclure. SAM propose trois masques candidats, je garde le meilleur et l'enregistre comme étiquette. Faire cela sur les photos réelles a donné l'ensemble de paires image–masque sur lequel tout le reste repose.


Jeu de données et données synthétiques
Le résultat est un jeu d'images de microscopie étiquetées, de masques binaires et d'images de test réservées, environ 100 paires réelles au total. Pour agrandir les données d'entraînement à partir de si peu de photos réelles, un compositeur OpenCV découpe l'animal avec son masque, le place sur un fond de microscope vide, fait tourner la scène et superpose deux ou trois débris aléatoires, produisant environ 300 scènes synthétiques. Chaque image est livrée avec son masque, prêt pour la segmentation : blanc pour l'organisme, noir pour le fond et les débris attachés. Pour l'entraînement, images et masques sont redimensionnés en 256×256.


Le U-Net
J'ai construit le U-Net sous PyTorch Lightning en suivant l'architecture standard : quatre blocs de sous-échantillonnage et quatre de sur-échantillonnage, chacun avec deux convolutions suivies de normalisation par lots et de ReLU, des connexions de saut entre eux, un sur-échantillonnage bilinéaire et une sortie à un canal. Il s'entraîne avec l'entropie croisée binaire sur les logits et Adam, avec le recuit cosinus comme meilleur planificateur de taux d'apprentissage et l'accumulation de gradients pour émuler un lot plus grand.
Un bloc de configuration en tête du notebook (canaux, taux d'apprentissage, taille de lot, planificateur, augmentation, RGB ou niveaux de gris) permet de changer une expérience à un seul endroit. L'entraînement enregistre le meilleur point de contrôle selon la perte de validation, s'arrête tôt quand il ne progresse plus et journalise perte, précision et IoU dans TensorBoard. L'inférence renvoie le masque à la taille de la photo d'origine.

Expériences
J'ai lancé 48 entraînements et les ai comparés dans TensorBoard : RGB contre niveaux de gris, avec et sans augmentation de données, des tailles de lot de 2 à 32, avec et sans les images synthétiques, et le planificateur du taux d'apprentissage (réduction sur plateau et recuit cosinus, parmi les options de la configuration). J'ai aussi essayé un U-Net à backbone préentraîné et un Mask R-CNN ; les masques utilisés en aval viennent du U-Net simple.
Les huit points de contrôle conservés se sont comportés de façon très proche : perte de validation entre 0,113 et 0,120 et IoU de validation entre 0,66 et 0,71. Le meilleur selon la perte de validation a atteint 0,113 avec une précision de 0,955 et un IoU de 0,705 (époque 193 sur 314, planificateur cosinus). Ci-dessous, un tableau de bord interactif de tous les entraînements : choisir des runs, changer le lissage et trier le tableau récapitulatif.
Résultats
Livraison de masques de l'organisme conscients des débris, adaptés à la morphométrie automatisée. Les comparaisons côte à côte de points de contrôle sur des images de test ont montré que les meilleurs entraînements isolent le micro-organisme et laissent les déchets attachés hors du masque, ce qui remet au reste de l'équipe l'organisme déjà séparé du fond.

Limites
- Le score de validation est probablement optimiste : la validation est un découpage aléatoire 80/20 d'images réelles et synthétiques mélangées, et non un jeu réservé de photos réelles uniquement.
- Le F1 de validation n'a jamais été journalisé ; les courbes et le tableau indiquent perte, précision et IoU.
- Seulement environ 100 paires réelles : les images synthétiques représentent donc une grande part des données d'entraînement.
- Les configurations diffèrent peu, je ne lirais donc pas le classement des runs comme significatif.
- Mon module s'arrête aux masques ; la détection de la queue et de l'œsophage, la classification et les mesures ont été réalisées par le reste de l'équipe.