U-net 2D #1

Dit netwerk werd getraind op de 5 eerste trainingsbeelden voor 50 epochs. In elk epoch werden alle beelden 1 keer doorgelopen. De trainingsbeelden werden opgedeeld in een lijst van sneden die dan als input gebruikt werden voor het netwerk. De batch size is 16. Dit betekent dat in elke stap willekeurig 16 sneden gekozen worden en de gewichten dan worden veranderd naargelang de verlies functie op deze 16 sneden. Deze sneden liggen niet per se naast elkaar en kunnen over meerdere volumes gekozen worden.

De verliesfunctie tijdens het trainen was cross entropy. Er werd een Adam optimizer gebruikt met een learning rate van $10^{-4}$. Dit verschilt van het netwerk op github (link) waar een learning rate van $10^{-5}$ gebruikt werd. Op deze manier kon ons netwerk sneller trainen.

Training geschiedenis

De waarden voor enkele standaard metrieken tijdens het trainingsproces werden opgeslagen in een .json bestand. Deze metrieken zijn de accuracy en de verliesfunctie. Tijdens het trainen werden de sneden opgesplitst in sneden gebruikt voor training en sneden gebruikt voor validatie. Enkel deze voor training werden gebruikt om de parameters in het netwerk aan te passen. De validatie set wordt gebruikt om de verliesfunctie en nauwkeurigheid te evalueren. Als de nauwkeurigheid ten opzichte van de trainingsbeelden veel beter is dan deze van de validatie set, dan zou dit betekenen dat het netwerk aan het overfitten is. Dit betekent dat het netwerk de trainingsbeelden van buiten leert, maar daarom niet kan veralgemenen naar nieuwe beelden. Onderstaande plots tonen de accuracy en verliesfunctie voor zowel de testbeelden als de validatiebeelden.

In [1]:
from metrics import plot_metrics

jsonfile = 'trainedUnet2D #1.json'
plot_metrics(jsonfile)

Segmentatie

We plotten nu de segmentaties van enkele sneden van testvolume 1. In de eerste afbeelding staat de segmentatie met het netwerk, in de tweede afbeelding de segmentatie van SPM die we als waarheid aannemen en op de derde afbeelding staat een slice van de 3D hersenscan die als input gebruikt werd. Bovendien worden de Dice scores voor elk weefsel gegeven voor de getoonde slice. De berekening van de totale Dice score houdt rekening met grijze stof, witte stof en CSF, maar niet met achtergrond.

In [6]:
import get_predictions
from get_predictions import load_predictions, plot_background, plot_predictions

Volume = 1 #from 1 to 14
modelname = "trainedUnet2D #1.h5"
loadname = "pred#1 - volume {}.npy".format(Volume)

predicting = False
isDiscrete = True
chanNumber = 3

load_predictions(loadname, Volume, predict = predicting)
for i in range(25,166,10):
    print("\n Slice {} of volume {} \n".format(i,Volume))
    slice_number = i #from 1 to 176
    plot_predictions(Volume, slice_number, discrete = isDiscrete, channels = chanNumber, suptitle = False)
    print('-'*30)
 Slice 25 of volume 1 

Dice coefficient of background is: 0.97
Dice coefficient of gray matter is: 0.92
Dice coefficient of white matter is: 0.0
Dice coefficient of csf is: 0.27
Total Dice coefficient is 0.67
------------------------------

 Slice 35 of volume 1 

Dice coefficient of background is: 0.93
Dice coefficient of gray matter is: 0.89
Dice coefficient of white matter is: 0.78
Dice coefficient of csf is: 0.62
Total Dice coefficient is 0.82
------------------------------

 Slice 45 of volume 1 

Dice coefficient of background is: 0.94
Dice coefficient of gray matter is: 0.88
Dice coefficient of white matter is: 0.9
Dice coefficient of csf is: 0.6
Total Dice coefficient is 0.84
------------------------------

 Slice 55 of volume 1 

Dice coefficient of background is: 0.92
Dice coefficient of gray matter is: 0.86
Dice coefficient of white matter is: 0.93
Dice coefficient of csf is: 0.62
Total Dice coefficient is 0.85
------------------------------

 Slice 65 of volume 1 

Dice coefficient of background is: 0.89
Dice coefficient of gray matter is: 0.86
Dice coefficient of white matter is: 0.93
Dice coefficient of csf is: 0.6
Total Dice coefficient is 0.85
------------------------------

 Slice 75 of volume 1 

Dice coefficient of background is: 0.91
Dice coefficient of gray matter is: 0.85
Dice coefficient of white matter is: 0.94
Dice coefficient of csf is: 0.7
Total Dice coefficient is 0.86
------------------------------

 Slice 85 of volume 1 

Dice coefficient of background is: 0.85
Dice coefficient of gray matter is: 0.87
Dice coefficient of white matter is: 0.82
Dice coefficient of csf is: 0.74
Total Dice coefficient is 0.83
------------------------------

 Slice 95 of volume 1 

Dice coefficient of background is: 0.87
Dice coefficient of gray matter is: 0.84
Dice coefficient of white matter is: 0.89
Dice coefficient of csf is: 0.69
Total Dice coefficient is 0.82
------------------------------

 Slice 105 of volume 1 

Dice coefficient of background is: 0.89
Dice coefficient of gray matter is: 0.85
Dice coefficient of white matter is: 0.95
Dice coefficient of csf is: 0.69
Total Dice coefficient is 0.87
------------------------------

 Slice 115 of volume 1 

Dice coefficient of background is: 0.94
Dice coefficient of gray matter is: 0.86
Dice coefficient of white matter is: 0.92
Dice coefficient of csf is: 0.61
Total Dice coefficient is 0.85
------------------------------

 Slice 125 of volume 1 

Dice coefficient of background is: 0.93
Dice coefficient of gray matter is: 0.87
Dice coefficient of white matter is: 0.92
Dice coefficient of csf is: 0.64
Total Dice coefficient is 0.85
------------------------------

 Slice 135 of volume 1 

Dice coefficient of background is: 0.92
Dice coefficient of gray matter is: 0.9
Dice coefficient of white matter is: 0.88
Dice coefficient of csf is: 0.57
Total Dice coefficient is 0.83
------------------------------

 Slice 145 of volume 1 

Dice coefficient of background is: 0.93
Dice coefficient of gray matter is: 0.9
Dice coefficient of white matter is: 0.71
Dice coefficient of csf is: 0.6
Total Dice coefficient is 0.82
------------------------------

 Slice 155 of volume 1 

Dice coefficient of background is: 1.0
Dice coefficient of gray matter is: 0.0
Dice coefficient of white matter is: 0
Dice coefficient of csf is: 0
Total Dice coefficient is 0.0
------------------------------

 Slice 165 of volume 1 

Dice coefficient of background is: 1.0
Dice coefficient of gray matter is: 0
Dice coefficient of white matter is: 0
Dice coefficient of csf is: 0
Total Dice coefficient is 0
------------------------------

Voor volume 9 verkrijgen we opvallend slechte Dice scores. Bij nadere inspectie blijkt dat dit te wijten is aan de slechte kwaliteit van de hersenscan die als input gebruikt werd. De resultaten zijn hieronder geplot.

In [4]:
import get_predictions
from get_predictions import load_predictions, plot_background, plot_predictions

Volume = 9 #from 1 to 14
modelname = "trainedUnet2D #1.h5"
loadname = "pred#1 - volume {}.npy".format(Volume)

predicting = False
isDiscrete = True
chanNumber = 3

load_predictions(loadname, Volume, predict = predicting)
for i in range(25,100,5):
    print("\n Slice {} of volume {} \n".format(i,Volume))
    slice_number = i #from 1 to 176
    plot_predictions(Volume, slice_number, discrete = isDiscrete, channels = chanNumber, suptitle = False)
    print('-'*30)
 Slice 25 of volume 9 

Dice coefficient of background is: 0.85
Dice coefficient of gray matter is: 0.71
Dice coefficient of white matter is: 0.52
Dice coefficient of csf is: 0.56
Total Dice coefficient is 0.63
------------------------------

 Slice 30 of volume 9 

Dice coefficient of background is: 0.75
Dice coefficient of gray matter is: 0.7
Dice coefficient of white matter is: 0.61
Dice coefficient of csf is: 0.39
Total Dice coefficient is 0.6
------------------------------

 Slice 35 of volume 9 

Dice coefficient of background is: 0.74
Dice coefficient of gray matter is: 0.71
Dice coefficient of white matter is: 0.72
Dice coefficient of csf is: 0.38
Total Dice coefficient is 0.63
------------------------------

 Slice 40 of volume 9 

Dice coefficient of background is: 0.7
Dice coefficient of gray matter is: 0.73
Dice coefficient of white matter is: 0.78
Dice coefficient of csf is: 0.35
Total Dice coefficient is 0.65
------------------------------

 Slice 45 of volume 9 

Dice coefficient of background is: 0.69
Dice coefficient of gray matter is: 0.76
Dice coefficient of white matter is: 0.8
Dice coefficient of csf is: 0.38
Total Dice coefficient is 0.68
------------------------------

 Slice 50 of volume 9 

Dice coefficient of background is: 0.67
Dice coefficient of gray matter is: 0.74
Dice coefficient of white matter is: 0.85
Dice coefficient of csf is: 0.37
Total Dice coefficient is 0.69
------------------------------

 Slice 55 of volume 9 

Dice coefficient of background is: 0.69
Dice coefficient of gray matter is: 0.71
Dice coefficient of white matter is: 0.85
Dice coefficient of csf is: 0.44
Total Dice coefficient is 0.7
------------------------------

 Slice 60 of volume 9 

Dice coefficient of background is: 0.68
Dice coefficient of gray matter is: 0.74
Dice coefficient of white matter is: 0.85
Dice coefficient of csf is: 0.45
Total Dice coefficient is 0.71
------------------------------

 Slice 65 of volume 9 

Dice coefficient of background is: 0.72
Dice coefficient of gray matter is: 0.72
Dice coefficient of white matter is: 0.87
Dice coefficient of csf is: 0.49
Total Dice coefficient is 0.73
------------------------------

 Slice 70 of volume 9 

Dice coefficient of background is: 0.69
Dice coefficient of gray matter is: 0.72
Dice coefficient of white matter is: 0.83
Dice coefficient of csf is: 0.49
Total Dice coefficient is 0.71
------------------------------

 Slice 75 of volume 9 

Dice coefficient of background is: 0.7
Dice coefficient of gray matter is: 0.74
Dice coefficient of white matter is: 0.78
Dice coefficient of csf is: 0.53
Total Dice coefficient is 0.7
------------------------------

 Slice 80 of volume 9 

Dice coefficient of background is: 0.67
Dice coefficient of gray matter is: 0.72
Dice coefficient of white matter is: 0.71
Dice coefficient of csf is: 0.63
Total Dice coefficient is 0.69
------------------------------

 Slice 85 of volume 9 

Dice coefficient of background is: 0.7
Dice coefficient of gray matter is: 0.69
Dice coefficient of white matter is: 0.71
Dice coefficient of csf is: 0.66
Total Dice coefficient is 0.68
------------------------------

 Slice 90 of volume 9 

Dice coefficient of background is: 0.68
Dice coefficient of gray matter is: 0.7
Dice coefficient of white matter is: 0.69
Dice coefficient of csf is: 0.6
Total Dice coefficient is 0.67
------------------------------

 Slice 95 of volume 9 

Dice coefficient of background is: 0.68
Dice coefficient of gray matter is: 0.69
Dice coefficient of white matter is: 0.81
Dice coefficient of csf is: 0.54
Total Dice coefficient is 0.7
------------------------------

Dice scores

Tot slot berekenen we ook de dice scores voor alle testvolumes. In de tabel zie je de dice scores voor elk volume. Onderaan is het gemiddelde genomen over de testbeelden. Zoals hierboven al gezegd was de kwaliteit van de hersenscan van volume 9 eerder slecht, daarom zullen we het ook buiten beschouwing laten bij het berekenen van de Dice scores. Bij volume 3 en 8 ging er iets mis bij het segmenteren van de afbeeldingen met SPM. Daarom werden ook deze volumes buiten beschouwing gelaten.

In [10]:
import numpy as np

from pandas import DataFrame

#volume 3 en 8 hebben een afwijkende ground truth en werden daarom buiten beschouwing gelaten
#volume 9 is hierboven besproken. Dit laten we ook buiten beschouwing.
sampleList = [1,2,4,5,6,7,10,11,12,13,14] 

dice_scores = [np.load("diceTry1-volume{}.npy".format(i)) for i in sampleList]
dice_scores = np.array(dice_scores)
dice_mean = dice_scores.mean(axis = 0)
dice_scores = np.row_stack((dice_scores, dice_mean))

df = DataFrame(np.round(dice_scores,2),
               index = ['Testbeeld {}'.format(i) for i in sampleList] +  ["Gemiddelde"],
               columns=['Grijze stof', 'Witte stof', 'CSF', 
                            'Totaal', 'Achtergrond'])
print(df)
              Grijze stof  Witte stof   CSF  Totaal  Achtergrond
Testbeeld 1          0.87        0.91  0.66    0.84         0.83
Testbeeld 2          0.87        0.89  0.52    0.77         0.83
Testbeeld 4          0.86        0.90  0.62    0.83         0.91
Testbeeld 5          0.89        0.91  0.65    0.85         0.91
Testbeeld 6          0.82        0.87  0.67    0.79         0.81
Testbeeld 7          0.86        0.87  0.76    0.84         0.83
Testbeeld 10         0.89        0.91  0.61    0.84         0.89
Testbeeld 11         0.88        0.91  0.73    0.86         0.85
Testbeeld 12         0.76        0.84  0.63    0.75         0.79
Testbeeld 13         0.89        0.90  0.67    0.86         0.89
Testbeeld 14         0.88        0.91  0.73    0.86         0.86
Gemiddelde           0.86        0.89  0.66    0.83         0.85