Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SuperPoint + SuperGlue feature for outdoor navigation #526

Open
BioR0bot opened this issue Aug 14, 2023 · 17 comments
Open

SuperPoint + SuperGlue feature for outdoor navigation #526

BioR0bot opened this issue Aug 14, 2023 · 17 comments
Labels
enhancement New feature or request

Comments

@BioR0bot
Copy link

Can you add SuperPoint and superglue features with ncnn library for more stable navigation in changing light conditions?

@BioR0bot BioR0bot added the enhancement New feature or request label Aug 14, 2023
@ymd-stella
Copy link
Contributor

If you cannot make a more concrete proposal, I will close this.

@BioR0bot
Copy link
Author

I'm working on a navigation project for a street robot. I noticed that the orb features map may work worse depending on the time of day, and neural networks are used for more stable tracking. I think that such tracking will work on mobile devices using the NCNN library. If you need my help, I can help with integration

@ymd-stella
Copy link
Contributor

I already know the theory about it, please show me a concrete plan for stella_vslam.

@BioR0bot
Copy link
Author

It would be nice if there was a flag to use Orb or SuperPoint, which is set at the beginning of the program execution. I can write test code for point matching and detection that uses NCNN and build it with Qt for Android to test the speed. You could then integrate the code into SLAM.

@ymd-stella
Copy link
Contributor

I think the first goal should be to use SuperPoint.

Once we are sure that SuperPoint works as expected, then we can replace matcher. Additionally, what about trying LightGlue instead of SuperGlue?

@sumitsarkar1
Copy link

@ymd-stella LightGlue will be better

@jjd9
Copy link
Contributor

jjd9 commented Jan 29, 2024

Hello, i am also interested in the potential for using features other than orb in this library and wanted to join the discussion.

Idk if you have already considered this, but what about making the feature extraction and matching more generic as a first step on this path? I.e. rather than replacing the current implementation, it could be refactored such that any feature extractor inheriting from a standard Feature class and any matcher inheriting from a standard Matcher class could be used with stella_vslam. (This will also require revisiting the assumption made across the code-base that the features are binary and are comparable with hamming distance)
This has many advantages imho

  1. You have an opportunity to verify orb features still work as well as before to avoid a regression,
  2. It would be easier to quantitatively compare new feature extractors and matchers to see if e.g. super point + light glue actually outperforms the current implementation of orb + brute force in the context of SLAM,
  3. If someone publishes some cool new feature extractor next year that ostensibly outperforms super point, it would be way easier to test it out after this change.
  4. People without a gpu could still use non-deep learning based features and matchers 😅

What do ya’ll think of this idea?

@hellovuong
Copy link

hellovuong commented Feb 20, 2024

Hi guys, in this branch, I implemented SuperPoint + SuperGlue + HF_Net (global descriptor to detect loop closure beside BoW) run in TensorRT, I have not tested it on a lot of datasets but last time I checked SLAM worked fine. https://github.com/hellovuong/stella_vslam/tree/hloc

@antithing
Copy link

antithing commented Feb 20, 2024

@hellovuong awesome! What frame rate are you seeing with that branch? Can stereo mode run at 50hz?

Have you also created the bow vocabulary to work with superpoint?

@hellovuong
Copy link

@hellovuong awesome! What frame rate are you seeing with that branch? Can stereo mode run at 50hz?

Have you also created the bow vocabulary to work with superpoint?

  • It can run at 30Hz since TensorRT is fast for inference. 50Hz is a bit extreme, I am not sure if it can meet it
  • Voc for SuperPoint I used from SuperPoint_SLAM, it only supports DBoW2. However, in the project that I shared you can use HF_Net as global descriptors for Loop Closure. I used naive search but it can be improved by Flann or nanoFlann KDtree to speed up the search in high dimensions.

@nnop
Copy link

nnop commented Feb 25, 2024

So, superglue is only used in reloc? Coud is also be used in tracking? @hellovuong

@hellovuong
Copy link

So, superglue is only used in reloc? Coud is also be used in tracking? @hellovuong

SuperGlue is using for tracking.

@nnop
Copy link

nnop commented Feb 26, 2024

Could you please provide the code position where superglue is used for tracking? I only saw it for relocalization.

@hellovuong
Copy link

hellovuong commented Feb 26, 2024

Could you please provide the code position where superglue is used for tracking? I only saw it for relocalization.

The github repo doesn't up-to-date with my local change, It was a while since I work with this project. I will clean-up the code and push the changes.

@nnop
Copy link

nnop commented Feb 26, 2024

Thanks for the responce. But before seeing your new changes, I want to ask about the tracking method you used with superglue.

Generally, tracking is a process of pose/map guided nearest neightbor feature search. So, how did you incorporate the predicted pose with superglue? or just used the pose to filter outlier matches?

@hellovuong
Copy link

@nnop I tried to match directly without the nearest neighbor feature search. The predicted pose only use for init guess of pose optimization

@nnop
Copy link

nnop commented Mar 28, 2024

Thanks for your responce. Got it.
In that way, its a sequentail SfM method instead of SLAM tracking.
Still, for sequential data, the predicted pose can be used to check if the matching result is valid.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

7 participants