Comments (5)
Feel free to use as you want! Added MIT's licence.
from kaggle_dstl_submission.
Thanks! If you are interested in seeing what I have done with your code, see my post here:
https://vooban.com/en/tips-articles-geek-stuff/satellite-image-segmentation-workflow-with-u-net/
By the way, I am wondering if you have used automatic hyperparameter optimization search (such as using Hyperopt or a grid search), or if you did that incrementally and manually with potentially less computing power.
I also wonder about how did you split the labelled data into a training/validation/test set, so as to find your best architecture. On my side, I used a test set as being the first fifth of the 25 images at the left (in other words, the first left column caused no class imbalance as a train/test split):
I would be interested in having your output on that, if that does not bother you / if you have time for that :) Thanks again!
from kaggle_dstl_submission.
I loved your post and amount of work that you put into it is very impressive.
We did not use HypertOpt or gridsearch for this particular problem. It is expensive and we just did not have enough hardware. I used HyperOpt in other problems. It is pretty nice and works better than BayesianOpt
-
All Unet modifications architectures work similarly. The only important difference was a BatchNorm that increased convergence a lot. A different number of filters, different activation functions, a different number of blocks - all nearly the same. One that we used worked well for me in the UltraSound Nerve segmentation challenge.
-
To my knowledge, noone figured out how to do reliable validation in this problem. Train, Public and Private test are small and very different. We tried picking several images, like what you described, we tried to split each image into train and test parts - no success. Both these variations are able to catch big improvements, but nothing is able to catch small. => in this problem we took advantage of the fact that overfitting Unet is hard and used visual inspection (plotting images and predicted masks side by side) and feedback from Public LB which was unreliable.
-
In your post you mentioned Tiramisu. - We and other teams tried it, no success. Same performance as Unet but converges much significantly slower. Most likely one will be able to make Tiramisu work well, but probably not on this dataset but something much bigger.
How I would try to imporve our solution if I did it right now?
-
After that challenge I used mxnet, but right now I am using PyTorch and I really like it. => my first step would be to transfer everything into Pytorch, especially because Konstantin Lophin already has really nice Unet implementation: https://github.com/lopuhin/mapillary-vistas-2017 . You may also find his code for the DSTL problem there (his team finished 5th). https://github.com/lopuhin/kaggle-dstl
Reason, why I would use PyTorch, is because I have multiple GPU at home and PyTorch allows to parallelize your batch without pain, that you get in TensorFlow => instead of 112x112x128 I would be able to use, say 224x224x128 or 256x256x64 which, I believe would help for some classes. -
Another thing that I had in mind, but we did not have time to implement is different input scale for different images. I believe downscaling input images and feeding to the same network would help trees and crops. Something that worked well for Kyle, who finished 1st.
-
And of course car classes. A lot can be done there, even taking into account far from the perfect labeling quality. Sergey and I got a lot of practice in this type of the task in a https://www.datasciencechallenge.org/challenges/1/safe-passage where one needed to find cars from aerial images. I finished second, and I believe some knowledge in that problem may be transferred to this type of the task.
Again, I loved your post and reposted it where I could :)
from kaggle_dstl_submission.
Thanks for sharing! I edited the post to include recommendations on the amount of data if using the Tiramisu. Also, I didn't know that the 1st place winner used different zoom levels as data augmentation.
PyTorch seems very interesting to me too, and especially for its dynamic computation graph (random fact: I have just started learning PyTorch yesterday evening hehe, that's motivating today to see your thoughts on it).
Thanks again :)
from kaggle_dstl_submission.
By the way, I have also added a link in the blog post to some code I have made for making the prediction perfectly smooth (D4 Dihedral Group for predictions + smooth merging of overlapped image patches):
https://github.com/Vooban/Smoothly-Blend-Image-Patches
That GitHub repository I just linked might soon be converted into another blog post on the website.
from kaggle_dstl_submission.
Related Issues (20)
- Using real coordinates
- h5py.File doesn't have compression as argument? HOT 1
- Training at once for all classes HOT 1
- output of generator should be a tuple (x, y, sample_weight) or (x, y). Found: None HOT 3
- ValueError: "concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 1024, 14, 7), (None, 256, 14, 14)] HOT 2
- RGB implementation HOT 4
- Object detection question HOT 1
- TypeError: 'compression_opts' is an invalid keyword argument for this function(cache_train.py) HOT 1
- Running visualize error HOT 1
- How can I label my own images? HOT 1
- Thanks so much HOT 1
- How can I make this code work with images of 3 bands only? HOT 3
- why loss go up?
- model issue
- TypeError: 'compression' is an invalid keyword argument for this function HOT 2
- ValueError: "concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 2, 14, 512), (None, 2, 14, 256)] HOT 7
- Reproducing Results Problem HOT 1
- make prediction on buildings is failing HOT 5
- Running code only with RGB images HOT 3
- Dimension of the traning set images HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kaggle_dstl_submission.