Hello all and @jeremy,
the United Nations Operational Satellite Application Programme (UNSOAT) used fast.ai to train a Unet to perform semantic segmentation on satellite imageries to detect water. We published a paper https://www.mdpi.com/2072-4292/12/16/2532 on the Remote Sensing Journal. The model based on fastai unet reached dice 0.92, accuracy 0.97, precision 0.91, recall 0.92.
You can find all the details in the paper and a Jupyter Notebook with all the steps for the training of our latest model is here: https://github.com/UNITAR-UNOSAT/UNOSAT-AI-Based-Rapid-Mapping-Service/blob/master/Fastai%20training.ipynb.
However, here a summary of the steps we followed:
- Dataset of 15 locations (total 58128 tiles of size 256x256)
- Tiling with offset (256,256), excluding the black frame around the image frame, no stride, under-sampled at the tile level by excluding all tiles that only contained background pixels.
- Backbone ResNet34
- Imagnet normalization
- Augmentation: get_transforms(flip_vert=True, max_warp=0.1, max_rotate=20, max_zoom=2, max_lighting=0.3)
- Weighted Crossy Entropy with torch.FloatTensor(weights).cuda()
- Training available in the notebook
We ask support to this community if you have any suggestions on how to increase the performances and generability.
Thanks a lot for your help,