PointNetVLAD: Deep Point Cloud Based Retrieval for Large-Scale Place Recognition CVPR 2018, Salt Lake City, USA
Mikaela Angelina Uy and Gim Hee Lee
National University of Singapore
The PointNetVLAD is a deep network that addresses the problem of large-scale place recognition through point cloud based retrieval. The arXiv version of PointNetVLAD can be found here.
@inproceedings{uy2018pointnetvlad,
title={PointNetVLAD: Deep Point Cloud Based Retrieval for Large-Scale Place Recognition},
author={Uy, Mikaela Angelina and Lee, Gim Hee},
booktitle={The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year={2018}
}
The benchmark datasets introdruced in this work can be downloaded here.
Code was tested using Python 3 on Tensorflow 1.4.0 with CUDA 8.0
sudo apt-get install python3-pip python3-dev python-virtualenv
virtualenv --system-site-packages -p python3 ~/tensorflow
source ~/tensorflow/bin/activate
easy_install -U pip
pip3 install --upgrade tensorflow-gpu==1.4.0
pip install scipy, pandas, sklearn
Download the zip file of the benchmark datasets found here. Extract the folder on the same directory as the project code. Thus, on that directory you must have two folders: 1) benchmark_datasets/ and 2) pointnetvlad/
We store the positive and negative point clouds to each anchor on pickle files that are used in our training and evaluation codes. The files only need to be generated once. The generation of these files may take a few minutes.
cd generating_queries/
# For training tuples in our baseline network
python generate_training_tuples_baseline.py
# For training tuples in our refined network
python generate_training_tuples_refine.py
# For network evaluation
python generate_test_sets.py
To train our network, run the following command:
python train_pointnetvlad.py
To evaluate the model, run the following command:
python evaluate.py
The pre-trained models for both the baseline and refined networks can be downloaded here
Added the rough MATLAB code that was used for submap generation upon requests. Some functions are gotten from the toolbox of Oxford Robotcar.
Some clarification: The voxel grid filter was used to downsample the cloud to 4096, which was done by selecting a leaf size that initially downsamples the cloud close to 4096 points, after which we randomly add points to make the cloud have exactly 4096 points. Please feel free to send me an email (mikacuy@gmail.com) for any further questions.
This repository is released under MIT License (see LICENSE file for details).