Official code for Spyropose: SE(3) pyramids for object pose distribution estimation, ICCVW 2023.
Project page.
We wanted to clean up the code a bit before releasing it, but haven't yet found time for it. Instead of waiting to have that time, here is the "raw" code. Pull requests are welcome.
Tested on Ubuntu 22.
Download, extract and symlink the symsol dataset to ./data/symsol
:
$ wget https://storage.googleapis.com/gresearch/implicit-pdf/symsol_dataset.zip
$ unzip symsol_dataset.zip -d [data_folder]/symsol
$ ln -s [data_folder]/symsol ./data/symsol
For training and evaluating on TLESS and HB,
download and extract the datasets from https://bop.felk.cvut.cz/datasets/
and symlink the root folder to ./data/bop
.
$ conda env create -f spyropose.yml
$ conda activate spyropose
Ours (w/o KP & IS)
$ python -m spyropose.scripts.train symsol [object] --kpts none --vis-model resnet50 --batch-size 16 --batchnorm --no-is --n-samples 1024 --gpu-idx [gpu_idx]
Ours (w/o KP) Importance sampling expands all samples by the branch factor (8 for SO3), so n_samples=128 results in 1024 function evaluations per recursion.
$ python -m spyropose.scripts.train [symsol, symsol_ours] [object] --kpts none --vis-model resnet50 --batch-size 16 --batchnorm --n-samples 128 --gpu-idx [gpu_idx]
Ours (w/ box KP)
$ python -m spyropose.scripts.train symsol_ours [object] --kpts box --n-samples 128 --gpu-idx [gpu_idx]
Ours (w/o IS)
$ python -m spyropose.scripts.train symsol_ours [object] --no-is --n-samples 1024 --gpu-idx [gpu_idx]
Ours
$ python -m spyropose.scripts.train symsol_ours [object] --n-samples 128 --gpu-idx [gpu_idx]
Ours (w/o KP & IS)
$ python -m spyropose.scripts.train symsol [object] --kpts none --vis-model resnet50 --batch-size 16 --batchnorm --no-is --n-samples 1024 --gpu-idx [gpu_idx] --low-data-regime
Ours (w/o KP)
$ python -m spyropose.scripts.train symsol [object] --kpts none --vis-model resnet50 --batch-size 16 --batchnorm --n-samples 128 --gpu-idx [gpu_idx] --low-data-regime
Ours (w/o IS)
$ python -m spyropose.scripts.train [dataset] [object] --max-steps 100_000 --no-is --n-samples 2048 --gpu-idx [gpu_idx]
Ours
python -m spyropose.scripts.train [dataset] [object] --max-steps 100_000 --n-samples 32 --gpu-idx [gpu_idx]
Each model is assigned a unique run_id
at the beginning of training.
To evaluate a trained model:
$ python -m spyropose.scripts.eval [run_id] [device]
And for multi-view on TLESS models:
$ python -m spyropose.scripts.eval_mv [run_id] [device]
@inproceedings{haugaard2023spyropose,
title={Spyropose: Se (3) pyramids for object pose distribution estimation},
author={Haugaard, Rasmus Laurvig and Hagelskj{\ae}r, Frederik and Iversen, Thorbj{\o}rn Mosekj{\ae}r},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
pages={2082--2091},
year={2023}
}