Object re-identification (ReID) from images plays a critical role in application domains of image retrieval (surveillance, retail analytics, etc.) and multi-object tracking (autonomous driving, robotics, etc.). However, systems that additionally or exclusively perceive the world from depth sensors are becoming more commonplace without any corresponding methods for object ReID. In this work, we fill the gap by providing the first large-scale study of object ReID from point clouds and establishing its performance relative to image ReID. To enable such a study, we create two large-scale ReID datasets with paired image and LiDAR observations and propose a lightweight matching head that can be concatenated to any set or sequence processing backbone (e.g., PointNet or ViT), creating a family of comparable object ReID networks for both modalities. Run in Siamese style, our proposed point cloud ReID networks can make thousands of pairwise comparisons in real-time (
If you have found our work useful, please consider citing:
@article{therien2024pcreid,
author = {Therien, Benjamin
and Huang, Chenjie
and Chow, Adrian
and Czarnecki, Krzysztof},
title = {Object Re-identification from Point Clouds},
journal = {WACV},
year = {2024},
}Run the following command to download our reid dataset:
mkdir data
cd data
mkdir lstk
cd lstk
wget wiselab.uwaterloo.ca/nuscenes-reid/compressed_datasets/nuscenes-reid-dataset.tar.gz
wget wiselab.uwaterloo.ca/nuscenes-reid/compressed_datasets/sample_token_to_num.pkl
wget wiselab.uwaterloo.ca/nuscenes-reid/compressed_datasets/instance_token_to_id.pkl
wget wiselab.uwaterloo.ca/nuscenes-reid/compressed_datasets/instance_to_keyframes.pkl
wget wiselab.uwaterloo.ca/nuscenes-reid/compressed_datasets/ds_name_to_scene_token.pkl
wget wiselab.uwaterloo.ca/nuscenes-reid/compressed_datasets/sample_to_keyframes.pklAfter downloading the dataset, extract it to the data directory:
pigz -dc nuscenes-reid-dataset.tar.gz | tar -xf - -C /path/to/datals data should now show the following:
lstk
ls data/lstk should now show the following:
ds_name_to_scene_token.pkl instance_to_keyframes.pkl sample_to_keyframes.pkl
instance_token_to_id.pkl sample_token_to_num.pkl sparse-trainval-det-both nuscenes-reid-dataset.tar.gz
Due to licencing restrictions placed on the Waymo Open Dataset (WOD), we must validate each users agreement to the WOD terms before providing them access to the dataset. Please send me an email if you would like to get access to the dataset.
After downloading the dataset, extract the train and validations datasets to the data directory:
cd point-cloud-reid
cd data/lstk
NUM_THREADS=8
zstd -d --threads=$NUM_THREADS waymo_both_train.tar.zst -c | tar -xvf -
zstd -d --threads=$NUM_THREADS waymo_both_val.tar.zst -c | tar -xvf -ls data should now show the following:
lstk
ls data/lstk should now show the following:
sparse-waymo-det-both-val updated_sparse-waymo-det-both-train waymo_both_train.tar.zst waymo_both_val.tar.zst
waymo_infos_train_autolab.pkl waymo_infos_val_autolab.pkl waymo_instance_token_to_id_train.pkl waymo_instance_token_to_id_val.pkl
Run the following command to download our pre-trained models:
./tools/download_pretrained.shWe have always used docker containers during development. Therefore, we recommend you do the same.
docker pull benjamintherien/dev:bevfusion_base-pt3d-pyg-o3d-After downloading our docker image, run the container. You can use the following python script, filling in your own values where needed:
python docker/run_docker.pyOutside of the container, at the same level as your clone of this repository clone the lamtk repository:
git clone https://github.com/c7huang/lamtkThen, inside the container, run the following commands to install the lamtk package and other dependencies:
./tools/script_new_install.shFinally, during development and evaluation, we have always used neptune to log our runs. Based on our limited testing, diabling neptune logging causes errors that we have not yet debugged. Until we remove this dependency in the code you will need specify your neptune project and api Key in the following configuration files:
configs_reid/_base_/reidentification_runtime_testing.py
configs_reid/_base_/reidentification_runtime.pyWe also provide instructions for evaluating our pretrained models. Assuming you have downloaded oour pre-trained models, you can run the following command to evaluate our models on the nuScenes reid dataset!
Here is a command to evaluate point-transformer trained for 4000 epochs, our strongest point model on nuScenes ReID:
CUDA_VISIBLE_DEVICES=0,1 MASTER_ADDR=localhost torchpack dist-run -v -np 2 python tools/train.py configs_reid/reid_nuscenes_pts/testing_pts_point-transformer_r_nus_det_500e.py --checkpoint pretrained/nuscenes/pts_point-transformer_r_nus_det_4000e.pthThe number of GPUs can be changed by changing the -np flag. For example, to run on a two GPUs, run the following command:
CUDA_VISIBLE_DEVICES=0,1,2,3 MASTER_ADDR=localhost torchpack dist-run -v -np 4 python tools/train.py configs_reid/reid_nuscenes_pts/testing_pts_point-transformer_r_nus_det_500e.py --checkpoint pretrained/nuscenes/pts_point-transformer_r_nus_det_4000e.pthFor simple evaluation of all models, one can use launching_testing.py, which is easily customizable to test any of our pre-trained models.
We provide instructions to reproduce our trained models on nuScenes ReID. For instance, to train DGCNN on nuScenes ReID, run the following command:
CUDA_VISIBLE_DEVICES=0,1,2,3 MASTER_ADDR=localhost torchpack dist-run -v -np 4 python tools/train.py configs_reid/reid_nuscenes_pts/pts_dgcnn_point-cat_nus_det_4x256_500e.py --seed 66To train DeIT base on nuScenes ReID, run the following command:
CUDA_VISIBLE_DEVICES=0,1,2,3 MASTER_ADDR=localhost torchpack dist-run -v -np 4 python tools/train.py configs_reid/reid_nuscenes_image/rgb_deit-base_point-cat_pt_nus_det_4x60_200e.py --seed 66To train Point-transformer on Waymo ReID, run the following command:
CUDA_VISIBLE_DEVICES=0,1,2,3 MASTER_ADDR=localhost torchpack dist-run -v -np 4 python tools/train.py configs_reid/reid_waymo_pts/pts_point-transformer_point-cat_waymo_det_4x256_400e.py --seed 66We provide training commands to reproduce the main models in our study in launching_training.py.
Our repository is based on lamtk, bevfusion, and mmdetection3d
There is an error in the caption of Fig.3 in the published version of the paper. This error is corrected in the Arxiv version.
If you have found our work useful, please consider citing:
@article{therien2024pcreid,
author = {Therien, Benjamin
and Huang, Chenjie
and Chow, Adrian
and Czarnecki, Krzysztof},
title = {Object Re-identification from Point Clouds},
journal = {WACV},
year = {2024},
}