Shiaoming / Python-VO

A simple python implemented frame-by-frame visual odometry with SuperPoint feature detector and SuperGlue feature matcher.
323 stars 40 forks source link

Python-VO

A simple python implemented frame by frame visual odometry. This project is inspired and based on superpoint-vo and monoVO-python.

We tested handcraft features ORB and SIFT, deep learning based feature SuperPoint, more feature detectors are also possible to be added to this project. For feature matchers, we tested the KNN and FLANN mathers implemented in OpenCV, and the novel deep learning based mather SuperGlue.

Feature detectors

Feature matchers

SIFT Keypoints

sift_keypoints

SuperPoint Keypoints

superpoint_keypoints

SIFT+FLANN Matches

sift_flann_match

SuperPoint+FLANN Matches

superpoint_flann_match

SuperPoint+SuperGlue Matches

superpoint_superglue_match

Install

Run

  1. edit dataset path in params/*.yaml;
  2. run python main.py --config params/*.yaml in terminal.

For example, to evaluate the SuperPoint with SuperGlue, run:

python main.py --config params/kitti_superpoint_supergluematch.yaml

Evaluations

Absolute and relative translation errors on KITTI sequence 00 eval

Average relative translation errors on KITTI sequence 00

orb_brutematch sift_flannmatch superpoint_flannmatch superpoint_supergluematch
0.748m 0.085m 0.177m 0.103m

Trajectory of ORB feature with brute matcher on KITTI sequence 00

kitti_orb_brutematch

Trajectory of SIFT feature with FLANN matcher on KITTI sequence 00

kitti_sift_flannmatch

Trajectory of SuperPoint feature with FLANN matcher on KITTI sequence 00

kitti_superpoint_flannmatch

Trajectory of SuperPoint feature with SuperGlue matcher on KITTI sequence 00

kitti_superpoint_supergluematch