ivadomed / model-canal-seg

MIT License
0 stars 0 forks source link

Results of the second nnunet trainnig fold 0 with 30 subjects #6

Closed WilliamSirois closed 1 month ago

WilliamSirois commented 7 months ago

Données utilisées

J'ai utilisé la base de donnée spine generic dataset avec la version r20231212 sous la branche suivante, car il s'agit des images que Sandrine à du recentrer (pour positionner la segmentation au bon endroit)images et segmentations utilisées Il s'agit d'un issue concernant un second training. Les résultats du premier étant disponible ici : https://github.com/ivadomed/model-csf-seg/issues/5

Voici des fichiers json qui contiennent les noms des sujets utilisé pour training, validation et testing :

Commandes pour reproduire

  1. Tout d'abord, j'ai créer un nouveau Dataset dans mon fichier nnUNet_raw avec la commande suivante :

    mkdir Dataset503_correcteddata
  2. J'ai ensuite copié les images que j'ai utilisé pour mon premier entrainement dans les fichiers adéquats en respectant la structure nnUnet. Puis j'ai aussi ajouté les images que j'ai corrigées. Ce qui fait un total de 30 images pour l'entrainement répartis de la manière suivante : 25 pour le training et 5 pour le testing.

  3. J'ai ensuite fait une vérification de mes données avec la commande suivante :

    nnUNetv2_plan_and_preprocess -d 503 --verify_dataset_integrity -c 3d_fullres
  4. J'ai ensuite été en mesure de démarrer l'entrainement avec la commande suivante :

    CUDA_VISIBLE_DEVICES=0 nnUNetv2_train 503 3d_fullres 0 -tr nnUNetTrainer_250epochs

    La commande restraint le nombre d'epochs à 250 puisque le dice score n'augmente plus après ce temps tel que mentionner dans la section Résultat ici : https://github.com/ivadomed/model-csf-seg/issues/5#issue-2170324631

  5. J'ai ensuite procéder aux prédictions sur les 5 images de testing avec la commande suivante :

nnUNetv2_predict -i ${nnUNet_raw}/Dataset503_correcteddata/imagesTs -o /home/williamsirois/testingmodel2 -d 503 -c 3d_fullres -f 0
  1. Un coefficient dice à ensuite été calculer sur les images de testing en utilisant une variante du code qu'il est possible de trouver ici : indice dice. J'ai adapter ce code pour qu'il soit possible de le faire pour plusieurs images à la suite, qu'il prennent des arguments en entrer et soit plus facile d'utilisation.

Résultats

a) Entrainement

Voici les résultats de mon entrainement. Il est possible de constater que 250 epochs ont en effet été réalisé : progress

b) Images

Voici les segmentation pour les cinq sujets de testing sur lesquels j'ai appliqué l'algorithme :

barcelona03

Image : MyDataset-sub-barcelona03_013_0000.nii.gz (Le nom n'est pas le même que dans la dataset j'ai repris l'image directement du serveur) Segmentation : MyDataset-sub-barcelona03_013.nii.gz Prédiction : MyDataset-sub-barcelona03_predcanal_algo2_T2w.nii.gz

cmrra03

Image : MyDataset-sub-cmrra03_017_0000.nii.gz (Le nom n'est pas le même que dans la dataset j'ai repris l'image directement du serveur) Segmentation : MyDataset-sub-cmrra03_017.nii.gz Prédiction : MyDataset-sub-cmrra03_predcanal_algo2_T2w.nii.gz

geneva01

Image : MyDataset-sub-geneva01_021_0000.nii.gz (Le nom n'est pas le même que dans la dataset j'ai repris l'image directement du serveur) Segmentation : MyDataset-sub-geneva01_021.nii.gz Prédiction : MyDataset-sub-geneva01_predcanal_algo2_T2w.nii.gz

nottwill04

Image : MyDataset-sub-nottwil04_004_0000.nii.gz (Le nom n'est pas le même que dans la dataset j'ai repris l'image directement du serveur) Segmentation : MyDataset-sub-nottwil04_004.nii.gz Prédiction : MyDataset-sub-nottwil04_predcanal_algo2_T2w.nii.gz

tokyoIngenia05

Image : MyDataset-sub-tokyoIngenia05_007_0000.nii.gz (Le nom n'est pas le même que dans la dataset j'ai repris l'image directement du serveur) Segmentation : MyDataset-sub-tokyoIngenia05_007.nii.gz Prédiction : MyDataset-sub-tokyoIngenia05_predcanal_algo2_T2w.nii.gz

Remarque

Il est possible de remarquer encore que pour deux sujets sur les 5 des trous sont encore présent dans la segmentation sur les dernières couches.

c) Score dice

Les score dice que j'ai calculés sont les suivant :

Le premier entrainement avant un dice score de 0.9649 voir : https://github.com/ivadomed/model-csf-seg/issues/5#issue-2170324631

d) Qc report

Voici le Qc report que j'ai produit pour ces 5 prédictions : Ws_QC_canal_training2.zip

Prochaine étape

Je vais ensuite lancer une prédiction sur le restant de la base de donnée et observer si le modèle est fiable pour tpute les images qu'il n'as jamais vu.

sandrinebedard commented 7 months ago

Super @WilliamSirois, beaux résultats!! Pourrais-tu aussi inclure un fichier text ou json ou csv avec le split (le nom des sujets) dans testing, training ou validation, question de reproductibilité, même chose pour ton premier training

WilliamSirois commented 7 months ago

Pourrais-tu aussi inclure un fichier text ou json ou csv avec le split (le nom des sujets) dans testing, training ou validation J'ai été ajouté les fichiers dans la section Données utilisées de ce commentaire : https://github.com/ivadomed/model-csf-seg/issues/6#issue-2204022333

Pourrais-tu me dire si c'est bien le genre de fichier que tu attendais? Si oui alors je vais aller les ajouter au même endroit dans mon premier algorithme.

Aussi voici le lien vers le QC report sur tout les sujets : https://drive.google.com/file/d/1fRxNYF0eAXzdw8IS8vqLvA_0nlYkVbbe/view?usp=drive_link

Avec son fichier json : WS_Algo2_all_subjects.json

Il est possible de constater encore des erreurs de segmentations en bas surtout. En effet, des trous sont encore bien présent dans le bas de la moelle épinière (là où l'intensité des pixels est la plus faible)

jcohenadad commented 7 months ago

Beau travail William !

sandrinebedard commented 7 months ago

Pourrais-tu aussi inclure un fichier text ou json ou csv avec le split (le nom des sujets) dans testing, training ou validation J'ai été ajouté les fichiers dans la section Données utilisées de ce commentaire : #6 (comment)

Pourrais-tu me dire si c'est bien le genre de fichier que tu attendais? Si oui alors je vais aller les ajouter au même endroit dans mon premier algorithme.

C'est parfait!

WilliamSirois commented 7 months ago

Voici les sujets que je vais prendre pour l'entrainement de ma troisième version de l'algorithme : WS_algo3_dataset.json Si certains sujets n'était pas bien segmenté par le modèle, mais qui était présent lors de l'entrainement du modèle 2 alors je vais inclure le groundtruth du modèle 2. Ainsi, j'ai produit le QC_report suivant qui contient les segmentations qui seront utilisées : WS_QC_Training3