BEV-SLD: Self-Supervised Scene Landmark Detection for Global Localization with LiDAR Bird's-Eye View Images
David Skuddis, Vincent Ress, Wei Zhang, Vincent Ofosu Nyako, Norbert Haala
Institute for Photogrammetry and Geoinformatics (ifp), University of Stuttgart
@InProceedings{Skuddis_2026_CVPR,
author = {Skuddis, David and Ress, Vincent and Zhang, Wei and Nyako, Vincent Ofosu and Haala, Norbert},
title = {BEV-SLD: Self-Supervised Scene Landmark Detection for Global Localization with LiDAR Bird's-Eye View Images},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {June},
year = {2026},
pages = {31400-31409}
}Fig. 1 — Global localization on the MCD dataset.
This repository provides the official implementation of BEV-SLD, including all scripts required to reproduce our experiments on the Wild-Places and MCD dataset.
For a quick test with a pretrained model, see the demo branch. Preprocessed BEV images are included, so no dataset download is required for the demo.
For an overview of our method, please see the introduction video:
We provide a bash script for setting up a virtual environment.
Before creating the environment, please adjust the PyTorch version in requirements.txt to match your local CUDA version.
Then, to create a virtual environment named bev_sld_env locally, run:
bash create_env.sh
Download the following reference and test sequences from the official MCD dataset website: https://mcdviral.github.io/Download.html
For our experiments, we used the Ouster ROS bag files.
Reference/training sequence:
ntu_day_01_os1_128.bag
Test sequences:
ntu_day_02_os1_128.bagntu_day_10_os1_128.bagntu_night_04_os1_128.bagntu_night_08_os1_128.bagntu_night_13_os1_128.bag
The MCD dataset provides ground-truth poses in the vehicle frame. We transform them into the Ouster LiDAR frame using the calibration parameters released by the dataset authors. These transformed poses, which are used for training and evaluation, are stored under gt_poses/mcd/.
We provide two example configuration files: config/mcd_ntu_day_01_ref.yaml and config/mcd_ntu_day_10.yaml. Additional sequence configuration files can be created in the same way.
Download the following reference and test sequences from the official Wild-Places dataset website: https://data.csiro.au/collection/csiro:56372
More information is available on the project website: https://csiro-robotics.github.io/Wild-Places/
Reference/training sequence:
V-03
Test sequences:
V-01V-02V-04
For the Wild-Places dataset, the point clouds are already provided as .pcd files, so no ROS bag extraction is required. We provide two example configuration files: config/wild_places_v03_ref.yaml and config/wild_places_v01.yaml. Additional sequence configuration files can be created in the same way.
All configuration files are provided as .yaml files under config/.
- Each .yaml defines paths, hyperparameters, and dataset settings.
- Command-line arguments (via
argparse) override.yamlparameters. - Before preprocessing, ensure the bag_path parameter points to the correct rosbag file.
For e.g. the reference sequence settings in config/mcd_ntu_day_01_ref.yaml change the parameter bag_path to your rosbag path.
For the configuration of Wild-Places dataset, no Rosbags are provided but .pcd files. Therefore, in config/wild_places_v03_ref.yaml the parameter pc_dir must be adjusted.
Check if you actived the virtual environment. If not, run:
source bev_sld_env/bin/activate
Convert ROS bag data to .pcd point clouds (this step can omitted for the Wild-Places dataset):
python extract_pcs_rosbag.py --config config/mcd_ntu_day_01_ref.yaml
Create BEV images and global coordinate maps (saved as .tif files):
python create_bev_images_and_coord_maps.py --config config/mcd_ntu_day_01_ref.yaml
These preprocessing steps need to be performed only once per sequence.
To train the BEV-SLD model on the reference sequence, run:
python train.py --config config/mcd_ntu_day_01_ref.yaml
To use a trained network for localization, run:
python localization.py --config config/mcd_ntu_day_01_ref.yaml
To evaluate the success rate (SR) and median errors, run:
python eval_poses.py --config config/mcd_ntu_day_01_ref.yaml
To evaluate the model on a test sequence, follow the same steps as above, excluding the training stage. Run the scripts with:
--config config/mcd_ntu_day_10.yaml
