Precision degradation issues
JingruiYu opened this issue · 9 comments
Configuration
model: v0.1.3_end2end
python code: v0.1.3,
command is
python infer.py --img_paths assets/DSC_0410.JPG assets/DSC_0411.JPG --img_size 1024 --lightglue_path weights_test/superpoint_2048_lightglue_end2end.onnx --extractor_type superpoint --viz
result image is
c++ code: using master branch,
onnxruntime using onnxruntime-linux-x64-gpu-1.15.0
This is the result on the example image, the difference is more pronounced on my own real data. I would like to ask for the reasons for this deviation.
Is there any way to improve the accuracy to be as close as possible to the original pyhton code results? Thanks!
可见右图部分的特征点十分整齐的进行了平移,左图貌似没有出现这种情况。在我的几组样例中特征点的数量和坐标都是没有问题的,我怀疑是我的绘图部分的代码出现了问题(因为我对于C++也是初学者,对于如何使用OpenCV实现Python中的matplotlib.patches.ConnectionPatch(位于官方样例viz2d.py中plot_matches方法中)的效果,当时确实是造成了困扰),稍后有空会进行复核,如果您提前发现了问题所在,也很欢迎指出并提出相关的解决方案
但我在其他图片上跑出的结果也有较大差异。。。所以我想会不会是c++和python之间导致的精度下降?或者是什么其他原因?
请问能否提供一下出现大差异的样图,以便我进行复现,不同语言实现模型的推理精度损失是会存在的,但是应该不至于过大
更新一下,我发现原因应该是python code已经是1.0的版本了,c++这边对应的应该是v0.1.3?然后那边放出来的模型不同的名称也会导致结果不同。如果python用的也是v0.1.3,然后也是相同的onnx模型,那差异是很小的。不过从release的模型名字来看似乎只有resolution的不同吧,为什么会导致输出结果也不同呢?
上周发布的1.0版本的模型添加了multi-head attention fusion(带有_fused后缀),而我使用的所有模型是比较旧的(大概是8月份左右,v0.x的版本),可能导致了输出结果的差异,后续我会及时进行适配与更新
谢谢还有个细节麻烦您也留意一下,
在main.cpp line 48处有将BGR转RGB的,在src/transform.cpp line16还有一次BGR2RGB,且随后的src/transform.cpp line95是BGR2GRAY。我想这预处理中应该有重复和错位的。比如只需要一次BGR2GRAY?或者最后的这里应该是RGB2GRAY?
谢谢还有个细节麻烦您也留意一下, 在main.cpp line 48处有将BGR转RGB的,在src/transform.cpp line16还有一次BGR2RGB,且随后的src/transform.cpp line95是BGR2GRAY。我想这预处理中应该有重复和错位的。比如只需要一次BGR2GRAY?或者最后的这里应该是RGB2GRAY?
感谢,因为我一直默认不使用grayscale,所以可能疏忽了这个问题,感谢您提出来
上周发布的1.0版本的模型添加了multi-head attention fusion(带有_fused后缀),而我使用的所有模型是比较旧的(大概是8月份左右,v0.x的版本),可能导致了输出结果的差异,后续我会及时进行适配与更新
您好,我这边复现您的代码,也出现一样的情况。但我感觉不是因为1.0版本的模型添加了multi-head attention fusion导致的,因为我专门拿python v0.1.3的end-to-end模型跑的您的C++代码。不存在版本不同问题。所以我觉得问题应该在别处。