This is an open solution to the TGS Salt Identification Challenge. Check Kaggle forum and participate in the discussions!
We are building entirely open solution to this competition. Specifically:
- Learning from the process - updates about new ideas, code and experiments is the best way to learn data science. Our activity is especially useful for people who wants to enter the competition, but lack appropriate experience.
- Encourage more Kagglers to start working on this competition.
- Deliver open source solution with no strings attached. Code is available on our GitHub repository 💻. This solution should establish solid benchmark, as well as provide good base for your custom ideas and experiments. We care about clean code 😃
- We are opening our experiments as well: everybody can have live preview on our experiments, parameters, code, etc. Check: TGS Salt Identification Challenge 📈 or screen below.
Train and validation monitor 📊 |
---|
Link to Experiments | CV | LB | Open |
---|---|---|---|
solution 1 | 0.413 | 0.745 | True |
solution 2 | 0.794 | 0.798 | True |
solution 3 | 0.807 | 0.801 | True |
solution 4 | 0.802 | 0.809 | True |
solution 5 | 0.804 | 0.813 | |
solution 6 | 0.821 | 0.827 | |
solution 7 | 0.829 | 0.837 | |
solution 8 | XXX | XXX |
In this open source solution you will find references to the neptune.ml. It is free platform for community Users, which we use daily to keep track of our experiments. Please note that using neptune.ml is not necessary to proceed with this solution. You may run it as plain Python script 🐍.
You can jump start your participation in the competition by using our starter pack. Installation instruction below will guide you through the setup.
- Clone repository and install requirements (use Python3.5)
pip3 install -r requirements.txt
- Register to the neptune.ml (if you wish to use it)
- Run experiment based on U-Net. See instruction below:
neptune account login
Create project say Salt-Detection (SAL)
Go to neptune.yaml
and change:
project: USERNAME/PROJECT_NAME
to your username and project name
Prepare metadata.
Change the execution function in the main.py
:
if __name__ == '__main__':
prepare_metadata()
Then run the following command:
neptune send --worker m-p100 \
--environment pytorch-0.3.1-gpu-py3 \
--config neptune.yaml \
main.py
Remember metadata preparation only needs to be done once
It will be saved in the
metadata_filepath: /output/metadata.csv
From now on we will load the metadata from PREVIOUS EXPERIMENT.
Do that by changing the neptune.yaml
metadata_filepath: /input/metadata.csv
and adding the path to the experiment that generated metadata say SAL-1 to every command --input /SAL-1/output/metadata.csv
Let's train the model by changing the command in the main.py
to:
if __name__ == '__main__':
train()
evaluate()
predict()
and running
neptune send --worker m-p100 \
--environment pytorch-0.3.1-gpu-py3 \
--config neptune.yaml \
--input /SAL-1/output/metadata.csv \
main.py
You could have run it easily with both of those functions executed in the main.py
:
if __name__ == '__main__':
prepare_metadata()
train()
evaluate()
predict()
but recalculating metadata every time you run your pipeline doesn't seem like a good idea :).
The model will be saved in the:
experiment_dir: /output/experiment
and the submission.csv
will be saved in /output/experiment/submission.csv
You can easily use models trained during one experiment in other experiments. For example when running evaluation we need to use the previous model folder in our experiment. We do that by:
changing main.py
CLONE_EXPERIMENT_DIR_FROM = '/SAL-2/output/experiment'
and
if __name__ == '__main__':
evaluate()
predict()
and running the following command:
neptune send --worker m-p100 \
--environment pytorch-0.3.1-gpu-py3 \
--config neptune.yaml \
--input /SAL-1/output/metadata.csv \
--input /SAL-2 \
main.py
Login to neptune if you want to use it
neptune account login
Change data filepaths to your local ones in neptune.yaml
and main.py
.
Prepare metadata Change `main.py':
if __name__ == '__main__':
prepare_metadata()
run
neptune run --config neptune.yaml main.py prepare_metadata
Training and inference Change `main.py':
if __name__ == '__main__':
train()
evaluate()
predict()
neptune run --config neptune.yaml main.py
You can always run it with pure python 🐍
python main.py
You are welcome to contribute your code and ideas to this open solution. To get started:
- Check competition project on GitHub to see what we are working on right now.
- Express your interest in particular task by writing comment in this task, or by creating new one with your fresh idea.
- We will get back to you quickly in order to start working together.
- Check CONTRIBUTING for some more information.
There are several ways to seek help:
- Kaggle discussion is our primary way of communication.
- Submit an issue directly in this repo.