This repo is a record of our (me along with my 2 university friends) struggles to take first place in
Weights & Biases "Drought Watch" community benchmark,
but more importantly - to develop a robust model capable of monitoring drought conditions in Kenya!
I strongly encourage you to check out and contribute to Weights & Biases community benchmarks!
Also, feel free to use our ideas to develop your own classifiers!
Since the beginnig, we wanted to do something special.
First of all, we developed a handcrafted clouds detection method in order to discard the most cloudy and noisy images using dependencies
between spectra (concretely, between Thermal Infrareds and Blue - we assume that such images should be marked properly and not used when assessing).
We have also started developing a handcrafted method for shadows removal based on
this article.
However, only RGB shadow removal has been implemented so far and it doesn't increase model's accuracy.
See this notebook for neat visualization of methods mentioned above.
However, we hope that the biggest possible game changer will be applying ideas from this article.
The authors state that ConvNets are not capable of learning some useful global features. They precalculate features and inject them in the last FC layers.
A script for calculating the features has been already implemented, but calculations are presently too slow to use
it while training on account of no vectorization (100ms vs 2s).
We've developed a high-accuracy, 3rd place (77.13%) model by searching for the best hyperparameters and utilizing clouds detection mentioned above.
The model seems to be too complex (oscilating val_accuracy), but there's still much to be done!
The model was developed and trained using TensorFlow 2 and Google Colab GPU.
In the near future, we are going to try:
- EfficientNet architectures;
- Haralick features code review & vectorization;
- clouds detection code vectorization;
- data augmentation techniques.