ramdrop / autoplace

Implementation for the paper: AutoPlace: Robust Place Recognition with Single-chip Automotive Radar
104 stars 23 forks source link

[ICRA2022] AutoPlace: Robust Place Recognition with Single-Chip Automotive Radar

arxiv GitHub YouTube

demo

@article{cai2021autoplace,
  title={AutoPlace: Robust Place Recognition with Low-cost Single-chip Automotive Radar},
  author={Cai, Kaiwen and Wang, Bing and Lu, Chris Xiaoxuan},
  booktitle={2022 IEEE International Conference on Robotics and Automation (ICRA)},
  pages={3475--3481},
  year={2022},
  organization={IEEE}  
}

0. Environment Setup βš™οΈ

pip install --upgrade pip
pip install -r requirements.txt

Go to the nuscenes-devkit package directory (depends on which python you are using), and override the function from_file_multisweep(...) in site-packages/nuscenes/utils/data_classes.py with the function provided in autoplace/nuscenes-devkit_override.py.

1. Dataset preprocessing πŸ“₯

You may need to download nuScenes dataset (radar) from nutonomy/nuscenes-devkit.

cd autoplace/preprocess
./gene_woDTR.sh
./gene_wDTR.sh

the generated processed dataset folder should be like:

dataset
β”œβ”€β”€ 7n5s_xy11
β”‚   β”œβ”€β”€ pcl_parameter.json
β”‚   β”œβ”€β”€ img
β”‚   β”œβ”€β”€ pcl
β”‚   β”œβ”€β”€ rcs
β”‚   β”œβ”€β”€ nuscenes_test.mat
β”‚   β”œβ”€β”€ nuscenes_train.mat
β”‚   β”œβ”€β”€ nuscenes_val.mat
β”‚   β”œβ”€β”€ database.csv
β”‚   β”œβ”€β”€ train.csv
β”‚   └── test.csv
└── 7n5s_xy11_remove
    β”œβ”€β”€ ...

to save you time on downloading/preprocessing the nuScenes dataset, you may as well download my processed dataset from Dropbox and then arrange it in the above way.

2. AutoPlace πŸš—

  1. train SpatialEncoder (se)

    cd autoplace
    
    python train.py  --nEpochs=50 --output_dim=9216 --seqLen=1 --encoder_dim=256 --net=autoplace --logsPath=logs_autoplace --cGPU=0 --split=val --imgDir='dataset/7n5s_xy11/img' --structDir='dataset/7n5s_xy11'
  2. train SpatialEncoder+DPR (se_dpr)

    cd autoplace
    
    python train.py  --nEpochs=50 --output_dim=9216 --seqLen=1 --encoder_dim=256 --net=autoplace --logsPath=logs_autoplace --cGPU=0 --split=val --imgDir='dataset/7n5s_xy11_removal/img' --structDir='dataset/7n5s_xy11'
  3. train SpatialEncoder+TemporalEncoder (se_te)

    cd autoplace
    
    python train.py  --nEpochs=50 --output_dim=4096 --seqLen=3 --encoder_dim=256 --net=autoplace --logsPath=logs_autoplace --cGPU=0 --split=val --imgDir='dataset/7n5s_xy11/img' --structDir='dataset/7n5s_xy11'
  4. train SpatialEncoder+TemporalEncoder+DPR (se_te_dpr)

    cd autoplace
    
    python train.py  --nEpochs=50 --output_dim=4096 --seqLen=3 --encoder_dim=256 --net=autoplace --logsPath=logs_autoplace --cGPU=0 --split=val --imgDir='dataset/7n5s_xy11_removal/img' --structDir='dataset/7n5s_xy11'
    
  5. evaluate a model

    cd autoplace
    
    python train.py --mode='evaluate'  --cGPU=0  --split=test --resume=[logs_folder]
  6. apply RCSHR on SpatialEncoder+TemporalEncoder+DPR model (You may need to evaluate SpatialEncoder+TemporalEncoder+DPR model first): modify the path se_te_dpr in autoplace/postprocess/parse/resume_path.json to [logs_folder], then

    cd autoplace/postprocess/parse 
    
    python parse.py  --rcshr --model=se_te_dpr
  7. To generate (1) Reall@N curve, (2) PR curve, (3) F1 Score and (4) Average Precision

    cd autoplace/postprocess/vis
    
    python ablation_figure.py 
    python ablation_score.py 

3. SOTA methods βš”