vignywang / CNDesc

12 stars 1 forks source link

What method is used to extract the keypoints? #1

Closed XiaoQiSAMA closed 2 years ago

XiaoQiSAMA commented 2 years ago

你好,关于代码中提到的keypoint是通过读取mega_keypoint_dir获得的,那么keypoint具体是基于什么方法来获得的?Baseline中的SuperPoint?另外,代码中的despoint又代表了什么,与keypoint的区别在哪?望解答。

vignywang commented 2 years ago

1.despoint和keypoint的区别: 所有全监督的描述子都需要correspondence(despoint)用来作为真值监督描述子的训练;但是关键点监督不一定,例如D2Net,ASLFeat,R2D2不需要关键点,他们使用一些规则来确认关键点。另外correspondence数量固定并且一一对应,而关键点不需要一一对应,一般是角点之类的。

2.描述子采样点: despoint是指训练描述子的采样点,在一些方法中被称作"correspondence"(在图像对中一一对应的采样点).

3.correspondence我们使用superpoint提取并且取响应最高的400个点作为真值。这部分直接使用就可以,如果用于项目需要构造自己的数据集,只需要保证采样点对是一一对应的就可以,可以使用任何方法提取。

4.为什么数据集有关键点真值: 虽然我们提供了关键点监督(keypoint文件夹)但我们并没有使用,因为CNDesc仅旨在解决关键点描述问题不涉及关键点的检测。之所以有关键点是因为CNDesc与我们的另一个工作MTLDesc(AAAI2022,https://github.com/vignywang/MTLDesc)共用一个数据集,而这个方法同时检测和描述关键点。 CNDesc跟论文中所说的一样,在测试的时候我们使用现成的SuperPoint和SIFT提取关键点然后使用CNDesc生成描述子(详情看代码,这个设置跟ECCV2020 CAPS 一致)。

以上回答的希望您能看懂,中秋快乐。

XiaoQiSAMA commented 2 years ago

也就是说,CNDesc在训练过程是在图片经过网络得到的feature map(1/2HW*Channel)上,使用superpoint所提取的图片的correspondence进行固定位置的采样,来得到局部描述子。 然后在测试时,在图片经过网络得到的feature map后,再根据现成的SuperPoint和SIFT提取关键点在feature map上进行采样,然后得到相应的局部描述子。

不知我的理解是否正确

最后,感谢您的解答,也祝您中秋快乐。

vignywang commented 2 years ago

是的

XiaoQiSAMA commented 2 years ago

感谢解答