This repository contains my solution for the spotGEO challenge organized by the Advanced Concepts Team at the European Space Agency. The end goal was to detect satellite positions from sequences of 480x640 grayscale images. I wrote a high-level overview of my solution, which you can find here.
In terms of code, I organised my solution into 6 scripts:
- Median calculation: this script applies a median filter to each image, and stores the result into the
data/medians
directory. - Interesting pixels: I used this script to extract interesting pixels, which are pixels that are brighted than their surroundings. This allowed me to concentrate on a small subset of pixels, and thus lower the computational burden for the rest of the pipeline.
- Pixel annotation: this script is responsible for assigning the satellite sightings provided by the competition organisers to the interesting pixels. This makes use of scipy's
optimize.linear_sum_assignment
function. - Feature extraction: this script extracts features for each interesting pixel. It's quite straightforward, and simply computes descriptive statistics for each square region surrounding each pixel.
- Machine learning: this fits a bagged version of LightGBM to the extracted features and the assigned annotations.
- Post-processing: this applies the post-processing step which is described in the penultimate section of the explanation paper. It also computes the out-of-fold performance on the training set by executed the validation script provided by the competition's organisers.
TLDR:
python scripts/1_medians.py
python scripts/2_regions.py
python scripts/3_annotate.py
python scripts/4_features.py
python scripts/5_learn.py
python scripts/6_score.py
I managed to finish at the 7th spot, both on the public leaderboard as well as the private one. The following graph shows the rankings over the duration of the competition; my username is mhalford
: