AIDajiangtang / Superpoint-LightGlue-Image-Stiching

Integrate SuperPoint and LightGlue into OpenCV image stitching or Matching algorithm
134 stars 16 forks source link

关于superpoint_lightglue.onnx模型是如何转化的问题 #6

Closed OroChippw closed 1 year ago

OroChippw commented 1 year ago

您好, Q1:关于superpoint_lightglue.onnx模型,查看到他的模型输出matches,想问一下是如何转化的(如下图所示)? image Q2:与此同时为什么不将前部分的superpoint.onnx模型也集成在一起形成end to end模型,是出于什么考量吗? Q3:当我使用lightglue官方提供的样例图,使用您的代码进行运行时,只出现了特征匹配的结果图,没出现拼接的结果图,是我的操作或脚本有什么问题吗 image

感谢您的回答与贡献

AIDajiangtang commented 1 year ago

问题1:转化是什么意思?是如何根据输出的matchs计算匹配的特征点对?如果是的话参考https://github.com/AIDajiangtang/Superpoint-LightGlue-Image-Stiching/blob/main/lightglue.cpp中match函数。

问题2:我将其分开是出于灵活性的考虑,因为我是要将其集成到opencv拼接流程中,在opencv中还有其他特征提取和匹配算法。 将其分开,我就可以使用不同的组合了,例如,sift+lightglue 等等。 你也可以采用end to end的方式,如果采用end to end的形式会有性能上的很大提升,请你也通知我一下,谢谢!

问题3:我确实将拼接结果和匹配结果都调用imshow了,但只显示了匹配结果,可能是opencv 显示图像机制的限制,连续调用imshow,后一个imshow的图像会覆盖前一个imshow的图像,也就是匹配结果将拼接的结果覆盖了,你可以把去build目录下找stiching.jpg

OroChippw commented 1 year ago

1、转化指的是将torch模型转化为onnx模型 2、目前我正在进行end to end的onnx模型实验,但是遇到同样的模型在python和C++代码下提取特征点数量不同的问题,我想询问以下图像在进入模型之前做了些什么前处理,大概在哪个文件的什么位置呢,由于不太熟悉C++的继承什么的,阅读代码没有找到对应的前处理部分 3、好的 明晰了 很感谢你的贡献,给予了我很大帮助

AIDajiangtang commented 1 year ago

1、转化指的是将torch模型转化为onnx模型 -》我用的是这个github转换的模型,https://github.com/fabio-sim/LightGlue-ONNX 2、目前我正在进行end to end的onnx模型实验,但是遇到同样的模型在python和C++代码下提取特征点数量不同的问题,我想询问以下图像在进入模型之前做了些什么前处理,大概在哪个文件的什么位置呢,由于不太熟悉C++的继承什么的,阅读代码没有找到对应的前处理部分 -》图像预处理在superpoint.cpp中ApplyTransform函数中,很简单,就除以255.0做归一化,同一个C++代码,不同次运行结果貌似都有差别,跟图像预处理貌似没关系,可能是模型中有dropout或者浮点数,量化,优化,多线程等等。我也不确定具体是什么原因。 3、好的 明晰了 很感谢你的贡献,给予了我很大帮助

OroChippw commented 1 year ago

十分感谢您的回答 刚刚已解决输出特征点差异的问题(是自己的一些粗心情况导致😂),后续对于end2end的实验结果如果有优化会在此处进行分享😊

haithink commented 1 month ago

请问SuperPoint的ONNX是怎么获取的呢?从某个现有模型文件转换而来?谢谢。