[Updated on: 2019-01-14]
downloads
aim
Our aim was to train a deep neural network so that so that it is then able to segment zones of interest in heart MRIs.
This is for example a heart MRI, unlabelled:
And this is the same MRI, labelled by a cardiologist:
convolutional neural Network
Our solution is derived from the deeplab convolutional neural network designed by Chen et al. (2016 and 2017) and from its implementation in pytorch by Kazuto Nakashima (github repository)
The deeplab (v3) architecture (Chen et al, 2017):
One key element in our implementation is to set the loss definition as follows:
The best results were achieved with the deeplab v3 architecture. The batch size is set to $2$. In the first part of the training, the learning rate is constant and is set to $2.5 \times 10^{-4}$.
We keep the $15000$ iterations point as the starting point of a second phase of training. This time, the learning rate is automatically decreased. It is multiplied by :
$$ (1 - \frac{iter}{max_iter})^{0.9} $$
We obtain the following evolution of the performance:
And we keep the $10000$ (additional) iterations checkpoint.
Overall, the total training time was $30$ hours for the $25000$ iterations. The training was performed on a Geforce Titan X GPU, with a batch size of 2, and each iteration would last about 4.3 seconds.
results
Here are two examples (from the test set) for which the prediction is rather good:
And a two more examples (from the test set) for which it is more problematic:
The performance metrics are:
Dice: the Dice coefficient; IoU: Intersection over Union.
Class 0 corresponds to black, that is the contour being drawn. An IoU of $0.46$ means that the prediction by the training network is rather good.
acknowledgments
Many thanks to Raphaël Couturier and Michel Salomon from the AND research group of the femto-st institute, for their support and advice, and for providing computer time on their GPUs.
And also many thanks to Kazuto Nakashima for sharing his excellent pytorch implementation of deeplab.