An open API service indexing awesome lists of open source software.

https://github.com/ai4ce/nyu-vpr

[IROS2021] NYU-VPR: Long-Term Visual Place Recognition Benchmark with View Direction and Data Anonymization Influences
https://github.com/ai4ce/nyu-vpr

benchmark dataset dbow netvlad visual-place-recognition vlad vpr

Last synced: 3 months ago
JSON representation

[IROS2021] NYU-VPR: Long-Term Visual Place Recognition Benchmark with View Direction and Data Anonymization Influences

Awesome Lists containing this project

README

          

# NYU-VPR

This repository provides the experiment code for the paper [Long-Term Visual Place Recognition Benchmark with View Direction and Data Anonymization Influences](https://arxiv.org/abs/2110.09004).

Here is a graphical user interface (GUI) for using VPR methods on custom datasets: https://github.com/ai4ce/VPR-GUI-Tool

## Requirements

To install requirements:

```
pip install -r requirements.txt
```

## Data Processing

**1. Image Anonymization**

To install mseg-api:

```
cd segmentation
cd mseg-api
pip install -e .
```

Make sure that you can run `python -c "import mseg"` in python.

To install mseg-semantic:

```
cd segmentation
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

cd ../mseg-semantic
pip install -e .
```

Make sure that you can run `python -c "import mseg_semantic"` in python.

Finally:

```
input_file=/path/to/my/directory
model_name=mseg-3m
model_path=mseg_semantic/mseg-3m.pth
config=mseg_semantic/config/test/default_config_360_ms.yaml
python -u mseg_semantic/tool/universal_demo.py --config=${config} model_name {model_name} model_path ${model_path} input_file ${input_file}
```

**2. Image Filtration**

Inside the `process` folder, use `whiteFilter.py` to filter images with white pixel percentage.

## Methods

**1. VLAD+SURF**

Modify `vlad_codebook_generation.py` line 157 - 170 to fit the dataset.

```
cd test/vlad
python vlad_codebook_generation.py
python query_image_closest_image_generation.py
```

*Notice: the processing may take a few hours.

**2. VLAD+SuperPoint**

```
cd test/vlad_SP
python main.py
python find_closest.py
```

*Notice: the processing may take a few hours.

**3. NetVLAD**

**4. PoseNet**

Copy the `train_image_paths.txt` and `test_image_paths.txt` to test/posenet.

Obtain the latitude and longtitude of training images and convert them to normalized Universal Transverse Mercator (UTM) coordinates.

```
cd test/posenet
python getGPS.py
python mean.py
```

Start training. This may take several hours. Suggestion: use slurm to run the process.

```
python train.py --image_path path_to_train_images/ --metadata_path trainNorm.txt
```

Generate the input file for testing from test_image_paths.txt.

```
python gen_test_txt.py
```

Start testing.
```
python single_test.py --image_path path_to_test_images/ --metadata_path test.txt --weights_path models_trainNorm/best_net.pth
```

The predicted normalized UTM coordinates of test images is in the image_name.txt. Match the test images with the training images based on their location.

```
python match.py
```

The matching result is in the match.txt.

**5. DBoW**

Copy the train_image_paths.txt and test_image_paths.txt to test/DBow3/utils. Copy and paste the content of test_image_paths.txt at the end of train_image_paths.txt and save the text file as total_images_paths.txt.

Open test/DBow3/utils/demo_general.cpp file. Change the for loop range at line 117 and line 123. Both ranges are the range of lines in total_images_paths.txt. The first for loop range is the range of test images and the second range is the range of training images. To run with multi-thread, you may run the code multiple times with small ranges of test images where the sum of ranges equals to the number of lines in test_image_paths.txt.

Compile and run the code.

```
cd test/DBow3
cmake .
cd utils
make
./demo_general a b
```

The result of each test image and its top-5 matched training images is in the output.txt.