Implementation of [AAAI'23 Oral] "GLT-T: Global-Local Transformer Voting for 3D Single Object Tracking in Point Clouds"
Current 3D single object tracking methods are typically based on VoteNet, a 3D region proposal network. Despite the success, using a single seed point feature as the cue for offset learning in VoteNet prevents high-quality 3D proposals from being generated. Moreover, seed points with different importance are treated equally in the voting process, aggravating this defect. To address these issues, we propose a novel global-local transformer voting scheme to provide more informative cues and guide the model pay more attention on potential seed points, promoting the generation of high-quality 3D proposals. Technically, a global-local transformer (GLT) module is employed to integrate object- and patch-aware prior into seed point features to effectively form strong feature representation for geometric positions of the seed points, thus providing more robust and accurate cues for offset learning. Subsequently, a simple yet effective training strategy is designed to train the GLT module. We develop an importance prediction branch to learn the potential importance of the seed points and treat the output weights vector as a training constraint term. By incorporating the above components together, we exhibit a superior tracking method GLT-T. Extensive experiments on challenging KITTI and NuScenes benchmarks demonstrate that GLT-T achieves state-of-the-art performance in the 3D single object tracking task. Besides, further ablation studies show the advantages of the proposed global-local transformer voting scheme over the original VoteNet.
Please refer to the Paper for more details.
- Create the environment
git clone https://github.com/haooozi/GLT-T.git cd GLT-T conda create -n GLT-T python=3.7 conda activate GLT-T
- Install other dependencies:
pip install -r requirement.txt
- Download the data for velodyne, calib and label_02 from KITTI Tracking.
- Unzip the downloaded files.
- Put the unzipped files under the same folder as following.
[Parent Folder] --> [calib] --> {0000-0020}.txt --> [label_02] --> {0000-0020}.txt --> [velodyne] --> [0000-0020] folders with velodynes .bin files
- Download the dataset from the download page
- Extract the downloaded files and make sure you have the following structure:
[Parent Folder] samples - Sensor data for keyframes. sweeps - Sensor data for intermediate frames. maps - Folder for all map files: rasterized .png images and vectorized .json files. v1.0-* - JSON tables that include all the meta data and annotations. Each split (trainval, test, mini) is provided in a separate folder.
Note: We following Open3DSOT for dataset setting. More details can be referred to it.
To train a model (e.g., for the Car category), you must specify the .yaml
file with --cfg
argument.
python3.7 main.py --cfg ./cfgs/Car_kitti.yaml
You can also use CUDA_VISIBLE_DEVICES
to select specific GPUs.
CUDA_VISIBLE_DEVICES=0,1,2,3 python3.7 main.py --cfg ./cfgs/Car_kitti.yaml
To test a trained model (e.g., for the Car category), you must load spedific model with --checkpoint
and add --test
flag.
python3.7 main.py --cfg ./cfgs/Car_kitti.yaml --checkpoint ./trained_model/Car_kitti.ckpt --test
Visualization code is integrated into ./models/base_model.py
, you can add --track
to specify point cloud sequence.
python3.7 main.py --cfg ./cfgs/Car_kitti.yaml --checkpoint ./trained_model/Car_kitti.ckpt --test --track 0/1/2...
If you find GLT-T useful, please consider citing:
@inproceedings{nie2023glt,
title={GLT-T: Global-Local Transformer Voting for 3D Single Object Tracking in Point Clouds},
author={Nie, Jiahao and He, Zhiwei and Yang, Yuxiang and Gao, Mingyu and Zhang, Jing},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={37},
number={2},
pages={1957--1965},
year={2023}
}
This repo builds on the top of Open3DSOT.
Thank shanjiayao for his implementation of PTT, and Jasonkks for his implementation of PTTR.