jarvisyjw / GV-Bench

[IROS2024] GV-Bench: A geometric verification benchmark targeting long-term loop closure detection.
https://jarvisyjw.github.io/GV-Bench/
MIT License
47 stars 0 forks source link
image-matching loop-closure-detection visual-place-recognition

GV-Bench: Benchmarking Local Feature Matching for Geometric Verification of Long-term Loop Closure Detection

[Arxiv] [Project Page] [Intro in Chinese]

Abstract

Visual loop closure detection is an important module in visual simultaneous localization and mapping (SLAM), which associates current camera observation with previously visited places. Loop closures correct drifts in trajectory estimation to build a globally consistent map. However, a false loop closure can be fatal, so verification is required as an additional step to ensure robustness by rejecting the false positive loops. Geometric verification has been a well-acknowledged solution that leverages spatial clues provided by local feature matching to find true positives. Existing feature matching methods focus on homography and pose estimation in long-term visual localization, lacking references for geometric verification. To fill the gap, this paper proposes a unified benchmark targeting geometric verification of loop closure detection under long-term conditional variations. Furthermore, we evaluate six representative local feature matching methods (handcrafted and learning-based) under the benchmark, with in-depth analysis for limitations and future directions.

News

Installation

We use part of the HLoc code for feature extraction and matching.

git clone && cd GV-Bench
git submodule init
git submodule update
cd third_party/Hierarchival-Localization
git checkout gvbench # this is a customized fork version
python -m pip install -e .

Replicate Results in Exps

We provide the [output results]() with the format shown below. You can use these results directly.

$seq_$feature_$match.log
$seq_$feature_$match.npy # with following format
np.save(str(export_dir), {
  'prob': num_matches_norm,
  'qImages': qImages,
  'rImages': rImages,
  'gt': labels, 
  'inliers': inliers_list,
  'all_matches': pointMaps,
  'precision': precision, 
  'recall': recall, 
  'TH': TH,
  'average_precision': average_precision,
  'Max Recall': r_recall
  })

Replicate from scratch

To get standard feature detection and matching results, we proposed to use hloc.

Benchmark Usage

Acknowledgement