This is our solution (MANGAng) for the competition "KDD-BR 2022 - Visual odometry for autonomous UAVs in GNSS contested environments"
The model architecture was based on a U-Net encoder with a regression loss. The normalized features altitude
and delta
are concatenated in the input of the last multilayer perception. The solution achieved better performance compared to the two benckmarck solutions provided by the competition.
Download the KDD-BR22 odometry dataset.
Create a simbolic link (Windows) or a softlink (Linux) to the dataset in the dataset
folder:
- On Windows:
mklink /D <path_to_project>\KDD-BR22\dataset <path_to_downloaded_dataset>
- On Linux:
ln -s <path_to_your_downloaded_dataset> <path_to_your_project>/KDD-BR22/dataset
Then, the data structure should be as follows:
|---KDD-BR22
|---dataset
|---train
|---000a3f777828d2cdbee98887561aa130.jpg
|---...
|---test
|---000a8e84b013655b832041a6f362e5c9.jpg
|---...
|---public.csv
|---sample_submission.csv
Download my pre-trained model and save it somewhere in the ckpt
directory:
- checkpoint: Link to GoogleDrive
Create a Python virtual environment and activate it:
python -m venv venv
venv\Scripts\activate.bat
Install dependencies:
pip install -r requirements.txt
Run train_model.py
to start training:
python train_model.py
If you want to keep the training from a checkpoint, change the key checkpoint_path
of the dictionary args
in train_model.py
.
Test the model with test_model.py
and generate the submission file:
python test_model.py
You can analyse the Tensorboard logs with:
tensorboard --logdir <path_to_checkpoint>
Training and Validation Loss:
Evaluation Table (RMSE):
Method | Public (RMSE) | Private (RMSE) |
---|---|---|
CNN-VO (our) | 0.47896 | 0.48608 |
Benchmark Beta | 0.51000 | 0.51124 |
Benchmark Alpha | 0.61503 | 0.61385 |
Guessing No Movement | 1.26870 | 1.26918 |
Special thanks to the MANGAng teammates! Wish you all the best :)