Implémentation du Modèle nnUNet pour la Segmentation Médicale : Guide Technique

Configuraton et Exécution du Pipeline nnUNet

Prérequis et Installation

Avant de commencer, assurez-vous d'avoir un environnement Python avec les dépendances requises. L'installation de nnUNet peut être effectuée via pip ou conda. Veillez à vérifier la compatibilité de PyTorch avec votre version de CUDA.

Configuration des Chemins d'Accès

Définissez les variables d'environnement pour organiser les données et les résultats :

  • nnUNet_raw : répertoire pour les données brutes.
  • nnUNet_preprocessed : répertoire pour les données prétraitées.
  • nnUNet_results : répertoire pour les poids des modèles entraînés.

Exemple de configuraton dans le terminal :

export nnUNet_raw="/chemin/vers/donnees_brutes"
export nnUNet_preprocessed="/chemin/vers/donnees_pretraitees"
export nnUNet_results="/chemin/vers/resultats_modele"

Préparation des Données

Structurez les ensembles de données selon le format attendu par nnUNet. Chaque tâche doit contenir des images et des masques de segmentation. Pour les données multimodales, assurez que toutes les modalités ont la même géométrie et sont co-registrées. Un fichier dataset.json doit décrire les données, y compris les noms des canaux, les étiquettes et les paramètres de prétraitement.

Exemple de contenu pour dataset.json :

{
    "channel_names": {
        "0": "IRM"
    },
    "labels": {
        "fond": 0,
        "organes": 1,
        "lésions": 2
    },
    "folds": 3,
    "numTraining": 200,
    "file_ending": ".nii.gz"
}

Exécution du Pipeline

Planification et Prétraitement

Lancez la planification et le prétraitement des données avec la commande suivante. Cela génère les plans d'entraînement et prépare les données pour le modèle.

nnUNetv2_plan_and_preprocess -d IDENTIFIANT_DATASET --verify_dataset_integrity

Entraînement du Modèle

Utilisez la commande d'entraînement pour chaque pli de validation croisée. Spécifiez le GPU à utiliser via CUDA_VISIBLE_DEVICES.

CUDA_VISIBLE_DEVICES=0 nnUNetv2_train IDENTIFIANT_DATASET 3d_fullres 0 --npz
CUDA_VISIBLE_DEVICES=1 nnUNetv2_train IDENTIFIANT_DATASET 3d_fullres 1 --npz

Pour accélérer l'entraînement, modifiez les hyperparamètres dans le fichier plans.json sous le répertoire de prétraitement, par exemple en augmentant la taille du batch. Cependant, tenez compte des contraintes de mémoire GPU.

Inference et Post-traitement

Après l'entraînement, trouvez la meilleure configuration et effectuez l'inférence sur de nouvelles données :

nnUNetv2_find_best_configuration IDENTIFIANT_DATASET -c 3d_fullres
CUDA_VISIBLE_DEVICES=0 nnUNetv2_predict -d IDENTIFIANT_DATASET -i /chemin/entree -o /chemin/sortie -f 0 1 2 3 4 -tr nnUNetTrainer -c 3d_fullres -p nnUNetPlans

Appliquez le post-traitement pour affiner les résultats :

nnUNetv2_apply_postprocessing -i /chemin/predictions -o /chemin/predictions_posttraitees -pp_pkl_file /chemin/vers/postprocessing.pkl -np 8 -plans_json /chemin/vers/plans.json

Évaluation

Évaluez les performances du modèle en comparant les prédictions aux vérités terrain. Vérifiez que les étiquettes correspondent : par exemple, si les prédictions utliisent plusieurs labels et la vérité terrain un seul, remappez les valeurs pour assurer la cohérence avant le calcul des métriques comme le Dice.

Résolution des Problèmes Courants

  • Erreurs de module : Si des modules comme nnUNetv2 ou torch ne sont pas trouvés, réinstallez-les dans l'environnement conda ou pip, en veillant à la version de CUDA.
  • Conflits de versions : Utilisez des commandes spécifiques pour installer PyTorch avec le support CUDA, par exemple : pip install torch==1.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116.
  • Problèmes d'évaluation : Si les scores Dice sont nuls, vérifiez la correspondance entre les labels des prédictions et de la vérité terrain, et appliquez un remappage si nécessaire.

Paramètres Avancés

Pour personnaliser l'entraînement, modifiez les hyperparamètres dans le fichier source nnUNetTrainer.py, par exemple en ajustant le taux d'apprentissage ou le nombre d'époques. Pour les labels partiels, utilisez CrossEntropy avec l'option ignore_index pour ignorer les valeurs manquantes (souvent codées comme -1).

Étiquettes: nnUNet segmentation médicale deep learning PyTorch apprentissage profond

Publié le 11 juillet à 21h24