Kaggle Ultrasound Nerve Segmentation competition [Keras]
cuDNN required.
In ~/.theanorc
[global]
device = gpu0
[dnn]
enabled = True
In ~/.keras/keras.json (it's very important, the project was running on theano backend, and some issues are possible in case of TensorFlow)
{
"image_dim_ordering": "th",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "theano"
}
Place train and test data into '../train' and '../test' folders accordingly.
mkdir np_data
python data.py
Single model training.
python train.py
Results will be generatated in "res/" folder. res/unet.hdf5 - best model
Generate submission:
python submission.py
Generate predection with a model in res/unet.hdf5
python current.py
Motivation's explained in my internal pres (slides: http://www.slideshare.net/Eduardyantov/ultrasound-segmentation-kaggle-review)
I used U-net like architecture (http://arxiv.org/abs/1505.04597). Main differences:
Augmentation:
Augmentation generator (generate augmented data on the fly for each epoch) didn't improve the score. For prediction augmented images were used.
Validation:
For some reason validation split by patient (which is proper in this competition) didn't work for me, probably due to bug in the code. So I used random split.
Final prediction uses probability of a nerve presence: p_nerve = (p_score + p_segment)/2, where p_segment based on number of output pixels in the mask.
This code was originally based on https://github.com/jocicmarko/ultrasound-nerve-segmentation/