返回列表

39th place solution - SuperGlue + SIFT

556. Image Matching Challenge 2023 | image-matching-challenge-2023

开始: 2023-04-11 结束: 2023-06-12 计算机视觉 数据算法赛
```html

第39名解决方案:SuperGlue + SIFT

概述

我们根据启发式策略在不同场景中使用SuperGlue或SIFT算法,得分如下表所示。

场景得分

场景 平均精度(mAA) 旋转mAA 平移mAA
bike 0.9228 0.9904 0.9228
chairs 0.9775 0.9916 0.9775
fountain 1.0 1.0 1.0
dioscuri 0.5062 0.5220 0.5236
cyprus 0.6523 0.7887 0.6586
wall 0.8150 0.9359 0.8317
kyiv-puppet-theater 0.7704 0.8756 0.7895

数据集得分

数据集 平均精度(mAA) 旋转mAA 平移mAA
haiper 0.9667 0.9994 0.9667
heritage 0.6578 0.7489 0.6713
urban 0.7704 0.8756 0.7895

全局得分

平均精度(mAA) 旋转mAA 平移mAA
0.7983 0.8746 0.8092

排行榜得分

公开排行榜得分: 0.415
私密排行榜得分: 0.465

SuperPoint & SuperGlue

SuperPoint和SuperGlue模型使用几乎默认的参数,仅将`keypoint_threshold`设置为0.01。我们发现SuperGlue在原始尺寸图像上表现更好,但某些场景的图像过大无法放入GPU内存。我们采用以下策略:如果图像任一边超过2560像素(Kaggle上安全使用的最大长度),则将最长边调整为2560;否则使用原始尺寸。

SIFT算法

我们最初使用COLMAP的SIFT实现作为基线效果良好。在处理具有大尺寸和强旋转的场景时,SIFT比深度学习模型表现更好。我们尝试启用`estimate_affine_shape`和`upright`参数,但发现对cyprus和wall场景存在得分权衡,最终禁用了这两个参数。

sift_extraction_options.max_image_size = 1400
sift_extraction_options.max_num_features = 8192
sift_extraction_options.estimate_affine_shape = False
sift_extraction_options.upright = False
sift_extraction_options.normalization = 'L2'

模型选择策略

我们注意到带有EXIF元数据的大图像内存消耗极高,这些图像通常来自DSLR相机方向导致的90度旋转。我们添加了简单的判断逻辑:检查每个场景的平均内存消耗,如果超过16MB则使用SIFT,否则使用SuperGlue。

增量映射器

我们使用COLMAP的增量映射器进行重建,除将`min_model_size`设为3外其他参数保持默认。根据已注册图像数量选择最佳重建结果,未注册图像则使用场景的平均旋转矩阵和平移向量填充。

未生效的方法

  • OpenCV SIFT(COLMAP的SIFT实现效果更好)
  • DSP-SIFT(本地验证得分提升但在Kaggle上报错)
  • LoFTR(速度过慢)
  • KeyNet, AffNet, HardNet(得分不佳)
  • DISK(得分不佳)
  • SiLK(速度过慢)
  • ASpanFormer(速度过慢)
  • 旋转校正(时限内实现不完善)
  • 两阶段匹配(验证得分提升但时限内无法集成)
```
同比赛其他方案